lkml.org 
[lkml]   [2021]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.12 093/160] wl1251: Fix possible buffer overflow in wl1251_cmd_scan
    Date
    From: Lee Gibson <leegib@gmail.com>

    [ Upstream commit d10a87a3535cce2b890897914f5d0d83df669c63 ]

    Function wl1251_cmd_scan calls memcpy without checking the length.
    Harden by checking the length is within the maximum allowed size.

    Signed-off-by: Lee Gibson <leegib@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210428115508.25624-1-leegib@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/ti/wl1251/cmd.c | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/wireless/ti/wl1251/cmd.c b/drivers/net/wireless/ti/wl1251/cmd.c
    index 498c8db2eb48..d7a869106782 100644
    --- a/drivers/net/wireless/ti/wl1251/cmd.c
    +++ b/drivers/net/wireless/ti/wl1251/cmd.c
    @@ -454,9 +454,12 @@ int wl1251_cmd_scan(struct wl1251 *wl, u8 *ssid, size_t ssid_len,
    cmd->channels[i].channel = channels[i]->hw_value;
    }

    - cmd->params.ssid_len = ssid_len;
    - if (ssid)
    - memcpy(cmd->params.ssid, ssid, ssid_len);
    + if (ssid) {
    + int len = clamp_val(ssid_len, 0, IEEE80211_MAX_SSID_LEN);
    +
    + cmd->params.ssid_len = len;
    + memcpy(cmd->params.ssid, ssid, len);
    + }

    ret = wl1251_cmd_send(wl, CMD_SCAN, cmd, sizeof(*cmd));
    if (ret < 0) {
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-07-06 14:11    [W:4.590 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site