mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
				synced 2025-11-04 07:44:51 +10:00 
			
		
		
		
	ISDN: Add check for usb_alloc_urb() result
usb_alloc_urb() return value needs to be checked to avoid later NULL pointer access. Reported by rucsoftsec@gmail.com via bugzilla.kernel.org #44601. Signed-off-by: Karsten Keil <kkeil@linux-pingi.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									5b999fd04a
								
							
						
					
					
						commit
						2ae4605d73
					
				@ -2084,13 +2084,21 @@ hfcsusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
 | 
			
		||||
	/* create the control pipes needed for register access */
 | 
			
		||||
	hw->ctrl_in_pipe = usb_rcvctrlpipe(hw->dev, 0);
 | 
			
		||||
	hw->ctrl_out_pipe = usb_sndctrlpipe(hw->dev, 0);
 | 
			
		||||
	hw->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL);
 | 
			
		||||
 | 
			
		||||
	driver_info =
 | 
			
		||||
		(struct hfcsusb_vdata *)hfcsusb_idtab[vend_idx].driver_info;
 | 
			
		||||
	printk(KERN_DEBUG "%s: %s: detected \"%s\" (%s, if=%d alt=%d)\n",
 | 
			
		||||
	       hw->name, __func__, driver_info->vend_name,
 | 
			
		||||
	       conf_str[small_match], ifnum, alt_used);
 | 
			
		||||
	driver_info = (struct hfcsusb_vdata *)
 | 
			
		||||
		      hfcsusb_idtab[vend_idx].driver_info;
 | 
			
		||||
 | 
			
		||||
	hw->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL);
 | 
			
		||||
	if (!hw->ctrl_urb) {
 | 
			
		||||
		pr_warn("%s: No memory for control urb\n",
 | 
			
		||||
			driver_info->vend_name);
 | 
			
		||||
		kfree(hw);
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pr_info("%s: %s: detected \"%s\" (%s, if=%d alt=%d)\n",
 | 
			
		||||
		hw->name, __func__, driver_info->vend_name,
 | 
			
		||||
		conf_str[small_match], ifnum, alt_used);
 | 
			
		||||
 | 
			
		||||
	if (setup_instance(hw, dev->dev.parent))
 | 
			
		||||
		return -EIO;
 | 
			
		||||
 | 
			
		||||
@ -1483,13 +1483,21 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
 | 
			
		||||
				usb_rcvctrlpipe(context->dev, 0);
 | 
			
		||||
			context->ctrl_out_pipe =
 | 
			
		||||
				usb_sndctrlpipe(context->dev, 0);
 | 
			
		||||
 | 
			
		||||
			driver_info = (hfcsusb_vdata *)
 | 
			
		||||
				      hfcusb_idtab[vend_idx].driver_info;
 | 
			
		||||
 | 
			
		||||
			context->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL);
 | 
			
		||||
 | 
			
		||||
			driver_info =
 | 
			
		||||
				(hfcsusb_vdata *) hfcusb_idtab[vend_idx].
 | 
			
		||||
				driver_info;
 | 
			
		||||
			printk(KERN_INFO "HFC-S USB: detected \"%s\"\n",
 | 
			
		||||
			       driver_info->vend_name);
 | 
			
		||||
			if (!context->ctrl_urb) {
 | 
			
		||||
				pr_warn("%s: No memory for control urb\n",
 | 
			
		||||
					driver_info->vend_name);
 | 
			
		||||
				kfree(context);
 | 
			
		||||
				return -ENOMEM;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			pr_info("HFC-S USB: detected \"%s\"\n",
 | 
			
		||||
				driver_info->vend_name);
 | 
			
		||||
 | 
			
		||||
			DBG(HFCUSB_DBG_INIT,
 | 
			
		||||
			    "HFC-S USB: Endpoint-Config: %s (if=%d alt=%d), E-Channel(%d)",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user