diff options
author | Dirk Eibach <eibach@gdsys.de> | 2009-06-11 13:56:44 (GMT) |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-11 15:51:09 (GMT) |
commit | f0e8527726b9e56649b9eafde3bc0fbc4dd2dd47 (patch) | |
tree | b2f13d50f6ac8f22d849100d507abec22d63be1c /drivers/char | |
parent | d7f8d437bda0ec409e26cffb846bc28a40603ee3 (diff) | |
download | linux-f0e8527726b9e56649b9eafde3bc0fbc4dd2dd47.tar.xz |
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')
-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 4a4cab7..65b6ff2 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) return -ENODEV; } + if (port % MAX_PORTS_PER_BOARD >= brd->numPorts) { + mutex_unlock(&moxa_openlock); + return -ENODEV; + } + ch = &brd->ports[port % MAX_PORTS_PER_BOARD]; ch->port.count++; tty->driver_data = ch; |