Commit 8a8a5510 authored by Peter Hurley's avatar Peter Hurley Committed by Greg Kroah-Hartman

uml: Fix unsafe pid reference to foreground process group

Although the tty core maintains a pid reference for the foreground
process group, if the foreground process group is changed that
pid reference is dropped. Thus, the pid reference used for signalling
could become stale.

Safely obtain a pid reference to the foreground process group and
release the reference after signalling is complete.

cc: Jeff Dike <jdike@addtoit.com>
Acked-by: default avatarRichard Weinberger <richard@nod.at>
Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Reviewed-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent bce65f18
...@@ -632,6 +632,7 @@ static irqreturn_t winch_interrupt(int irq, void *data) ...@@ -632,6 +632,7 @@ static irqreturn_t winch_interrupt(int irq, void *data)
int fd = winch->fd; int fd = winch->fd;
int err; int err;
char c; char c;
struct pid *pgrp;
if (fd != -1) { if (fd != -1) {
err = generic_read(fd, &c, NULL); err = generic_read(fd, &c, NULL);
...@@ -657,7 +658,10 @@ static irqreturn_t winch_interrupt(int irq, void *data) ...@@ -657,7 +658,10 @@ static irqreturn_t winch_interrupt(int irq, void *data)
if (line != NULL) { if (line != NULL) {
chan_window_size(line, &tty->winsize.ws_row, chan_window_size(line, &tty->winsize.ws_row,
&tty->winsize.ws_col); &tty->winsize.ws_col);
kill_pgrp(tty->pgrp, SIGWINCH, 1); pgrp = tty_get_pgrp(tty);
if (pgrp)
kill_pgrp(pgrp, SIGWINCH, 1);
put_pid(pgrp);
} }
tty_kref_put(tty); tty_kref_put(tty);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment