summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2015-11-02 07:50:07 -0800
committerLuis Henriques <luis.henriques@canonical.com>2015-12-09 11:40:55 +0000
commit299b6c906f0d39eb6ad0e91089c6c2000fc575fc (patch)
tree434c26e694d404c67cfa177f2090f4d36d732b0b /include
parent78be569977c1ef9946be590113407ef0ae4a39fc (diff)
net: avoid NULL deref in inet_ctl_sock_destroy()
commit 8fa677d2706d325d71dab91bf6e6512c05214e37 upstream. Under low memory conditions, tcp_sk_init() and icmp_sk_init() can both iterate on all possible cpus and call inet_ctl_sock_destroy(), with eventual NULL pointer. Signed-off-by: Eric Dumazet <edumazet@google.com> Reported-by: Dmitry Vyukov <dvyukov@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> [ luis: backported to 3.16: adjusted context ] Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
Diffstat (limited to 'include')
-rw-r--r--include/net/inet_common.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/net/inet_common.h b/include/net/inet_common.h
index fe7994c48b75..fd1da045dabc 100644
--- a/include/net/inet_common.h
+++ b/include/net/inet_common.h
@@ -40,7 +40,8 @@ int inet_ctl_sock_create(struct sock **sk, unsigned short family,
static inline void inet_ctl_sock_destroy(struct sock *sk)
{
- sk_release_kernel(sk);
+ if (sk)
+ sk_release_kernel(sk);
}
#endif