• Stefano Brivio's avatar
    cxgb4: Fix stack out-of-bounds read due to wrong size to t4_record_mbox() · 24bd86e6
    Stefano Brivio authored
    
    [ Upstream commit 0f308686 ]
    
    Passing commands for logging to t4_record_mbox() with size
    MBOX_LEN, when the actual command size is actually smaller,
    causes out-of-bounds stack accesses in t4_record_mbox() while
    copying command words here:
    
    	for (i = 0; i < size / 8; i++)
    		entry->cmd[i] = be64_to_cpu(cmd[i]);
    
    Up to 48 bytes from the stack are then leaked to debugfs.
    
    This happens whenever we send (and log) commands described by
    structs fw_sched_cmd (32 bytes leaked), fw_vi_rxmode_cmd (48),
    fw_hello_cmd (48), fw_bye_cmd (48), fw_initialize_cmd (48),
    fw_reset_cmd (48), fw_pfvf_cmd (32), fw_eq_eth_cmd (16),
    fw_eq_ctrl_cmd (32), fw_eq_ofld_cmd (32), fw_acl_mac_cmd(16),
    fw_rss_glb_config_cmd(32), fw_rss_vi_config_cmd(32),
    fw_devlog_cmd(32), fw_vi_enable_cmd(48), fw_port_cmd(32),
    fw_sched_cmd(32), fw_devlog_cmd(32).
    
    The cxgb4vf driver got this right instead.
    
    When we call t4_record_mbox() to log a command reply, a MBOX_LEN
    size can be used though, as get_mbox_rpl() will fill cmd_rpl up
    completely.
    
    Fixes: 7f080c3f ("cxgb4: Add support to enable logging of firmware mailbox commands")
    Signed-off-by: default avatarStefano Brivio <sbrivio@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    24bd86e6
t4_hw.c 239 KB