Re: [PATCH v2] digi_acceleport: do sanity checking for the number of ports

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 21, 2016 at 03:57:37PM +0100, Oliver Neukum wrote:
> The driver can be crashed with devices that expose crafted
> descriptors with too few endpoints.
> See:
> http://seclists.org/bugtraq/2016/Mar/61
> 
> Signed-off-by: Oliver Neukum <ONeukum@xxxxxxxx>
> 
> v1 - added sanity checks
> v2 - moved them to probe() to fix problems Johan pointed out
> ---
>  drivers/usb/serial/digi_acceleport.c | 24 +++++++++++++++++++-----
>  1 file changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
> index 12b0e67..dab1dcf 100644
> --- a/drivers/usb/serial/digi_acceleport.c
> +++ b/drivers/usb/serial/digi_acceleport.c
> @@ -1252,7 +1252,8 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num)
>  static int digi_startup(struct usb_serial *serial)
>  {
>  	struct digi_serial *serial_priv;
> -	int ret;
> +	int ret = -ENODEV;
> +	int i;
>  
>  	serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
>  	if (!serial_priv)
> @@ -1260,18 +1261,31 @@ static int digi_startup(struct usb_serial *serial)
>  
>  	spin_lock_init(&serial_priv->ds_serial_lock);
>  	serial_priv->ds_oob_port_num = serial->type->num_ports;
> +
> +	/* Check whether the expected number of ports matches the device */
> +	if (serial->num_ports < serial_priv->ds_oob_port_num)
> +		goto error;

This should be

	if (serial->num_port_pointers < serial->type->num_ports + 1)

as serial->num_ports will (generally) equal serial->type->num_ports, and
we need to check that we got one more port structure than we requested.

I fixed that up and moved the check above the private-data allocation.

Thanks,
Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux