Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1305476
| From | Peter Hurley <peter@hurleysoftware.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v2 4/7] tty: Fix ioctl(FIOASYNC) on hungup file |
| Date | 2016-01-10 06:50 +0100 |
| Message-ID | <qPh34-8nj-19@gated-at.bofh.it> (permalink) |
| References | <qF0Gd-8bC-3@gated-at.bofh.it> <qPh33-8nj-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
A small race window exists which allows signal-driven async i/o to be
enabled for the tty when the file ptr has already been hungup and
signal-driven i/o has been disabled:
CPU 0 CPU 1
----- ------
ioctl_fioasync(on)
filp->f_op->fasync(on) __tty_hangup()
tty_fasync(on) tty_lock()
tty_lock() ...
. filp->f_op = &hung_up_tty_fops;
(waiting) __tty_fasync(off)
. tty_unlock()
/* gets tty lock */
/* enables FASYNC */
Check the tty has not been hungup while holding tty_lock.
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
---
drivers/tty/tty_io.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 05b0a9c..7113bfa 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -2260,10 +2260,11 @@ out:
static int tty_fasync(int fd, struct file *filp, int on)
{
struct tty_struct *tty = file_tty(filp);
- int retval;
+ int retval = -ENOTTY;
tty_lock(tty);
- retval = __tty_fasync(fd, filp, on);
+ if (!tty_hung_up_p(filp))
+ retval = __tty_fasync(fd, filp, on);
tty_unlock(tty);
return retval;
--
2.7.0
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v2 0/7] More n_tty fixes Peter Hurley <peter@hurleysoftware.com> - 2016-01-10 06:50 +0100 [PATCH v2 2/7] tty, n_tty: Remove fasync() ldisc notification Peter Hurley <peter@hurleysoftware.com> - 2016-01-10 06:50 +0100 [PATCH v2 5/7] n_tty: Fix stuck write wakeup Peter Hurley <peter@hurleysoftware.com> - 2016-01-10 06:50 +0100 [PATCH v2 3/7] tty: Add fasync() hung up file operation Peter Hurley <peter@hurleysoftware.com> - 2016-01-10 06:50 +0100 [PATCH v2 6/7] n_tty: Remove tty count checks from unthrottle Peter Hurley <peter@hurleysoftware.com> - 2016-01-10 06:50 +0100 [PATCH v2 4/7] tty: Fix ioctl(FIOASYNC) on hungup file Peter Hurley <peter@hurleysoftware.com> - 2016-01-10 06:50 +0100 [PATCH v2 7/7] tty: n_tty: fix SIGIO for output Peter Hurley <peter@hurleysoftware.com> - 2016-01-10 06:50 +0100
csiph-web