forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Security/SELinux: seperate lsm specific mmap_min_addr
Currently SELinux enforcement of controls on the ability to map low memory is determined by the mmap_min_addr tunable. This patch causes SELinux to ignore the tunable and instead use a seperate Kconfig option specific to how much space the LSM should protect. The tunable will now only control the need for CAP_SYS_RAWIO and SELinux permissions will always protect the amount of low memory designated by CONFIG_LSM_MMAP_MIN_ADDR. This allows users who need to disable the mmap_min_addr controls (usual reason being they run WINE as a non-root user) to do so and still have SELinux controls preventing confined domains (like a web server) from being able to map some area of low memory. Signed-off-by: Eric Paris <[email protected]> Signed-off-by: James Morris <[email protected]>
- Loading branch information
Showing
11 changed files
with
92 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#include <linux/init.h> | ||
#include <linux/mm.h> | ||
#include <linux/security.h> | ||
#include <linux/sysctl.h> | ||
|
||
/* amount of vm to protect from userspace access by both DAC and the LSM*/ | ||
unsigned long mmap_min_addr; | ||
/* amount of vm to protect from userspace using CAP_SYS_RAWIO (DAC) */ | ||
unsigned long dac_mmap_min_addr = CONFIG_DEFAULT_MMAP_MIN_ADDR; | ||
/* amount of vm to protect from userspace using the LSM = CONFIG_LSM_MMAP_MIN_ADDR */ | ||
|
||
/* | ||
* Update mmap_min_addr = max(dac_mmap_min_addr, CONFIG_LSM_MMAP_MIN_ADDR) | ||
*/ | ||
static void update_mmap_min_addr(void) | ||
{ | ||
#ifdef CONFIG_LSM_MMAP_MIN_ADDR | ||
if (dac_mmap_min_addr > CONFIG_LSM_MMAP_MIN_ADDR) | ||
mmap_min_addr = dac_mmap_min_addr; | ||
else | ||
mmap_min_addr = CONFIG_LSM_MMAP_MIN_ADDR; | ||
#else | ||
mmap_min_addr = dac_mmap_min_addr; | ||
#endif | ||
} | ||
|
||
/* | ||
* sysctl handler which just sets dac_mmap_min_addr = the new value and then | ||
* calls update_mmap_min_addr() so non MAP_FIXED hints get rounded properly | ||
*/ | ||
int mmap_min_addr_handler(struct ctl_table *table, int write, struct file *filp, | ||
void __user *buffer, size_t *lenp, loff_t *ppos) | ||
{ | ||
int ret; | ||
|
||
ret = proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos); | ||
|
||
update_mmap_min_addr(); | ||
|
||
return ret; | ||
} | ||
|
||
int __init init_mmap_min_addr(void) | ||
{ | ||
update_mmap_min_addr(); | ||
|
||
return 0; | ||
} | ||
pure_initcall(init_mmap_min_addr); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters