diff options
author | Dirk Eibach <eibach@gdsys.de> | 2009-06-11 09:56:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-11 11:51:09 -0400 |
commit | f0e8527726b9e56649b9eafde3bc0fbc4dd2dd47 (patch) | |
tree | b2f13d50f6ac8f22d849100d507abec22d63be1c /drivers/char/moxa.c | |
parent | d7f8d437bda0ec409e26cffb846bc28a40603ee3 (diff) |
moxa: prevent opening unavailable ports
In moxa.c there are 32 minor numbers reserved for each device. The
number of ports actually available per device is stored in
moxa_board_conf->numPorts. This number is not considered in moxa_open().
Opening a port that is not available results in a kernel oops.
This patch adds a test to moxa_open() that prevents opening unavailable
ports.
Signed-off-by: Dirk Eibach <eibach@gdsys.de>
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char/moxa.c')
-rw-r--r-- | drivers/char/moxa.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c index 4a4cab73d0be..65b6ff2442c6 100644 --- a/drivers/char/moxa.c +++ b/drivers/char/moxa.c | |||
@@ -1184,6 +1184,11 @@ static int moxa_open(struct tty_struct *tty, struct file *filp) | |||
1184 | return -ENODEV; | 1184 | return -ENODEV; |
1185 | } | 1185 | } |
1186 | 1186 | ||
1187 | if (port % MAX_PORTS_PER_BOARD >= brd->numPorts) { | ||
1188 | mutex_unlock(&moxa_openlock); | ||
1189 | return -ENODEV; | ||
1190 | } | ||
1191 | |||
1187 | ch = &brd->ports[port % MAX_PORTS_PER_BOARD]; | 1192 | ch = &brd->ports[port % MAX_PORTS_PER_BOARD]; |
1188 | ch->port.count++; | 1193 | ch->port.count++; |
1189 | tty->driver_data = ch; | 1194 | tty->driver_data = ch; |