lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202410051738.GFfOxDuk-lkp@intel.com>
Date: Sat, 5 Oct 2024 17:50:33 +0800
From: kernel test robot <lkp@...el.com>
To: Manuel Quintero F <sakunix@...oo.com>, duncan.sands@...e.fr
Cc: oe-kbuild-all@...ts.linux.dev, gregkh@...uxfoundation.org,
	linux-usb@...r.kernel.org, linux-kernel@...r.kernel.org,
	Manuel Quintero F <sakunix@...oo.com>
Subject: Re: [PATCH] USB: atm: speedtch: do not use assignment in if condition

Hi Manuel,

kernel test robot noticed the following build errors:

[auto build test ERROR on usb/usb-testing]
[also build test ERROR on usb/usb-next usb/usb-linus linus/master v6.12-rc1 next-20241004]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Manuel-Quintero-F/USB-atm-speedtch-do-not-use-assignment-in-if-condition/20241004-113643
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
patch link:    https://lore.kernel.org/r/20241004030512.2036-1-sakunix%40yahoo.com
patch subject: [PATCH] USB: atm: speedtch: do not use assignment in if condition
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20241005/202410051738.GFfOxDuk-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 13.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241005/202410051738.GFfOxDuk-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202410051738.GFfOxDuk-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   drivers/usb/atm/speedtch.c: In function 'speedtch_upload_firmware':
>> drivers/usb/atm/speedtch.c:327:85: error: expected ')' before 'if'
     327 |         ret = usb_set_interface(usb_dev, INTERFACE_DATA, instance->params.altsetting
         |                                ~                                                    ^
         |                                                                                     )
     328 | 
     329 |         if (ret < 0) {
         |         ~~                                                                           
>> drivers/usb/atm/speedtch.c:346:20: error: expected ';' before '}' token
     346 |         return ret;
         |                    ^
         |                    ;
     347 | }
         | ~                   
>> drivers/usb/atm/speedtch.c:317:17: error: label 'out_free' used but not defined
     317 |                 goto out_free;
         |                 ^~~~
>> drivers/usb/atm/speedtch.c:247:17: error: label 'out' used but not defined
     247 |                 goto out;
         |                 ^~~~
>> drivers/usb/atm/speedtch.c:347:1: warning: no return statement in function returning non-void [-Wreturn-type]
     347 | }
         | ^
   drivers/usb/atm/speedtch.c: At top level:
>> drivers/usb/atm/speedtch.c:160:13: warning: 'speedtch_test_sequence' defined but not used [-Wunused-function]
     160 | static void speedtch_test_sequence(struct speedtch_instance_data *instance)
         |             ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/usb/atm/speedtch.c:144:13: warning: 'speedtch_set_swbuff' defined but not used [-Wunused-function]
     144 | static void speedtch_set_swbuff(struct speedtch_instance_data *instance, int state)
         |             ^~~~~~~~~~~~~~~~~~~


