All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
@ 2022-02-08 18:04 Fabio M. De Francesco
  2022-02-08 18:04 ` [PATCH v2 1/2] staging: r8188eu: Use sizeof dereferenced pointer in kzalloc() Fabio M. De Francesco
  2022-02-08 18:04 ` [PATCH v2 2/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
  0 siblings, 2 replies; 5+ messages in thread
From: Fabio M. De Francesco @ 2022-02-08 18:04 UTC (permalink / raw)
  To: Larry Finger, Phillip Potter, Greg Kroah-Hartman, linux-staging,
	linux-kernel
  Cc: Fabio M. De Francesco

Use the GFP_ATOMIC flag of kzalloc() in two memory allocation in rtw_set_key().
This function is not allowed to sleep because it executes in atomic context. With
the GFP_ATOMIC type flag, the allocation is high priority and cannot sleep.

This issue is detected by Smatch which emits the following warning:
drivers/staging/r8188eu/core/rtw_mlme.c:1603 rtw_set_key() warn: sleeping in atomic context

Before the above-mentioned changes, checkpatch.pl reports the following issues:

CHECK: Prefer kzalloc(sizeof(*pcmd)...) over kzalloc(sizeof(struct cmd_obj)...)
+       pcmd = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);

CHECK: Prefer kzalloc(sizeof(*psetkeyparm)...) over kzalloc(sizeof(struct setkey_parm)...)
+       psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_ATOMIC).

According to the above "CHECK[S]", use the preferred style in the two kzalloc().

Changes from v1: Split one patch into two according to a requirement by
Greg Kroah-Hartman.

Fabio M. De Francesco (2):
  staging: r8188eu: Use size of dereferenced pointers in kzalloc()
  staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context

 drivers/staging/r8188eu/core/rtw_mlme.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/2] staging: r8188eu: Use sizeof dereferenced pointer in kzalloc()
  2022-02-08 18:04 [PATCH v2 0/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
@ 2022-02-08 18:04 ` Fabio M. De Francesco
  2022-02-08 18:04 ` [PATCH v2 2/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
  1 sibling, 0 replies; 5+ messages in thread
From: Fabio M. De Francesco @ 2022-02-08 18:04 UTC (permalink / raw)
  To: Larry Finger, Phillip Potter, Greg Kroah-Hartman, linux-staging,
	linux-kernel
  Cc: Fabio M. De Francesco

checkpatch.pl emits the following warning:

CHECK: Prefer kzalloc(sizeof(*pcmd)...) over kzalloc(sizeof(struct cmd_obj)...)
+       pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);

CHECK: Prefer kzalloc(sizeof(*psetkeyparm)...) over kzalloc(sizeof(struct setkey_parm)...)
+       psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL).

According to the above "CHECK[S]", use the preferred style in the two kzalloc()
of rtw_set_key().

Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
---

 drivers/staging/r8188eu/core/rtw_mlme.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/r8188eu/core/rtw_mlme.c b/drivers/staging/r8188eu/core/rtw_mlme.c
index 038bddc361c3..f5b2df72e0f4 100644
--- a/drivers/staging/r8188eu/core/rtw_mlme.c
+++ b/drivers/staging/r8188eu/core/rtw_mlme.c
@@ -1600,12 +1600,12 @@ int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, in
 	struct mlme_priv		*pmlmepriv = &adapter->mlmepriv;
 	int	res = _SUCCESS;
 
-	pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
+	pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
 	if (!pcmd) {
 		res = _FAIL;  /* try again */
 		goto exit;
 	}
