@@ -555,7 +555,7 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip,
555555static int snd_usb_extigy_boot_quirk (struct usb_device * dev , struct usb_interface * intf )
556556{
557557 struct usb_host_config * config = dev -> actconfig ;
558- struct usb_device_descriptor new_device_descriptor ;
558+ struct usb_device_descriptor * new_device_descriptor __free ( kfree ) = NULL ;
559559 int err ;
560560
561561 if (le16_to_cpu (get_cfg_desc (config )-> wTotalLength ) == EXTIGY_FIRMWARE_SIZE_OLD ||
@@ -566,15 +566,19 @@ static int snd_usb_extigy_boot_quirk(struct usb_device *dev, struct usb_interfac
566566 0x10 , 0x43 , 0x0001 , 0x000a , NULL , 0 );
567567 if (err < 0 )
568568 dev_dbg (& dev -> dev , "error sending boot message: %d\n" , err );
569+
570+ new_device_descriptor = kmalloc (sizeof (* new_device_descriptor ), GFP_KERNEL );
571+ if (!new_device_descriptor )
572+ return - ENOMEM ;
569573 err = usb_get_descriptor (dev , USB_DT_DEVICE , 0 ,
570- & new_device_descriptor , sizeof (new_device_descriptor ));
574+ new_device_descriptor , sizeof (* new_device_descriptor ));
571575 if (err < 0 )
572576 dev_dbg (& dev -> dev , "error usb_get_descriptor: %d\n" , err );
573- if (new_device_descriptor . bNumConfigurations > dev -> descriptor .bNumConfigurations )
577+ if (new_device_descriptor -> bNumConfigurations > dev -> descriptor .bNumConfigurations )
574578 dev_dbg (& dev -> dev , "error too large bNumConfigurations: %d\n" ,
575- new_device_descriptor . bNumConfigurations );
579+ new_device_descriptor -> bNumConfigurations );
576580 else
577- memcpy (& dev -> descriptor , & new_device_descriptor , sizeof (dev -> descriptor ));
581+ memcpy (& dev -> descriptor , new_device_descriptor , sizeof (dev -> descriptor ));
578582 err = usb_reset_configuration (dev );
579583 if (err < 0 )
580584 dev_dbg (& dev -> dev , "error usb_reset_configuration: %d\n" , err );
@@ -906,7 +910,7 @@ static void mbox2_setup_48_24_magic(struct usb_device *dev)
906910static int snd_usb_mbox2_boot_quirk (struct usb_device * dev )
907911{
908912 struct usb_host_config * config = dev -> actconfig ;
909- struct usb_device_descriptor new_device_descriptor ;
913+ struct usb_device_descriptor * new_device_descriptor __free ( kfree ) = NULL ;
910914 int err ;
911915 u8 bootresponse [0x12 ];
912916 int fwsize ;
@@ -941,15 +945,19 @@ static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
941945
942946 dev_dbg (& dev -> dev , "device initialised!\n" );
943947
948+ new_device_descriptor = kmalloc (sizeof (* new_device_descriptor ), GFP_KERNEL );
949+ if (!new_device_descriptor )
950+ return - ENOMEM ;
951+
944952 err = usb_get_descriptor (dev , USB_DT_DEVICE , 0 ,
945- & new_device_descriptor , sizeof (new_device_descriptor ));
953+ new_device_descriptor , sizeof (* new_device_descriptor ));
946954 if (err < 0 )
947955 dev_dbg (& dev -> dev , "error usb_get_descriptor: %d\n" , err );
948- if (new_device_descriptor . bNumConfigurations > dev -> descriptor .bNumConfigurations )
956+ if (new_device_descriptor -> bNumConfigurations > dev -> descriptor .bNumConfigurations )
949957 dev_dbg (& dev -> dev , "error too large bNumConfigurations: %d\n" ,
950- new_device_descriptor . bNumConfigurations );
958+ new_device_descriptor -> bNumConfigurations );
951959 else
952- memcpy (& dev -> descriptor , & new_device_descriptor , sizeof (dev -> descriptor ));
960+ memcpy (& dev -> descriptor , new_device_descriptor , sizeof (dev -> descriptor ));
953961
954962 err = usb_reset_configuration (dev );
955963 if (err < 0 )
@@ -1259,7 +1267,7 @@ static void mbox3_setup_defaults(struct usb_device *dev)
12591267static int snd_usb_mbox3_boot_quirk (struct usb_device * dev )
12601268{
12611269 struct usb_host_config * config = dev -> actconfig ;
1262- struct usb_device_descriptor new_device_descriptor ;
1270+ struct usb_device_descriptor * new_device_descriptor __free ( kfree ) = NULL ;
12631271 int err ;
12641272 int descriptor_size ;
12651273
@@ -1272,15 +1280,19 @@ static int snd_usb_mbox3_boot_quirk(struct usb_device *dev)
12721280
12731281 dev_dbg (& dev -> dev , "MBOX3: device initialised!\n" );
12741282
1283+ new_device_descriptor = kmalloc (sizeof (* new_device_descriptor ), GFP_KERNEL );
1284+ if (!new_device_descriptor )
1285+ return - ENOMEM ;
1286+
12751287 err = usb_get_descriptor (dev , USB_DT_DEVICE , 0 ,
1276- & new_device_descriptor , sizeof (new_device_descriptor ));
1288+ new_device_descriptor , sizeof (* new_device_descriptor ));
12771289 if (err < 0 )
12781290 dev_dbg (& dev -> dev , "MBOX3: error usb_get_descriptor: %d\n" , err );
1279- if (new_device_descriptor . bNumConfigurations > dev -> descriptor .bNumConfigurations )
1291+ if (new_device_descriptor -> bNumConfigurations > dev -> descriptor .bNumConfigurations )
12801292 dev_dbg (& dev -> dev , "MBOX3: error too large bNumConfigurations: %d\n" ,
1281- new_device_descriptor . bNumConfigurations );
1293+ new_device_descriptor -> bNumConfigurations );
12821294 else
1283- memcpy (& dev -> descriptor , & new_device_descriptor , sizeof (dev -> descriptor ));
1295+ memcpy (& dev -> descriptor , new_device_descriptor , sizeof (dev -> descriptor ));
12841296
12851297 err = usb_reset_configuration (dev );
12861298 if (err < 0 )
0 commit comments