aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--security/Kconfig18
-rw-r--r--security/security.c4
-rw-r--r--security/selinux/include/security.h1
-rw-r--r--security/selinux/ss/services.c33
4 files changed, 21 insertions, 35 deletions
diff --git a/security/Kconfig b/security/Kconfig
index 25ffe1b9dc98..5dfc206748cf 100644
--- a/security/Kconfig
+++ b/security/Kconfig
@@ -104,6 +104,24 @@ config SECURITY_ROOTPLUG
104 104
105 If you are unsure how to answer this question, answer N. 105 If you are unsure how to answer this question, answer N.
106 106
107config SECURITY_DEFAULT_MMAP_MIN_ADDR
108 int "Low address space to protect from user allocation"
109 depends on SECURITY
110 default 0
111 help
112 This is the portion of low virtual memory which should be protected
113 from userspace allocation. Keeping a user from writing to low pages
114 can help reduce the impact of kernel NULL pointer bugs.
115
116 For most users with lots of address space a value of 65536 is
117 reasonable and should cause no problems. Programs which use vm86
118 functionality would either need additional permissions from either
119 the LSM or the capabilities module or have this protection disabled.
120
121 This value can be changed after boot using the
122 /proc/sys/vm/mmap_min_addr tunable.
123
124
107source security/selinux/Kconfig 125source security/selinux/Kconfig
108source security/smack/Kconfig 126source security/smack/Kconfig
109 127
diff --git a/security/security.c b/security/security.c
index b6c57a6b2ff5..d15e56cbaade 100644
--- a/security/security.c
+++ b/security/security.c
@@ -23,7 +23,9 @@ extern struct security_operations dummy_security_ops;
23extern void security_fixup_ops(struct security_operations *ops); 23extern void security_fixup_ops(struct security_operations *ops);
24 24
25struct security_operations *security_ops; /* Initialized to NULL */ 25struct security_operations *security_ops; /* Initialized to NULL */
26unsigned long mmap_min_addr; /* 0 means no protection */ 26
27/* amount of vm to protect from userspace access */
28unsigned long mmap_min_addr = CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR;
27 29
28static inline int verify(struct security_operations *ops) 30static inline int verify(struct security_operations *ops)
29{ 31{
diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h
index 23137c17f917..837ce420d2f6 100644
--- a/security/selinux/include/security.h
+++ b/security/selinux/include/security.h
@@ -107,7 +107,6 @@ int security_get_classes(char ***classes, int *nclasses);
107int security_get_permissions(char *class, char ***perms, int *nperms); 107int security_get_permissions(char *class, char ***perms, int *nperms);
108int security_get_reject_unknown(void); 108int security_get_reject_unknown(void);
109int security_get_allow_unknown(void); 109int security_get_allow_unknown(void);
110int security_get_policycaps(int *len, int **values);
111 110
112#define SECURITY_FS_USE_XATTR 1 /* use xattr */ 111#define SECURITY_FS_USE_XATTR 1 /* use xattr */
113#define SECURITY_FS_USE_TRANS 2 /* use transition SIDs, e.g. devpts/tmpfs */ 112#define SECURITY_FS_USE_TRANS 2 /* use transition SIDs, e.g. devpts/tmpfs */
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index fced6bccee76..f37418601215 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -2246,39 +2246,6 @@ int security_get_allow_unknown(void)
2246} 2246}
2247 2247
2248/** 2248/**
2249 * security_get_policycaps - Query the loaded policy for its capabilities
2250 * @len: the number of capability bits
2251 * @values: the capability bit array
2252 *
2253 * Description:
2254 * Get an array of the policy capabilities in @values where each entry in
2255 * @values is either true (1) or false (0) depending the policy's support of
2256 * that feature. The policy capabilities are defined by the
2257 * POLICYDB_CAPABILITY_* enums. The size of the array is stored in @len and it
2258 * is up to the caller to free the array in @values. Returns zero on success,
2259 * negative values on failure.
2260 *
2261 */
2262int security_get_policycaps(int *len, int **values)
2263{
2264 int rc = -ENOMEM;
2265 unsigned int iter;
2266
2267 POLICY_RDLOCK;
2268
2269 *values = kcalloc(POLICYDB_CAPABILITY_MAX, sizeof(int), GFP_ATOMIC);
2270 if (*values == NULL)
2271 goto out;
2272 for (iter = 0; iter < POLICYDB_CAPABILITY_MAX; iter++)
2273 (*values)[iter] = ebitmap_get_bit(&policydb.policycaps, iter);
2274 *len = POLICYDB_CAPABILITY_MAX;
2275
2276out:
2277 POLICY_RDUNLOCK;
2278 return rc;
2279}
2280
2281/**
2282 * security_policycap_supported - Check for a specific policy capability 2249 * security_policycap_supported - Check for a specific policy capability
2283 * @req_cap: capability 2250 * @req_cap: capability
2284 * 2251 *