Skip to content

Commit

Permalink
tcp: fix incorrect parameter validation in the do_tcp_getsockopt() fu…
Browse files Browse the repository at this point in the history
…nction

[ Upstream commit 716edc9706deb3bb2ff56e2eeb83559cea8f22db ]

The 'len' variable can't be negative when assigned the result of
'min_t' because all 'min_t' parameters are cast to unsigned int,
and then the minimum one is chosen.

To fix the logic, check 'len' as read from 'optlen',
where the types of relevant variables are (signed) int.

Fixes: 1da177e ("Linux-2.6.12-rc2")
Signed-off-by: Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Gavrilov Ilia authored and Sasha Levin committed Mar 26, 2024
1 parent b64a1b4 commit 0709f6f
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions net/ipv4/tcp.c
Expand Up @@ -3967,11 +3967,11 @@ int do_tcp_getsockopt(struct sock *sk, int level,
if (copy_from_sockptr(&len, optlen, sizeof(int)))
return -EFAULT;

len = min_t(unsigned int, len, sizeof(int));

if (len < 0)
return -EINVAL;

len = min_t(unsigned int, len, sizeof(int));

switch (optname) {
case TCP_MAXSEG:
val = tp->mss_cache;
Expand Down

0 comments on commit 0709f6f

Please sign in to comment.