• Eric Dumazet's avatar
    af_packet: fix data-race in packet_setsockopt / packet_setsockopt · e42e70ad
    Eric Dumazet authored
    When packet_setsockopt( PACKET_FANOUT_DATA ) reads po->fanout,
    no lock is held, meaning that another thread can change po->fanout.
    
    Given that po->fanout can only be set once during the socket lifetime
    (it is only cleared from fanout_release()), we can use
    READ_ONCE()/WRITE_ONCE() to document the race.
    
    BUG: KCSAN: data-race in packet_setsockopt / packet_setsockopt
    
    write to 0xffff88813ae8e300 of 8 bytes by task 14653 on cpu 0:
     fanout_add net/packet/af_packet.c:1791 [inline]
     packet_setsockopt+0x22fe/0x24a0 net/packet/af_packet.c:3931
     __sys_setsockopt+0x209/0x2a0 net/socket.c:2180
     __do_sys_setsockopt net/socket.c:2191 [inline]
     __se_sys_setsockopt net/socket.c:2188 [inline]
     __x64_sys_setsockopt+0x62/0x70 net/socket.c:2188
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x44/0xd0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    read to 0xffff88813ae8e300 of 8 bytes by task 14654 on cpu 1:
     packet_setsockopt+0x691/0x24a0 net/packet/af_packet.c:3935
     __sys_setsockopt+0x209/0x2a0 net/socket.c:2180
     __do_sys_setsockopt net/socket.c:2191 [inline]
     __se_sys_setsockopt net/socket.c:2188 [inline]
     __x64_sys_setsockopt+0x62/0x70 net/socket.c:2188
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x44/0xd0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    value changed: 0x0000000000000000 -> 0xffff888106f8c000
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 1 PID: 14654 Comm: syz-executor.3 Not tainted 5.16.0-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    
    Fixes: 47dceb8e
    
     ("packet: add classic BPF fanout mode")
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Willem de Bruijn <willemb@google.com>
    Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
    Link: https://lore.kernel.org/r/20220201022358.330621-1-eric.dumazet@gmail.com
    
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    e42e70ad
af_packet.c 111 KB