• Ido Schimmel's avatar
    nexthop: Fix splat with CONFIG_DEBUG_PREEMPT=y · e006858f
    Ido Schimmel authored
    Locally generated packets can increment the new nexthop statistics from
    process context, resulting in the following splat [1] due to preemption
    being enabled. Fix by using get_cpu_ptr() / put_cpu_ptr() which will
    which take care of disabling / enabling preemption.
    
    BUG: using smp_processor_id() in preemptible [00000000] code: ping/949
    caller is nexthop_select_path+0xcf8/0x1e30
    CPU: 12 PID: 949 Comm: ping Not tainted 6.8.0-rc7-custom-gcb450f605fae #11
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-1.fc38 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0xbd/0xe0
     check_preemption_disabled+0xce/0xe0
     nexthop_select_path+0xcf8/0x1e30
     fib_select_multipath+0x865/0x18b0
     fib_select_path+0x311/0x1160
     ip_route_output_key_hash_rcu+0xe54/0x2720
     ip_route_output_key_hash+0x193/0x380
     ip_route_output_flow+0x25/0x130
     raw_sendmsg+0xbab/0x34a0
     inet_sendmsg+0xa2/0xe0
     __sys_sendto+0x2ad/0x430
     __x64_sys_sendto+0xe5/0x1c0
     do_syscall_64+0xc5/0x1d0
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    [...]
    
    Fixes: f4676ea7 ("net: nexthop: Add nexthop group entry stats")
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20240311162307.545385-5-idosch@nvidia.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    e006858f
nexthop.c 97.4 KB