summaryrefslogtreecommitdiffstats
path: root/drivers/visorbus
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2020-01-07 21:29:40 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-01-14 15:30:35 +0100
commitcaf82f727e69b647f09d57a1fc56e69d22a5f483 (patch)
treedec26a2eb22c0ef085de229d7c7b674965cbd3f3 /drivers/visorbus
parentuio: uio_pdrv_genirq: Do not log an error when deferring probe routine. (diff)
downloadlinux-caf82f727e69b647f09d57a1fc56e69d22a5f483.tar.xz
linux-caf82f727e69b647f09d57a1fc56e69d22a5f483.zip
visorbus: fix uninitialized variable access
The setup_crash_devices_work_queue function only partially initializes the message it sends to chipset_init, leading to undefined behavior: drivers/visorbus/visorchipset.c: In function 'setup_crash_devices_work_queue': drivers/visorbus/visorchipset.c:333:6: error: '((unsigned char*)&msg.hdr.flags)[0]' is used uninitialized in this function [-Werror=uninitialized] if (inmsg->hdr.flags.response_expected) Set up the entire structure, zero-initializing the 'response_expected' flag. This was apparently found by the patch that added the -O3 build option in Kconfig. Fixes: 12e364b9f08a ("staging: visorchipset driver to provide registration and other services") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Link: https://lore.kernel.org/r/20200107202950.782951-1-arnd@arndb.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/visorbus')
-rw-r--r--drivers/visorbus/visorchipset.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/visorbus/visorchipset.c b/drivers/visorbus/visorchipset.c
index ca752b8f495f..cb1eb7e05f87 100644
--- a/drivers/visorbus/visorchipset.c
+++ b/drivers/visorbus/visorchipset.c
@@ -1210,14 +1210,17 @@ static void setup_crash_devices_work_queue(struct work_struct *work)
{
struct controlvm_message local_crash_bus_msg;
struct controlvm_message local_crash_dev_msg;
- struct controlvm_message msg;
+ struct controlvm_message msg = {
+ .hdr.id = CONTROLVM_CHIPSET_INIT,
+ .cmd.init_chipset = {
+ .bus_count = 23,
+ .switch_count = 0,
+ },
+ };
u32 local_crash_msg_offset;
u16 local_crash_msg_count;
/* send init chipset msg */
- msg.hdr.id = CONTROLVM_CHIPSET_INIT;
- msg.cmd.init_chipset.bus_count = 23;
- msg.cmd.init_chipset.switch_count = 0;
chipset_init(&msg);
/* get saved message count */
if (visorchannel_read(chipset_dev->controlvm_channel,