-
-
Notifications
You must be signed in to change notification settings - Fork 168
Open
Labels
bugSomething isn't workingSomething isn't workingbug-report这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label)这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label)
Description
描述错误
在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 workingSomething isn't workingbug-report这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label)这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label)