diff options
author | Kees Cook <kees@ubuntu.com> | 2012-01-26 19:29:23 -0500 |
---|---|---|
committer | John Johansen <john.johansen@canonical.com> | 2012-02-27 14:38:19 -0500 |
commit | d384b0a1a35f87f0ad70c29518f98f922b1c15cb (patch) | |
tree | 42560d316dffc636a424e7fa8173400723dcc4e7 | |
parent | a9bf8e9fd561ba9ff1f0f2a1d96e439fcedaaaa4 (diff) |
AppArmor: export known rlimit names/value mappings in securityfs
Since the parser needs to know which rlimits are known to the kernel,
export the list via a mask file in the "rlimit" subdirectory in the
securityfs "features" directory.
Signed-off-by: Kees Cook <kees@ubuntu.com>
Signed-off-by: John Johansen <john.johansen@canonical.com>
-rw-r--r-- | security/apparmor/Makefile | 24 | ||||
-rw-r--r-- | security/apparmor/apparmorfs.c | 2 | ||||
-rw-r--r-- | security/apparmor/include/resource.h | 4 | ||||
-rw-r--r-- | security/apparmor/resource.c | 5 |
4 files changed, 29 insertions, 6 deletions
diff --git a/security/apparmor/Makefile b/security/apparmor/Makefile index 2dafe50a2e25..86103ce5b7a7 100644 --- a/security/apparmor/Makefile +++ b/security/apparmor/Makefile | |||
@@ -28,25 +28,37 @@ cmd_make-caps = echo "static const char *capability_names[] = {" > $@ ;\ | |||
28 | # [RLIMIT_STACK] = "stack", | 28 | # [RLIMIT_STACK] = "stack", |
29 | # | 29 | # |
30 | # and build a second integer table (with the second sed cmd), that maps | 30 | # and build a second integer table (with the second sed cmd), that maps |
31 | # RLIMIT defines to the order defined in asm-generic/resource.h Thi is | 31 | # RLIMIT defines to the order defined in asm-generic/resource.h This is |
32 | # required by policy load to map policy ordering of RLIMITs to internal | 32 | # required by policy load to map policy ordering of RLIMITs to internal |
33 | # ordering for architectures that redefine an RLIMIT. | 33 | # ordering for architectures that redefine an RLIMIT. |
34 | # Transforms lines from | 34 | # Transforms lines from |
35 | # #define RLIMIT_STACK 3 /* max stack size */ | 35 | # #define RLIMIT_STACK 3 /* max stack size */ |
36 | # to | 36 | # to |
37 | # RLIMIT_STACK, | 37 | # RLIMIT_STACK, |
38 | # | ||
39 | # and build the securityfs entries for the mapping. | ||
40 | # Transforms lines from | ||
41 | # #define RLIMIT_FSIZE 1 /* Maximum filesize */ | ||
42 | # #define RLIMIT_STACK 3 /* max stack size */ | ||
43 | # to | ||
44 | # #define AA_FS_RLIMIT_MASK "fsize stack" | ||
38 | quiet_cmd_make-rlim = GEN $@ | 45 | quiet_cmd_make-rlim = GEN $@ |
39 | cmd_make-rlim = echo "static const char *rlim_names[] = {" > $@ ;\ | 46 | cmd_make-rlim = echo "static const char *rlim_names[RLIM_NLIMITS] = {" > $@ ;\ |
40 | sed $< >> $@ -r -n \ | 47 | sed $< >> $@ -r -n \ |
41 | -e 's/^\# ?define[ \t]+(RLIMIT_([A-Z0-9_]+)).*/[\1] = "\L\2",/p';\ | 48 | -e 's/^\# ?define[ \t]+(RLIMIT_([A-Z0-9_]+)).*/[\1] = "\L\2",/p';\ |
42 | echo "};" >> $@ ;\ | 49 | echo "};" >> $@ ;\ |
43 | echo "static const int rlim_map[] = {" >> $@ ;\ | 50 | echo "static const int rlim_map[RLIM_NLIMITS] = {" >> $@ ;\ |
44 | sed -r -n "s/^\# ?define[ \t]+(RLIMIT_[A-Z0-9_]+).*/\1,/p" $< >> $@ ;\ | 51 | sed -r -n "s/^\# ?define[ \t]+(RLIMIT_[A-Z0-9_]+).*/\1,/p" $< >> $@ ;\ |
45 | echo "};" >> $@ | 52 | echo "};" >> $@ ; \ |
53 | echo -n '\#define AA_FS_RLIMIT_MASK "' >> $@ ;\ | ||
54 | sed -r -n 's/^\# ?define[ \t]+RLIMIT_([A-Z0-9_]+).*/\L\1/p' $< | \ | ||
55 | tr '\n' ' ' | sed -e 's/ $$/"\n/' >> $@ | ||
46 | 56 | ||
47 | $(obj)/capability.o : $(obj)/capability_names.h | 57 | $(obj)/capability.o : $(obj)/capability_names.h |
48 | $(obj)/resource.o : $(obj)/rlim_names.h | 58 | $(obj)/resource.o : $(obj)/rlim_names.h |
49 | $(obj)/capability_names.h : $(srctree)/include/linux/capability.h | 59 | $(obj)/capability_names.h : $(srctree)/include/linux/capability.h \ |
60 | $(src)/Makefile | ||
50 | $(call cmd,make-caps) | 61 | $(call cmd,make-caps) |
51 | $(obj)/rlim_names.h : $(srctree)/include/asm-generic/resource.h | 62 | $(obj)/rlim_names.h : $(srctree)/include/asm-generic/resource.h \ |
63 | $(src)/Makefile | ||
52 | $(call cmd,make-rlim) | 64 | $(call cmd,make-rlim) |
diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c index f9d0b5087bea..16c15ec6f670 100644 --- a/security/apparmor/apparmorfs.c +++ b/security/apparmor/apparmorfs.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include "include/audit.h" | 25 | #include "include/audit.h" |
26 | #include "include/context.h" | 26 | #include "include/context.h" |
27 | #include "include/policy.h" | 27 | #include "include/policy.h" |
28 | #include "include/resource.h" | ||
28 | 29 | ||
29 | /** | 30 | /** |
30 | * aa_simple_write_to_buffer - common routine for getting policy from user | 31 | * aa_simple_write_to_buffer - common routine for getting policy from user |
@@ -201,6 +202,7 @@ static struct aa_fs_entry aa_fs_entry_features[] = { | |||
201 | AA_FS_DIR("domain", aa_fs_entry_domain), | 202 | AA_FS_DIR("domain", aa_fs_entry_domain), |
202 | AA_FS_DIR("file", aa_fs_entry_file), | 203 | AA_FS_DIR("file", aa_fs_entry_file), |
203 | AA_FS_FILE_U64("capability", VFS_CAP_FLAGS_MASK), | 204 | AA_FS_FILE_U64("capability", VFS_CAP_FLAGS_MASK), |
205 | AA_FS_DIR("rlimit", aa_fs_entry_rlimit), | ||
204 | { } | 206 | { } |
205 | }; | 207 | }; |
206 | 208 | ||
diff --git a/security/apparmor/include/resource.h b/security/apparmor/include/resource.h index 02baec732bb5..d3f4cf027957 100644 --- a/security/apparmor/include/resource.h +++ b/security/apparmor/include/resource.h | |||
@@ -18,6 +18,8 @@ | |||
18 | #include <linux/resource.h> | 18 | #include <linux/resource.h> |
19 | #include <linux/sched.h> | 19 | #include <linux/sched.h> |
20 | 20 | ||
21 | #include "apparmorfs.h" | ||
22 | |||
21 | struct aa_profile; | 23 | struct aa_profile; |
22 | 24 | ||
23 | /* struct aa_rlimit - rlimit settings for the profile | 25 | /* struct aa_rlimit - rlimit settings for the profile |
@@ -32,6 +34,8 @@ struct aa_rlimit { | |||
32 | struct rlimit limits[RLIM_NLIMITS]; | 34 | struct rlimit limits[RLIM_NLIMITS]; |
33 | }; | 35 | }; |
34 | 36 | ||
37 | extern struct aa_fs_entry aa_fs_entry_rlimit[]; | ||
38 | |||
35 | int aa_map_resource(int resource); | 39 | int aa_map_resource(int resource); |
36 | int aa_task_setrlimit(struct aa_profile *profile, struct task_struct *, | 40 | int aa_task_setrlimit(struct aa_profile *profile, struct task_struct *, |
37 | unsigned int resource, struct rlimit *new_rlim); | 41 | unsigned int resource, struct rlimit *new_rlim); |
diff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index a4136c10b1c6..72c25a4f2cfd 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c | |||
@@ -23,6 +23,11 @@ | |||
23 | */ | 23 | */ |
24 | #include "rlim_names.h" | 24 | #include "rlim_names.h" |
25 | 25 | ||
26 | struct aa_fs_entry aa_fs_entry_rlimit[] = { | ||
27 | AA_FS_FILE_STRING("mask", AA_FS_RLIMIT_MASK), | ||
28 | { } | ||
29 | }; | ||
30 | |||
26 | /* audit callback for resource specific fields */ | 31 | /* audit callback for resource specific fields */ |
27 | static void audit_cb(struct audit_buffer *ab, void *va) | 32 | static void audit_cb(struct audit_buffer *ab, void *va) |
28 | { | 33 | { |