vim +327 drivers/usb/atm/speedtch.c

   143	
 > 144	static void speedtch_set_swbuff(struct speedtch_instance_data *instance, int state)
   145	{
   146		struct usbatm_data *usbatm = instance->usbatm;
   147		struct usb_device *usb_dev = usbatm->usb_dev;
   148		int ret;
   149	
   150		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   151				      0x32, 0x40, state ? 0x01 : 0x00, 0x00, NULL, 0, CTRL_TIMEOUT);
   152		if (ret < 0)
   153			usb_warn(usbatm,
   154				 "%sabling SW buffering: usb_control_msg returned %d\n",
   155				 state ? "En" : "Dis", ret);
   156		else
   157			usb_dbg(usbatm, "speedtch_set_swbuff: %sbled SW buffering\n", state ? "En" : "Dis");
   158	}
   159	
 > 160	static void speedtch_test_sequence(struct speedtch_instance_data *instance)
   161	{
   162		struct usbatm_data *usbatm = instance->usbatm;
   163		struct usb_device *usb_dev = usbatm->usb_dev;
   164		unsigned char *buf = instance->scratch_buffer;
   165		int ret;
   166	
   167		/* URB 147 */
   168		buf[0] = 0x1c;
   169		buf[1] = 0x50;
   170		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   171				      0x01, 0x40, 0x0b, 0x00, buf, 2, CTRL_TIMEOUT);
   172		if (ret < 0)
   173			usb_warn(usbatm, "%s failed on URB147: %d\n", __func__, ret);
   174	
   175		/* URB 148 */
   176		buf[0] = 0x32;
   177		buf[1] = 0x00;
   178		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   179				      0x01, 0x40, 0x02, 0x00, buf, 2, CTRL_TIMEOUT);
   180		if (ret < 0)
   181			usb_warn(usbatm, "%s failed on URB148: %d\n", __func__, ret);
   182	
   183		/* URB 149 */
   184		buf[0] = 0x01;
   185		buf[1] = 0x00;
   186		buf[2] = 0x01;
   187		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   188				      0x01, 0x40, 0x03, 0x00, buf, 3, CTRL_TIMEOUT);
   189		if (ret < 0)
   190			usb_warn(usbatm, "%s failed on URB149: %d\n", __func__, ret);
   191	
   192		/* URB 150 */
   193		buf[0] = 0x01;
   194		buf[1] = 0x00;
   195		buf[2] = 0x01;
   196		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   197				      0x01, 0x40, 0x04, 0x00, buf, 3, CTRL_TIMEOUT);
   198		if (ret < 0)
   199			usb_warn(usbatm, "%s failed on URB150: %d\n", __func__, ret);
   200	
   201		/* Extra initialisation in recent drivers - gives higher speeds */
   202	
   203		/* URBext1 */
   204		buf[0] = instance->params.ModemMode;
   205		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   206				      0x01, 0x40, 0x11, 0x00, buf, 1, CTRL_TIMEOUT);
   207		if (ret < 0)
   208			usb_warn(usbatm, "%s failed on URBext1: %d\n", __func__, ret);
   209	
   210		/* URBext2 */
   211		/* This seems to be the one which actually triggers the higher sync
   212		   rate -- it does require the new firmware too, although it works OK
   213		   with older firmware */
   214		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   215				      0x01, 0x40, 0x14, 0x00,
   216				      instance->params.ModemOption,
   217				      MODEM_OPTION_LENGTH, CTRL_TIMEOUT);
   218		if (ret < 0)
   219			usb_warn(usbatm, "%s failed on URBext2: %d\n", __func__, ret);
   220	
   221		/* URBext3 */
   222		buf[0] = instance->params.BMaxDSL & 0xff;
   223		buf[1] = instance->params.BMaxDSL >> 8;
   224		ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
   225				      0x01, 0x40, 0x12, 0x00, buf, 2, CTRL_TIMEOUT);
   226		if (ret < 0)
   227			usb_warn(usbatm, "%s failed on URBext3: %d\n", __func__, ret);
   228	}
   229	
   230	static int speedtch_upload_firmware(struct speedtch_instance_data *instance,
   231					     const struct firmware *fw1,
   232					     const struct firmware *fw2)
   233	{
   234		unsigned char *buffer;
   235		struct usbatm_data *usbatm = instance->usbatm;
   236		struct usb_device *usb_dev = usbatm->usb_dev;
   237		int actual_length;
   238		int ret = 0;
   239		int offset;
   240	
   241		usb_dbg(usbatm, "%s entered\n", __func__);
   242	
   243		buffer = (unsigned char *)__get_free_page(GFP_KERNEL);
   244		if (!buffer) {
   245			ret = -ENOMEM;
   246			usb_dbg(usbatm, "%s: no memory for buffer!\n", __func__);
 > 247			goto out;
   248		}
   249	
   250		if (!usb_ifnum_to_if(usb_dev, 2)) {
   251			ret = -ENODEV;
   252			usb_dbg(usbatm, "%s: interface not found!\n", __func__);
   253			goto out_free;
   254		}
   255	
   256		/* URB 7 */
   257		if (dl_512_first) {	/* some modems need a read before writing the firmware */
   258			ret = usb_bulk_msg(usb_dev, usb_rcvbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
   259					   buffer, 0x200, &actual_length, 2000);
   260	
   261			if (ret < 0 && ret != -ETIMEDOUT)
   262				usb_warn(usbatm, "%s: read BLOCK0 from modem failed (%d)!\n", __func__, ret);
   263			else
   264				usb_dbg(usbatm, "%s: BLOCK0 downloaded (%d bytes)\n", __func__, ret);
   265		}
   266	
   267		/* URB 8 : both leds are static green */
   268		for (offset = 0; offset < fw1->size; offset += PAGE_SIZE) {
   269			int thislen = min_t(int, PAGE_SIZE, fw1->size - offset);
   270			memcpy(buffer, fw1->data + offset, thislen);
   271	
   272			ret = usb_bulk_msg(usb_dev, usb_sndbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
   273					   buffer, thislen, &actual_length, DATA_TIMEOUT);
   274	
   275			if (ret < 0) {
   276				usb_err(usbatm, "%s: write BLOCK1 to modem failed (%d)!\n", __func__, ret);
   277				goto out_free;
   278			}
   279			usb_dbg(usbatm, "%s: BLOCK1 uploaded (%zu bytes)\n", __func__, fw1->size);
   280		}
   281	
   282		/* USB led blinking green, ADSL led off */
   283	
   284		/* URB 11 */
   285		ret = usb_bulk_msg(usb_dev, usb_rcvbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
   286				   buffer, 0x200, &actual_length, DATA_TIMEOUT);
   287	
   288		if (ret < 0) {
   289			usb_err(usbatm, "%s: read BLOCK2 from modem failed (%d)!\n", __func__, ret);
   290			goto out_free;
   291		}
   292		usb_dbg(usbatm, "%s: BLOCK2 downloaded (%d bytes)\n", __func__, actual_length);
   293	
   294		/* URBs 12 to 139 - USB led blinking green, ADSL led off */
   295		for (offset = 0; offset < fw2->size; offset += PAGE_SIZE) {
   296			int thislen = min_t(int, PAGE_SIZE, fw2->size - offset);
   297			memcpy(buffer, fw2->data + offset, thislen);
   298	
   299			ret = usb_bulk_msg(usb_dev, usb_sndbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
   300					   buffer, thislen, &actual_length, DATA_TIMEOUT);
   301	
   302			if (ret < 0) {
   303				usb_err(usbatm, "%s: write BLOCK3 to modem failed (%d)!\n", __func__, ret);
   304				goto out_free;
   305			}
   306		}
   307		usb_dbg(usbatm, "%s: BLOCK3 uploaded (%zu bytes)\n", __func__, fw2->size);
   308	
   309		/* USB led static green, ADSL led static red */
   310	
   311		/* URB 142 */
   312		ret = usb_bulk_msg(usb_dev, usb_rcvbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
   313				   buffer, 0x200, &actual_length, DATA_TIMEOUT);
   314	
   315		if (ret < 0) {
   316			usb_err(usbatm, "%s: read BLOCK4 from modem failed (%d)!\n", __func__, ret);
 > 317			goto out_free;
   318		}
   319	
   320		/* success */
   321		usb_dbg(usbatm, "%s: BLOCK4 downloaded (%d bytes)\n", __func__, actual_length);
   322	
   323		/* Delay to allow firmware to start up. We can do this here
   324		   because we're in our own kernel thread anyway. */
   325		msleep_interruptible(1000);
   326	
 > 327		ret = usb_set_interface(usb_dev, INTERFACE_DATA, instance->params.altsetting
   328	
   329		if (ret < 0) {
   330			usb_err(usbatm, "%s: setting interface to %d failed (%d)!\n", __func__, instance->params.altsetting, ret);
   331			goto out_free;
   332		}
   333	
   334		/* Enable software buffering, if requested */
   335		if (sw_buffering)
   336			speedtch_set_swbuff(instance, 1);
   337	
   338		/* Magic spell; don't ask us what this does */
   339		speedtch_test_sequence(instance);
   340	
   341		ret = 0;
   342	
   343	out_free:
   344		free_page((unsigned long)buffer);
   345	out:
 > 346		return ret;
 > 347	}
   348	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