lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d1a8eb91-adb9-2163-dc3d-9f86ebdc45e3@lwfinger.net>
Date:   Mon, 1 Nov 2021 10:11:26 -0500
From:   Larry Finger <Larry.Finger@...inger.net>
To:     "Fabio M. De Francesco" <fmdefrancesco@...il.com>,
        Phillip Potter <phil@...lpotter.co.uk>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        linux-staging@...ts.linux.dev, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in
 atomic context

On 11/1/21 09:27, Fabio M. De Francesco wrote:
> Use the GFP_ATOMIC flag of kzalloc() with two memory allocation in
> report_del_sta_event(). This function is called while holding spinlocks,
> therefore it is not allowed to sleep. With the GFP_ATOMIC type flag, the
> allocation is high priority and must not sleep.
> 
> This issue is detected by Smatch which emits the following warning:
> "drivers/staging/r8188eu/core/rtw_mlme_ext.c:6848 report_del_sta_event()
> warn: sleeping in atomic context".
> 
> After the change, the post-commit hook output the following message:
> "CHECK: Prefer kzalloc(sizeof(*pcmd_obj)...) over
> kzalloc(sizeof(struct cmd_obj)...)".
> 
> According to the above "CHECK", use the preferred style in the first
> kzalloc().
> 
> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@...il.com>
> ---
> 
> v1->v2: Fix an overlooked error due to an incorrect copy-paste
> 	of the sizeof() operator.

I am happy that you caught the error before it destroyed every instance of 
r8188eu. Incidentally, I disagree with checkpatch in that I think that 
sizeof(struct foo) is more descriptive than sizeof(*bar). If I wanted to check 
the resulting value of the sizeof(), the second form requires an additional 
step. It probably does not matter much to the compiler, but when I have to do it 
manually, the extra effort is not negligible.

Even though I disagree with the philosophy,

Acked-by: Larry Finger <Larry.Finger@...inger.net>

> 
>   drivers/staging/r8188eu/core/rtw_mlme_ext.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
> index 55c3d4a6faeb..315902682292 100644
> --- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c
> +++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
> @@ -6845,12 +6845,12 @@ void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsi
>   	struct mlme_ext_priv		*pmlmeext = &padapter->mlmeextpriv;
>   	struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
>   
> -	pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
> +	pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
>   	if (!pcmd_obj)
>   		return;
>   
>   	cmdsz = (sizeof(struct stadel_event) + sizeof(struct C2HEvent_Header));
> -	pevtcmd = kzalloc(cmdsz, GFP_KERNEL);
> +	pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
>   	if (!pevtcmd) {
>   		kfree(pcmd_obj);
>   		return;
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