Skip to content
Snippets Groups Projects
  • Imre Deak's avatar
    bd2fccac
    drm/dp_mst: Fix MST sideband message body length check · bd2fccac
    Imre Deak authored
    
    Fix the MST sideband message body length check, which must be at least 1
    byte accounting for the message body CRC (aka message data CRC) at the
    end of the message.
    
    This fixes a case where an MST branch device returns a header with a
    correct header CRC (indicating a correctly received body length), with
    the body length being incorrectly set to 0. This will later lead to a
    memory corruption in drm_dp_sideband_append_payload() and the following
    errors in dmesg:
    
       UBSAN: array-index-out-of-bounds in drivers/gpu/drm/display/drm_dp_mst_topology.c:786:25
       index -1 is out of range for type 'u8 [48]'
       Call Trace:
        drm_dp_sideband_append_payload+0x33d/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
       memcpy: detected field-spanning write (size 18446744073709551615) of single field "&msg->msg[msg->curlen]" at drivers/gpu/drm/display/drm_dp_mst_topology.c:791 (size 256)
       Call Trace:
        drm_dp_sideband_append_payload+0x324/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
    Cc: <stable@vger.kernel.org>
    Cc: Lyude Paul <lyude@redhat.com>
    Reviewed-by: Lyude Paul's avatarLyude Paul <lyude@redhat.com>
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241125205314.1725887-1-imre.deak@intel.com
    bd2fccac
    History
    drm/dp_mst: Fix MST sideband message body length check
    Imre Deak authored
    
    Fix the MST sideband message body length check, which must be at least 1
    byte accounting for the message body CRC (aka message data CRC) at the
    end of the message.
    
    This fixes a case where an MST branch device returns a header with a
    correct header CRC (indicating a correctly received body length), with
    the body length being incorrectly set to 0. This will later lead to a
    memory corruption in drm_dp_sideband_append_payload() and the following
    errors in dmesg:
    
       UBSAN: array-index-out-of-bounds in drivers/gpu/drm/display/drm_dp_mst_topology.c:786:25
       index -1 is out of range for type 'u8 [48]'
       Call Trace:
        drm_dp_sideband_append_payload+0x33d/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
       memcpy: detected field-spanning write (size 18446744073709551615) of single field "&msg->msg[msg->curlen]" at drivers/gpu/drm/display/drm_dp_mst_topology.c:791 (size 256)
       Call Trace:
        drm_dp_sideband_append_payload+0x324/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
    Cc: <stable@vger.kernel.org>
    Cc: Lyude Paul <lyude@redhat.com>
    Reviewed-by: Lyude Paul's avatarLyude Paul <lyude@redhat.com>
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241125205314.1725887-1-imre.deak@intel.com
drm_dp_mst_topology.c 175.18 KiB