Messages in this thread | | | Date | Mon, 5 Oct 2009 12:56:41 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: futex question |
| |
Peter,
On Mon, 5 Oct 2009, Peter Zijlstra wrote:
> On Sun, 2009-10-04 at 18:59 +0200, Thomas Gleixner wrote: > > > > do. It does not feel right. Currently, with or without my change, > > > such a thing would indefinitely block other waiters on the same > > > futex. > > > > Right. Which completely defeats the purpose of the robust list. Will > > have a look tomorrow. > > Right, so mm_release() which is meant to destroy the old mm context > actually does exit_robust_list(), but the problem is that it does so on > the new mm, not the old one that got passed down to mm_release(). > > The other detail is that exit_robust_list() doesn't clear > current->robust_list.
I know.
> The problem with the patch send my Ani is that it clears the robust > lists before the point of no return, so on a failing execve() we'd have > messed up the state.
Right. We need to do that at the latest possible point.
Looking more into that I think we should check whether the robust list has an entry (lock held) in do_execve() and return -EWOULDBLOCK to luser space. Same if pi_waiters is not empty. Holding a lock and calling execve() is simply broken.
Thanks,
tglx
| |