Skip to contentSkip to conversation

mptcp: fix possible integer overflow in mptcp_reset_tout_timer

PATCH In review Matthieu Baerts (NGI0) 2 participants 2 messages Nov 25, 2024

Subsystems (2)
lore
Share & tools
lore

Matthieu Baerts (NGI0)

author maintainer
#0 lore raw

PATCH 1/1 mptcp: fix possible integer overflow in mptcp_reset_tout_timer

From: Dmitry Kandybka <[email protected]>

commit b169e76ebad22cbd055101ee5aa1a7bed0e66606 upstream.

In 'mptcp_reset_tout_timer', promote 'probe_timestamp' to unsigned long to avoid possible integer overflow. Compile tested only.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

[ Conflict in this version because commit d866ae9aaa43 ("mptcp: add a
new sysctl for make after break timeout") is not in this version, and replaced TCP_TIMEWAIT_LEN in the expression. The fix can still be applied the same way: by forcing a cast to unsigned long for the first item. ]

---
 net/mptcp/protocol.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
net/mptcp/protocol.c +2 -2
index b8357d7c6b3a..01f6ce970918 100644
@@ -2691,8 +2691,8 @@ void mptcp_reset_tout_timer(struct mptcp_sock *msk, unsigned long fail_tout)
 	if (!fail_tout && !inet_csk(sk)->icsk_mtup.probe_timestamp)
 		return;
 
-	close_timeout = inet_csk(sk)->icsk_mtup.probe_timestamp - tcp_jiffies32 + jiffies +
-			TCP_TIMEWAIT_LEN;
+	close_timeout = (unsigned long)inet_csk(sk)->icsk_mtup.probe_timestamp -
+			tcp_jiffies32 + jiffies + TCP_TIMEWAIT_LEN;
 
 	/* the close timeout takes precedence on the fail one, and here at least one of
 	 * them is active
Signature · 1 line
2.45.2
maintainer
#1 lore raw

[ Sasha's backport helper bot ]

Hi,

The upstream commit SHA1 provided is correct: b169e76ebad22cbd055101ee5aa1a7bed0e66606

WARNING: Author mismatch between patch and upstream commit:
Backport author: "Matthieu Baerts (NGI0)" <[email protected]> Commit author: Dmitry Kandybka <[email protected]>

Status in newer kernel trees:
6.12.y | Not found
6.11.y | Not found
6.6.y | Not found

Note: The patch differs from the upstream commit:
---

tmp/tmp.e3CQHyz4BZ renamed from - +15 -4
@@ -1,3 +1,5 @@
+commit b169e76ebad22cbd055101ee5aa1a7bed0e66606 upstream.
+
 In 'mptcp_reset_tout_timer', promote 'probe_timestamp' to unsigned long
 to avoid possible integer overflow. Compile tested only.
 
@@ -6,22 +8,31 @@
 Signed-off-by: Dmitry Kandybka <[email protected]>
 Link: https://patch.msgid.link/[email protected]
 Signed-off-by: Jakub Kicinski <[email protected]>
+[ Conflict in this version because commit d866ae9aaa43 ("mptcp: add a
+  new sysctl for make after break timeout") is not in this version, and
+  replaced TCP_TIMEWAIT_LEN in the expression. The fix can still be
+  applied the same way: by forcing a cast to unsigned long for the first
+  item. ]
+Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
 ---
  net/mptcp/protocol.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
-index b0e9a745ea621..a6f2a25edb119 100644
+index b8357d7c6b3a..01f6ce970918 100644
 --- a/net/mptcp/protocol.c
 +++ b/net/mptcp/protocol.c
-@@ -2722,8 +2722,8 @@ void mptcp_reset_tout_timer(struct mptcp_sock *msk, unsigned long fail_tout)
+@@ -2691,8 +2691,8 @@ void mptcp_reset_tout_timer(struct mptcp_sock *msk, unsigned long fail_tout)
  	if (!fail_tout && !inet_csk(sk)->icsk_mtup.probe_timestamp)
  		return;
  
 -	close_timeout = inet_csk(sk)->icsk_mtup.probe_timestamp - tcp_jiffies32 + jiffies +
--			mptcp_close_timeout(sk);
+-			TCP_TIMEWAIT_LEN;
 +	close_timeout = (unsigned long)inet_csk(sk)->icsk_mtup.probe_timestamp -
-+			tcp_jiffies32 + jiffies + mptcp_close_timeout(sk);
++			tcp_jiffies32 + jiffies + TCP_TIMEWAIT_LEN;
  
  	/* the close timeout takes precedence on the fail one, and here at least one of
  	 * them is active
+-- 
+2.45.2
+

---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.6.y        |  Success    |  Success   |