• Rusty Russell's avatar
    module: fix race in kallsyms resolution during module load success. · c7496379
    Rusty Russell authored
    The kallsyms routines (module_symbol_name, lookup_module_* etc) disable
    preemption to walk the modules rather than taking the module_mutex:
    this is because they are used for symbol resolution during oopses.
    
    This works because there are synchronize_sched() and synchronize_rcu()
    in the unload and failure paths.  However, there's one case which doesn't
    have that: the normal case where module loading succeeds, and we free
    the init section.
    
    We don't want a synchronize_rcu() there, because it would slow down
    module loading: this bug was introduced in 2009 to speed module
    loading in the first place.
    
    Thus, we want to do the free in an RCU callback.  We do this in the
    simplest possible way by allocating a new rcu_head: if we put it in
    the module structure we'd have to worry about that getting freed.
    Reported-by: default avatarRui Xiang <rui.xiang@huawei.com>
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    c7496379
module.c 97.4 KB