diff options
Diffstat (limited to 'security')
| -rw-r--r-- | security/apparmor/lsm.c | 36 | ||||
| -rw-r--r-- | security/capability.c | 3 | ||||
| -rw-r--r-- | security/keys/internal.h | 5 | ||||
| -rw-r--r-- | security/security.c | 5 | ||||
| -rw-r--r-- | security/selinux/hooks.c | 12 |
5 files changed, 37 insertions, 24 deletions
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 8db33a8b50c4..d5666d3cc21b 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c | |||
| @@ -667,17 +667,29 @@ static struct security_operations apparmor_ops = { | |||
| 667 | * AppArmor sysfs module parameters | 667 | * AppArmor sysfs module parameters |
| 668 | */ | 668 | */ |
| 669 | 669 | ||
| 670 | static int param_set_aabool(const char *val, struct kernel_param *kp); | 670 | static int param_set_aabool(const char *val, const struct kernel_param *kp); |
| 671 | static int param_get_aabool(char *buffer, struct kernel_param *kp); | 671 | static int param_get_aabool(char *buffer, const struct kernel_param *kp); |
| 672 | #define param_check_aabool(name, p) __param_check(name, p, int) | 672 | #define param_check_aabool(name, p) __param_check(name, p, int) |
| 673 | static struct kernel_param_ops param_ops_aabool = { | ||
| 674 | .set = param_set_aabool, | ||
| 675 | .get = param_get_aabool | ||
| 676 | }; | ||
| 673 | 677 | ||
| 674 | static int param_set_aauint(const char *val, struct kernel_param *kp); | 678 | static int param_set_aauint(const char *val, const struct kernel_param *kp); |
| 675 | static int param_get_aauint(char *buffer, struct kernel_param *kp); | 679 | static int param_get_aauint(char *buffer, const struct kernel_param *kp); |
| 676 | #define param_check_aauint(name, p) __param_check(name, p, int) | 680 | #define param_check_aauint(name, p) __param_check(name, p, int) |
| 681 | static struct kernel_param_ops param_ops_aauint = { | ||
| 682 | .set = param_set_aauint, | ||
| 683 | .get = param_get_aauint | ||
| 684 | }; | ||
| 677 | 685 | ||
| 678 | static int param_set_aalockpolicy(const char *val, struct kernel_param *kp); | 686 | static int param_set_aalockpolicy(const char *val, const struct kernel_param *kp); |
| 679 | static int param_get_aalockpolicy(char *buffer, struct kernel_param *kp); | 687 | static int param_get_aalockpolicy(char *buffer, const struct kernel_param *kp); |
| 680 | #define param_check_aalockpolicy(name, p) __param_check(name, p, int) | 688 | #define param_check_aalockpolicy(name, p) __param_check(name, p, int) |
| 689 | static struct kernel_param_ops param_ops_aalockpolicy = { | ||
| 690 | .set = param_set_aalockpolicy, | ||
| 691 | .get = param_get_aalockpolicy | ||
| 692 | }; | ||
| 681 | 693 | ||
| 682 | static int param_set_audit(const char *val, struct kernel_param *kp); | 694 | static int param_set_audit(const char *val, struct kernel_param *kp); |
| 683 | static int param_get_audit(char *buffer, struct kernel_param *kp); | 695 | static int param_get_audit(char *buffer, struct kernel_param *kp); |
| @@ -751,7 +763,7 @@ static int __init apparmor_enabled_setup(char *str) | |||
| 751 | __setup("apparmor=", apparmor_enabled_setup); | 763 | __setup("apparmor=", apparmor_enabled_setup); |
| 752 | 764 | ||
| 753 | /* set global flag turning off the ability to load policy */ | 765 | /* set global flag turning off the ability to load policy */ |
| 754 | static int param_set_aalockpolicy(const char *val, struct kernel_param *kp) | 766 | static int param_set_aalockpolicy(const char *val, const struct kernel_param *kp) |
| 755 | { | 767 | { |
| 756 | if (!capable(CAP_MAC_ADMIN)) | 768 | if (!capable(CAP_MAC_ADMIN)) |
| 757 | return -EPERM; | 769 | return -EPERM; |
| @@ -760,35 +772,35 @@ static int param_set_aalockpolicy(const char *val, struct kernel_param *kp) | |||
| 760 | return param_set_bool(val, kp); | 772 | return param_set_bool(val, kp); |
| 761 | } | 773 | } |
| 762 | 774 | ||
| 763 | static int param_get_aalockpolicy(char *buffer, struct kernel_param *kp) | 775 | static int param_get_aalockpolicy(char *buffer, const struct kernel_param *kp) |
| 764 | { | 776 | { |
| 765 | if (!capable(CAP_MAC_ADMIN)) | 777 | if (!capable(CAP_MAC_ADMIN)) |
| 766 | return -EPERM; | 778 | return -EPERM; |
| 767 | return param_get_bool(buffer, kp); | 779 | return param_get_bool(buffer, kp); |
| 768 | } | 780 | } |
| 769 | 781 | ||
| 770 | static int param_set_aabool(const char *val, struct kernel_param *kp) | 782 | static int param_set_aabool(const char *val, const struct kernel_param *kp) |
| 771 | { | 783 | { |
| 772 | if (!capable(CAP_MAC_ADMIN)) | 784 | if (!capable(CAP_MAC_ADMIN)) |
| 773 | return -EPERM; | 785 | return -EPERM; |
| 774 | return param_set_bool(val, kp); | 786 | return param_set_bool(val, kp); |
| 775 | } | 787 | } |
| 776 | 788 | ||
| 777 | static int param_get_aabool(char *buffer, struct kernel_param *kp) | 789 | static int param_get_aabool(char *buffer, const struct kernel_param *kp) |
| 778 | { | 790 | { |
| 779 | if (!capable(CAP_MAC_ADMIN)) | 791 | if (!capable(CAP_MAC_ADMIN)) |
| 780 | return -EPERM; | 792 | return -EPERM; |
| 781 | return param_get_bool(buffer, kp); | 793 | return param_get_bool(buffer, kp); |
| 782 | } | 794 | } |
| 783 | 795 | ||
| 784 | static int param_set_aauint(const char *val, struct kernel_param *kp) | 796 | static int param_set_aauint(const char *val, const struct kernel_param *kp) |
| 785 | { | 797 | { |
| 786 | if (!capable(CAP_MAC_ADMIN)) | 798 | if (!capable(CAP_MAC_ADMIN)) |
| 787 | return -EPERM; | 799 | return -EPERM; |
| 788 | return param_set_uint(val, kp); | 800 | return param_set_uint(val, kp); |
| 789 | } | 801 | } |
| 790 | 802 | ||
| 791 | static int param_get_aauint(char *buffer, struct kernel_param *kp) | 803 | static int param_get_aauint(char *buffer, const struct kernel_param *kp) |
| 792 | { | 804 | { |
| 793 | if (!capable(CAP_MAC_ADMIN)) | 805 | if (!capable(CAP_MAC_ADMIN)) |
| 794 | return -EPERM; | 806 | return -EPERM; |
diff --git a/security/capability.c b/security/capability.c index a0bbf30fb6dc..95a6599a37bb 100644 --- a/security/capability.c +++ b/security/capability.c | |||
| @@ -411,7 +411,8 @@ static int cap_task_getioprio(struct task_struct *p) | |||
| 411 | return 0; | 411 | return 0; |
| 412 | } | 412 | } |
| 413 | 413 | ||
| 414 | static int cap_task_setrlimit(unsigned int resource, struct rlimit *new_rlim) | 414 | static int cap_task_setrlimit(struct task_struct *p, unsigned int resource, |
| 415 | struct rlimit *new_rlim) | ||
| 415 | { | 416 | { |
| 416 | return 0; | 417 | return 0; |
| 417 | } | 418 | } |
diff --git a/security/keys/internal.h b/security/keys/internal.h index addb67b169f4..56a133d8f37d 100644 --- a/security/keys/internal.h +++ b/security/keys/internal.h | |||
| @@ -15,11 +15,6 @@ | |||
| 15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
| 16 | #include <linux/key-type.h> | 16 | #include <linux/key-type.h> |
| 17 | 17 | ||
| 18 | static inline __attribute__((format(printf, 1, 2))) | ||
| 19 | void no_printk(const char *fmt, ...) | ||
| 20 | { | ||
| 21 | } | ||
| 22 | |||
| 23 | #ifdef __KDEBUG | 18 | #ifdef __KDEBUG |
| 24 | #define kenter(FMT, ...) \ | 19 | #define kenter(FMT, ...) \ |
| 25 | printk(KERN_DEBUG "==> %s("FMT")\n", __func__, ##__VA_ARGS__) | 20 | printk(KERN_DEBUG "==> %s("FMT")\n", __func__, ##__VA_ARGS__) |
diff --git a/security/security.c b/security/security.c index 7461b1bc296c..c53949f17d9e 100644 --- a/security/security.c +++ b/security/security.c | |||
| @@ -780,9 +780,10 @@ int security_task_getioprio(struct task_struct *p) | |||
| 780 | return security_ops->task_getioprio(p); | 780 | return security_ops->task_getioprio(p); |
| 781 | } | 781 | } |
| 782 | 782 | ||
| 783 | int security_task_setrlimit(unsigned int resource, struct rlimit *new_rlim) | 783 | int security_task_setrlimit(struct task_struct *p, unsigned int resource, |
| 784 | struct rlimit *new_rlim) | ||
| 784 | { | 785 | { |
| 785 | return security_ops->task_setrlimit(resource, new_rlim); | 786 | return security_ops->task_setrlimit(p, resource, new_rlim); |
| 786 | } | 787 | } |
| 787 | 788 | ||
| 788 | int security_task_setscheduler(struct task_struct *p, | 789 | int security_task_setscheduler(struct task_struct *p, |
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 9b40f4c0ac70..42043f96e54f 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
| @@ -2284,12 +2284,15 @@ static void selinux_bprm_committing_creds(struct linux_binprm *bprm) | |||
| 2284 | rc = avc_has_perm(new_tsec->osid, new_tsec->sid, SECCLASS_PROCESS, | 2284 | rc = avc_has_perm(new_tsec->osid, new_tsec->sid, SECCLASS_PROCESS, |
| 2285 | PROCESS__RLIMITINH, NULL); | 2285 | PROCESS__RLIMITINH, NULL); |
| 2286 | if (rc) { | 2286 | if (rc) { |
| 2287 | /* protect against do_prlimit() */ | ||
| 2288 | task_lock(current); | ||
| 2287 | for (i = 0; i < RLIM_NLIMITS; i++) { | 2289 | for (i = 0; i < RLIM_NLIMITS; i++) { |
| 2288 | rlim = current->signal->rlim + i; | 2290 | rlim = current->signal->rlim + i; |
| 2289 | initrlim = init_task.signal->rlim + i; | 2291 | initrlim = init_task.signal->rlim + i; |
| 2290 | rlim->rlim_cur = min(rlim->rlim_max, initrlim->rlim_cur); | 2292 | rlim->rlim_cur = min(rlim->rlim_max, initrlim->rlim_cur); |
| 2291 | } | 2293 | } |
| 2292 | update_rlimit_cpu(current->signal->rlim[RLIMIT_CPU].rlim_cur); | 2294 | task_unlock(current); |
| 2295 | update_rlimit_cpu(current, rlimit(RLIMIT_CPU)); | ||
| 2293 | } | 2296 | } |
| 2294 | } | 2297 | } |
| 2295 | 2298 | ||
| @@ -3333,16 +3336,17 @@ static int selinux_task_getioprio(struct task_struct *p) | |||
| 3333 | return current_has_perm(p, PROCESS__GETSCHED); | 3336 | return current_has_perm(p, PROCESS__GETSCHED); |
| 3334 | } | 3337 | } |
| 3335 | 3338 | ||
| 3336 | static int selinux_task_setrlimit(unsigned int resource, struct rlimit *new_rlim) | 3339 | static int selinux_task_setrlimit(struct task_struct *p, unsigned int resource, |
| 3340 | struct rlimit *new_rlim) | ||
| 3337 | { | 3341 | { |
| 3338 | struct rlimit *old_rlim = current->signal->rlim + resource; | 3342 | struct rlimit *old_rlim = p->signal->rlim + resource; |
| 3339 | 3343 | ||
| 3340 | /* Control the ability to change the hard limit (whether | 3344 | /* Control the ability to change the hard limit (whether |
| 3341 | lowering or raising it), so that the hard limit can | 3345 | lowering or raising it), so that the hard limit can |
| 3342 | later be used as a safe reset point for the soft limit | 3346 | later be used as a safe reset point for the soft limit |
| 3343 | upon context transitions. See selinux_bprm_committing_creds. */ | 3347 | upon context transitions. See selinux_bprm_committing_creds. */ |
| 3344 | if (old_rlim->rlim_max != new_rlim->rlim_max) | 3348 | if (old_rlim->rlim_max != new_rlim->rlim_max) |
| 3345 | return current_has_perm(current, PROCESS__SETRLIMIT); | 3349 | return current_has_perm(p, PROCESS__SETRLIMIT); |
| 3346 | 3350 | ||
| 3347 | return 0; | 3351 | return 0; |
| 3348 | } | 3352 | } |
