[SRU][X][B][F][G][PATCH 1/1] tty: hvcs: Don't NULL tty->driver_data until hvcs_cleanup()
Kelsey Skunberg
kelsey.skunberg at canonical.com
Thu Sep 17 18:16:02 UTC 2020
On 2020-09-17 18:47:27 , Colin Ian King wrote:
> On 17/09/2020 18:41, Kelsey Skunberg wrote:
> > On 2020-09-16 10:19:39 , Colin Ian King wrote:
> >> On 15/09/2020 19:56, patricia.domingues at canonical.com wrote:
> >>> From: Tyrel Datwyler <tyreld at linux.ibm.com>
> >>>
> >>> BugLink: https://bugs.launchpad.net/bugs/1892546
> >>>
> >>> The code currently NULLs tty->driver_data in hvcs_close() with the
> >>> intent of informing the next call to hvcs_open() that device needs to be
> >>> reconfigured. However, when hvcs_cleanup() is called we copy hvcsd from
> >>> tty->driver_data which was previoulsy NULLed by hvcs_close() and our
> >>> call to tty_port_put(&hvcsd->port) doesn't actually do anything since
> >>> &hvcsd->port ends up translating to NULL by chance. This has the side
> >>> effect that when hvcs_remove() is called we have one too many port
> >>> references preventing hvcs_destuct_port() from ever being called. This
> >>> also prevents us from reusing the /dev/hvcsX node in a future
> >>> hvcs_probe() and we can eventually run out of /dev/hvcsX devices.
> >>>
> >>> Fix this by waiting to NULL tty->driver_data in hvcs_cleanup().
> >>>
> >>> Fixes: 27bf7c43a19c ("TTY: hvcs, add tty install")
> >>> Signed-off-by: Tyrel Datwyler <tyreld at linux.ibm.com>
> >>> Link: https://lore.kernel.org/r/20200820234643.70412-1-tyreld@linux.ibm.com
> >>> Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> >>> (cherry picked from commit 63ffcbdad738e3d1c857027789a2273df3337624)
> >>> Signed-off-by: Patricia Domingues <patricia.domingues at canonical.com>
> >>> ---
> >>> drivers/tty/hvc/hvcs.c | 14 +++++++-------
> >>> 1 file changed, 7 insertions(+), 7 deletions(-)
> >>>
> >>> diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
> >>> index 5997b1731111..cba662c50f91 100644
> >>> --- a/drivers/tty/hvc/hvcs.c
> >>> +++ b/drivers/tty/hvc/hvcs.c
> >>> @@ -1232,13 +1232,6 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp)
> >>>
> >>> tty_wait_until_sent(tty, HVCS_CLOSE_WAIT);
> >>>
> >>> - /*
> >>> - * This line is important because it tells hvcs_open that this
> >>> - * device needs to be re-configured the next time hvcs_open is
> >>> - * called.
> >>> - */
> >>> - tty->driver_data = NULL;
> >>> -
> >>> free_irq(irq, hvcsd);
> >>> return;
> >>> } else if (hvcsd->port.count < 0) {
> >>> @@ -1254,6 +1247,13 @@ static void hvcs_cleanup(struct tty_struct * tty)
> >>> {
> >>> struct hvcs_struct *hvcsd = tty->driver_data;
> >>>
> >>> + /*
> >>> + * This line is important because it tells hvcs_open that this
> >>> + * device needs to be re-configured the next time hvcs_open is
> >>> + * called.
> >>> + */
> >>> + tty->driver_data = NULL;
> >>> +
> >>> tty_port_put(&hvcsd->port);
> >>> }
> >>>
> >>>
> >>
> >> Sane testing, fix looks good.
> >>
> >> The cherry pick is from linux-next though, I can't find that sha in linux.
> >>
> >> Colin
> >>
> >
> > Hey Colin,
> >
> > Is this suppose to be an ACK or just a comment? Pending this is fully
> > reviewed, I'll change the cherry pick line while applying. Thanks!
>
> It's now an ACK since I know the cherry pick like will be fixed up :-)
>
> thanks,
>
> Colin
>
sweet, thank you! and will deffinitely do that change. Thanks for catching it!
-Kelsey
> >
> > -Kelsey
> >
> >> --
> >> kernel-team mailing list
> >> kernel-team at lists.ubuntu.com
> >> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>
More information about the kernel-team
mailing list