projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
ee78bb9
)
Char: nozomi, set tty->driver_data appropriately
author
Jiri Slaby
<jslaby@suse.cz>
Thu, 29 Jul 2010 09:46:32 +0000
(11:46 +0200)
committer
Greg Kroah-Hartman
<gregkh@suse.de>
Tue, 10 Aug 2010 20:47:46 +0000
(13:47 -0700)
Sorry, one more fix, this one depends on the other, so this is rather 2/2.
--
tty->driver_data is used all over the code, but never set. This
results in oopses like:
BUG: unable to handle kernel NULL pointer dereference at
0000000000000130
IP: [<
ffffffff814a0040
>] mutex_lock+0x10/0x40
...
Pid: 2157, comm: modem-manager Not tainted 2.6.34.1-0.1-desktop #1 2768DR7/2768DR7
RIP: 0010:[<
ffffffff814a0040
>] [<
ffffffff814a0040
>] mutex_lock+0x10/0x40
RSP: 0018:
ffff88007b16fa50
EFLAGS:
00010286
RAX:
0000000000000000
RBX:
0000000000000130
RCX:
0000000000000003
RDX:
0000000000000003
RSI:
0000000000000286
RDI:
0000000000000130
RBP:
0000000000001000
R08:
0000000000000000
R09:
0000000000000000
R10:
0000000000000001
R11:
0000000000000000
R12:
0000000000000130
R13:
0000000000000001
R14:
0000000000000000
R15:
ffff88007b16feb4
...
Call Trace:
[<
ffffffffa077690d
>] ntty_write_room+0x4d/0x90 [nozomi]
...
Set tty->driver_data to the computed port in .install to not recompute it in
every place where needed. Switch .open to use driver_data too.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Alan Cox <alan@linux.intel.com>
Cc: stable <stable@kernel.org> [.34, .35]
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/char/nozomi.c
patch
|
blob
|
history
diff --git
a/drivers/char/nozomi.c
b/drivers/char/nozomi.c
index 21ae1b158b3b551b27bea0ec3e2f467a9011f0e6..18af923093c3362e7c24c001fe2a85f8e12a3477 100644
(file)
--- a/
drivers/char/nozomi.c
+++ b/
drivers/char/nozomi.c
@@
-1612,6
+1612,7
@@
static int ntty_install(struct tty_driver *driver, struct tty_struct *tty)
if (ret == 0) {
tty_driver_kref_get(driver);
tty->count++;
+ tty->driver_data = port;
driver->ttys[tty->index] = tty;
}
return ret;
@@
-1640,7
+1641,7
@@
static int ntty_activate(struct tty_port *tport, struct tty_struct *tty)
static int ntty_open(struct tty_struct *tty, struct file *filp)
{
- struct port *port =
get_port_by_tty(tty)
;
+ struct port *port =
tty->driver_data
;
return tty_port_open(&port->port, tty, filp);
}