Skip to content
  • Kees Cook's avatar
    59c668d7
    mwifiex: Avoid memset() over-write of WEP key_material · 59c668d7
    Kees Cook authored
    
    
    In preparation for FORTIFY_SOURCE performing compile-time and run-time
    field bounds checking for memset(), avoid intentionally writing across
    neighboring array fields.
    
    When preparing to call mwifiex_set_keyparamset_wep(), key_material is
    treated very differently from its structure layout (which has only a
    single struct mwifiex_ie_type_key_param_set). Instead, add a new type to
    the union so memset() can correctly reason about the size of the
    structure.
    
    Note that the union ("params", 196 bytes) containing key_material was
    not large enough to hold the target of this memset(): sizeof(struct
    mwifiex_ie_type_key_param_set) == 60, NUM_WEP_KEYS = 4, so 240
    bytes, or 44 bytes past the end of "params". The good news is that
    it appears that the command buffer, as allocated, is 2048 bytes
    (MWIFIEX_SIZE_OF_CMD_BUFFER), so no neighboring memory appears to be
    getting clobbered.
    
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Reviewed-by: default avatarBrian Norris <briannorris@chromium.org>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210617171522.3410951-1-keescook@chromium.org
    59c668d7
    mwifiex: Avoid memset() over-write of WEP key_material
    Kees Cook authored
    
    
    In preparation for FORTIFY_SOURCE performing compile-time and run-time
    field bounds checking for memset(), avoid intentionally writing across
    neighboring array fields.
    
    When preparing to call mwifiex_set_keyparamset_wep(), key_material is
    treated very differently from its structure layout (which has only a
    single struct mwifiex_ie_type_key_param_set). Instead, add a new type to
    the union so memset() can correctly reason about the size of the
    structure.
    
    Note that the union ("params", 196 bytes) containing key_material was
    not large enough to hold the target of this memset(): sizeof(struct
    mwifiex_ie_type_key_param_set) == 60, NUM_WEP_KEYS = 4, so 240
    bytes, or 44 bytes past the end of "params". The good news is that
    it appears that the command buffer, as allocated, is 2048 bytes
    (MWIFIEX_SIZE_OF_CMD_BUFFER), so no neighboring memory appears to be
    getting clobbered.
    
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Reviewed-by: default avatarBrian Norris <briannorris@chromium.org>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210617171522.3410951-1-keescook@chromium.org
Loading