• David Woodhouse's avatar
    caif: Fix BUG() with network namespaces · 08613e46
    David Woodhouse authored
    The caif code will register its own pernet_operations, and then register
    a netdevice_notifier. Each time the netdevice_notifier is triggered,
    it'll do some stuff... including a lookup of its own pernet stuff with
    net_generic().
    
    If the net_generic() call ever returns NULL, the caif code will BUG().
    That doesn't seem *so* unreasonable, I suppose — it does seem like it
    should never happen.
    
    However, it *does* happen. When we clone a network namespace,
    setup_net() runs through all the pernet_operations one at a time. It
    gets to loopback before it gets to caif. And loopback_net_init()
    registers a netdevice... while caif hasn't been initialised. So the caif
    netdevice notifier triggers, and immediately goes BUG().
    
    We could imagine a complex and overengineered solution to this generic
    class of problems, but this patch takes the simple approach. It just
    makes caif_device_notify() *not* go looking for its pernet data
    structures if the device it's being notified about isn't a caif device
    in the first place.
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
    Acked-by: default avatarSjur Brændeland <sjur.brandeland@stericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    08613e46
caif_dev.c 9.42 KB