• Eric Dumazet's avatar
    ipvs: move old_secure_tcp into struct netns_ipvs · c24b75e0
    Eric Dumazet authored
    syzbot reported the following issue :
    
    BUG: KCSAN: data-race in update_defense_level / update_defense_level
    
    read to 0xffffffff861a6260 of 4 bytes by task 3006 on cpu 1:
     update_defense_level+0x621/0xb30 net/netfilter/ipvs/ip_vs_ctl.c:177
     defense_work_handler+0x3d/0xd0 net/netfilter/ipvs/ip_vs_ctl.c:225
     process_one_work+0x3d4/0x890 kernel/workqueue.c:2269
     worker_thread+0xa0/0x800 kernel/workqueue.c:2415
     kthread+0x1d4/0x200 drivers/block/aoe/aoecmd.c:1253
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:352
    
    write to 0xffffffff861a6260 of 4 bytes by task 7333 on cpu 0:
     update_defense_level+0xa62/0xb30 net/netfilter/ipvs/ip_vs_ctl.c:205
     defense_work_handler+0x3d/0xd0 net/netfilter/ipvs/ip_vs_ctl.c:225
     process_one_work+0x3d4/0x890 kernel/workqueue.c:2269
     worker_thread+0xa0/0x800 kernel/workqueue.c:2415
     kthread+0x1d4/0x200 drivers/block/aoe/aoecmd.c:1253
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:352
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 0 PID: 7333 Comm: kworker/0:5 Not tainted 5.4.0-rc3+ #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Workqueue: events defense_work_handler
    
    Indeed, old_secure_tcp is currently a static variable, while it
    needs to be a per netns variable.
    
    Fixes: a0840e2e ("IPVS: netns, ip_vs_ctl local vars moved to ipvs struct.")
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
    Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
    c24b75e0
ip_vs.h 48 KB