Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

sctp: fix sockets_allocated imbalance after sk_clone()

sk_clone() increments sockets_allocated and sets the socket refcount to 2.
SCTP performs additional accounting in sctp_clone_sock(), so the clone-time
increment must be undone to avoid double counting.

Note we cannot simply remove the SCTP-side increment, because the SCTP
destroy path in sctp_destroy_sock() only decrements sockets_allocated when
sp->ep is set, which may not be true for all failure paths in
sctp_clone_sock().

Fixes: 16942cf4d3e3 ("sctp: Use sk_clone() in sctp_accept().")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/af8d66f928dec3e9fcbee8d4a85b7d5a6b86f515.1776460180.git.lucien.xin@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Xin Long and committed by
Jakub Kicinski
7c9b012d 0db16880

+2 -1
+2 -1
net/sctp/socket.c
··· 4855 4855 if (!newsk) 4856 4856 return ERR_PTR(err); 4857 4857 4858 - /* sk_clone() sets refcnt to 2 */ 4858 + /* sk_clone() sets refcnt to 2 and increments sockets_allocated */ 4859 4859 sock_put(newsk); 4860 + sk_sockets_allocated_dec(newsk); 4860 4861 4861 4862 newinet = inet_sk(newsk); 4862 4863 newsp = sctp_sk(newsk);