Messages in this thread | | | From | David Laight <> | Subject | RE: [PATCH v3 5/5] minmax: Relax check to allow comparison between int and small unsigned constants. | Date | Mon, 14 Aug 2023 15:29:46 +0000 |
| |
From: David Laight > Sent: 14 August 2023 15:51 > > From: Linus Torvalds <torvalds@linux-foundation.org> > > Sent: 10 August 2023 20:47 > ... > > But using an *unsigned* constant 20 when the other side is signed > > means that now somebody is confused. We should warn. > > Then you get 'fixes' like: > > int do_tcp_getsockopt(struct sock *sk, int level, > int optname, sockptr_t optval, sockptr_t optlen) > { > struct inet_connection_sock *icsk = inet_csk(sk); > struct tcp_sock *tp = tcp_sk(sk); > struct net *net = sock_net(sk); > int val, len; > > if (copy_from_sockptr(&len, optlen, sizeof(int))) > return -EFAULT; > > len = min_t(unsigned int, len, sizeof(int)); > > if (len < 0) > return -EINVAL;
Actually that code has been broken since the test was added in 2.4.4. At that time min() was a local inline with unsigned int args. 2.4.9 added min(type,a,b) 2.4.10 renamed min() to min_t() and added min() with the strict type checking.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |