Skip to content
Snippets Groups Projects
Commit 5ed44a40 authored by Herbert van den Bergh's avatar Herbert van den Bergh Committed by Linus Torvalds
Browse files

do not limit locked memory when RLIMIT_MEMLOCK is RLIM_INFINITY


Fix a bug in mm/mlock.c on 32-bit architectures that prevents a user from
locking more than 4GB of shared memory, or allocating more than 4GB of
shared memory in hugepages, when rlim[RLIMIT_MEMLOCK] is set to
RLIM_INFINITY.

Signed-off-by: default avatarHerbert van den Bergh <herbert.van.den.bergh@oracle.com>
Acked-by: default avatarChris Mason <chris.mason@oracle.com>
Cc: <stable@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 84a01c2f
No related branches found
No related tags found
No related merge requests found
...@@ -244,9 +244,12 @@ int user_shm_lock(size_t size, struct user_struct *user) ...@@ -244,9 +244,12 @@ int user_shm_lock(size_t size, struct user_struct *user)
locked = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; locked = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur; lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur;
if (lock_limit == RLIM_INFINITY)
allowed = 1;
lock_limit >>= PAGE_SHIFT; lock_limit >>= PAGE_SHIFT;
spin_lock(&shmlock_user_lock); spin_lock(&shmlock_user_lock);
if (locked + user->locked_shm > lock_limit && !capable(CAP_IPC_LOCK)) if (!allowed &&
locked + user->locked_shm > lock_limit && !capable(CAP_IPC_LOCK))
goto out; goto out;
get_uid(user); get_uid(user);
user->locked_shm += locked; user->locked_shm += locked;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment