Message ID | 20190416203143.408835-1-arnd@arndb.de |
---|---|
State | Accepted |
Commit | e6986423d28362aafe64d3757bbbc493f2687f8f |
Headers | show |
Series | [net] socket: fix compat SO_RCVTIMEO_NEW/SO_SNDTIMEO_NEW | expand |
Acked-by: Deepa Dinamani <deepa.kernel@gmail.com> Thanks, -Deepa On Tue, Apr 16, 2019 at 1:31 PM Arnd Bergmann <arnd@arndb.de> wrote: > > It looks like the new socket options only work correctly > for native execution, but in case of compat mode fall back > to the old behavior as we ignore the 'old_timeval' flag. > > Rework so we treat SO_RCVTIMEO_NEW/SO_SNDTIMEO_NEW the > same way in compat and native 32-bit mode. > > Cc: Deepa Dinamani <deepa.kernel@gmail.com> > Fixes: a9beb86ae6e5 ("sock: Add SO_RCVTIMEO_NEW and SO_SNDTIMEO_NEW") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > > net/core/sock.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/net/core/sock.c b/net/core/sock.c > index dc7c31d66200..1e418c0b3b73 100644 > --- a/net/core/sock.c > +++ b/net/core/sock.c > @@ -348,7 +348,7 @@ static int sock_get_timeout(long timeo, void *optval, bool old_timeval) > tv.tv_usec = ((timeo % HZ) * USEC_PER_SEC) / HZ; > } > > - if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { > + if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { > struct old_timeval32 tv32 = { tv.tv_sec, tv.tv_usec }; > *(struct old_timeval32 *)optval = tv32; > return sizeof(tv32); > @@ -372,7 +372,7 @@ static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen, bool > { > struct __kernel_sock_timeval tv; > > - if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { > + if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { > struct old_timeval32 tv32; > > if (optlen < sizeof(tv32)) > -- > 2.20.0 >
From: Arnd Bergmann <arnd@arndb.de> Date: Tue, 16 Apr 2019 22:31:14 +0200 > It looks like the new socket options only work correctly > for native execution, but in case of compat mode fall back > to the old behavior as we ignore the 'old_timeval' flag. > > Rework so we treat SO_RCVTIMEO_NEW/SO_SNDTIMEO_NEW the > same way in compat and native 32-bit mode. > > Cc: Deepa Dinamani <deepa.kernel@gmail.com> > Fixes: a9beb86ae6e5 ("sock: Add SO_RCVTIMEO_NEW and SO_SNDTIMEO_NEW") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Applied, thanks Arnd.
diff --git a/net/core/sock.c b/net/core/sock.c index dc7c31d66200..1e418c0b3b73 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -348,7 +348,7 @@ static int sock_get_timeout(long timeo, void *optval, bool old_timeval) tv.tv_usec = ((timeo % HZ) * USEC_PER_SEC) / HZ; } - if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { + if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { struct old_timeval32 tv32 = { tv.tv_sec, tv.tv_usec }; *(struct old_timeval32 *)optval = tv32; return sizeof(tv32); @@ -372,7 +372,7 @@ static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen, bool { struct __kernel_sock_timeval tv; - if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { + if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { struct old_timeval32 tv32; if (optlen < sizeof(tv32))
It looks like the new socket options only work correctly for native execution, but in case of compat mode fall back to the old behavior as we ignore the 'old_timeval' flag. Rework so we treat SO_RCVTIMEO_NEW/SO_SNDTIMEO_NEW the same way in compat and native 32-bit mode. Cc: Deepa Dinamani <deepa.kernel@gmail.com> Fixes: a9beb86ae6e5 ("sock: Add SO_RCVTIMEO_NEW and SO_SNDTIMEO_NEW") Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- net/core/sock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- 2.20.0