diff options
author | Jiri Slaby <jirislaby@gmail.com> | 2009-04-06 18:34:04 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-06 23:36:33 +0200 |
commit | 0e0fd7d73ed130583dca16405b029f56bf65109f (patch) | |
tree | d32a3aafc1abc6f86819bc52773500b9205c2136 /drivers/char | |
parent | isicom: isicom kref leak fix (diff) | |
download | linux-0e0fd7d73ed130583dca16405b029f56bf65109f.tar.xz linux-0e0fd7d73ed130583dca16405b029f56bf65109f.zip |
tty: moxa, fix refcounting in moxa_poll_port
There is missing tty_kref_put on some paths in moxa_poll_port,
although the reference is always taken. Fix it.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Reported-by: Jan 'Yenya' Kasprzak <kas@fi.muni.cz>
Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/moxa.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c index 8b0da97d5293..4a4cab73d0be 100644 --- a/drivers/char/moxa.c +++ b/drivers/char/moxa.c @@ -1486,11 +1486,11 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle, } if (!handle) /* nothing else to do */ - return 0; + goto put; intr = readw(ip); /* port irq status */ if (intr == 0) - return 0; + goto put; writew(0, ip); /* ACK port */ ofsAddr = p->tableAddr; @@ -1499,16 +1499,17 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle, ofsAddr + HostStat); if (!inited) - return 0; + goto put; if (tty && (intr & IntrBreak) && !I_IGNBRK(tty)) { /* BREAK */ tty_insert_flip_char(tty, 0, TTY_BREAK); tty_schedule_flip(tty); } - tty_kref_put(tty); if (intr & IntrLine) moxa_new_dcdstate(p, readb(ofsAddr + FlagStat) & DCD_state); +put: + tty_kref_put(tty); return 0; } |