All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Safonov <dima@arista.com>
To: Jiri Slaby <jslaby@suse.cz>, linux-kernel@vger.kernel.org
Cc: "Daniel Axtens" <dja@axtens.net>,
	"Dmitry Safonov" <0x7f454c46@gmail.com>,
	"Sergey Senozhatsky" <sergey.senozhatsky.work@gmail.com>,
	"Dmitry Vyukov" <dvyukov@google.com>,
	"Tan Xiaojun" <tanxiaojun@huawei.com>,
	"Peter Hurley" <peter@hurleysoftware.com>,
	"Pasi Kärkkäinen" <pasik@iki.fi>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Michael Neuling" <mikey@neuling.org>,
	"Mikulas Patocka" <mpatocka@redhat.com>,
	stable@vger.kernel.org
Subject: Re: [PATCH 1/4] tty: Drop tty->count on tty_reopen() failure
Date: Wed, 29 Aug 2018 17:13:27 +0100	[thread overview]
Message-ID: <1535559207.23560.55.camel@arista.com> (raw)
In-Reply-To: <cbedde00-a0f4-6714-f7f4-a180dca15ce0@suse.cz>

On Wed, 2018-08-29 at 16:38 +0200, Jiri Slaby wrote:
> On 08/29/2018, 04:23 AM, Dmitry Safonov wrote:
> > In case of tty_ldisc_reinit() failure, tty->count should be
> > decremented
> > back, otherwise we will never release_tty().
> > Never seen it in the real life, but it seems not really hard to
> > hit.
> 
> I did see it. And this fixes it.

Thanks, I'll add your tested-by, if I'll have to resend.

> 
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Cc: Jiri Slaby <jslaby@suse.com>
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Dmitry Safonov <dima@arista.com>
> > ---
> >  drivers/tty/tty_io.c | 11 ++++++++---
> >  1 file changed, 8 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
> > index 32bc3e3fe4d3..5e5da9acaf0a 100644
> > --- a/drivers/tty/tty_io.c
> > +++ b/drivers/tty/tty_io.c
> > @@ -1255,6 +1255,7 @@ static void tty_driver_remove_tty(struct
> > tty_driver *driver, struct tty_struct *
> >  static int tty_reopen(struct tty_struct *tty)
> >  {
> >  	struct tty_driver *driver = tty->driver;
> > +	int retval;
> >  
> >  	if (driver->type == TTY_DRIVER_TYPE_PTY &&
> >  	    driver->subtype == PTY_TYPE_MASTER)
> > @@ -1268,10 +1269,14 @@ static int tty_reopen(struct tty_struct
> > *tty)
> >  
> >  	tty->count++;
> >  
> > -	if (!tty->ldisc)
> > -		return tty_ldisc_reinit(tty, tty->termios.c_line);
> > +	if (tty->ldisc)
> > +		return 0;
> >  
> > -	return 0;
> > +	retval = tty_ldisc_reinit(tty, tty->termios.c_line);
> > +	if (retval)
> > +		tty->count--;
> 
> I would just do:
>   if (!retval)
>     tty->count++;
> here. Nobody from ldiscs should rely on tty->count.

I thought about that and probably should have described in commit
message why I haven't done that: I prefer to keep it as was as I did Cc
stable tree - to keep the chance of regression to minimum.

I agree that your way is cleaner, but probably it may be done as
cleanup on top for linux-next..

-- 
Thanks,
             Dmitry

  reply	other threads:[~2018-08-29 16:13 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29  2:23 [PATCH 0/4] tty: Hold write ldisc sem in tty_reopen() Dmitry Safonov
2018-08-29  2:23 ` [PATCH 1/4] tty: Drop tty->count on tty_reopen() failure Dmitry Safonov
2018-08-29 14:38   ` Jiri Slaby
2018-08-29 16:13     ` Dmitry Safonov [this message]
2018-08-31  6:47       ` Jiri Slaby
2018-08-31 11:54         ` Dmitry Safonov
2018-08-29  2:23 ` [PATCH 2/4] tty: Hold tty_ldisc_lock() during tty_reopen() Dmitry Safonov
2018-08-29  4:34   ` Sergey Senozhatsky
2018-08-29 14:30     ` Dmitry Safonov
2018-08-30  5:16     ` Benjamin Herrenschmidt
2018-08-29 14:40   ` Jiri Slaby
2018-08-29 14:45     ` Jiri Slaby
2018-08-29 16:36     ` Dmitry Safonov
2018-08-29 15:19   ` Tetsuo Handa
2018-08-31  6:51     ` Jiri Slaby
2018-08-31 11:17       ` Tetsuo Handa
2018-08-31 11:21         ` Jiri Slaby
2018-08-31 12:12           ` Dmitry Safonov
2018-09-07  4:50   ` [tty] 0b4f83d510: INFO:task_blocked_for_more_than#seconds kernel test robot
2018-09-07  4:50     ` [LKP] " kernel test robot
2018-09-07  6:39     ` Jiri Slaby
2018-09-07  6:39       ` [LKP] " Jiri Slaby
2018-09-07 11:12       ` Dmitry Safonov
2018-09-07 11:12         ` [LKP] " Dmitry Safonov
2018-09-10  5:14       ` Sergey Senozhatsky
2018-09-10  5:14         ` [LKP] " Sergey Senozhatsky
2018-09-10 18:50         ` Dmitry Safonov
2018-09-10 18:50           ` [LKP] " Dmitry Safonov
2018-08-29  2:23 ` [PATCH 3/4] tty: Lock tty pair in tty_init_dev() Dmitry Safonov
2018-08-29 14:46   ` Jiri Slaby
2018-08-29 16:28     ` Dmitry Safonov
2018-08-31  6:54       ` Jiri Slaby
2018-08-31 12:22         ` Dmitry Safonov
2018-08-29  2:23 ` [PATCH 4/4] tty/lockdep: Add ldisc_sem asserts Dmitry Safonov
2018-08-30  7:03 ` [PATCH 0/4] tty: Hold write ldisc sem in tty_reopen() Pasi Kärkkäinen
2018-08-30  7:03   ` Pasi Kärkkäinen

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=1535559207.23560.55.camel@arista.com \
    --to=dima@arista.com \
    --cc=0x7f454c46@gmail.com \
    --cc=dja@axtens.net \
    --cc=dvyukov@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mikey@neuling.org \
    --cc=mpatocka@redhat.com \
    --cc=pasik@iki.fi \
    --cc=peter@hurleysoftware.com \
    --cc=sergey.senozhatsky.work@gmail.com \
    --cc=stable@vger.kernel.org \
    --cc=tanxiaojun@huawei.com \
    /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.