| From stable-bounces@linux.kernel.org Sun Jul 15 23:49:08 2007 |
| From: Herbert van den Bergh <Herbert.van.den.Bergh@oracle.com> |
| Date: Sun, 15 Jul 2007 23:38:25 -0700 |
| Subject: do not limit locked memory when RLIMIT_MEMLOCK is RLIM_INFINITY |
| To: torvalds@linux-foundation.org |
| Cc: Herbert.van.den.Bergh@oracle.com, akpm@linux-foundation.org, stable@kernel.org, chris.mason@oracle.com, herbert.van.den.bergh@oracle.com |
| Message-ID: <200707160638.l6G6cP6N014235@imap1.linux-foundation.org> |
| |
| |
| From: Herbert van den Bergh <Herbert.van.den.Bergh@oracle.com> |
| |
| 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: Herbert van den Bergh <herbert.van.den.bergh@oracle.com> |
| Acked-by: Chris Mason <chris.mason@oracle.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| mm/mlock.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/mm/mlock.c |
| +++ b/mm/mlock.c |
| @@ -244,9 +244,12 @@ int user_shm_lock(size_t size, struct us |
| |
| locked = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; |
| lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur; |
| + if (lock_limit == RLIM_INFINITY) |
| + allowed = 1; |
| lock_limit >>= PAGE_SHIFT; |
| 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; |
| get_uid(user); |
| user->locked_shm += locked; |