Skip to content

[BUG REPORT] TCP listen()函数缺少backlog参数校验,backlog=0导致整数下溢 #1519

@yilin0518

Description

@yilin0518

描述错误
在kernel/src/net/socket/inet/stream/inner.rs的129行impl Init的listen方法中,缺少对于参数backlog的校验,如果backlog为0,在144行循环中会导致溢出。该方法的上层调用也没有检测backlog的取值。

listen方法中使用backlog的代码为:

        if let Err(err) = || -> Result<(), SystemError> {
            for _ in 0..(backlog - 1) {
                // -1 because the first one is already bound
                let new_listen = socket::inet::BoundInner::bind(
                    new_listen_smoltcp_socket(listen_addr),
                    listen_addr
                        .addr
                        .as_ref()
                        .unwrap_or(&smoltcp::wire::IpAddress::from(
                            smoltcp::wire::Ipv4Address::UNSPECIFIED,
                        )),
                    inner.netns(),
                )?;
                inners.push(new_listen);
            }
            Ok(())
        }() {
            return Err((Init::Bound((inner, local)), err));
        }
  • DragonOS版本(提交哈希值):a68030ea174daa4bbbdeca2994502185bc57930e

期望行为
在上层或者该函数增加对于backlog的检验

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingbug-report这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions