Patch "sctp: fix dst refcnt leak in sctp_v6_get_dst()" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
sctp: fix dst refcnt leak in sctp_v6_get_dst()
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
sctp-fix-dst-refcnt-leak-in-sctp_v6_get_dst.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Mar 8 06:55:02 PST 2018
From: Alexey Kodanev <[email protected]>
Date: Mon, 5 Feb 2018 15:10:35 +0300
Subject: sctp: fix dst refcnt leak in sctp_v6_get_dst()
From: Alexey Kodanev <[email protected]>
[ Upstream commit 957d761cf91cdbb175ad7d8f5472336a4d54dbf2 ]
When going through the bind address list in sctp_v6_get_dst() and the previously found address is better ('matchlen > bmatchlen'), the code continues to the next iteration without releasing currently held destination.
Fix it by releasing 'bdst' before continue to the next iteration, and instead of introducing one more '!IS_ERR(bdst)' check for dst_release(), move the already existed one right after ip6_dst_lookup_flow(), i.e. we shouldn't proceed further if we get an error for the route lookup.
--- net/sctp/ipv6.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
net/sctp/ipv6.c +7 -3
@@ -324,8 +324,10 @@ static void sctp_v6_get_dst(struct sctp_ final_p =fl6_update_dst (fl6,rcu_dereference (np->opt), &final); bdst =ip6_dst_lookup_flow (sk, fl6, final_p); -if (!IS_ERR (bdst) && -ipv6_chk_addr (dev_net (bdst->dev), +if (IS_ERR (bdst)) +continue ; + +if (ipv6_chk_addr (dev_net (bdst->dev), &laddr->a.v6.sin6_addr, bdst->dev,1 )) {if (!IS_ERR_OR_NULL (dst))dst_release (dst);
@@ -334,8 +336,10 @@ static void sctp_v6_get_dst(struct sctp_ } bmatchlen =sctp_v6_addr_match_len (daddr, &laddr->a); -if (matchlen > bmatchlen) +if (matchlen > bmatchlen) { +dst_release (bdst);continue ; + }if (!IS_ERR_OR_NULL (dst))dst_release (dst);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/sctp-fix-dst-refcnt-leak-in-sctp_v6_get_dst.patch queue-4.9/udplite-fix-partial-checksum-initialization.patch queue-4.9/sctp-verify-size-of-a-new-chunk-in-_sctp_make_chunk.patch