-	psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL);
+	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_KERNEL);
 	if (!psetkeyparm) {
 		kfree(pcmd);
 		res = _FAIL;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
  2022-02-08 18:04 [PATCH v2 0/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
  2022-02-08 18:04 ` [PATCH v2 1/2] staging: r8188eu: Use sizeof dereferenced pointer in kzalloc() Fabio M. De Francesco
@ 2022-02-08 18:04 ` Fabio M. De Francesco
  2022-02-15 16:10   ` Greg Kroah-Hartman
  1 sibling, 1 reply; 5+ messages in thread
From: Fabio M. De Francesco @ 2022-02-08 18:04 UTC (permalink / raw)
  To: Larry Finger, Phillip Potter, Greg Kroah-Hartman, linux-staging,
	linux-kernel
  Cc: Fabio M. De Francesco

Use the GFP_ATOMIC flag of kzalloc() with two memory allocation in rtw_set_key() 
because it is not allowed to sleep while it executes in atomic context.

With the GFP_ATOMIC type flag, the allocation is high priority and thus it 
cannot sleep.

This issue is detected by Smatch which emits the following warning:

"drivers/staging/r8188eu/core/rtw_mlme.c:1603 rtw_set_key() warn: sleeping in atomic context".

Fixes: 79f712ea994d ("staging: r8188eu: Remove wrappers for kalloc() and kzalloc()")
Fixes: 15865124feed ("staging: r8188eu: introduce new core dir for RTL8188eu driver")
Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
---
 drivers/staging/r8188eu/core/rtw_mlme.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/r8188eu/core/rtw_mlme.c b/drivers/staging/r8188eu/core/rtw_mlme.c
index f5b2df72e0f4..860835e29b79 100644
--- a/drivers/staging/r8188eu/core/rtw_mlme.c
+++ b/drivers/staging/r8188eu/core/rtw_mlme.c
@@ -1600,12 +1600,12 @@ int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, in
 	struct mlme_priv		*pmlmepriv = &adapter->mlmepriv;
 	int	res = _SUCCESS;
 
-	pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
+	pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
 	if (!pcmd) {
 		res = _FAIL;  /* try again */
 		goto exit;
 	}
-	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_KERNEL);
+	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_ATOMIC);
 	if (!psetkeyparm) {
 		kfree(pcmd);
 		res = _FAIL;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
  2022-02-08 18:04 ` [PATCH v2 2/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
@ 2022-02-15 16:10   ` Greg Kroah-Hartman
  2022-02-17  9:32     ` Fabio M. De Francesco
  0 siblings, 1 reply; 5+ messages in thread
From: Greg Kroah-Hartman @ 2022-02-15 16:10 UTC (permalink / raw)
  To: Fabio M. De Francesco
  Cc: Larry Finger, Phillip Potter, linux-staging, linux-kernel

On Tue, Feb 08, 2022 at 07:04:26PM +0100, Fabio M. De Francesco wrote:
> Use the GFP_ATOMIC flag of kzalloc() with two memory allocation in rtw_set_key() 
> because it is not allowed to sleep while it executes in atomic context.
> 
> With the GFP_ATOMIC type flag, the allocation is high priority and thus it 
> cannot sleep.
> 
> This issue is detected by Smatch which emits the following warning:
> 
> "drivers/staging/r8188eu/core/rtw_mlme.c:1603 rtw_set_key() warn: sleeping in atomic context".
> 
> Fixes: 79f712ea994d ("staging: r8188eu: Remove wrappers for kalloc() and kzalloc()")
> Fixes: 15865124feed ("staging: r8188eu: introduce new core dir for RTL8188eu driver")
> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
> ---
>  drivers/staging/r8188eu/core/rtw_mlme.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/r8188eu/core/rtw_mlme.c b/drivers/staging/r8188eu/core/rtw_mlme.c
> index f5b2df72e0f4..860835e29b79 100644
> --- a/drivers/staging/r8188eu/core/rtw_mlme.c
> +++ b/drivers/staging/r8188eu/core/rtw_mlme.c
> @@ -1600,12 +1600,12 @@ int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, in
>  	struct mlme_priv		*pmlmepriv = &adapter->mlmepriv;
>  	int	res = _SUCCESS;
>  
> -	pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
> +	pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
>  	if (!pcmd) {
>  		res = _FAIL;  /* try again */
>  		goto exit;
>  	}
> -	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_KERNEL);
> +	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_ATOMIC);
>  	if (!psetkeyparm) {
>  		kfree(pcmd);
>  		res = _FAIL;
> -- 
> 2.34.1

What code path is calling this in atomic context?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
  2022-02-15 16:10   ` Greg Kroah-Hartman
@ 2022-02-17  9:32     ` Fabio M. De Francesco
  0 siblings, 0 replies; 5+ messages in thread
From: Fabio M. De Francesco @ 2022-02-17  9:32 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, linux-staging, linux-kernel

On marted? 15 febbraio 2022 17:10:12 CET Greg Kroah-Hartman wrote:
> On Tue, Feb 08, 2022 at 07:04:26PM +0100, Fabio M. De Francesco wrote:
> > Use the GFP_ATOMIC flag of kzalloc() with two memory allocation in rtw_set_key() 
> > because it is not allowed to sleep while it executes in atomic context.
> > 
> > With the GFP_ATOMIC type flag, the allocation is high priority and thus it 
> > cannot sleep.
> > 
> > This issue is detected by Smatch which emits the following warning:
> > 
> > "drivers/staging/r8188eu/core/rtw_mlme.c:1603 rtw_set_key() warn: sleeping in atomic context".
> > 
> > Fixes: 79f712ea994d ("staging: r8188eu: Remove wrappers for kalloc() and kzalloc()")
> > Fixes: 15865124feed ("staging: r8188eu: introduce new core dir for RTL8188eu driver")
> > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
> > ---
> >  drivers/staging/r8188eu/core/rtw_mlme.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/staging/r8188eu/core/rtw_mlme.c b/drivers/staging/r8188eu/core/rtw_mlme.c
> > index f5b2df72e0f4..860835e29b79 100644
> > --- a/drivers/staging/r8188eu/core/rtw_mlme.c
> > +++ b/drivers/staging/r8188eu/core/rtw_mlme.c
> > @@ -1600,12 +1600,12 @@ int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, in
> >  	struct mlme_priv		*pmlmepriv = &adapter->mlmepriv;
> >  	int	res = _SUCCESS;
> >  
> > -	pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
> > +	pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
> >  	if (!pcmd) {
> >  		res = _FAIL;  /* try again */
> >  		goto exit;
> >  	}
> > -	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_KERNEL);
> > +	psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_ATOMIC);
> >  	if (!psetkeyparm) {
> >  		kfree(pcmd);
> >  		res = _FAIL;
> > -- 
> > 2.34.1
> 
> What code path is calling this in atomic context?
> 
> thanks,
> 
> greg k-h
> 
I blindly trusted Smatch and didn't check properly :(

Now I'm pretty sure that all(?) the code paths that lead to those kzalloc() do 
not call rtw_set_key() in atomic context.

The only calls chain that seemed to call rtw_set_key() in atomic context was 
rtw_set_key() <- ips_leave() <- _rtw_pwr_wakeup() <- rtw_set_802_11_disassociate() 
but Smatch (and I) missed that, immediately before calling ips_leave(), an 'if'
condition makes _rtw_pwr_wakeup() exit and return to rtw_set_802_11_disassociate().

Therefore, please drop this patch.

Thanks,

Fabio M. De Francesco  




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-02-17  9:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-08 18:04 [PATCH v2 0/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
2022-02-08 18:04 ` [PATCH v2 1/2] staging: r8188eu: Use sizeof dereferenced pointer in kzalloc() Fabio M. De Francesco
2022-02-08 18:04 ` [PATCH v2 2/2] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
2022-02-15 16:10   ` Greg Kroah-Hartman
2022-02-17  9:32     ` Fabio M. De Francesco

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.