[PATCH net] kcm: do not attach PF_KCM sockets to avoid deadlock

Subsystems: networking [general], the rest

STALE3336d

3 messages, 3 authors, 2017-08-30 · open the first message on its own page

[PATCH net] kcm: do not attach PF_KCM sockets to avoid deadlock

From: Eric Dumazet <hidden>
Date: 2017-08-30 16:29:34

From: Eric Dumazet <redacted>

syzkaller had no problem to trigger a deadlock, attaching a KCM socket
to another one (or itself). (original syzkaller report was a very
confusing lockdep splat during a sendmsg())

It seems KCM claims to only support TCP, but no enforcement is done,
so we might need to add additional checks.

Fixes: ab7ac4eb9832 ("kcm: Kernel Connection Multiplexor module")
Signed-off-by: Eric Dumazet <redacted>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
---
 net/kcm/kcmsock.c |    4 ++++
 1 file changed, 4 insertions(+)
diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c
index 48e993b2dbcf1afae04968ed840e2e98c2cf6772..af4e76ac88ff0817398d1d7460a41f0cd5fe6f30 100644
--- a/net/kcm/kcmsock.c
+++ b/net/kcm/kcmsock.c
@@ -1387,6 +1387,10 @@ static int kcm_attach(struct socket *sock, struct socket *csock,
 	if (!csk)
 		return -EINVAL;
 
+	/* We must prevent loops or risk deadlock ! */
+	if (csk->sk_family == PF_KCM)
+		return -EOPNOTSUPP;
+
 	psock = kmem_cache_zalloc(kcm_psockp, GFP_KERNEL);
 	if (!psock)
 		return -ENOMEM;

Re: [PATCH net] kcm: do not attach PF_KCM sockets to avoid deadlock

From: Tom Herbert <hidden>
Date: 2017-08-30 16:42:54

On Wed, Aug 30, 2017 at 9:29 AM, Eric Dumazet [off-list ref] wrote:
From: Eric Dumazet <redacted>

syzkaller had no problem to trigger a deadlock, attaching a KCM socket
to another one (or itself). (original syzkaller report was a very
confusing lockdep splat during a sendmsg())

It seems KCM claims to only support TCP, but no enforcement is done,
so we might need to add additional checks.

Fixes: ab7ac4eb9832 ("kcm: Kernel Connection Multiplexor module")
Signed-off-by: Eric Dumazet <redacted>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Acked-by: Tom Herbert <redacted>
quoted hunk
---
 net/kcm/kcmsock.c |    4 ++++
 1 file changed, 4 insertions(+)
diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c
index 48e993b2dbcf1afae04968ed840e2e98c2cf6772..af4e76ac88ff0817398d1d7460a41f0cd5fe6f30 100644
--- a/net/kcm/kcmsock.c
+++ b/net/kcm/kcmsock.c
@@ -1387,6 +1387,10 @@ static int kcm_attach(struct socket *sock, struct socket *csock,
        if (!csk)
                return -EINVAL;

+       /* We must prevent loops or risk deadlock ! */
+       if (csk->sk_family == PF_KCM)
+               return -EOPNOTSUPP;
+
        psock = kmem_cache_zalloc(kcm_psockp, GFP_KERNEL);
        if (!psock)
                return -ENOMEM;

Re: [PATCH net] kcm: do not attach PF_KCM sockets to avoid deadlock

From: David Miller <davem@davemloft.net>
Date: 2017-08-30 22:55:39

From: Eric Dumazet <redacted>
Date: Wed, 30 Aug 2017 09:29:31 -0700
From: Eric Dumazet <redacted>

syzkaller had no problem to trigger a deadlock, attaching a KCM socket
to another one (or itself). (original syzkaller report was a very
confusing lockdep splat during a sendmsg())

It seems KCM claims to only support TCP, but no enforcement is done,
so we might need to add additional checks.

Fixes: ab7ac4eb9832 ("kcm: Kernel Connection Multiplexor module")
Signed-off-by: Eric Dumazet <redacted>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Applied and queued up for -stable, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help