Commit 5171b37
net: af_packet: fix race in PACKET_{R|T}X_RING
In order to remove the race caught by syzbot [1], we need
to lock the socket before using po->tp_version as this could
change under us otherwise.
This means lock_sock() and release_sock() must be done by
packet_set_ring() callers.
[1] :
BUG: KMSAN: uninit-value in packet_set_ring+0x1254/0x3870 net/packet/af_packet.c:4249
CPU: 0 PID: 20195 Comm: syzkaller707632 Not tainted 4.16.0+ hardkernel#83
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:17 [inline]
dump_stack+0x185/0x1d0 lib/dump_stack.c:53
kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067
__msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:676
packet_set_ring+0x1254/0x3870 net/packet/af_packet.c:4249
packet_setsockopt+0x12c6/0x5a90 net/packet/af_packet.c:3662
SYSC_setsockopt+0x4b8/0x570 net/socket.c:1849
SyS_setsockopt+0x76/0xa0 net/socket.c:1828
do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x3d/0xa2
RIP: 0033:0x449099
RSP: 002b:00007f42b5307ce8 EFLAGS: 00000246 ORIG_RAX: 0000000000000036
RAX: ffffffffffffffda RBX: 000000000070003c RCX: 0000000000449099
RDX: 0000000000000005 RSI: 0000000000000107 RDI: 0000000000000003
RBP: 0000000000700038 R08: 000000000000001c R09: 0000000000000000
R10: 00000000200000c0 R11: 0000000000000246 R12: 0000000000000000
R13: 000000000080eecf R14: 00007f42b53089c0 R15: 0000000000000001
Local variable description: ----req_u@packet_setsockopt
Variable was created at:
packet_setsockopt+0x13f/0x5a90 net/packet/af_packet.c:3612
SYSC_setsockopt+0x4b8/0x570 net/socket.c:1849
Fixes: f6fb8f1 ("af-packet: TPACKET_V3 flexible buffer implementation.")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: David S. Miller <davem@davemloft.net>1 parent f23e064 commit 5171b37
1 file changed
Lines changed: 14 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3008 | 3008 | | |
3009 | 3009 | | |
3010 | 3010 | | |
| 3011 | + | |
3011 | 3012 | | |
3012 | 3013 | | |
3013 | 3014 | | |
| |||
3017 | 3018 | | |
3018 | 3019 | | |
3019 | 3020 | | |
| 3021 | + | |
3020 | 3022 | | |
3021 | 3023 | | |
3022 | 3024 | | |
| |||
3643 | 3645 | | |
3644 | 3646 | | |
3645 | 3647 | | |
| 3648 | + | |
3646 | 3649 | | |
3647 | 3650 | | |
3648 | 3651 | | |
| |||
3653 | 3656 | | |
3654 | 3657 | | |
3655 | 3658 | | |
3656 | | - | |
3657 | | - | |
3658 | | - | |
3659 | | - | |
3660 | | - | |
3661 | | - | |
| 3659 | + | |
| 3660 | + | |
| 3661 | + | |
| 3662 | + | |
| 3663 | + | |
| 3664 | + | |
| 3665 | + | |
| 3666 | + | |
| 3667 | + | |
| 3668 | + | |
| 3669 | + | |
3662 | 3670 | | |
3663 | 3671 | | |
3664 | 3672 | | |
| |||
4208 | 4216 | | |
4209 | 4217 | | |
4210 | 4218 | | |
4211 | | - | |
4212 | | - | |
4213 | 4219 | | |
4214 | 4220 | | |
4215 | 4221 | | |
| |||
4347 | 4353 | | |
4348 | 4354 | | |
4349 | 4355 | | |
4350 | | - | |
4351 | 4356 | | |
4352 | 4357 | | |
4353 | 4358 | | |
| |||
0 commit comments