Skip to content

Commit

Permalink
USB: serial: fix potential heap buffer overflow
Browse files Browse the repository at this point in the history
commit 5654699fb38512bdbfc0f892ce54fce75bdc2bab upstream.

Make sure to verify the number of ports requested by subdriver to avoid
writing beyond the end of fixed-size array in interface data.

The current usb-serial implementation is limited to eight ports per
interface but failed to verify that the number of ports requested by a
subdriver (which could have been determined from device descriptors) did
not exceed this limit.

Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[lizf: Backported to 3.4: s/ddev/\&interface->dev/]
Signed-off-by: Zefan Li <lizefan@huawei.com>
  • Loading branch information
jhovold authored and lizf-os committed Sep 25, 2014
1 parent 62148f7 commit c804743
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions drivers/usb/serial/usb-serial.c
Expand Up @@ -889,6 +889,11 @@ int usb_serial_probe(struct usb_interface *interface,
num_ports = type->num_ports;
}

if (num_ports > MAX_NUM_PORTS) {
dev_warn(&interface->dev, "too many ports requested: %d\n", num_ports);
num_ports = MAX_NUM_PORTS;
}

serial->num_ports = num_ports;
serial->num_bulk_in = num_bulk_in;
serial->num_bulk_out = num_bulk_out;
Expand Down

0 comments on commit c804743

Please sign in to comment.