diff options
| author | Eric Paris <eparis@redhat.com> | 2011-05-26 17:20:14 -0400 |
|---|---|---|
| committer | Eric Paris <eparis@redhat.com> | 2011-05-26 17:20:14 -0400 |
| commit | ea77f7a2e8561012cf100c530170f12351c3b53e (patch) | |
| tree | 7302ac1064f4e364aadda84020a176804fb86e22 /security | |
| parent | 7a627e3b9a2bd0f06945bbe64bcf403e788ecf6e (diff) | |
| parent | 61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf (diff) | |
Merge commit 'v2.6.39' into 20110526
Conflicts:
lib/flex_array.c
security/selinux/avc.c
security/selinux/hooks.c
security/selinux/ss/policydb.c
security/smack/smack_lsm.c
Diffstat (limited to 'security')
| -rw-r--r-- | security/apparmor/Makefile | 38 | ||||
| -rw-r--r-- | security/apparmor/lsm.c | 7 | ||||
| -rw-r--r-- | security/apparmor/match.c | 2 | ||||
| -rw-r--r-- | security/apparmor/policy_unpack.c | 2 | ||||
| -rw-r--r-- | security/capability.c | 2 | ||||
| -rw-r--r-- | security/commoncap.c | 83 | ||||
| -rw-r--r-- | security/security.c | 25 | ||||
| -rw-r--r-- | security/selinux/hooks.c | 23 | ||||
| -rw-r--r-- | security/selinux/include/xfrm.h | 2 | ||||
| -rw-r--r-- | security/selinux/netlabel.c | 2 | ||||
| -rw-r--r-- | security/selinux/ss/services.c | 4 | ||||
| -rw-r--r-- | security/selinux/xfrm.c | 6 | ||||
| -rw-r--r-- | security/smack/smack_access.c | 2 | ||||
| -rw-r--r-- | security/smack/smack_lsm.c | 6 | ||||
| -rw-r--r-- | security/smack/smackfs.c | 6 | ||||
| -rw-r--r-- | security/tomoyo/load_policy.c | 2 |
16 files changed, 148 insertions, 64 deletions
diff --git a/security/apparmor/Makefile b/security/apparmor/Makefile index f204869399e..2dafe50a2e2 100644 --- a/security/apparmor/Makefile +++ b/security/apparmor/Makefile | |||
| @@ -6,19 +6,47 @@ apparmor-y := apparmorfs.o audit.o capability.o context.o ipc.o lib.o match.o \ | |||
| 6 | path.o domain.o policy.o policy_unpack.o procattr.o lsm.o \ | 6 | path.o domain.o policy.o policy_unpack.o procattr.o lsm.o \ |
| 7 | resource.o sid.o file.o | 7 | resource.o sid.o file.o |
| 8 | 8 | ||
| 9 | clean-files: capability_names.h af_names.h | 9 | clean-files := capability_names.h rlim_names.h |
| 10 | 10 | ||
| 11 | |||
| 12 | # Build a lower case string table of capability names | ||
| 13 | # Transforms lines from | ||
| 14 | # #define CAP_DAC_OVERRIDE 1 | ||
| 15 | # to | ||
| 16 | # [1] = "dac_override", | ||
| 11 | quiet_cmd_make-caps = GEN $@ | 17 | quiet_cmd_make-caps = GEN $@ |
| 12 | cmd_make-caps = echo "static const char *capability_names[] = {" > $@ ; sed -n -e "/CAP_FS_MASK/d" -e "s/^\#define[ \\t]\\+CAP_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9]\\+\\)\$$/[\\2] = \"\\1\",/p" $< | tr A-Z a-z >> $@ ; echo "};" >> $@ | 18 | cmd_make-caps = echo "static const char *capability_names[] = {" > $@ ;\ |
| 19 | sed $< >>$@ -r -n -e '/CAP_FS_MASK/d' \ | ||
| 20 | -e 's/^\#define[ \t]+CAP_([A-Z0-9_]+)[ \t]+([0-9]+)/[\2] = "\L\1",/p';\ | ||
| 21 | echo "};" >> $@ | ||
| 22 | |||
| 13 | 23 | ||
| 24 | # Build a lower case string table of rlimit names. | ||
| 25 | # Transforms lines from | ||
| 26 | # #define RLIMIT_STACK 3 /* max stack size */ | ||
| 27 | # to | ||
| 28 | # [RLIMIT_STACK] = "stack", | ||
| 29 | # | ||
| 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 | ||
| 32 | # required by policy load to map policy ordering of RLIMITs to internal | ||
| 33 | # ordering for architectures that redefine an RLIMIT. | ||
| 34 | # Transforms lines from | ||
| 35 | # #define RLIMIT_STACK 3 /* max stack size */ | ||
| 36 | # to | ||
| 37 | # RLIMIT_STACK, | ||
| 14 | quiet_cmd_make-rlim = GEN $@ | 38 | quiet_cmd_make-rlim = GEN $@ |
| 15 | cmd_make-rlim = echo "static const char *rlim_names[] = {" > $@ ; sed -n --e "/AF_MAX/d" -e "s/^\# \\?define[ \\t]\\+RLIMIT_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9]\\+\\)\\(.*\\)\$$/[\\2] = \"\\1\",/p" $< | tr A-Z a-z >> $@ ; echo "};" >> $@ ; echo "static const int rlim_map[] = {" >> $@ ; sed -n -e "/AF_MAX/d" -e "s/^\# \\?define[ \\t]\\+\\(RLIMIT_[A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9]\\+\\)\\(.*\\)\$$/\\1,/p" $< >> $@ ; echo "};" >> $@ | 39 | cmd_make-rlim = echo "static const char *rlim_names[] = {" > $@ ;\ |
| 40 | sed $< >> $@ -r -n \ | ||
| 41 | -e 's/^\# ?define[ \t]+(RLIMIT_([A-Z0-9_]+)).*/[\1] = "\L\2",/p';\ | ||
| 42 | echo "};" >> $@ ;\ | ||
| 43 | echo "static const int rlim_map[] = {" >> $@ ;\ | ||
| 44 | sed -r -n "s/^\# ?define[ \t]+(RLIMIT_[A-Z0-9_]+).*/\1,/p" $< >> $@ ;\ | ||
| 45 | echo "};" >> $@ | ||
| 16 | 46 | ||
| 17 | $(obj)/capability.o : $(obj)/capability_names.h | 47 | $(obj)/capability.o : $(obj)/capability_names.h |
| 18 | $(obj)/resource.o : $(obj)/rlim_names.h | 48 | $(obj)/resource.o : $(obj)/rlim_names.h |
| 19 | $(obj)/capability_names.h : $(srctree)/include/linux/capability.h | 49 | $(obj)/capability_names.h : $(srctree)/include/linux/capability.h |
| 20 | $(call cmd,make-caps) | 50 | $(call cmd,make-caps) |
| 21 | $(obj)/af_names.h : $(srctree)/include/linux/socket.h | ||
| 22 | $(call cmd,make-af) | ||
| 23 | $(obj)/rlim_names.h : $(srctree)/include/asm-generic/resource.h | 51 | $(obj)/rlim_names.h : $(srctree)/include/asm-generic/resource.h |
| 24 | $(call cmd,make-rlim) | 52 | $(call cmd,make-rlim) |
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index b7106f192b7..ae3a698415e 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/ctype.h> | 22 | #include <linux/ctype.h> |
| 23 | #include <linux/sysctl.h> | 23 | #include <linux/sysctl.h> |
| 24 | #include <linux/audit.h> | 24 | #include <linux/audit.h> |
| 25 | #include <linux/user_namespace.h> | ||
| 25 | #include <net/sock.h> | 26 | #include <net/sock.h> |
| 26 | 27 | ||
| 27 | #include "include/apparmor.h" | 28 | #include "include/apparmor.h" |
| @@ -136,11 +137,11 @@ static int apparmor_capget(struct task_struct *target, kernel_cap_t *effective, | |||
| 136 | } | 137 | } |
| 137 | 138 | ||
| 138 | static int apparmor_capable(struct task_struct *task, const struct cred *cred, | 139 | static int apparmor_capable(struct task_struct *task, const struct cred *cred, |
| 139 | int cap, int audit) | 140 | struct user_namespace *ns, int cap, int audit) |
| 140 | { | 141 | { |
| 141 | struct aa_profile *profile; | 142 | struct aa_profile *profile; |
| 142 | /* cap_capable returns 0 on success, else -EPERM */ | 143 | /* cap_capable returns 0 on success, else -EPERM */ |
| 143 | int error = cap_capable(task, cred, cap, audit); | 144 | int error = cap_capable(task, cred, ns, cap, audit); |
| 144 | if (!error) { | 145 | if (!error) { |
| 145 | profile = aa_cred_profile(cred); | 146 | profile = aa_cred_profile(cred); |
| 146 | if (!unconfined(profile)) | 147 | if (!unconfined(profile)) |
| @@ -693,11 +694,9 @@ static struct kernel_param_ops param_ops_aalockpolicy = { | |||
| 693 | 694 | ||
| 694 | static int param_set_audit(const char *val, struct kernel_param *kp); | 695 | static int param_set_audit(const char *val, struct kernel_param *kp); |
| 695 | static int param_get_audit(char *buffer, struct kernel_param *kp); | 696 | static int param_get_audit(char *buffer, struct kernel_param *kp); |
| 696 | #define param_check_audit(name, p) __param_check(name, p, int) | ||
| 697 | 697 | ||
| 698 | static int param_set_mode(const char *val, struct kernel_param *kp); | 698 | static int param_set_mode(const char *val, struct kernel_param *kp); |
| 699 | static int param_get_mode(char *buffer, struct kernel_param *kp); | 699 | static int param_get_mode(char *buffer, struct kernel_param *kp); |
| 700 | #define param_check_mode(name, p) __param_check(name, p, int) | ||
| 701 | 700 | ||
| 702 | /* Flag values, also controllable via /sys/module/apparmor/parameters | 701 | /* Flag values, also controllable via /sys/module/apparmor/parameters |
| 703 | * We define special types as we want to do additional mediation. | 702 | * We define special types as we want to do additional mediation. |
diff --git a/security/apparmor/match.c b/security/apparmor/match.c index 5cb4dc1f699..06d764ccbbe 100644 --- a/security/apparmor/match.c +++ b/security/apparmor/match.c | |||
| @@ -195,7 +195,7 @@ void aa_dfa_free_kref(struct kref *kref) | |||
| 195 | * | 195 | * |
| 196 | * Unpack a dfa that has been serialized. To find information on the dfa | 196 | * Unpack a dfa that has been serialized. To find information on the dfa |
| 197 | * format look in Documentation/apparmor.txt | 197 | * format look in Documentation/apparmor.txt |
| 198 | * Assumes the dfa @blob stream has been aligned on a 8 byte boundry | 198 | * Assumes the dfa @blob stream has been aligned on a 8 byte boundary |
| 199 | * | 199 | * |
| 200 | * Returns: an unpacked dfa ready for matching or ERR_PTR on failure | 200 | * Returns: an unpacked dfa ready for matching or ERR_PTR on failure |
| 201 | */ | 201 | */ |
diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c index eb3700e9fd3..e33aaf7e574 100644 --- a/security/apparmor/policy_unpack.c +++ b/security/apparmor/policy_unpack.c | |||
| @@ -359,7 +359,7 @@ fail: | |||
| 359 | * @e: serialized data extent information (NOT NULL) | 359 | * @e: serialized data extent information (NOT NULL) |
| 360 | * @profile: profile to add the accept table to (NOT NULL) | 360 | * @profile: profile to add the accept table to (NOT NULL) |
| 361 | * | 361 | * |
| 362 | * Returns: 1 if table succesfully unpacked | 362 | * Returns: 1 if table successfully unpacked |
| 363 | */ | 363 | */ |
| 364 | static bool unpack_trans_table(struct aa_ext *e, struct aa_profile *profile) | 364 | static bool unpack_trans_table(struct aa_ext *e, struct aa_profile *profile) |
| 365 | { | 365 | { |
diff --git a/security/capability.c b/security/capability.c index 56bb1605fd7..bbb51156261 100644 --- a/security/capability.c +++ b/security/capability.c | |||
| @@ -761,7 +761,7 @@ static int cap_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 sk_sid, u8 dir) | |||
| 761 | 761 | ||
| 762 | static int cap_xfrm_state_pol_flow_match(struct xfrm_state *x, | 762 | static int cap_xfrm_state_pol_flow_match(struct xfrm_state *x, |
| 763 | struct xfrm_policy *xp, | 763 | struct xfrm_policy *xp, |
| 764 | struct flowi *fl) | 764 | const struct flowi *fl) |
| 765 | { | 765 | { |
| 766 | return 1; | 766 | return 1; |
| 767 | } | 767 | } |
diff --git a/security/commoncap.c b/security/commoncap.c index 64c2ed9c901..f20e984ccfb 100644 --- a/security/commoncap.c +++ b/security/commoncap.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/sched.h> | 27 | #include <linux/sched.h> |
| 28 | #include <linux/prctl.h> | 28 | #include <linux/prctl.h> |
| 29 | #include <linux/securebits.h> | 29 | #include <linux/securebits.h> |
| 30 | #include <linux/user_namespace.h> | ||
| 30 | 31 | ||
| 31 | /* | 32 | /* |
| 32 | * If a non-root user executes a setuid-root binary in | 33 | * If a non-root user executes a setuid-root binary in |
| @@ -52,13 +53,12 @@ static void warn_setuid_and_fcaps_mixed(const char *fname) | |||
| 52 | 53 | ||
| 53 | int cap_netlink_send(struct sock *sk, struct sk_buff *skb) | 54 | int cap_netlink_send(struct sock *sk, struct sk_buff *skb) |
| 54 | { | 55 | { |
| 55 | NETLINK_CB(skb).eff_cap = current_cap(); | ||
| 56 | return 0; | 56 | return 0; |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | int cap_netlink_recv(struct sk_buff *skb, int cap) | 59 | int cap_netlink_recv(struct sk_buff *skb, int cap) |
| 60 | { | 60 | { |
| 61 | if (!cap_raised(NETLINK_CB(skb).eff_cap, cap)) | 61 | if (!cap_raised(current_cap(), cap)) |
| 62 | return -EPERM; | 62 | return -EPERM; |
| 63 | return 0; | ||
