• Vito Caputo's avatar
    media: cxusb: detect cxusb_ctrl_msg error in query · 94a94b60
    Vito Caputo authored
    commit ca8f245f upstream.
    
    Don't use uninitialized ircode[] in cxusb_rc_query() when
    cxusb_ctrl_msg() fails to populate its contents.
    
    syzbot reported:
    
    dvb-usb: bulk message failed: -22 (1/-30591)
    =====================================================
    BUG: KMSAN: uninit-value in ir_lookup_by_scancode drivers/media/rc/rc-main.c:494 [inline]
    BUG: KMSAN: uninit-value in rc_g_keycode_from_table drivers/media/rc/rc-main.c:582 [inline]
    BUG: KMSAN: uninit-value in rc_keydown+0x1a6/0x6f0 drivers/media/rc/rc-main.c:816
    CPU: 1 PID: 11436 Comm: kworker/1:2 Not tainted 5.3.0-rc7+ #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Workqueue: events dvb_usb_read_remote_control
    Call Trace:
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0x191/0x1f0 lib/dump_stack.c:113
     kmsan_report+0x13a/0x2b0 mm/kmsan/kmsan_report.c:108
     __msan_warning+0x73/0xe0 mm/kmsan/kmsan_instr.c:250
     bsearch+0x1dd/0x250 lib/bsearch.c:41
     ir_lookup_by_scancode drivers/media/rc/rc-main.c:494 [inline]
     rc_g_keycode_from_table drivers/media/rc/rc-main.c:582 [inline]
     rc_keydown+0x1a6/0x6f0 drivers/media/rc/rc-main.c:816
     cxusb_rc_query+0x2e1/0x360 drivers/media/usb/dvb-usb/cxusb.c:548
     dvb_usb_read_remote_control+0xf9/0x290 drivers/media/usb/dvb-usb/dvb-usb-remote.c:261
     process_one_work+0x1572/0x1ef0 kernel/workqueue.c:2269
     worker_thread+0x111b/0x2460 kernel/workqueue.c:2415
     kthread+0x4b5/0x4f0 kernel/kthread.c:256
     ret_from_fork+0x35/0x40 arch/x86/entry/entry_64.S:355
    
    Uninit was stored to memory at:
     kmsan_save_stack_with_flags mm/kmsan/kmsan.c:150 [inline]
     kmsan_internal_chain_origin+0xd2/0x170 mm/kmsan/kmsan.c:314
     __msan_chain_origin+0x6b/0xe0 mm/kmsan/kmsan_instr.c:184
     rc_g_keycode_from_table drivers/media/rc/rc-main.c:583 [inline]
     rc_keydown+0x2c4/0x6f0 drivers/media/rc/rc-main.c:816
     cxusb_rc_query+0x2e1/0x360 drivers/media/usb/dvb-usb/cxusb.c:548
     dvb_usb_read_remote_control+0xf9/0x290 drivers/media/usb/dvb-usb/dvb-usb-remote.c:261
     process_one_work+0x1572/0x1ef0 kernel/workqueue.c:2269
     worker_thread+0x111b/0x2460 kernel/workqueue.c:2415
     kthread+0x4b5/0x4f0 kernel/kthread.c:256
     ret_from_fork+0x35/0x40 arch/x86/entry/entry_64.S:355
    
    Local variable description: ----ircode@cxusb_rc_query
    Variable was created at:
     cxusb_rc_query+0x4d/0x360 drivers/media/usb/dvb-usb/cxusb.c:543
     dvb_usb_read_remote_control+0xf9/0x290 drivers/media/usb/dvb-usb/dvb-usb-remote.c:261
    Signed-off-by: default avatarVito Caputo <vcaputo@pengaru.com>
    Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
    Signed-off-by: default avatarSean Young <sean@mess.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    94a94b60
cxusb.c 55 KB