• Martin Fuzzey's avatar
    rsi: fix key enabled check causing unwanted encryption for vap_id > 0 · 99ac6018
    Martin Fuzzey authored
    My previous patch checked if encryption should be enabled by directly
    checking info->control.hw_key (like the downstream driver).
    However that missed that the control and driver_info members of
    struct ieee80211_tx_info are union fields.
    
    Due to this when rsi_core_xmit() updates fields in "tx_params"
    (driver_info) it can overwrite the control.hw_key, causing the result
    of the later test to be incorrect.
    
    With the current structure layout the first byte of control.hw_key is
    overlayed with the vap_id so, since we only test if control.hw_key is
    NULL / non NULL, a non zero vap_id will incorrectly enable encryption.
    
    In basic STA and AP modes the vap_id is always zero so it works but in
    P2P client mode a second VIF is created causing vap_id to be non zero
    and hence encryption to be enabled before keys have been set.
    
    Fix this by extracting the key presence flag to a new field in the driver
    private tx_params structure and populating it first.
    
    Fixes: 31453804 ("rsi: fix AP mode with WPA failure due to encrypted EAPOL")
    Signed-off-by: default avatarMartin Fuzzey <martin.fuzzey@flowbird.group>
    CC: stable@vger.kernel.org
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/1630337206-12410-3-git-send-email-martin.fuzzey@flowbird.group
    99ac6018
rsi_91x_hal.c 31.4 KB