Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp2958248iob; Mon, 16 May 2022 09:49:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyc19GTc2uJ3LDIsZuUX+F0zCCvyoEqAnbH0GPnnEoTIAgHmboaxTyiNz4q6IfpelXv5MNQ X-Received: by 2002:aa7:cdd7:0:b0:42a:bbb2:84e5 with SMTP id h23-20020aa7cdd7000000b0042abbb284e5mr2810818edw.91.1652719788250; Mon, 16 May 2022 09:49:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652719788; cv=none; d=google.com; s=arc-20160816; b=SRqtUr8pVnYIPgDxaGMnDafVYctuJGFQuEfAOLuAyyS60eYZ1gDFIeZ4zUemnHzmNG C5CD9v/vQh3hVw50jQrIncU9W7I9puAdlZ5YuK1c3UcvKus43Viap1QQO2XeuGIQEH2B WRoXKy+/2w/OxcfWC0G2xEdRsneP5zCb96HFrJ0nWYB67rHgNWIRDJ1vCHLldqh2xS9d uBmh+jm6e1jPZENANm9dYvUn++Qt5sc16J++rqt+I5VN4+KMpq5vI8HLHuGhUKk/G/wO ifAdR1GWxi9OzZubw3WFvVdYNAvcKC4AsYWltQ/r/YKgV/zjpwgOoRt3FZI69atdtUsu 0LNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:from:references:cc:to:subject :user-agent:mime-version:date:message-id:dkim-signature; bh=/m77Hk4q7eiov1LmJk6VDeVEdlj8oTGwXTxDOxdg0xM=; b=S1o6nJhJMJxLdYITmSmWBqJeR1wgm0fSlDC/dwoPm21CT/YEuulKZM8VsIP1nTQSre nxlVpsJWrvvOk/ud90q7cZOlvc6YewWRjWH8cO6JfOuVf0DW6vCpbc4YrCS0X7rpKM0p oGy803JQx56a5wylOpvN1SV3M2ZwmtCVeYcQ85gowiBNO3Lv35NOu/ZdLMySHlowiXgr uDeTpvOjp2P0GBIDZZfI8xscJc/hlKwf7kLqbAqOC3bEC+LkIBATNECHf+tbFSv1MTc7 mb/pz+HYvFjs8+jekNEYReg1DybvSPRWf2J0ZMH+XB0z+ylBpmsn0Nz1NlHsXmWcXKD/ 8J7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=c6Tgsp1V; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e32-20020a056402332000b00425d8733a9asi9890679eda.111.2022.05.16.09.49.13; Mon, 16 May 2022 09:49:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=c6Tgsp1V; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241339AbiEPMuA (ORCPT + 99 others); Mon, 16 May 2022 08:50:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243459AbiEPMt0 (ORCPT ); Mon, 16 May 2022 08:49:26 -0400 Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71CBF396BF for ; Mon, 16 May 2022 05:49:25 -0700 (PDT) Received: by mail-pl1-x636.google.com with SMTP id n8so14335132plh.1 for ; Mon, 16 May 2022 05:49:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=message-id:date:mime-version:user-agent:subject:to:cc:references :from:in-reply-to; bh=/m77Hk4q7eiov1LmJk6VDeVEdlj8oTGwXTxDOxdg0xM=; b=c6Tgsp1VaJ3zUf8M9MtrRLZiGk4/19xnHV3K/7zAqDQt4CUvFIxnRUnHD03hbzZHSK 5rW7x4QeMBWGHswNDepe6eDywKgwOLlYIIq+U+uIeTQ4PoRS25m7xfWekc4lJ3T1e0mu s2e2gEy84wAToe9M5xyfbLuj9yCsHtfjnhaVc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :to:cc:references:from:in-reply-to; bh=/m77Hk4q7eiov1LmJk6VDeVEdlj8oTGwXTxDOxdg0xM=; b=bzfnkOmblVksltz3tI563tp7LjpxxSkbQNRk3WqPa75d67gjsjOo7rMgiXPuS/pdOb 2vK8VmAIOeXI2b/6w/B1Eqn1Pw6GVO7Ki1MpoDpuadQYtTvo4BBcUWcM3RqgH7/YokX8 hGYcM86p/Y+ysb8CH75ZbmhV0hDgzgNLWV1Wh90MeqXDBFESa05J13PngcIyWGYb5Tym 7FaZt19I5lU3Ydjr7unqdGjKFZ0SAjR/ekqiE/57C/GK7jjU3iCoHimysTRWRLIQ1p1/ f/aD7wK4GOROXsa3cll6Kh2JCufLjlvHHyAyivM0fc4Zs9w/uaG7Gi6AZDn1l1VO8b3Q w7IA== X-Gm-Message-State: AOAM531pa+apXNqGZtB74zT7BfgfYDY4j/VrQRzEsM1M5PLvtk/7vGmn 7jPzSfsuOOFWXL6XNtiG3Vwpb+sIawU9Zm55DipdWQ== X-Received: by 2002:a17:90a:a82:b0:1da:3763:5cf5 with SMTP id 2-20020a17090a0a8200b001da37635cf5mr19571578pjw.55.1652705364894; Mon, 16 May 2022 05:49:24 -0700 (PDT) Received: from [10.176.68.61] ([192.19.148.250]) by smtp.gmail.com with ESMTPSA id n2-20020a622702000000b0050dc76281e7sm6766658pfn.193.2022.05.16.05.49.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 16 May 2022 05:49:24 -0700 (PDT) Message-ID: Date: Mon, 16 May 2022 14:49:21 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH 05/32] brcmfmac: Use mem_to_flex_dup() with struct brcmf_fweh_queue_item To: Kees Cook , "Gustavo A . R . Silva" Cc: linux-wireless , Linux Kernel Mailing List References: <20220504014440.3697851-1-keescook@chromium.org> <20220504014440.3697851-6-keescook@chromium.org> From: Arend van Spriel In-Reply-To: <20220504014440.3697851-6-keescook@chromium.org> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="00000000000035b2e205df2074f4" X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --00000000000035b2e205df2074f4 Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 5/4/2022 3:44 AM, Kees Cook wrote: > As part of the work to perform bounds checking on all memcpy() uses, > replace the open-coded a deserialization of bytes out of memory into a > trailing flexible array by using a flex_array.h helper to perform the > allocation, bounds checking, and copying. > Reviewed-by: Arend van Spriel > Cc: Franky Lin > Cc: Hante Meuleman > Cc: Kalle Valo > Cc: "David S. Miller" > Cc: Eric Dumazet > Cc: Jakub Kicinski > Cc: Paolo Abeni > Cc: linux-wireless@vger.kernel.org > Cc: brcm80211-dev-list.pdl@broadcom.com > Cc: SHA-cyfmac-dev-list@infineon.com > Cc: netdev@vger.kernel.org > Signed-off-by: Kees Cook > --- > .../net/wireless/broadcom/brcm80211/brcmfmac/fweh.c | 11 ++++------- > 1 file changed, 4 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c > index bc3f4e4edcdf..bea798ca6466 100644 > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c > @@ -32,8 +32,8 @@ struct brcmf_fweh_queue_item { > u8 ifidx; > u8 ifaddr[ETH_ALEN]; > struct brcmf_event_msg_be emsg; > - u32 datalen; > - u8 data[]; > + DECLARE_FLEX_ARRAY_ELEMENTS_COUNT(u32, datalen); > + DECLARE_FLEX_ARRAY_ELEMENTS(u8, data); > }; > > /* > @@ -395,7 +395,7 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr, > { > enum brcmf_fweh_event_code code; > struct brcmf_fweh_info *fweh = &drvr->fweh; > - struct brcmf_fweh_queue_item *event; > + struct brcmf_fweh_queue_item *event = NULL; > void *data; > u32 datalen; > > @@ -414,8 +414,7 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr, > datalen + sizeof(*event_packet) > packet_len) > return; > > - event = kzalloc(sizeof(*event) + datalen, gfp); > - if (!event) > + if (mem_to_flex_dup(&event, data, datalen, gfp)) > return; > > event->code = code; > @@ -423,8 +422,6 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr, > > /* use memcpy to get aligned event message */ > memcpy(&event->emsg, &event_packet->msg, sizeof(event->emsg)); > - memcpy(event->data, data, datalen); > - event->datalen = datalen; So does mem_to_flex_dup() store event->datalen? Don't have the entire thread so missing bits and pieces, but at least this raises questions for me. Thanks, Arend --00000000000035b2e205df2074f4 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature 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 XSlOP9s1dqWlRRnnNxV7BVC87lkKKy0+1M2DOF6qRYQlnW4EfOyCToYLAG5zeV+AjepMoX6J9bUz yj4BlDtwH4HFjaRIlPPbdLshUA54/tV84x8woATuLGBq+hTZEpkZAgMBAAGjggHdMIIB2TAOBgNV HQ8BAf8EBAMCBaAwgaMGCCsGAQUFBwEBBIGWMIGTME4GCCsGAQUFBzAChkJodHRwOi8vc2VjdXJl Lmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc2djY3IzcGVyc29uYWxzaWduMmNhMjAyMC5jcnQwQQYI KwYBBQUHMAGGNWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24y Y2EyMDIwME0GA1UdIARGMEQwQgYKKwYBBAGgMgEoCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3 dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAJBgNVHRMEAjAAMEkGA1UdHwRCMEAwPqA8oDqG OGh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3Js MCcGA1UdEQQgMB6BHGFyZW5kLnZhbnNwcmllbEBicm9hZGNvbS5jb20wEwYDVR0lBAwwCgYIKwYB BQUHAwQwHwYDVR0jBBgwFoAUljPR5lgXWzR1ioFWZNW+SN6hj88wHQYDVR0OBBYEFKb+3b9pz8zo 0QsCHGb/p0UrBlU+MA0GCSqGSIb3DQEBCwUAA4IBAQCHisuRNqP0NfYfG3U3XF+bocf//aGLOCGj NvbnSbaUDT/ZkRFb9dQfDRVnZUJ7eDZWHfC+kukEzFwiSK1irDPZQAG9diwy4p9dM0xw5RXSAC1w FzQ0ClJvhK8PsjXF2yzITFmZsEhYEToTn2owD613HvBNijAnDDLV8D0K5gtDnVqkVB9TUAGjHsmo aAwIDFKdqL0O19Kui0WI1qNsu1tE2wAZk0XE9FG0OKyY2a2oFwJ85c5IO0q53U7+YePIwv4/J5aP OGM6lFPJCVnfKc3H76g/FyPyaE4AL/hfdNP8ObvCB6N/BVCccjNdglRsL2ewttAG3GM06LkvrLhv UCvjMYICbTCCAmkCAQEwazBbMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1z YTExMC8GA1UEAxMoR2xvYmFsU2lnbiBHQ0MgUjMgUGVyc29uYWxTaWduIDIgQ0EgMjAyMAIMMSnY h9J/RI6gsHbuMA0GCWCGSAFlAwQCAQUAoIHUMC8GCSqGSIb3DQEJBDEiBCBJRcK7nnr4ROWyX+LK NhVFWOUb/NCuDZ8KmYsX40YMQjAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJ BTEPFw0yMjA1MTYxMjQ5MjVaMGkGCSqGSIb3DQEJDzFcMFowCwYJYIZIAWUDBAEqMAsGCWCGSAFl AwQBFjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwCwYJKoZIhvcNAQEKMAsGCSqGSIb3DQEBBzAL BglghkgBZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEABk6+aIG2lFCoVPBkv05BahqqfY9ENt0DtiL/ ygrQi+lLRriNBZ2w+F4xqLEnkyJIiWEYcPToF3Th/97cwcRQ/4IO39jYWgbIdJhSrcCHvHjZkO+x mwBLqpS4KSLy2HriwOj9lgXQDAe3ivPc8xlMsdp3gKKzdMIzcaeXEyOGHiOCgCQbhFn5uDrGWIgD +vJaCpstAya10RGsMpPm8MUbcr6uNIm6sHVi7AKc10ulgtw1iGJoGP4O/67U7AUvfGlGNDtlX7Bs d3/sOmyfPHYaepielY8zD/5r6WPThIIdkpJLbJl0Won09Dd8iTLqWnZJtx4Y0PSVgldYM3L61ph2 jQ== --00000000000035b2e205df2074f4--