Skip to content

Commit

Permalink
char: moxa, prevent opening unavailable ports
Browse files Browse the repository at this point in the history
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.

[akpm@linux-foundation.org: avoid multiple returns]
Signed-off-by: Dirk Eibach <eibach@gdsys.de>
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Dirk Eibach authored and Linus Torvalds committed Jun 19, 2009
1 parent 0b9ce5a commit a90b037
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/char/moxa.c
Original file line number Diff line number Diff line change
Expand Up @@ -1189,6 +1189,11 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
return -ENODEV;
}

if (port % MAX_PORTS_PER_BOARD >= brd->numPorts) {
retval = -ENODEV;
goto out_unlock;
}

ch = &brd->ports[port % MAX_PORTS_PER_BOARD];
ch->port.count++;
tty->driver_data = ch;
Expand All @@ -1213,8 +1218,8 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
moxa_close_port(tty);
} else
ch->port.flags |= ASYNC_NORMAL_ACTIVE;
out_unlock:
mutex_unlock(&moxa_openlock);

return retval;
}

Expand Down

0 comments on commit a90b037

Please sign in to comment.