Messages in this thread | | | From | Eric Dumazet <> | Date | Tue, 9 Apr 2024 16:17:42 +0200 | Subject | Re: [PATCH] net/socket: Ensure length of input socket option param >= sizeof(int) |
| |
On Tue, Apr 9, 2024 at 4:02 PM Edward Adam Davis <eadavis@qq.com> wrote: > > On Tue, 9 Apr 2024 15:07:41 +0200, Eric Dumazet wrote: > > > The optlen value passed by syzbot to _sys_setsockopt() is 2, which results in > > > only 2 bytes being allocated when allocating memory to kernel_optval, and the > > > optval size passed when calling the function copy_from_sockptr() is 4 bytes. > > > Here, optlen is determined uniformly in the entry function __sys_setsockopt(). > > > If its value is less than 4, the parameter is considered invalid. > > > > > > Reported-by: syzbot+837ba09d9db969068367@syzkaller.appspotmail.com > > > Reported-by: syzbot+b71011ec0a23f4d15625@syzkaller.appspotmail.com > > > Reported-by: syzbot+d4ecae01a53fd9b42e7d@syzkaller.appspotmail.com > > > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > > > > > > I think I gave my feedback already. > > > > Please do not ignore maintainers feedback. > > > > This patch is absolutely wrong. > > > > Some setsockopt() deal with optlen == 1 just fine, thank you very much. > It's better to use evidence to support your claim, rather than your "maintainer" title.
I will answer since you ask so nicely, but if you plan sending linux kernel patches, I suggest you look in the source code.
Look at do_ip_setsockopt(), which is one of the most used setsockopt() in the world.
The code is at least 20 years old.
It even supports optlen == 0
if (optlen >= sizeof(int)) { if (copy_from_sockptr(&val, optval, sizeof(val))) return -EFAULT; } else if (optlen >= sizeof(char)) { unsigned char ucval;
if (copy_from_sockptr(&ucval, optval, sizeof(ucval))) return -EFAULT; val = (int) ucval; } }
/* If optlen==0, it is equivalent to val == 0 */
| |