diff options
| author | William Lee Irwin III <wli@holomorphy.com> | 2004-08-23 21:28:18 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-08-23 21:28:18 -0700 |
| commit | b60e5e711ad490216cc39f0cdfac91a789d85694 (patch) | |
| tree | 5f5b6d17eafaf71f697aab83e61525a8904d9d02 | |
| parent | 93ff334616e5c841afdfc795362b03a7b4ec664c (diff) | |
[PATCH] hugetlb: permit executable mappings
During the kernel summit, some discussion was had about the support
requirements for a userspace program loader that loads executables into
hugetlb on behalf of a major application (Oracle). In order to support
this in a robust fashion, the cleanup of the hugetlb must be robust in the
presence of disorderly termination of the programs (e.g. kill -9). Hence,
the cleanup semantics are those of System V shared memory, but Linux'
System V shared memory needs one critical extension for this use:
executability.
The following microscopic patch enables this major application to provide
robust hugetlb cleanup.
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | include/linux/shm.h | 1 | ||||
| -rw-r--r-- | ipc/shm.c | 4 |
2 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/shm.h b/include/linux/shm.h index 1907355c0eb1..80113a1f60bc 100644 --- a/include/linux/shm.h +++ b/include/linux/shm.h @@ -44,6 +44,7 @@ struct shmid_ds { #define SHM_RDONLY 010000 /* read-only access */ #define SHM_RND 020000 /* round attach address to SHMLBA boundary */ #define SHM_REMAP 040000 /* take-over region on attach */ +#define SHM_EXEC 0100000 /* execution access */ /* super user shmctl commands */ #define SHM_LOCK 11 diff --git a/ipc/shm.c b/ipc/shm.c index 31a925745c25..530fb1f6ae1d 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -688,6 +688,10 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr) o_flags = O_RDWR; acc_mode = S_IRUGO | S_IWUGO; } + if (shmflg & SHM_EXEC) { + prot |= PROT_EXEC; + acc_mode |= S_IXUGO; + } /* * We cannot rely on the fs check since SYSV IPC does have an |
