Re: [Patch 11/21] Track the core generation requests

From: Oleg Nesterov
Date: Tue Dec 14 2010 - 11:11:59 EST


On 12/14, Suzuki K. Poulose wrote:
>
> Concurrent core generation requests
> for the same target process are not allowed.

OK, but

> +static struct core_proc* get_core_proc(struct task_struct *t)
> +{
> + struct core_proc *cp;
> +
> + list_for_each_entry(cp, &core_list, list) {
> + if (cp->task == t->group_leader)
> + return cp;
> + }
> + return NULL;
> +}
> ...
> static int open_gencore(struct inode *inode, struct file *filp)
> {
> - return 0;
> + struct task_struct *task = get_proc_task(inode);
> + struct core_proc *cp;
> + int ret = 0;
> +
> + if (!task)
> + return -ENOENT;
> +
> + mutex_lock(&core_mutex);
> + cp = get_core_proc(task);
> + if (cp) {
> + ret = -EALREADY;

I don't think this can work.

The task can change ->group_leader. This means 2 or more
open_gencore() can succeed if this task execs in between.

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/