staging: r8188eu: fix a potential NULL pointer dereference
PATCH 1/1 staging: r8188eu: fix a potential NULL pointer dereference
recvframe_chk_defrag() performs a NULL check on psta, but if that check fails then it dereferences it, which it shouldn't do as psta is NULL.
Set pdefrag_q to NULL if above check fails and let the code after it handle that case.
--- drivers/staging/r8188eu/core/rtw_recv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/r8188eu/core/rtw_recv.c +1 -1
@@ -1244,7 +1244,7 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_fr pdefrag_q =NULL ; } }else { - pdefrag_q = &psta->sta_recvpriv.defrag_q; + pdefrag_q =NULL ; }if ((ismfrag ==0 ) && (fragnum ==0 ))
Signature · 1 line
2.30.2
Quoted 4 lines · On sabato 23 aprile 2022 20:47:48 CEST Vihas Makwana wrote:
recvframe_chk_defrag()performs a NULL check on psta, but if that check fails then it dereferences it, which it shouldn't do as psta is NULL.Set
pdefrag_qto NULL if above check fails and let the code after it
handle
Quoted 3 lines
that case.
Fixes 1cc18a22b96b ("staging: r8188eu: Add files for new driver - part
5")
drivers/staging/
Quoted 6 lines
Signed-off-by Vihas Makwana <[email protected]>--- drivers/staging/r8188eu/core/rtw_recv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/staging/ renamed from drivers/staging/r8188eu/core/rtw_recv.c +0
-0
r8188eu/core/rtw_recv.c
drivers/staging/r8188eu/core/rtw_recv.c struct recv_frame *recvframe_chk_defrag(struct
Quoted 4 lines
index
c1005ddaa..db54bceff100644drivers/staging/r8188eu/core/rtw_recv.c +0
-0@@ -1244,7 +1244,7 @@ struct recv_frame *recvframe_chk_defrag(struct
adapter *padapter, struct recv_fr
drivers/staging/r8188eu/core/rtw_recv.c struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_fr · line 1247
Quoted 5 lines
drivers/staging/r8188eu/core/rtw_recv.c +1
-1pdefrag_q =NULL ; } }else { - pdefrag_q = &psta->sta_recvpriv.defrag_q; + pdefrag_q =NULL ;
Hi Vihas,
To me the code looks like this...
struct sta_info *psta;
...
psta = rtw_get_stainfo(pstapriv, psta_addr);
/* The code is about to test if "psta" is a valid pointer */
if (!psta) {
/* "psta" is NULL */
...
} else {
/* "psta" is not NULL */
...drivers/staging/r8188eu/core/rtw_recv.c struct recv_frame *recvframe_chk_defrag(struct · line 1249
Quoted 2 lines
drivers/staging/r8188eu/core/rtw_recv.c +0
-0}
Also, even if "psta" were NULL (but it isn't), your change would still be no good.
Please be very careful with these types of changes next time :)
Thanks,
Fabio M. De Francesco
Quoted 4 lines
drivers/staging/r8188eu/core/rtw_recv.c +0
-0if ((ismfrag ==0 ) && (fragnum ==0 ))Signature · 1 line
2.30.2
Quoted 47 lines · Fabio M. De Francesco
Quoted 4 lines · On sabato 23 aprile 2022 20:47:48 CEST Vihas Makwana wrote:
recvframe_chk_defrag()performs a NULL check on psta, but if that check fails then it dereferences it, which it shouldn't do as psta is NULL.Set
pdefrag_qto NULL if above check fails and let the code after ithandle
Quoted 3 lines
that case.
Fixes 1cc18a22b96b ("staging: r8188eu: Add files for new driver - part5")
drivers/staging/
Quoted 6 lines
Signed-off-by Vihas Makwana <[email protected]>--- drivers/staging/r8188eu/core/rtw_recv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/staging/ renamed from drivers/staging/r8188eu/core/rtw_recv.c +0
-0
r8188eu/core/rtw_recv.cdrivers/staging/r8188eu/core/rtw_recv.c struct recv_frame *recvframe_chk_defrag(struct
Quoted 4 lines
index
c1005ddaa..db54bceff100644drivers/staging/r8188eu/core/rtw_recv.c +0
-0@@ -1244,7 +1244,7 @@ struct recv_frame *recvframe_chk_defrag(structadapter *padapter, struct
recv_frdrivers/staging/r8188eu/core/rtw_recv.c struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_fr · line 1247
Quoted 5 lines
drivers/staging/r8188eu/core/rtw_recv.c +1
-1pdefrag_q =NULL ; } }else { - pdefrag_q = &psta->sta_recvpriv.defrag_q; + pdefrag_q =NULL ;Hi Vihas,
To me the code looks like this...
struct sta_info *psta; ... psta = rtw_get_stainfo(pstapriv, psta_addr); /* The code is about to test if "psta" is a valid pointer */ if (!psta) { /* "psta" is NULL */ ... } else { /* "psta" is not NULL */ ...drivers/staging/r8188eu/core/rtw_recv.c struct recv_frame *recvframe_chk_defrag(struct · line 1249
Quoted 2 lines
drivers/staging/r8188eu/core/rtw_recv.c +0
-0}
Quoted 11 lines
Also, even if "psta" were NULL (but it isn't), your change would still be no good.
Please be very careful with these types of changes next time :)
Thanks,
Fabio M. De Francesco
Quoted 2 lines
drivers/staging/r8188eu/core/rtw_recv.c +0
-1if ((ismfrag ==0 ) && (fragnum ==0 )) --
Oh yea, sorry about this. I don't know how I missed this. Thanks for clarification Fabio. Will take care next time.
Signature · 2 lines
Thanks, Vihas
Please ignore this patch, Greg.
Quoted 17 lines · Vihas Makwana
recvframe_chk_defrag()performs a NULL check on psta, but if that check fails then it dereferences it, which it shouldn't do as psta is NULL.Set
pdefrag_qto NULL if above check fails and let the code after it handle that case.Fixes 1cc18a22b96b ("staging: r8188eu: Add files for new driver - part 5")Signed-off-by Vihas Makwana <[email protected]>--- drivers/staging/r8188eu/core/rtw_recv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/staging/r8188eu/core/rtw_recv.c +0
-0
drivers/staging/r8188eu/core/rtw_recv.c struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_fr · line 1247
Quoted 5 lines
drivers/staging/r8188eu/core/rtw_recv.c +1
-1@@ -1244,7 +1244,7 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_fr pdefrag_q =NULL ; } }else { - pdefrag_q = &psta->sta_recvpriv.defrag_q; + pdefrag_q =NULL ;
What? "psta" is valid pointer on the else path.
(Also this isn't really a dereference, this is just pointer math. It's taking the address. The Oops would happen later if psta were NULL.)
regards,
dan carpenter