|
@@ -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;
|