Message ID | 1550249574-26772-1-git-send-email-alexey.kodanev@oracle.com |
---|---|
State | Rejected |
Delegated to: | David Miller |
Headers | show |
Series | [net] sock: return uapi errno in sock_setsockopt() for SO_ZEROCOPY | expand |
On Fri, Feb 15, 2019 at 11:51 AM Alexey Kodanev <alexey.kodanev@oracle.com> wrote: > > For unsupported protocols, setsockopt() with SO_ZEROCOPY > option sets errno to ENOTSUPP(524). But this number is > not defined anywhere in the include/uapi/ headers. > > To make sure userspace sees the known number, replace > ENOTSUPP(524) with EOPNOTSUPP(95). > > Fixes: 76851d1212c1 ("sock: add SOCK_ZEROCOPY sockopt") > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> > Reported-by: Petr Vorel <pvorel@suse.cz> This code has been there since 4.14. I think it's too late to change system call behavior.
Hi, > On Fri, Feb 15, 2019 at 11:51 AM Alexey Kodanev > <alexey.kodanev@oracle.com> wrote: > > For unsupported protocols, setsockopt() with SO_ZEROCOPY > > option sets errno to ENOTSUPP(524). But this number is > > not defined anywhere in the include/uapi/ headers. > > To make sure userspace sees the known number, replace > > ENOTSUPP(524) with EOPNOTSUPP(95). > > Fixes: 76851d1212c1 ("sock: add SOCK_ZEROCOPY sockopt") > > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> > > Reported-by: Petr Vorel <pvorel@suse.cz> > This code has been there since 4.14. I think it's too late to change > system call behavior. BTW It reminds me commit 0fb44559ffd6 ("af_unix: move unix_mknod() out of bindlock"), which while fixing a problem also for certain usage changed changed from -EINVAL to -EADDRINUSE. Proposed fix to restore old behavior [1] was not accepted, 0fb44559ffd6 was merged to some stable kernels so the behavior also differs. As there is no way to move these NFSv3 related definitions to uapi to make it visible for userspace, I'd be for changing errno. Kind regards, Petr [1] https://marc.info/?l=linux-kernel&m=149880810113888&w=2
On 15.02.2019 19:58, Willem de Bruijn wrote: > On Fri, Feb 15, 2019 at 11:51 AM Alexey Kodanev > <alexey.kodanev@oracle.com> wrote: >> >> For unsupported protocols, setsockopt() with SO_ZEROCOPY >> option sets errno to ENOTSUPP(524). But this number is >> not defined anywhere in the include/uapi/ headers. >> >> To make sure userspace sees the known number, replace >> ENOTSUPP(524) with EOPNOTSUPP(95). >> >> Fixes: 76851d1212c1 ("sock: add SOCK_ZEROCOPY sockopt") >> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> >> Reported-by: Petr Vorel <pvorel@suse.cz> > > This code has been there since 4.14. I think it's too late to change > system call behavior. > 'ENOTSUPP' define is solely for an internal usage, it may be replaced with another one or the number associated with it may be changed one day, implicitly changing the behavior of setsockopt().
On Mon, Feb 18, 2019 at 6:35 AM Alexey Kodanev <alexey.kodanev@oracle.com> wrote: > > On 15.02.2019 19:58, Willem de Bruijn wrote: > > On Fri, Feb 15, 2019 at 11:51 AM Alexey Kodanev > > <alexey.kodanev@oracle.com> wrote: > >> > >> For unsupported protocols, setsockopt() with SO_ZEROCOPY > >> option sets errno to ENOTSUPP(524). But this number is > >> not defined anywhere in the include/uapi/ headers. > >> > >> To make sure userspace sees the known number, replace > >> ENOTSUPP(524) with EOPNOTSUPP(95). > >> > >> Fixes: 76851d1212c1 ("sock: add SOCK_ZEROCOPY sockopt") > >> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> > >> Reported-by: Petr Vorel <pvorel@suse.cz> > > > > This code has been there since 4.14. I think it's too late to change > > system call behavior. > > > > 'ENOTSUPP' define is solely for an internal usage, it may be replaced > with another one or the number associated with it may be changed one day, > implicitly changing the behavior of setsockopt(). I understand, and this was an error on my part. But I'm afraid that it is already used by other interfaces, as well. And indeed in that capacity expected by tests. See for instance tools/testing/selftests/bpf/test_sock_addr.c
diff --git a/net/core/sock.c b/net/core/sock.c index 6aa2e7e..f6c57de 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1023,9 +1023,9 @@ int sock_setsockopt(struct socket *sock, int level, int optname, sk->sk_protocol == IPPROTO_TCP) || (sk->sk_type == SOCK_DGRAM && sk->sk_protocol == IPPROTO_UDP))) - ret = -ENOTSUPP; + ret = -EOPNOTSUPP; } else if (sk->sk_family != PF_RDS) { - ret = -ENOTSUPP; + ret = -EOPNOTSUPP; } if (!ret) { if (val < 0 || val > 1)
For unsupported protocols, setsockopt() with SO_ZEROCOPY option sets errno to ENOTSUPP(524). But this number is not defined anywhere in the include/uapi/ headers. To make sure userspace sees the known number, replace ENOTSUPP(524) with EOPNOTSUPP(95). Fixes: 76851d1212c1 ("sock: add SOCK_ZEROCOPY sockopt") Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> Reported-by: Petr Vorel <pvorel@suse.cz> --- net/core/sock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)