* [PATCH] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
@ 2022-02-06 22:59 Fabio M. De Francesco
2022-02-08 9:33 ` Greg Kroah-Hartman
0 siblings, 1 reply; 4+ messages in thread
From: Fabio M. De Francesco @ 2022-02-06 22:59 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(). This function is called while holding spinlocks and with
disabled bottom halves, therefore it is not allowed to sleep. 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_pwrctrl.c:79 ips_leave() warn: sleeping in atomic context
drivers/staging/r8188eu/core/rtw_pwrctrl.c:81 ips_leave() warn: sleeping in atomic context
The calls chain (in reverse order) is the following:
rtw_set_key()
-> ips_leave()
-> -> rtw_pwr_wakeup()
-> -> -> rtw_set_802_11_disassociate()
The disabilitation of bottom halves and the acquisition of a spinlock is in
rtw_set_802_11_disassociate().
After the changes, the post-commit hook output the following messages:
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 first
kzalloc().
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 038bddc361c3..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(struct cmd_obj), GFP_KERNEL);
+ pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
if (!pcmd) {
res = _FAIL; /* try again */
goto exit;
}
- psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL);
+ psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_ATOMIC);
if (!psetkeyparm) {
kfree(pcmd);
res = _FAIL;
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
2022-02-06 22:59 [PATCH] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
@ 2022-02-08 9:33 ` Greg Kroah-Hartman
2022-02-08 10:22 ` Fabio M. De Francesco
0 siblings, 1 reply; 4+ messages in thread
From: Greg Kroah-Hartman @ 2022-02-08 9:33 UTC (permalink / raw)
To: Fabio M. De Francesco
Cc: Larry Finger, Phillip Potter, linux-staging, linux-kernel
On Sun, Feb 06, 2022 at 11:59:43PM +0100, Fabio M. De Francesco wrote:
> Use the GFP_ATOMIC flag of kzalloc() with two memory allocation in
> rtw_set_key(). This function is called while holding spinlocks and with
> disabled bottom halves, therefore it is not allowed to sleep. 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_pwrctrl.c:79 ips_leave() warn: sleeping in atomic context
> drivers/staging/r8188eu/core/rtw_pwrctrl.c:81 ips_leave() warn: sleeping in atomic context
>
> The calls chain (in reverse order) is the following:
>
> rtw_set_key()
> -> ips_leave()
> -> -> rtw_pwr_wakeup()
> -> -> -> rtw_set_802_11_disassociate()
>
> The disabilitation of bottom halves and the acquisition of a spinlock is in
> rtw_set_802_11_disassociate().
>
> After the changes, the post-commit hook output the following messages:
>
> 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 first
> kzalloc().
>
> 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 038bddc361c3..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(struct cmd_obj), GFP_KERNEL);
> + pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
> if (!pcmd) {
> res = _FAIL; /* try again */
> goto exit;
> }
> - psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL);
> + psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_ATOMIC);
You are making two different changes here. Please do the first patch to
change the sizeof() change to fix up checkpatch, and then the second one
for the GFP_ATOMIC change so that if there is a problem with either of
them we can only revert the offending change.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
2022-02-08 9:33 ` Greg Kroah-Hartman
@ 2022-02-08 10:22 ` Fabio M. De Francesco
0 siblings, 0 replies; 4+ messages in thread
From: Fabio M. De Francesco @ 2022-02-08 10:22 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Larry Finger, Phillip Potter, linux-staging, linux-kernel
On marted? 8 febbraio 2022 10:33:04 CET Greg Kroah-Hartman wrote:
> On Sun, Feb 06, 2022 at 11:59:43PM +0100, Fabio M. De Francesco wrote:
> > Use the GFP_ATOMIC flag of kzalloc() with two memory allocation in
> > rtw_set_key(). This function is called while holding spinlocks and with
> > disabled bottom halves, therefore it is not allowed to sleep. 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_pwrctrl.c:79 ips_leave() warn: sleeping in atomic context
> > drivers/staging/r8188eu/core/rtw_pwrctrl.c:81 ips_leave() warn: sleeping in atomic context
> >
> > The calls chain (in reverse order) is the following:
> >
> > rtw_set_key()
> > -> ips_leave()
> > -> -> rtw_pwr_wakeup()
> > -> -> -> rtw_set_802_11_disassociate()
> >
> > The disable of bottom halves and the acquisition of a spinlock is in
> > rtw_set_802_11_disassociate().
> >
> > After the changes, the post-commit hook output the following messages:
> >
> > 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 first
> > kzalloc().
> >
> > 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(-)
> >
> > [...]
>
> You are making two different changes here. Please do the first patch to
> change the sizeof() change to fix up checkpatch, and then the second one
> for the GFP_ATOMIC change so that if there is a problem with either of
> them we can only revert the offending change.
>
OK, thanks for your reply. I'm about to split this patch in two steps as
you require.
In the while I've noticed that, after git-reset HARD^, Smatch now points directly
to the kzalloc() calls and emits a different output:
"drivers/staging/r8188eu/core/rtw_mlme.c:1603 rtw_set_key() warn: sleeping in
atomic context
CHECK drivers/staging/r8188eu/core/rtw_mlme_ext.c".
So now it complains specifically about the first of the two kzalloc[s]() in
rtw_set_key(). Before sending v2, I'd like to check why when I made v1 it pointed
to the lines that call rtw_set_key(). You'll see that change in the commit message
of v2.
Thanks,
Fabio
>
> thanks,
>
> greg k-h
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context
@ 2021-11-01 11:41 Fabio M. De Francesco
0 siblings, 0 replies; 4+ messages in thread
From: Fabio M. De Francesco @ 2021-11-01 11:41 UTC (permalink / raw)
To: Larry Finger, Phillip Potter, Greg Kroah-Hartman, linux-staging,
linux-kernel
Cc: Fabio M. De Francesco
Use the GFP_ATOMIC type 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@gmail.com>
---
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..3367ec40679d 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(*cmd_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;
--
2.33.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-02-08 10:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-06 22:59 [PATCH] staging: r8188eu: Use kzalloc() with GFP_ATOMIC in atomic context Fabio M. De Francesco
2022-02-08 9:33 ` Greg Kroah-Hartman
2022-02-08 10:22 ` Fabio M. De Francesco
-- strict thread matches above, loose matches on Subject: below --
2021-11-01 11:41 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.