diff mbox series

[net] net/smc: do not leave a dangling sk pointer in __smc_create()

Message ID 20241106221922.1544045-1-edumazet@google.com (mailing list archive)
State Accepted
Commit d293958a8595ba566fb90b99da4d6263e14fee15
Delegated to: Netdev Maintainers
Headers show
Series [net] net/smc: do not leave a dangling sk pointer in __smc_create() | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag present in non-next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 3 this patch: 3
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers warning 5 maintainers not CCed: horms@kernel.org linux-s390@vger.kernel.org tonylu@linux.alibaba.com guwen@linux.alibaba.com jaka@linux.ibm.com
netdev/build_clang success Errors and warnings before: 3 this patch: 3
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 4 this patch: 4
netdev/checkpatch warning WARNING: Possible repeated word: 'Google' WARNING: Unknown commit id '2d859aff775d', maybe rebased or not pulled? WARNING: Unknown commit id '4bbd360a5084', maybe rebased or not pulled?
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-11-07--12-00 (tests: 787)

Commit Message

Eric Dumazet Nov. 6, 2024, 10:19 p.m. UTC
Thanks to commit 4bbd360a5084 ("socket: Print pf->create() when
it does not clear sock->sk on failure."), syzbot found an issue with AF_SMC:

smc_create must clear sock->sk on failure, family: 43, type: 1, protocol: 0
 WARNING: CPU: 0 PID: 5827 at net/socket.c:1565 __sock_create+0x96f/0xa30 net/socket.c:1563
Modules linked in:
CPU: 0 UID: 0 PID: 5827 Comm: syz-executor259 Not tainted 6.12.0-rc6-next-20241106-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
 RIP: 0010:__sock_create+0x96f/0xa30 net/socket.c:1563
Code: 03 00 74 08 4c 89 e7 e8 4f 3b 85 f8 49 8b 34 24 48 c7 c7 40 89 0c 8d 8b 54 24 04 8b 4c 24 0c 44 8b 44 24 08 e8 32 78 db f7 90 <0f> 0b 90 90 e9 d3 fd ff ff 89 e9 80 e1 07 fe c1 38 c1 0f 8c ee f7
RSP: 0018:ffffc90003e4fda0 EFLAGS: 00010246
RAX: 099c6f938c7f4700 RBX: 1ffffffff1a595fd RCX: ffff888034823c00
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
RBP: 00000000ffffffe9 R08: ffffffff81567052 R09: 1ffff920007c9f50
R10: dffffc0000000000 R11: fffff520007c9f51 R12: ffffffff8d2cafe8
R13: 1ffffffff1a595fe R14: ffffffff9a789c40 R15: ffff8880764298c0
FS:  000055557b518380(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa62ff43225 CR3: 0000000031628000 CR4: 00000000003526f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 <TASK>
  sock_create net/socket.c:1616 [inline]
  __sys_socket_create net/socket.c:1653 [inline]
  __sys_socket+0x150/0x3c0 net/socket.c:1700
  __do_sys_socket net/socket.c:1714 [inline]
  __se_sys_socket net/socket.c:1712 [inline]

For reference, see commit 2d859aff775d ("Merge branch
'do-not-leave-dangling-sk-pointers-in-pf-create-functions'")

Fixes: d25a92ccae6b ("net/smc: Introduce IPPROTO_SMC")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
Cc: Ignat Korchagin <ignat@cloudflare.com>
Cc: D. Wythe <alibuda@linux.alibaba.com>
Cc: Wenjia Zhang <wenjia@linux.ibm.com>
Cc: Dust Li <dust.li@linux.alibaba.com>
---
 net/smc/af_smc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Kuniyuki Iwashima Nov. 6, 2024, 11:31 p.m. UTC | #1
From: Eric Dumazet <edumazet@google.com>
Date: Wed,  6 Nov 2024 22:19:22 +0000
> Thanks to commit 4bbd360a5084 ("socket: Print pf->create() when
> it does not clear sock->sk on failure."), syzbot found an issue with AF_SMC:
> 
> smc_create must clear sock->sk on failure, family: 43, type: 1, protocol: 0
>  WARNING: CPU: 0 PID: 5827 at net/socket.c:1565 __sock_create+0x96f/0xa30 net/socket.c:1563
> Modules linked in:
> CPU: 0 UID: 0 PID: 5827 Comm: syz-executor259 Not tainted 6.12.0-rc6-next-20241106-syzkaller #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
>  RIP: 0010:__sock_create+0x96f/0xa30 net/socket.c:1563
> Code: 03 00 74 08 4c 89 e7 e8 4f 3b 85 f8 49 8b 34 24 48 c7 c7 40 89 0c 8d 8b 54 24 04 8b 4c 24 0c 44 8b 44 24 08 e8 32 78 db f7 90 <0f> 0b 90 90 e9 d3 fd ff ff 89 e9 80 e1 07 fe c1 38 c1 0f 8c ee f7
> RSP: 0018:ffffc90003e4fda0 EFLAGS: 00010246
> RAX: 099c6f938c7f4700 RBX: 1ffffffff1a595fd RCX: ffff888034823c00
> RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
> RBP: 00000000ffffffe9 R08: ffffffff81567052 R09: 1ffff920007c9f50
> R10: dffffc0000000000 R11: fffff520007c9f51 R12: ffffffff8d2cafe8
> R13: 1ffffffff1a595fe R14: ffffffff9a789c40 R15: ffff8880764298c0
> FS:  000055557b518380(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007fa62ff43225 CR3: 0000000031628000 CR4: 00000000003526f0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> Call Trace:
>  <TASK>
>   sock_create net/socket.c:1616 [inline]
>   __sys_socket_create net/socket.c:1653 [inline]
>   __sys_socket+0x150/0x3c0 net/socket.c:1700
>   __do_sys_socket net/socket.c:1714 [inline]
>   __se_sys_socket net/socket.c:1712 [inline]
> 
> For reference, see commit 2d859aff775d ("Merge branch
> 'do-not-leave-dangling-sk-pointers-in-pf-create-functions'")
> 
> Fixes: d25a92ccae6b ("net/smc: Introduce IPPROTO_SMC")
> Signed-off-by: Eric Dumazet <edumazet@google.com>

Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>

Thanks!
Wenjia Zhang Nov. 7, 2024, 8:28 a.m. UTC | #2
On 06.11.24 23:19, Eric Dumazet wrote:
> Thanks to commit 4bbd360a5084 ("socket: Print pf->create() when
> it does not clear sock->sk on failure."), syzbot found an issue with AF_SMC:
> 
> smc_create must clear sock->sk on failure, family: 43, type: 1, protocol: 0
>   WARNING: CPU: 0 PID: 5827 at net/socket.c:1565 __sock_create+0x96f/0xa30 net/socket.c:1563
> Modules linked in:
> CPU: 0 UID: 0 PID: 5827 Comm: syz-executor259 Not tainted 6.12.0-rc6-next-20241106-syzkaller #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
>   RIP: 0010:__sock_create+0x96f/0xa30 net/socket.c:1563
> Code: 03 00 74 08 4c 89 e7 e8 4f 3b 85 f8 49 8b 34 24 48 c7 c7 40 89 0c 8d 8b 54 24 04 8b 4c 24 0c 44 8b 44 24 08 e8 32 78 db f7 90 <0f> 0b 90 90 e9 d3 fd ff ff 89 e9 80 e1 07 fe c1 38 c1 0f 8c ee f7
> RSP: 0018:ffffc90003e4fda0 EFLAGS: 00010246
> RAX: 099c6f938c7f4700 RBX: 1ffffffff1a595fd RCX: ffff888034823c00
> RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
> RBP: 00000000ffffffe9 R08: ffffffff81567052 R09: 1ffff920007c9f50
> R10: dffffc0000000000 R11: fffff520007c9f51 R12: ffffffff8d2cafe8
> R13: 1ffffffff1a595fe R14: ffffffff9a789c40 R15: ffff8880764298c0
> FS:  000055557b518380(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007fa62ff43225 CR3: 0000000031628000 CR4: 00000000003526f0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> Call Trace:
>   <TASK>
>    sock_create net/socket.c:1616 [inline]
>    __sys_socket_create net/socket.c:1653 [inline]
>    __sys_socket+0x150/0x3c0 net/socket.c:1700
>    __do_sys_socket net/socket.c:1714 [inline]
>    __se_sys_socket net/socket.c:1712 [inline]
> 
> For reference, see commit 2d859aff775d ("Merge branch
> 'do-not-leave-dangling-sk-pointers-in-pf-create-functions'")
> 
> Fixes: d25a92ccae6b ("net/smc: Introduce IPPROTO_SMC")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
> Cc: Ignat Korchagin <ignat@cloudflare.com>
> Cc: D. Wythe <alibuda@linux.alibaba.com>
> Cc: Wenjia Zhang <wenjia@linux.ibm.com>
> Cc: Dust Li <dust.li@linux.alibaba.com>
> ---

Thank you, Eric, for fixing it! The code looks good to me.
Should the fixed commit not be 2fe5273f149c instead of d25a92ccae6b?

Thanks,
Wenjia
Eric Dumazet Nov. 7, 2024, 8:32 a.m. UTC | #3
On Thu, Nov 7, 2024 at 9:28 AM Wenjia Zhang <wenjia@linux.ibm.com> wrote:
>
>
>
> On 06.11.24 23:19, Eric Dumazet wrote:
> > Thanks to commit 4bbd360a5084 ("socket: Print pf->create() when
> > it does not clear sock->sk on failure."), syzbot found an issue with AF_SMC:
> >
> > smc_create must clear sock->sk on failure, family: 43, type: 1, protocol: 0
> >   WARNING: CPU: 0 PID: 5827 at net/socket.c:1565 __sock_create+0x96f/0xa30 net/socket.c:1563
> > Modules linked in:
> > CPU: 0 UID: 0 PID: 5827 Comm: syz-executor259 Not tainted 6.12.0-rc6-next-20241106-syzkaller #0
> > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
> >   RIP: 0010:__sock_create+0x96f/0xa30 net/socket.c:1563
> > Code: 03 00 74 08 4c 89 e7 e8 4f 3b 85 f8 49 8b 34 24 48 c7 c7 40 89 0c 8d 8b 54 24 04 8b 4c 24 0c 44 8b 44 24 08 e8 32 78 db f7 90 <0f> 0b 90 90 e9 d3 fd ff ff 89 e9 80 e1 07 fe c1 38 c1 0f 8c ee f7
> > RSP: 0018:ffffc90003e4fda0 EFLAGS: 00010246
> > RAX: 099c6f938c7f4700 RBX: 1ffffffff1a595fd RCX: ffff888034823c00
> > RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
> > RBP: 00000000ffffffe9 R08: ffffffff81567052 R09: 1ffff920007c9f50
> > R10: dffffc0000000000 R11: fffff520007c9f51 R12: ffffffff8d2cafe8
> > R13: 1ffffffff1a595fe R14: ffffffff9a789c40 R15: ffff8880764298c0
> > FS:  000055557b518380(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
> > CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > CR2: 00007fa62ff43225 CR3: 0000000031628000 CR4: 00000000003526f0
> > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> > DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> > Call Trace:
> >   <TASK>
> >    sock_create net/socket.c:1616 [inline]
> >    __sys_socket_create net/socket.c:1653 [inline]
> >    __sys_socket+0x150/0x3c0 net/socket.c:1700
> >    __do_sys_socket net/socket.c:1714 [inline]
> >    __se_sys_socket net/socket.c:1712 [inline]
> >
> > For reference, see commit 2d859aff775d ("Merge branch
> > 'do-not-leave-dangling-sk-pointers-in-pf-create-functions'")
> >
> > Fixes: d25a92ccae6b ("net/smc: Introduce IPPROTO_SMC")
> > Signed-off-by: Eric Dumazet <edumazet@google.com>
> > Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
> > Cc: Ignat Korchagin <ignat@cloudflare.com>
> > Cc: D. Wythe <alibuda@linux.alibaba.com>
> > Cc: Wenjia Zhang <wenjia@linux.ibm.com>
> > Cc: Dust Li <dust.li@linux.alibaba.com>
> > ---
>
> Thank you, Eric, for fixing it! The code looks good to me.
> Should the fixed commit not be 2fe5273f149c instead of d25a92ccae6b?
>

The bug was there, even before 2fe5273f149c ("net/smc: prevent UAF in
inet_create()")

Thanks.
Wenjia Zhang Nov. 7, 2024, 11:56 a.m. UTC | #4
On 07.11.24 09:32, Eric Dumazet wrote:
> On Thu, Nov 7, 2024 at 9:28 AM Wenjia Zhang <wenjia@linux.ibm.com> wrote:
>>
>>
>>
>> On 06.11.24 23:19, Eric Dumazet wrote:
>>> Thanks to commit 4bbd360a5084 ("socket: Print pf->create() when
>>> it does not clear sock->sk on failure."), syzbot found an issue with AF_SMC:
>>>
>>> smc_create must clear sock->sk on failure, family: 43, type: 1, protocol: 0
>>>    WARNING: CPU: 0 PID: 5827 at net/socket.c:1565 __sock_create+0x96f/0xa30 net/socket.c:1563
>>> Modules linked in:
>>> CPU: 0 UID: 0 PID: 5827 Comm: syz-executor259 Not tainted 6.12.0-rc6-next-20241106-syzkaller #0
>>> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
>>>    RIP: 0010:__sock_create+0x96f/0xa30 net/socket.c:1563
>>> Code: 03 00 74 08 4c 89 e7 e8 4f 3b 85 f8 49 8b 34 24 48 c7 c7 40 89 0c 8d 8b 54 24 04 8b 4c 24 0c 44 8b 44 24 08 e8 32 78 db f7 90 <0f> 0b 90 90 e9 d3 fd ff ff 89 e9 80 e1 07 fe c1 38 c1 0f 8c ee f7
>>> RSP: 0018:ffffc90003e4fda0 EFLAGS: 00010246
>>> RAX: 099c6f938c7f4700 RBX: 1ffffffff1a595fd RCX: ffff888034823c00
>>> RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
>>> RBP: 00000000ffffffe9 R08: ffffffff81567052 R09: 1ffff920007c9f50
>>> R10: dffffc0000000000 R11: fffff520007c9f51 R12: ffffffff8d2cafe8
>>> R13: 1ffffffff1a595fe R14: ffffffff9a789c40 R15: ffff8880764298c0
>>> FS:  000055557b518380(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
>>> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>> CR2: 00007fa62ff43225 CR3: 0000000031628000 CR4: 00000000003526f0
>>> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
>>> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
>>> Call Trace:
>>>    <TASK>
>>>     sock_create net/socket.c:1616 [inline]
>>>     __sys_socket_create net/socket.c:1653 [inline]
>>>     __sys_socket+0x150/0x3c0 net/socket.c:1700
>>>     __do_sys_socket net/socket.c:1714 [inline]
>>>     __se_sys_socket net/socket.c:1712 [inline]
>>>
>>> For reference, see commit 2d859aff775d ("Merge branch
>>> 'do-not-leave-dangling-sk-pointers-in-pf-create-functions'")
>>>
>>> Fixes: d25a92ccae6b ("net/smc: Introduce IPPROTO_SMC")
>>> Signed-off-by: Eric Dumazet <edumazet@google.com>
>>> Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
>>> Cc: Ignat Korchagin <ignat@cloudflare.com>
>>> Cc: D. Wythe <alibuda@linux.alibaba.com>
>>> Cc: Wenjia Zhang <wenjia@linux.ibm.com>
>>> Cc: Dust Li <dust.li@linux.alibaba.com>
>>> ---
>>
>> Thank you, Eric, for fixing it! The code looks good to me.
>> Should the fixed commit not be 2fe5273f149c instead of d25a92ccae6b?
>>
> 
> The bug was there, even before 2fe5273f149c ("net/smc: prevent UAF in
> inet_create()")
> 
> Thanks.
ok, that sounds reasonable to me.

Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>

Thanks,
Wenjia
patchwork-bot+netdevbpf@kernel.org Nov. 7, 2024, 7:40 p.m. UTC | #5
Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Wed,  6 Nov 2024 22:19:22 +0000 you wrote:
> Thanks to commit 4bbd360a5084 ("socket: Print pf->create() when
> it does not clear sock->sk on failure."), syzbot found an issue with AF_SMC:
> 
> smc_create must clear sock->sk on failure, family: 43, type: 1, protocol: 0
>  WARNING: CPU: 0 PID: 5827 at net/socket.c:1565 __sock_create+0x96f/0xa30 net/socket.c:1563
> Modules linked in:
> CPU: 0 UID: 0 PID: 5827 Comm: syz-executor259 Not tainted 6.12.0-rc6-next-20241106-syzkaller #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
>  RIP: 0010:__sock_create+0x96f/0xa30 net/socket.c:1563
> Code: 03 00 74 08 4c 89 e7 e8 4f 3b 85 f8 49 8b 34 24 48 c7 c7 40 89 0c 8d 8b 54 24 04 8b 4c 24 0c 44 8b 44 24 08 e8 32 78 db f7 90 <0f> 0b 90 90 e9 d3 fd ff ff 89 e9 80 e1 07 fe c1 38 c1 0f 8c ee f7
> RSP: 0018:ffffc90003e4fda0 EFLAGS: 00010246
> RAX: 099c6f938c7f4700 RBX: 1ffffffff1a595fd RCX: ffff888034823c00
> RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
> RBP: 00000000ffffffe9 R08: ffffffff81567052 R09: 1ffff920007c9f50
> R10: dffffc0000000000 R11: fffff520007c9f51 R12: ffffffff8d2cafe8
> R13: 1ffffffff1a595fe R14: ffffffff9a789c40 R15: ffff8880764298c0
> FS:  000055557b518380(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007fa62ff43225 CR3: 0000000031628000 CR4: 00000000003526f0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> Call Trace:
>  <TASK>
>   sock_create net/socket.c:1616 [inline]
>   __sys_socket_create net/socket.c:1653 [inline]
>   __sys_socket+0x150/0x3c0 net/socket.c:1700
>   __do_sys_socket net/socket.c:1714 [inline]
>   __se_sys_socket net/socket.c:1712 [inline]
> 
> [...]

Here is the summary with links:
  - [net] net/smc: do not leave a dangling sk pointer in __smc_create()
    https://git.kernel.org/netdev/net/c/d293958a8595

You are awesome, thank you!
diff mbox series

Patch

diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index 0316217b7687388de37e0dfe1e11fe6b4ee6b628..9d76e902fd770f5b10d9cd8ae977f1d80552066f 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -3359,8 +3359,10 @@  static int __smc_create(struct net *net, struct socket *sock, int protocol,
 	else
 		rc = smc_create_clcsk(net, sk, family);
 
-	if (rc)
+	if (rc) {
 		sk_common_release(sk);
+		sock->sk = NULL;
+	}
 out:
 	return rc;
 }