Prev: [07/11] USB: add missing delay during remote wakeup
Next: clocksource: Prevent potential kgdb dead lock
From: Eric W. Biederman on 26 Jan 2010 15:00 Greg KH <gregkh(a)suse.de> writes: > 2.6.27-stable review patch. If anyone has any objections, please let us know. Only that __f_setown by way of f_modown unconditionally enables interrupts. So without touching f_modown as well in mainline we have nasty sounding lockdep warnings. Eric > ------------------ > > From: Greg Kroah-Hartman <gregkh(a)suse.de> > > commit 703625118069f9f8960d356676662d3db5a9d116 upstream. > > We need to keep the lock held over the call to __f_setown() to > prevent a PID race. > > Thanks to Al Viro for pointing out the problem, and to Travis for > making us look here in the first place. > > Cc: Eric W. Biederman <ebiederm(a)xmission.com> > Cc: Al Viro <viro(a)ZenIV.linux.org.uk> > Cc: Alan Cox <alan(a)lxorguk.ukuu.org.uk> > Cc: Linus Torvalds <torvalds(a)linux-foundation.org> > Cc: Tavis Ormandy <taviso(a)google.com> > Cc: Jeff Dike <jdike(a)addtoit.com> > Cc: Julien Tinnes <jln(a)google.com> > Cc: Matt Mackall <mpm(a)selenic.com> > Signed-off-by: Greg Kroah-Hartman <gregkh(a)suse.de> > > --- > drivers/char/tty_io.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > --- a/drivers/char/tty_io.c > +++ b/drivers/char/tty_io.c > @@ -2437,8 +2437,8 @@ static int tty_fasync(int fd, struct fil > pid = task_pid(current); > type = PIDTYPE_PID; > } > - spin_unlock_irqrestore(&tty->ctrl_lock, flags); > retval = __f_setown(filp, pid, type, 0); > + spin_unlock_irqrestore(&tty->ctrl_lock, flags); > if (retval) > goto out; > } else { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Linus Torvalds on 26 Jan 2010 17:20 On Tue, 26 Jan 2010, Eric W. Biederman wrote: > Greg KH <gregkh(a)suse.de> writes: > > > 2.6.27-stable review patch. If anyone has any objections, please let us know. > > Only that __f_setown by way of f_modown unconditionally enables interrupts. So > without touching f_modown as well in mainline we have nasty sounding lockdep warnings. Hmm. That seems to be true in mainline too, isn't it? So now we have: - tty_fasync() gets tty->ctrl_lock, with spin_lock_irqsave() - it then calls __f_setown() - which calls f_modown(), - which does write_lock_irq(&filp->f_owner.lock); .. write_unlock_irq(&filp->f_owner.lock); which in turn enables interrupts while we still hold ctrl_lock. so that whole commit 70362511806 was/is buggy in mainline too. The minimal fix is likely to just make f_modown() use write_lock_irqsave/restore. Greg? Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Eric W. Biederman on 26 Jan 2010 18:10 Linus Torvalds <torvalds(a)linux-foundation.org> writes: > On Tue, 26 Jan 2010, Eric W. Biederman wrote: > >> Greg KH <gregkh(a)suse.de> writes: >> >> > 2.6.27-stable review patch. If anyone has any objections, please let us know. >> >> Only that __f_setown by way of f_modown unconditionally enables interrupts. So >> without touching f_modown as well in mainline we have nasty sounding lockdep warnings. > > Hmm. That seems to be true in mainline too, isn't it? Yes. We are having that conversation in the thread: "[2.6.33-rc5] starting emacs makes lockdep warning" Eric -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Greg KH on 26 Jan 2010 18:10 On Tue, Jan 26, 2010 at 02:11:28PM -0800, Linus Torvalds wrote: > > > On Tue, 26 Jan 2010, Eric W. Biederman wrote: > > > Greg KH <gregkh(a)suse.de> writes: > > > > > 2.6.27-stable review patch. If anyone has any objections, please let us know. > > > > Only that __f_setown by way of f_modown unconditionally enables interrupts. So > > without touching f_modown as well in mainline we have nasty sounding lockdep warnings. > > Hmm. That seems to be true in mainline too, isn't it? > > So now we have: > - tty_fasync() gets tty->ctrl_lock, with spin_lock_irqsave() > > - it then calls __f_setown() > > - which calls f_modown(), > > - which does > > write_lock_irq(&filp->f_owner.lock); > .. > write_unlock_irq(&filp->f_owner.lock); > > which in turn enables interrupts while we still hold ctrl_lock. > > so that whole commit 70362511806 was/is buggy in mainline too. > > The minimal fix is likely to just make f_modown() use > write_lock_irqsave/restore. Greg? Yes, that looks correct. Here's a patch that does just that: --------- From: Greg Kroah-Hartman <gregkh(a)suse.de> Subject: fnctl: f_modown should call write_lock_irqsave/restore Commit 703625118069f9f8960d356676662d3db5a9d116 exposed that f_modown() should call write_lock_irqsave instead of just write_lock_irq so that because a caller could have a spinlock held and it would not be good to renable interrupts. Cc: Eric W. Biederman <ebiederm(a)xmission.com> Cc: Al Viro <viro(a)ZenIV.linux.org.uk> Cc: Alan Cox <alan(a)lxorguk.ukuu.org.uk> Cc: Tavis Ormandy <taviso(a)google.com> Cc: stable <stable(a)kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh(a)suse.de> diff --git a/fs/fcntl.c b/fs/fcntl.c index 97e01dc..5ef953e 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -199,7 +199,9 @@ static int setfl(int fd, struct file * filp, unsigned long arg) static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, int force) { - write_lock_irq(&filp->f_owner.lock); + unsigned long flags; + + write_lock_irqsave(&filp->f_owner.lock, flags); if (force || !filp->f_owner.pid) { put_pid(filp->f_owner.pid); filp->f_owner.pid = get_pid(pid); @@ -211,7 +213,7 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, filp->f_owner.euid = cred->euid; } } - write_unlock_irq(&filp->f_owner.lock); + write_unlock_irqrestore(&filp->f_owner.lock, flags); } int __f_setown(struct file *filp, struct pid *pid, enum pid_type type, -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Linus Torvalds on 26 Jan 2010 20:40 On Tue, 26 Jan 2010, Greg KH wrote: > From: Greg Kroah-Hartman <gregkh(a)suse.de> > Subject: fnctl: f_modown should call write_lock_irqsave/restore Ok, applied and pushed out as b04da8b, so you can add it to the -stable list. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Next
|
Last
Pages: 1 2 Prev: [07/11] USB: add missing delay during remote wakeup Next: clocksource: Prevent potential kgdb dead lock |