lkml.org 
[lkml]   [2021]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 13/16] mm: bool user_shm_lock(loff_t size, struct ucounts *)
    user_shm_lock()'s size_t size was big enough for SysV SHM locking, but
    not quite big enough for O_LARGEFILE on 32-bit: change to loff_t size.
    And while changing the prototype, let's use bool rather than int here.

    Signed-off-by: Hugh Dickins <hughd@google.com>
    ---
    include/linux/mm.h | 4 ++--
    mm/mlock.c | 14 +++++++-------
    2 files changed, 9 insertions(+), 9 deletions(-)

    diff --git a/include/linux/mm.h b/include/linux/mm.h
    index 7ca22e6e694a..f1be2221512b 100644
    --- a/include/linux/mm.h
    +++ b/include/linux/mm.h
    @@ -1713,8 +1713,8 @@ extern bool can_do_mlock(void);
    #else
    static inline bool can_do_mlock(void) { return false; }
    #endif
    -extern int user_shm_lock(size_t, struct ucounts *);
    -extern void user_shm_unlock(size_t, struct ucounts *);
    +extern bool user_shm_lock(loff_t size, struct ucounts *ucounts);
    +extern void user_shm_unlock(loff_t size, struct ucounts *ucounts);

    /*
    * Parameter block passed down to zap_pte_range in exceptional cases.
    diff --git a/mm/mlock.c b/mm/mlock.c
    index 16d2ee160d43..7df88fce0fc9 100644
    --- a/mm/mlock.c
    +++ b/mm/mlock.c
    @@ -813,21 +813,21 @@ SYSCALL_DEFINE0(munlockall)
    }

    /*
    - * Objects with different lifetime than processes (SHM_LOCK and SHM_HUGETLB
    - * shm segments) get accounted against the user_struct instead.
    + * Objects with different lifetime than processes (SHM_LOCK and SHM_HUGETLB shm
    + * segments and F_MEM_LOCK tmpfs) get accounted to the user_namespace instead.
    */
    static DEFINE_SPINLOCK(shmlock_user_lock);

    -int user_shm_lock(size_t size, struct ucounts *ucounts)
    +bool user_shm_lock(loff_t size, struct ucounts *ucounts)
    {
    unsigned long lock_limit, locked;
    long memlock;
    - int allowed = 0;
    + bool allowed = false;

    locked = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
    lock_limit = rlimit(RLIMIT_MEMLOCK);
    if (lock_limit == RLIM_INFINITY)
    - allowed = 1;
    + allowed = true;
    lock_limit >>= PAGE_SHIFT;
    spin_lock(&shmlock_user_lock);
    memlock = inc_rlimit_ucounts(ucounts, UCOUNT_RLIMIT_MEMLOCK, locked);
    @@ -840,13 +840,13 @@ int user_shm_lock(size_t size, struct ucounts *ucounts)
    dec_rlimit_ucounts(ucounts, UCOUNT_RLIMIT_MEMLOCK, locked);
    goto out;
    }
    - allowed = 1;
    + allowed = true;
    out:
    spin_unlock(&shmlock_user_lock);
    return allowed;
    }

    -void user_shm_unlock(size_t size, struct ucounts *ucounts)
    +void user_shm_unlock(loff_t size, struct ucounts *ucounts)
    {
    spin_lock(&shmlock_user_lock);
    dec_rlimit_ucounts(ucounts, UCOUNT_RLIMIT_MEMLOCK, (size + PAGE_SIZE - 1) >> PAGE_SHIFT);
    --
    2.26.2
    \
     
     \ /
      Last update: 2021-07-30 10:04    [W:3.963 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site