[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <87o72juwi2.wl-tiwai@suse.de>
Date: Wed, 13 Nov 2024 13:52:05 +0100
From: Takashi Iwai <tiwai@...e.de>
To: Dan Carpenter <dan.carpenter@...aro.org>
Cc: oe-kbuild@...ts.linux.dev,
"Geoffrey D. Bennett" <g@...vu>,
lkp@...el.com,
oe-kbuild-all@...ts.linux.dev,
linux-kernel@...r.kernel.org,
Takashi Iwai <tiwai@...e.de>
Subject: Re: sound/usb/mixer_scarlett2.c:4972 scarlett2_ioctl_select_flash_segment() warn: potential spectre issue 'private->flash_segment_nums' [r] (local cap)
On Mon, 11 Nov 2024 10:20:07 +0100,
Dan Carpenter wrote:
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: de2f378f2b771b39594c04695feee86476743a69
> commit: 6a7508e64ee3e8320c886020bcdcd70f7fcbff2c ALSA: scarlett2: Add ioctl commands to erase flash segments
> date: 11 months ago
> config: x86_64-randconfig-161-20241110 (https://download.01.org/0day-ci/archive/20241110/202411101058.RkdgFPCg-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
>
> 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>
> | Reported-by: Dan Carpenter <dan.carpenter@...aro.org>
> | Closes: https://lore.kernel.org/r/202411101058.RkdgFPCg-lkp@intel.com/
>
> smatch warnings:
> sound/usb/mixer_scarlett2.c:4972 scarlett2_ioctl_select_flash_segment() warn: potential spectre issue 'private->flash_segment_nums' [r] (local cap)
> sound/usb/mixer_scarlett2.c:4973 scarlett2_ioctl_select_flash_segment() warn: possible spectre second half. 'segment_num'
>
> vim +4972 sound/usb/mixer_scarlett2.c
>
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4957 /* Select a flash segment for erasing (and possibly writing to) */
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4958 static int scarlett2_ioctl_select_flash_segment(
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4959 struct usb_mixer_interface *mixer,
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4960 unsigned long arg)
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4961 {
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4962 struct scarlett2_data *private = mixer->private_data;
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4963 int segment_id, segment_num;
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4964
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4965 if (get_user(segment_id, (int __user *)arg))
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4966 return -EFAULT;
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4967
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4968 /* Check the segment ID and segment number */
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4969 if (segment_id < 0 || segment_id >= SCARLETT2_SEGMENT_ID_COUNT)
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4970 return -EINVAL;
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 4971
> 6a7508e64ee3e8 Geoffrey D. Bennett 2023-12-20 @4972 segment_num = private->flash_segment_nums[segment_id];
>
> I suspect this does need an array_index_nospec().
I'm not sure whether it can really leak, but sure,
array_index_nospec() can't hurt.
Care to submit a fix patch with that? Thanks!
Takashi
Powered by blists - more mailing lists