linux-stable/drivers/media
Gustavo A. R. Silva ec731c6ef5 media: ngene: Fix out-of-bounds bug in ngene_command_config_free_buf()
commit 8d4abca95e upstream.

Fix an 11-year old bug in ngene_command_config_free_buf() while
addressing the following warnings caught with -Warray-bounds:

arch/alpha/include/asm/string.h:22:16: warning: '__builtin_memcpy' offset [12, 16] from the object at 'com' is out of the bounds of referenced subobject 'config' with type 'unsigned char' at offset 10 [-Warray-bounds]
arch/x86/include/asm/string_32.h:182:25: warning: '__builtin_memcpy' offset [12, 16] from the object at 'com' is out of the bounds of referenced subobject 'config' with type 'unsigned char' at offset 10 [-Warray-bounds]

The problem is that the original code is trying to copy 6 bytes of
data into a one-byte size member _config_ of the wrong structue
FW_CONFIGURE_BUFFERS, in a single call to memcpy(). This causes a
legitimate compiler warning because memcpy() overruns the length
of &com.cmd.ConfigureBuffers.config. It seems that the right
structure is FW_CONFIGURE_FREE_BUFFERS, instead, because it contains
6 more members apart from the header _hdr_. Also, the name of
the function ngene_command_config_free_buf() suggests that the actual
intention is to ConfigureFreeBuffers, instead of ConfigureBuffers
(which takes place in the function ngene_command_config_buf(), above).

Fix this by enclosing those 6 members of struct FW_CONFIGURE_FREE_BUFFERS
into new struct config, and use &com.cmd.ConfigureFreeBuffers.config as
the destination address, instead of &com.cmd.ConfigureBuffers.config,
when calling memcpy().

This also helps with the ongoing efforts to globally enable
-Warray-bounds and get us closer to being able to tighten the
FORTIFY_SOURCE routines on memcpy().

Link: https://github.com/KSPP/linux/issues/109
Fixes: dae52d009f ("V4L/DVB: ngene: Initial check-in")
Cc: stable@vger.kernel.org
Reported-by: kernel test robot <lkp@intel.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Link: https://lore.kernel.org/linux-hardening/20210420001631.GA45456@embeddedor/
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-07-28 11:13:50 +02:00
..
cec cec-api: prevent leaking memory through hole in structure 2020-09-03 11:24:21 +02:00
common media: siano: Fix out-of-bounds warnings in smscore_load_firmware_family2() 2021-07-20 16:15:48 +02:00
dvb-core media: dvb_net: avoid speculation from net slot 2021-07-20 16:15:44 +02:00
dvb-frontends media: dvb: Add check on sp8870_readreg return 2021-06-03 08:38:10 +02:00
firewire media: firewire: fix memory leak 2020-10-30 10:38:26 +01:00
i2c media: subdev: disallow ioctl for saa6588/davinci 2021-07-20 16:16:05 +02:00
mmc
pci media: ngene: Fix out-of-bounds bug in ngene_command_config_free_buf() 2021-07-28 11:13:50 +02:00
platform media: subdev: disallow ioctl for saa6588/davinci 2021-07-20 16:16:05 +02:00
radio media: si470x-i2c: Move free() past last use of 'radio' 2020-02-05 14:43:40 +00:00
rc media, bpf: Do not copy more entries than user space requested 2021-07-20 16:16:02 +02:00
spi media: cxd2880-spi: fix probe when dvb_attach fails 2019-12-13 08:52:23 +01:00
tuners media: m88rs6000t: avoid potential out-of-bounds reads on arrays 2021-05-22 10:59:33 +02:00
usb media: uvcvideo: Fix pixel format change for Elgato Cam Link 4K 2021-07-20 16:16:06 +02:00
v4l2-core media: v4l2-core: Avoid the dangling pointer in v4l2_fh_release 2021-07-20 16:15:44 +02:00
Kconfig
Makefile
media-device.c media: mc-device.c: fix memleak in media_device_register_entity 2020-10-01 13:14:23 +02:00
media-devnode.c
media-entity.c