lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <200710251350.43281.nickpiggin@yahoo.com.au> Date: Thu, 25 Oct 2007 13:50:43 +1000 From: Nick Piggin <nickpiggin@...oo.com.au> To: Matthew Wilcox <matthew@....cx> Cc: linux-kernel@...r.kernel.org, Matthew Wilcox <willy@...ux.intel.com> Subject: Re: [PATCH 2/5] Use macros instead of TASK_ flags On Friday 19 October 2007 08:25, Matthew Wilcox wrote: > Abstracting away direct uses of TASK_ flags allows us to change the > definitions of the task flags more easily. > > Also restructure do_wait() a little > > Signed-off-by: Matthew Wilcox <willy@...ux.intel.com> > --- > arch/ia64/kernel/perfmon.c | 4 +- > fs/proc/array.c | 9 +--- > fs/proc/base.c | 2 +- > include/linux/sched.h | 15 +++++++ > include/linux/wait.h | 11 +++-- > kernel/exit.c | 90 > +++++++++++++++++++------------------------ kernel/power/process.c | > 7 +-- > kernel/ptrace.c | 8 ++-- > kernel/sched.c | 15 +++---- > kernel/signal.c | 6 +- > kernel/wait.c | 2 +- > 11 files changed, 83 insertions(+), 86 deletions(-) > > diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c > index f55fa07..6b0a6cf 100644 > --- a/arch/ia64/kernel/perfmon.c > +++ b/arch/ia64/kernel/perfmon.c > @@ -2630,7 +2630,7 @@ pfm_task_incompatible(pfm_context_t *ctx, struct > task_struct *task) */ > if (task == current) return 0; > > - if ((task->state != TASK_STOPPED) && (task->state != TASK_TRACED)) { > + if (!is_task_stopped_or_traced(task)) { > DPRINT(("cannot attach to non-stopped task [%d] state=%ld\n", task->pid, > task->state)); return -EBUSY; > } > @@ -4790,7 +4790,7 @@ recheck: > * the task must be stopped. > */ > if (PFM_CMD_STOPPED(cmd)) { > - if ((task->state != TASK_STOPPED) && (task->state != TASK_TRACED)) { > + if (!is_task_stopped_or_traced(task)) { > DPRINT(("[%d] task not in stopped state\n", task->pid)); > return -EBUSY; > } > diff --git a/fs/proc/array.c b/fs/proc/array.c > index 27b59f5..8939bf0 100644 > --- a/fs/proc/array.c > +++ b/fs/proc/array.c > @@ -140,13 +140,8 @@ static const char *task_state_array[] = { > > static inline const char *get_task_state(struct task_struct *tsk) > { > - unsigned int state = (tsk->state & (TASK_RUNNING | > - TASK_INTERRUPTIBLE | > - TASK_UNINTERRUPTIBLE | > - TASK_STOPPED | > - TASK_TRACED)) | > - (tsk->exit_state & (EXIT_ZOMBIE | > - EXIT_DEAD)); > + unsigned int state = (tsk->state & TASK_REPORT) | > + (tsk->exit_state & (EXIT_ZOMBIE | EXIT_DEAD)); > const char **p = &task_state_array[0]; > > while (state) { > diff --git a/fs/proc/base.c b/fs/proc/base.c > index 4fe74d1..e7e1815 100644 > --- a/fs/proc/base.c > +++ b/fs/proc/base.c > @@ -196,7 +196,7 @@ static int proc_root_link(struct inode *inode, struct > dentry **dentry, struct vf (task == current || \ > (task->parent == current && \ > (task->ptrace & PT_PTRACED) && \ > - (task->state == TASK_STOPPED || task->state == TASK_TRACED) && \ > + (is_task_stopped_or_traced(task)) && \ > security_ptrace(current,task) == 0)) > > static int proc_pid_cmdline(struct task_struct *task, char * buffer) > diff --git a/include/linux/sched.h b/include/linux/sched.h > index c204ab0..5ef5253 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -177,6 +177,21 @@ print_cfs_rq(struct seq_file *m, int cpu, struct > cfs_rq *cfs_rq) /* in tsk->state again */ > #define TASK_DEAD 64 > > +/* Convenience macros for the sake of wake_up */ > +#define TASK_NORMAL (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE) > +#define TASK_ALL (TASK_NORMAL | TASK_STOPPED | TASK_TRACED) > + > +/* get_task_state() */ > +#define TASK_REPORT (TASK_RUNNING | TASK_INTERRUPTIBLE | \ > + TASK_UNINTERRUPTIBLE | TASK_STOPPED | \ > + TASK_TRACED) I think it would be nicer if you made it explicit in the name that these are not individual flags. Maybe it doesn't matter though... Also, TASK_NORMAL / TASK_ALL aren't very good names. TASK_SLEEP_NORMAL TASK_SLEEP_ALL might be a bit more helpful? - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists