diff options
| author | Kees Cook <keescook@chromium.org> | 2013-02-27 20:03:15 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 22:10:11 -0500 |
| commit | e579d2c259be42b6f29458327e5153b22414b031 (patch) | |
| tree | ac3babd0f075ddfeb5e6fa083651852b34a0a79f | |
| parent | 5d1fadc1472396d602f0eeb10d37519e2a14e8bc (diff) | |
coredump: remove redundant defines for dumpable states
The existing SUID_DUMP_* defines duplicate the newer SUID_DUMPABLE_*
defines introduced in 54b501992dd2 ("coredump: warn about unsafe
suid_dumpable / core_pattern combo"). Remove the new ones, and use the
prior values instead.
Signed-off-by: Kees Cook <keescook@chromium.org>
Reported-by: Chen Gang <gang.chen@asianux.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Alan Cox <alan@linux.intel.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Doug Ledford <dledford@redhat.com>
Cc: Serge Hallyn <serge.hallyn@canonical.com>
Cc: James Morris <james.l.morris@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | fs/coredump.c | 2 | ||||
| -rw-r--r-- | fs/exec.c | 10 | ||||
| -rw-r--r-- | fs/proc/internal.h | 3 | ||||
| -rw-r--r-- | include/linux/sched.h | 5 | ||||
| -rw-r--r-- | kernel/sysctl.c | 2 |
5 files changed, 9 insertions, 13 deletions
diff --git a/fs/coredump.c b/fs/coredump.c index 69baf903d3bd..c6479658d487 100644 --- a/fs/coredump.c +++ b/fs/coredump.c | |||
| @@ -501,7 +501,7 @@ void do_coredump(siginfo_t *siginfo) | |||
| 501 | * so we dump it as root in mode 2, and only into a controlled | 501 | * so we dump it as root in mode 2, and only into a controlled |
| 502 | * environment (pipe handler or fully qualified path). | 502 | * environment (pipe handler or fully qualified path). |
| 503 | */ | 503 | */ |
| 504 | if (__get_dumpable(cprm.mm_flags) == SUID_DUMPABLE_SAFE) { | 504 | if (__get_dumpable(cprm.mm_flags) == SUID_DUMP_ROOT) { |
| 505 | /* Setuid core dump mode */ | 505 | /* Setuid core dump mode */ |
| 506 | flag = O_EXCL; /* Stop rewrite attacks */ | 506 | flag = O_EXCL; /* Stop rewrite attacks */ |
| 507 | cred->fsuid = GLOBAL_ROOT_UID; /* Dump root private */ | 507 | cred->fsuid = GLOBAL_ROOT_UID; /* Dump root private */ |
| @@ -1111,7 +1111,7 @@ void setup_new_exec(struct linux_binprm * bprm) | |||
| 1111 | current->sas_ss_sp = current->sas_ss_size = 0; | 1111 | current->sas_ss_sp = current->sas_ss_size = 0; |
| 1112 | 1112 | ||
| 1113 | if (uid_eq(current_euid(), current_uid()) && gid_eq(current_egid(), current_gid())) | 1113 | if (uid_eq(current_euid(), current_uid()) && gid_eq(current_egid(), current_gid())) |
| 1114 | set_dumpable(current->mm, SUID_DUMPABLE_ENABLED); | 1114 | set_dumpable(current->mm, SUID_DUMP_USER); |
| 1115 | else | 1115 | else |
| 1116 | set_dumpable(current->mm, suid_dumpable); | 1116 | set_dumpable(current->mm, suid_dumpable); |
| 1117 | 1117 | ||
| @@ -1639,17 +1639,17 @@ EXPORT_SYMBOL(set_binfmt); | |||
| 1639 | void set_dumpable(struct mm_struct *mm, int value) | 1639 | void set_dumpable(struct mm_struct *mm, int value) |
| 1640 | { | 1640 | { |
| 1641 | switch (value) { | 1641 | switch (value) { |
| 1642 | case SUID_DUMPABLE_DISABLED: | 1642 | case SUID_DUMP_DISABLE: |
| 1643 | clear_bit(MMF_DUMPABLE, &mm->flags); | 1643 | clear_bit(MMF_DUMPABLE, &mm->flags); |
| 1644 | smp_wmb(); | 1644 | smp_wmb(); |
| 1645 | clear_bit(MMF_DUMP_SECURELY, &mm->flags); | 1645 | clear_bit(MMF_DUMP_SECURELY, &mm->flags); |
| 1646 | break; | 1646 | break; |
| 1647 | case SUID_DUMPABLE_ENABLED: | 1647 | case SUID_DUMP_USER: |
| 1648 | set_bit(MMF_DUMPABLE, &mm->flags); | 1648 | set_bit(MMF_DUMPABLE, &mm->flags); |
| 1649 | smp_wmb(); | 1649 | smp_wmb(); |
| 1650 | clear_bit(MMF_DUMP_SECURELY, &mm->flags); | 1650 | clear_bit(MMF_DUMP_SECURELY, &mm->flags); |
| 1651 | break; | 1651 | break; |
| 1652 | case SUID_DUMPABLE_SAFE: | 1652 | case SUID_DUMP_ROOT: |
| 1653 | set_bit(MMF_DUMP_SECURELY, &mm->flags); | 1653 | set_bit(MMF_DUMP_SECURELY, &mm->flags); |
| 1654 | smp_wmb(); | 1654 | smp_wmb(); |
| 1655 | set_bit(MMF_DUMPABLE, &mm->flags); | 1655 | set_bit(MMF_DUMPABLE, &mm->flags); |
| @@ -1662,7 +1662,7 @@ int __get_dumpable(unsigned long mm_flags) | |||
| 1662 | int ret; | 1662 | int ret; |
| 1663 | 1663 | ||
| 1664 | ret = mm_flags & MMF_DUMPABLE_MASK; | 1664 | ret = mm_flags & MMF_DUMPABLE_MASK; |
| 1665 | return (ret > SUID_DUMPABLE_ENABLED) ? SUID_DUMPABLE_SAFE : ret; | 1665 | return (ret > SUID_DUMP_USER) ? SUID_DUMP_ROOT : ret; |
| 1666 | } | 1666 | } |
| 1667 | 1667 | ||
| 1668 | int get_dumpable(struct mm_struct *mm) | 1668 | int get_dumpable(struct mm_struct *mm) |
diff --git a/fs/proc/internal.h b/fs/proc/internal.h index 252544c05207..85ff3a4598b3 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
| 13 | #include <linux/proc_fs.h> | 13 | #include <linux/proc_fs.h> |
| 14 | #include <linux/binfmts.h> | ||
| 14 | struct ctl_table_header; | 15 | struct ctl_table_header; |
| 15 | struct mempolicy; | 16 | struct mempolicy; |
| 16 | 17 | ||
| @@ -108,7 +109,7 @@ static inline int task_dumpable(struct task_struct *task) | |||
| 108 | if (mm) | 109 | if (mm) |
| 109 | dumpable = get_dumpable(mm); | 110 | dumpable = get_dumpable(mm); |
| 110 | task_unlock(task); | 111 | task_unlock(task); |
| 111 | if (dumpable == SUID_DUMPABLE_ENABLED) | 112 | if (dumpable == SUID_DUMP_USER) |
| 112 | return 1; | 113 | return 1; |
| 113 | return 0; | 114 | return 0; |
| 114 | } | 115 | } |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 6853bf947fde..d35d2b6ddbfb 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -346,11 +346,6 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm) {} | |||
| 346 | extern void set_dumpable(struct mm_struct *mm, int value); | 346 | extern void set_dumpable(struct mm_struct *mm, int value); |
| 347 | extern int get_dumpable(struct mm_struct *mm); | 347 | extern int get_dumpable(struct mm_struct *mm); |
| 348 | 348 | ||
| 349 | /* get/set_dumpable() values */ | ||
| 350 | #define SUID_DUMPABLE_DISABLED 0 | ||
| 351 | #define SUID_DUMPABLE_ENABLED 1 | ||
| 352 | #define SUID_DUMPABLE_SAFE 2 | ||
| 353 | |||
| 354 | /* mm flags */ | 349 | /* mm flags */ |
| 355 | /* dumpable bits */ | 350 | /* dumpable bits */ |
| 356 | #define MMF_DUMPABLE 0 /* core dump is permitted */ | 351 | #define MMF_DUMPABLE 0 /* core dump is permitted */ |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index d8df00e69c14..d1b4ee67d2df 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -2095,7 +2095,7 @@ int proc_dointvec_minmax(struct ctl_table *table, int write, | |||
| 2095 | static void validate_coredump_safety(void) | 2095 | static void validate_coredump_safety(void) |
| 2096 | { | 2096 | { |
| 2097 | #ifdef CONFIG_COREDUMP | 2097 | #ifdef CONFIG_COREDUMP |
| 2098 | if (suid_dumpable == SUID_DUMPABLE_SAFE && | 2098 | if (suid_dumpable == SUID_DUMP_ROOT && |
| 2099 | core_pattern[0] != '/' && core_pattern[0] != '|') { | 2099 | core_pattern[0] != '/' && core_pattern[0] != '|') { |
| 2100 | printk(KERN_WARNING "Unsafe core_pattern used with "\ | 2100 | printk(KERN_WARNING "Unsafe core_pattern used with "\ |
| 2101 | "suid_dumpable=2. Pipe handler or fully qualified "\ | 2101 | "suid_dumpable=2. Pipe handler or fully qualified "\ |
