linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
@ 2022-10-21  4:06 Lu Wei
  2022-10-21 16:01 ` Eric Dumazet
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Lu Wei @ 2022-10-21  4:06 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni, yoshfuji, dsahern, ast,
	martin.lau, kuniyu, asml.silence, imagedong, ncardwell, netdev,
	linux-kernel

The type of sk_rcvbuf and sk_sndbuf in struct sock is int, and
in tcp_add_backlog(), the variable limit is caculated by adding
sk_rcvbuf, sk_sndbuf and 64 * 1024, it may exceed the max value
of int and overflow. This patch reduces the limit budget by
halving the sndbuf to solve this issue since ACK packets are much
smaller than the payload.

Fixes: c9c3321257e1 ("tcp: add tcp_add_backlog()")
Signed-off-by: Lu Wei <luwei32@huawei.com>
---
 net/ipv4/tcp_ipv4.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 7a250ef9d1b7..87d440f47a70 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1874,11 +1874,13 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb,
 	__skb_push(skb, hdrlen);
 
 no_coalesce:
+	limit = (u32)READ_ONCE(sk->sk_rcvbuf) + (u32)(READ_ONCE(sk->sk_sndbuf) >> 1);
+
 	/* Only socket owner can try to collapse/prune rx queues
 	 * to reduce memory overhead, so add a little headroom here.
 	 * Few sockets backlog are possibly concurrently non empty.
 	 */
-	limit = READ_ONCE(sk->sk_rcvbuf) + READ_ONCE(sk->sk_sndbuf) + 64*1024;
+	limit += 64 * 1024;
 
 	if (unlikely(sk_add_backlog(sk, skb, limit))) {
 		bh_unlock_sock(sk);
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
  2022-10-21  4:06 [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog() Lu Wei
@ 2022-10-21 16:01 ` Eric Dumazet
  2022-10-21 17:16 ` Kuniyuki Iwashima
  2022-10-24 12:20 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Eric Dumazet @ 2022-10-21 16:01 UTC (permalink / raw)
  To: Lu Wei
  Cc: davem, kuba, pabeni, yoshfuji, dsahern, ast, martin.lau, kuniyu,
	asml.silence, imagedong, ncardwell, netdev, linux-kernel

On Thu, Oct 20, 2022 at 8:03 PM Lu Wei <luwei32@huawei.com> wrote:
>
> The type of sk_rcvbuf and sk_sndbuf in struct sock is int, and
> in tcp_add_backlog(), the variable limit is caculated by adding
> sk_rcvbuf, sk_sndbuf and 64 * 1024, it may exceed the max value
> of int and overflow. This patch reduces the limit budget by
> halving the sndbuf to solve this issue since ACK packets are much
> smaller than the payload.
>
> Fixes: c9c3321257e1 ("tcp: add tcp_add_backlog()")
> Signed-off-by: Lu Wei <luwei32@huawei.com>

Reviewed-by: Eric Dumazet <edumazet@google.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
  2022-10-21  4:06 [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog() Lu Wei
  2022-10-21 16:01 ` Eric Dumazet
@ 2022-10-21 17:16 ` Kuniyuki Iwashima
  2022-10-24 12:20 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Kuniyuki Iwashima @ 2022-10-21 17:16 UTC (permalink / raw)
  To: luwei32
  Cc: asml.silence, ast, davem, dsahern, edumazet, imagedong, kuba,
	kuniyu, linux-kernel, martin.lau, ncardwell, netdev, pabeni,
	yoshfuji

From:   Lu Wei <luwei32@huawei.com>
Date:   Fri, 21 Oct 2022 12:06:22 +0800
> The type of sk_rcvbuf and sk_sndbuf in struct sock is int, and
> in tcp_add_backlog(), the variable limit is caculated by adding
> sk_rcvbuf, sk_sndbuf and 64 * 1024, it may exceed the max value
> of int and overflow. This patch reduces the limit budget by
> halving the sndbuf to solve this issue since ACK packets are much
> smaller than the payload.
> 
> Fixes: c9c3321257e1 ("tcp: add tcp_add_backlog()")
> Signed-off-by: Lu Wei <luwei32@huawei.com>

Acked-by: Kuniyuki Iwashima <kuniyu@amazon.com>


> ---
>  net/ipv4/tcp_ipv4.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
> index 7a250ef9d1b7..87d440f47a70 100644
> --- a/net/ipv4/tcp_ipv4.c
> +++ b/net/ipv4/tcp_ipv4.c
> @@ -1874,11 +1874,13 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb,
>  	__skb_push(skb, hdrlen);
>  
>  no_coalesce:
> +	limit = (u32)READ_ONCE(sk->sk_rcvbuf) + (u32)(READ_ONCE(sk->sk_sndbuf) >> 1);
> +
>  	/* Only socket owner can try to collapse/prune rx queues
>  	 * to reduce memory overhead, so add a little headroom here.
>  	 * Few sockets backlog are possibly concurrently non empty.
>  	 */
> -	limit = READ_ONCE(sk->sk_rcvbuf) + READ_ONCE(sk->sk_sndbuf) + 64*1024;
> +	limit += 64 * 1024;
>  
>  	if (unlikely(sk_add_backlog(sk, skb, limit))) {
>  		bh_unlock_sock(sk);
> -- 
> 2.31.1

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
  2022-10-21  4:06 [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog() Lu Wei
  2022-10-21 16:01 ` Eric Dumazet
  2022-10-21 17:16 ` Kuniyuki Iwashima
@ 2022-10-24 12:20 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-10-24 12:20 UTC (permalink / raw)
  To: Lu Wei
  Cc: davem, edumazet, kuba, pabeni, yoshfuji, dsahern, ast,
	martin.lau, kuniyu, asml.silence, imagedong, ncardwell, netdev,
	linux-kernel

Hello:

This patch was applied to netdev/net.git (master)
by David S. Miller <davem@davemloft.net>:

On Fri, 21 Oct 2022 12:06:22 +0800 you wrote:
> The type of sk_rcvbuf and sk_sndbuf in struct sock is int, and
> in tcp_add_backlog(), the variable limit is caculated by adding
> sk_rcvbuf, sk_sndbuf and 64 * 1024, it may exceed the max value
> of int and overflow. This patch reduces the limit budget by
> halving the sndbuf to solve this issue since ACK packets are much
> smaller than the payload.
> 
> [...]

Here is the summary with links:
  - [net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
    https://git.kernel.org/netdev/net/c/ec791d8149ff

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-10-24 16:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-21  4:06 [PATCH net,v3] tcp: fix a signed-integer-overflow bug in tcp_add_backlog() Lu Wei
2022-10-21 16:01 ` Eric Dumazet
2022-10-21 17:16 ` Kuniyuki Iwashima
2022-10-24 12:20 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).