lkml.org 
[lkml]   [2023]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH rcu 16/20] srcu: Check for readers at module-exit time
    Date
    If a given statically allocated in-module srcu_struct structure was ever
    used for updates, srcu_module_going() will invoke cleanup_srcu_struct()
    at module-exit time. This will check for the error case of SRCU readers
    persisting past module-exit time. On the other hand, if this srcu_struct
    structure never went through a grace period, srcu_module_going() only
    invokes free_percpu(), which would result in strange failures if SRCU
    readers persisted past module-exit time.

    This commit therefore adds a srcu_readers_active() check to
    srcu_module_going(), splatting if readers have persisted and refraining
    from invoking free_percpu() in that case. Better to leak memory than
    to suffer silent memory corruption!

    [ paulmck: Apply Zhang, Qiang1 feedback on memory leak. ]

    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    ---
    kernel/rcu/srcutree.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
    index 169a6513b739..f9dd6ed5503e 100644
    --- a/kernel/rcu/srcutree.c
    +++ b/kernel/rcu/srcutree.c
    @@ -1911,7 +1911,8 @@ static void srcu_module_going(struct module *mod)
    if (!rcu_seq_state(smp_load_acquire(&ssp->srcu_sup->srcu_gp_seq_needed)) &&
    !WARN_ON_ONCE(!ssp->srcu_sup->sda_is_static))
    cleanup_srcu_struct(ssp);
    - free_percpu(ssp->sda);
    + if (!WARN_ON(srcu_readers_active(ssp)))
    + free_percpu(ssp->sda);
    }
    }

    --
    2.40.0.rc2
    \
     
     \ /
      Last update: 2023-03-31 00:51    [W:4.122 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site