From: Darren Hart <dvhltc@us.ibm.com>
To: john stultz <johnstul@us.ibm.com>
Cc: Andi Kleen <andi@firstfloor.org>,
Andrew Morton <akpm@linux-foundation.org>,
Arjan van de Ven <arjan@infradead.org>,
lkml <linux-kernel@vger.kernel.org>,
Mike Fulton <fultonm@ca.ibm.com>,
Sean Foley <Sean_Foley@ca.ibm.com>
Subject: Re: [RFC][PATCH] Add prctl to set sibling thread names (take two)
Date: Fri, 23 Oct 2009 20:45:48 -0700 [thread overview]
Message-ID: <4AE2786C.7000400@us.ibm.com> (raw)
In-Reply-To: <1256347303.5059.26.camel@localhost.localdomain>
Hi John,
Just a couple nitpics really, looks pretty good to me - other than the
need for the wmb()s below.
john stultz wrote:
> This patch exports a task's comm via proc/pid/comm and
> proc/pid/task/tid/comm interfaces, and allows thread siblings to write
> to these values.
And the parent I presume?
> + /*
> + * Threads may access current->comm without holding
> + * the task lock, so write the string carefully
> + * to avoid non-terminating reads. Readers without a lock
> + * with get the oldname, the newname or an empty string.
s/with/will/
s/oldname/old name/ (it isn't a variable right?)
s/newname/new name/ (it isn't a variable right?)
> + */
> + tsk->comm[0] = NULL;
> + /* XXX - Need an mb() here?*/
I believe you do, yes. Now, which one... hrm... checking... You only
care about ensuring the the comm[0] store occurs BEFORE the strlcpy.
But, if no lock is held here, you can be preempted, so this is important
for both UP and SMP. I believe what you need here is:
wmb()
Memory barrier experts, please enlighten us if I am missing something.
> + strlcpy(tsk->comm+1, buf+1, sizeof(tsk->comm)-1);
And one more here I should think, otherwise that could effectively undo
the previous one :-)
wmb()
> + tsk->comm[0] = buf[0];
> task_unlock(tsk);
To be clear, we hold the lock to prevent other threads from changing
this at the same time as us - any other thread but the target thread
that is?
> +static ssize_t
> +comm_write(struct file *file, const char __user *buf,
> + size_t count, loff_t *offset)
> +{
> + struct inode *inode = file->f_path.dentry->d_inode;
> + struct task_struct *p;
> + char buffer[TASK_COMM_LEN];
> +
> + memset(buffer, 0, sizeof(buffer));
What purpose does zeroing this entire buffer serve?
> + if (count > sizeof(buffer) - 1)
> + count = sizeof(buffer) - 1;
> + if (copy_from_user(buffer, buf, count))
> + return -EFAULT;
> +
Extra whitespace
> +
> + p = get_proc_task(inode);
> + if (!p)
> + return -ESRCH;
> +
> + if (same_thread_group(current, p))
> + set_task_comm(p, buffer);
> + else
> + count = -EINVAL;
> +
> + put_task_struct(p);
> +
> + return count;
> +}
Thanks,
--
Darren Hart
IBM Linux Technology Center
Real-Time Linux Team
next prev parent reply other threads:[~2009-10-24 3:45 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-24 1:21 [RFC][PATCH] Add prctl to set sibling thread names (take two) john stultz
2009-10-24 3:45 ` Darren Hart [this message]
2009-10-30 19:54 ` john stultz
2009-10-30 20:06 ` [RFC][PATCH] Allow threads to rename siblings via /proc/pid/tasks/tid/comm john stultz
2009-11-07 1:38 ` [PATCH] " john stultz
2009-11-07 22:52 ` Andi Kleen
2009-11-08 20:45 ` Arjan van de Ven
2009-11-10 1:26 ` john stultz
2009-11-16 21:11 ` john stultz
2009-11-18 21:54 ` Andrew Morton
2009-11-19 1:04 ` KOSAKI Motohiro
2009-11-21 0:33 ` john stultz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AE2786C.7000400@us.ibm.com \
--to=dvhltc@us.ibm.com \
--cc=Sean_Foley@ca.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=arjan@infradead.org \
--cc=fultonm@ca.ibm.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.