Commit f947ff8a authored by Rik van Riel's avatar Rik van Riel Committed by Linus Torvalds

[PATCH] increase per-user mlock limit default to 32k

Since various gnupg users have indicated that gpg wants to mlock 32kB of
memory, I created the patch below that increases the default mlock ulimit
to 32kB.

This is no security problem because it's trivial for processes to lock way
more memory than this in page tables, network buffers, etc.  In fact, since
this patch allows gnupg to mlock to prevent passphrase data from being
swapped out, the security people will probably like it ;)

This gets the new per-user mlock limit a bit more testing, too.
Signed-off-by: default avatarRik van Riel <riel@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 16698c49
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
{INR_OPEN, INR_OPEN}, /* RLIMIT_NOFILE */ \ {INR_OPEN, INR_OPEN}, /* RLIMIT_NOFILE */ \
{LONG_MAX, LONG_MAX}, /* RLIMIT_AS */ \ {LONG_MAX, LONG_MAX}, /* RLIMIT_AS */ \
{LONG_MAX, LONG_MAX}, /* RLIMIT_NPROC */ \ {LONG_MAX, LONG_MAX}, /* RLIMIT_NPROC */ \
{0, 0 }, /* RLIMIT_MEMLOCK */ \ {MLOCK_LIMIT, MLOCK_LIMIT }, /* RLIMIT_MEMLOCK */ \
{LONG_MAX, LONG_MAX}, /* RLIMIT_LOCKS */ \ {LONG_MAX, LONG_MAX}, /* RLIMIT_LOCKS */ \
{MAX_SIGPENDING, MAX_SIGPENDING}, /* RLIMIT_SIGPENDING */ \ {MAX_SIGPENDING, MAX_SIGPENDING}, /* RLIMIT_SIGPENDING */ \
{MQ_BYTES_MAX, MQ_BYTES_MAX}, /* RLIMIT_MSGQUEUE */ \ {MQ_BYTES_MAX, MQ_BYTES_MAX}, /* RLIMIT_MSGQUEUE */ \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING}, \ { MAX_SIGPENDING, MAX_SIGPENDING}, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING}, \ { MAX_SIGPENDING, MAX_SIGPENDING}, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
{ 0, RLIM_INFINITY}, \ { 0, RLIM_INFINITY}, \
{RLIM_INFINITY, RLIM_INFINITY}, \ {RLIM_INFINITY, RLIM_INFINITY}, \
{INR_OPEN, INR_OPEN}, {0, 0}, \ {INR_OPEN, INR_OPEN}, {0, 0}, \
{0, 0}, \ {MLOCK_LIMIT, MLOCK_LIMIT}, \
{RLIM_INFINITY, RLIM_INFINITY}, \ {RLIM_INFINITY, RLIM_INFINITY}, \
{RLIM_INFINITY, RLIM_INFINITY}, \ {RLIM_INFINITY, RLIM_INFINITY}, \
{MAX_SIGPENDING, MAX_SIGPENDING}, \ {MAX_SIGPENDING, MAX_SIGPENDING}, \
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
{ 0, RLIM_INFINITY}, \ { 0, RLIM_INFINITY}, \
{RLIM_INFINITY, RLIM_INFINITY}, \ {RLIM_INFINITY, RLIM_INFINITY}, \
{INR_OPEN, INR_OPEN}, {0, 0}, \ {INR_OPEN, INR_OPEN}, {0, 0}, \
{0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT}, \
{RLIM_INFINITY, RLIM_INFINITY}, \ {RLIM_INFINITY, RLIM_INFINITY}, \
{RLIM_INFINITY, RLIM_INFINITY}, \ {RLIM_INFINITY, RLIM_INFINITY}, \
{MAX_SIGPENDING, MAX_SIGPENDING}, \ {MAX_SIGPENDING, MAX_SIGPENDING}, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ 0, 0 }, \ { 0, 0 }, \
{ INR_OPEN, INR_OPEN }, \ { INR_OPEN, INR_OPEN }, \
{ 0, 0 }, \ { MLOCK_LIMIT, MLOCK_LIMIT }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ RLIM_INFINITY, RLIM_INFINITY }, \ { RLIM_INFINITY, RLIM_INFINITY }, \
{ MAX_SIGPENDING, MAX_SIGPENDING }, \ { MAX_SIGPENDING, MAX_SIGPENDING }, \
......
...@@ -55,6 +55,12 @@ struct rlimit { ...@@ -55,6 +55,12 @@ struct rlimit {
*/ */
#define _STK_LIM (8*1024*1024) #define _STK_LIM (8*1024*1024)
/*
* GPG wants 32kB of mlocked memory, to make sure pass phrases
* and other sensitive information are never written to disk.
*/
#define MLOCK_LIMIT (32*1024)
/* /*
* Due to binary compatibility, the actual resource numbers * Due to binary compatibility, the actual resource numbers
* may be different for different linux versions.. * may be different for different linux versions..
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment