• Florian Fainelli's avatar
    net: Fix ip_mc_{dec,inc}_group allocation context · 9fb20801
    Florian Fainelli authored
    After 4effd28c ("bridge: join all-snoopers multicast address"), I
    started seeing the following sleep in atomic warnings:
    
    [   26.763893] BUG: sleeping function called from invalid context at mm/slab.h:421
    [   26.771425] in_atomic(): 1, irqs_disabled(): 0, pid: 1658, name: sh
    [   26.777855] INFO: lockdep is turned off.
    [   26.781916] CPU: 0 PID: 1658 Comm: sh Not tainted 5.0.0-rc4 #20
    [   26.787943] Hardware name: BCM97278SV (DT)
    [   26.792118] Call trace:
    [   26.794645]  dump_backtrace+0x0/0x170
    [   26.798391]  show_stack+0x24/0x30
    [   26.801787]  dump_stack+0xa4/0xe4
    [   26.805182]  ___might_sleep+0x208/0x218
    [   26.809102]  __might_sleep+0x78/0x88
    [   26.812762]  kmem_cache_alloc_trace+0x64/0x28c
    [   26.817301]  igmp_group_dropped+0x150/0x230
    [   26.821573]  ip_mc_dec_group+0x1b0/0x1f8
    [   26.825585]  br_ip4_multicast_leave_snoopers.isra.11+0x174/0x190
    [   26.831704]  br_multicast_toggle+0x78/0xcc
    [   26.835887]  store_bridge_parm+0xc4/0xfc
    [   26.839894]  multicast_snooping_store+0x3c/0x4c
    [   26.844517]  dev_attr_store+0x44/0x5c
    [   26.848262]  sysfs_kf_write+0x50/0x68
    [   26.852006]  kernfs_fop_write+0x14c/0x1b4
    [   26.856102]  __vfs_write+0x60/0x190
    [   26.859668]  vfs_write+0xc8/0x168
    [   26.863059]  ksys_write+0x70/0xc8
    [   26.866449]  __arm64_sys_write+0x24/0x30
    [   26.870458]  el0_svc_common+0xa0/0x11c
    [   26.874291]  el0_svc_handler+0x38/0x70
    [   26.878120]  el0_svc+0x8/0xc
    
    while toggling the bridge's multicast_snooping attribute dynamically.
    
    Pass a gfp_t down to igmpv3_add_delrec(), introduce
    __igmp_group_dropped() and introduce __ip_mc_dec_group() to take a gfp_t
    argument.
    
    Similarly introduce ____ip_mc_inc_group() and __ip_mc_inc_group() to
    allow caller to specify gfp_t.
    
    IPv6 part of the patch appears fine.
    
    Fixes: 4effd28c ("bridge: join all-snoopers multicast address")
    Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9fb20801
br_multicast.c 60 KB