lkml.org 
[lkml]   [2020]   [Feb]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 351/367] perf/core: Fix mlock accounting in perf_mmap()
    Date
    From: Song Liu <songliubraving@fb.com>

    commit 003461559ef7a9bd0239bae35a22ad8924d6e9ad upstream.

    Decreasing sysctl_perf_event_mlock between two consecutive perf_mmap()s of
    a perf ring buffer may lead to an integer underflow in locked memory
    accounting. This may lead to the undesired behaviors, such as failures in
    BPF map creation.

    Address this by adjusting the accounting logic to take into account the
    possibility that the amount of already locked memory may exceed the
    current limit.

    Fixes: c4b75479741c ("perf/core: Make the mlock accounting simple again")
    Suggested-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Signed-off-by: Song Liu <songliubraving@fb.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: <stable@vger.kernel.org>
    Acked-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Link: https://lkml.kernel.org/r/20200123181146.2238074-1-songliubraving@fb.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    kernel/events/core.c | 10 +++++++++-
    1 file changed, 9 insertions(+), 1 deletion(-)

    --- a/kernel/events/core.c
    +++ b/kernel/events/core.c
    @@ -5916,7 +5916,15 @@ accounting:
    */
    user_lock_limit *= num_online_cpus();

    - user_locked = atomic_long_read(&user->locked_vm) + user_extra;
    + user_locked = atomic_long_read(&user->locked_vm);
    +
    + /*
    + * sysctl_perf_event_mlock may have changed, so that
    + * user->locked_vm > user_lock_limit
    + */
    + if (user_locked > user_lock_limit)
    + user_locked = user_lock_limit;
    + user_locked += user_extra;

    if (user_locked > user_lock_limit) {
    /*

    \
     
     \ /
      Last update: 2020-02-10 13:48    [W:4.019 / U:0.960 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site