diff options
author | Kees Cook <keescook@chromium.org> | 2014-05-21 18:23:46 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2014-07-18 15:13:38 -0400 |
commit | 1d4457f99928a968767f6405b4a1f50845aa15fd (patch) | |
tree | 522641b08f4a465035910a74a3871ad38e62df01 /include/linux/sched.h | |
parent | 8855d608c145c1ca0e26f4da00741080bb49d80d (diff) |
sched: move no_new_privs into new atomic flags
Since seccomp transitions between threads requires updates to the
no_new_privs flag to be atomic, the flag must be part of an atomic flag
set. This moves the nnp flag into a separate task field, and introduces
accessors.
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Andy Lutomirski <luto@amacapital.net>
Diffstat (limited to 'include/linux/sched.h')
-rw-r--r-- | include/linux/sched.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 306f4f0c987a..0fd19055bb64 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1307,13 +1307,12 @@ struct task_struct { | |||
1307 | * execve */ | 1307 | * execve */ |
1308 | unsigned in_iowait:1; | 1308 | unsigned in_iowait:1; |
1309 | 1309 | ||
1310 | /* task may not gain privileges */ | ||
1311 | unsigned no_new_privs:1; | ||
1312 | |||
1313 | /* Revert to default priority/policy when forking */ | 1310 | /* Revert to default priority/policy when forking */ |
1314 | unsigned sched_reset_on_fork:1; | 1311 | unsigned sched_reset_on_fork:1; |
1315 | unsigned sched_contributes_to_load:1; | 1312 | unsigned sched_contributes_to_load:1; |
1316 | 1313 | ||
1314 | unsigned long atomic_flags; /* Flags needing atomic access. */ | ||
1315 | |||
1317 | pid_t pid; | 1316 | pid_t pid; |
1318 | pid_t tgid; | 1317 | pid_t tgid; |
1319 | 1318 | ||
@@ -1967,6 +1966,19 @@ static inline void memalloc_noio_restore(unsigned int flags) | |||
1967 | current->flags = (current->flags & ~PF_MEMALLOC_NOIO) | flags; | 1966 | current->flags = (current->flags & ~PF_MEMALLOC_NOIO) | flags; |
1968 | } | 1967 | } |
1969 | 1968 | ||
1969 | /* Per-process atomic flags. */ | ||
1970 | #define PFA_NO_NEW_PRIVS 0x00000001 /* May not gain new privileges. */ | ||
1971 | |||
1972 | static inline bool task_no_new_privs(struct task_struct *p) | ||
1973 | { | ||
1974 | return test_bit(PFA_NO_NEW_PRIVS, &p->atomic_flags); | ||
1975 | } | ||
1976 | |||
1977 | static inline void task_set_no_new_privs(struct task_struct *p) | ||
1978 | { | ||
1979 | set_bit(PFA_NO_NEW_PRIVS, &p->atomic_flags); | ||
1980 | } | ||
1981 | |||
1970 | /* | 1982 | /* |
1971 | * task->jobctl flags | 1983 | * task->jobctl flags |
1972 | */ | 1984 | */ |