Skip to contentSkip to conversation

drivers/net/wireless/brcm80211/brcmsmac/dma.c:352:20-24: ERROR: di is NULL but dereferenced.

PATCH In review Fengguang Wu 2 participants 2 messages Nov 29, 2012 1 message not in the archive Networking drivers (wireless)

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): 50b6477a.KNKuUJi++FBSGGYg%[email protected]

#1 lore raw

PATCH 207/237 drivers/net/wireless/brcm80211/brcmsmac/dma.c:352:20-24: ERROR: di is NULL but dereferenced.

Hi Seth,

FYI, there are coccinelle warnings in

tree:   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git master
head:   0751f8654602e4255f0b9c17784d8100d5896010
commit: 90123e045cac4ce8ec13e266f030c618fa674554 [207/237] brcmsmac: Add brcms_dbg_dma() debug macro

+ drivers/net/wireless/brcm80211/brcmsmac/dma.c:352:20-24: ERROR: di is NULL but dereferenced.

vim +352 drivers/net/wireless/brcm80211/brcmsmac/dma.c

5b435de0 Arend van Spriel 2011-10-05  336  
5b435de0 Arend van Spriel 2011-10-05  337  static uint ntxdactive(struct dma_info *di, uint h, uint t)
5b435de0 Arend van Spriel 2011-10-05  338  {
5b435de0 Arend van Spriel 2011-10-05  339  	return txd(di, t-h);
5b435de0 Arend van Spriel 2011-10-05  340  }
5b435de0 Arend van Spriel 2011-10-05  341  
5b435de0 Arend van Spriel 2011-10-05  342  static uint nrxdactive(struct dma_info *di, uint h, uint t)
5b435de0 Arend van Spriel 2011-10-05  343  {
5b435de0 Arend van Spriel 2011-10-05  344  	return rxd(di, t-h);
5b435de0 Arend van Spriel 2011-10-05  345  }
5b435de0 Arend van Spriel 2011-10-05  346  
5b435de0 Arend van Spriel 2011-10-05  347  static uint _dma_ctrlflags(struct dma_info *di, uint mask, uint flags)
5b435de0 Arend van Spriel 2011-10-05  348  {
ae8e4672 Arend van Spriel 2011-10-29  349  	uint dmactrlflags;
5b435de0 Arend van Spriel 2011-10-05  350  
5b435de0 Arend van Spriel 2011-10-05  351  	if (di == NULL) {
90123e04 Seth Forshee     2012-11-15 @352  		brcms_dbg_dma(di->core, "NULL dma handle\n");
5b435de0 Arend van Spriel 2011-10-05  353  		return 0;
5b435de0 Arend van Spriel 2011-10-05  354  	}
5b435de0 Arend van Spriel 2011-10-05  355  
ae8e4672 Arend van Spriel 2011-10-29  356  	dmactrlflags = di->dma.dmactrlflags;
5b435de0 Arend van Spriel 2011-10-05  357  	dmactrlflags &= ~mask;
5b435de0 Arend van Spriel 2011-10-05  358  	dmactrlflags |= flags;
5b435de0 Arend van Spriel 2011-10-05  359  
5b435de0 Arend van Spriel 2011-10-05  360  	/* If trying to enable parity, check if parity is actually supported */

---
0-DAY kernel build testing backend Open Source Technology Center
Fengguang Wu, Yuanhan Liu Intel Corporation

#2 lore raw
Quoted 23 lines · Fengguang Wu

Hi Seth,

FYI, there are coccinelle warnings in

tree:   git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git master
head:   0751f8654602e4255f0b9c17784d8100d5896010
commit: 90123e045cac4ce8ec13e266f030c618fa674554 [207/237] brcmsmac: Add brcms_dbg_dma() debug macro

+ drivers/net/wireless/brcm80211/brcmsmac/dma.c:352:20-24: ERROR: di is NULL but dereferenced.

vim +352 drivers/net/wireless/brcm80211/brcmsmac/dma.c

5b435de0 Arend van Spriel 2011-10-05  336  
5b435de0 Arend van Spriel 2011-10-05  337  static uint ntxdactive(struct dma_info *di, uint h, uint t)
5b435de0 Arend van Spriel 2011-10-05  338  {
5b435de0 Arend van Spriel 2011-10-05  339  	return txd(di, t-h);
5b435de0 Arend van Spriel 2011-10-05  340  }
5b435de0 Arend van Spriel 2011-10-05  341  
5b435de0 Arend van Spriel 2011-10-05  342  static uint nrxdactive(struct dma_info *di, uint h, uint t)
5b435de0 Arend van Spriel 2011-10-05  343  {
5b435de0 Arend van Spriel 2011-10-05  344  	return rxd(di, t-h);
5b435de0 Arend van Spriel 2011-10-05  345  }
5b435de0 Arend van Spriel 2011-10-05  346  
Quoted 8 lines
5b435de0 Arend van Spriel 2011-10-05  347  static uint _dma_ctrlflags(struct dma_info *di, uint mask, uint flags)
5b435de0 Arend van Spriel 2011-10-05  348  {
ae8e4672 Arend van Spriel 2011-10-29  349  	uint dmactrlflags;
5b435de0 Arend van Spriel 2011-10-05  350  
5b435de0 Arend van Spriel 2011-10-05  351  	if (di == NULL) {
90123e04 Seth Forshee     2012-11-15 @352  		brcms_dbg_dma(di->core, "NULL dma handle\n");
5b435de0 Arend van Spriel 2011-10-05  353  		return 0;
5b435de0 Arend van Spriel 2011-10-05  354  	}

Hi Fengguang,

Yep, that's obviously wrong. Thanks for the bug report.

John, here's a fix. There's no way to have a debug message if di is NULL, so I've just removed it. Obviously I've never hitting that condition anyway.

Seth

Quoted 1 line

From b0d7b62345e5b32b4022278f238296f5bdf06e8a Mon Sep 17 00:00:00 2001

From: Seth Forshee <[email protected]>
Date: Thu, 29 Nov 2012 07:36:00 -0600
Subject: [PATCH] brcmsmac: Fix possible NULL pointer dereference in
_dma_ctrlflags()

There's a debug message to warn if this function is passed a NULL pointer, but in order to print the message we have to dereference the pointer. Obviously this isn't a good idea, so remove the message.

---
 drivers/net/wireless/brcm80211/brcmsmac/dma.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/dma.c +1 -3
index 511e457..1860c57 100644
@@ -349,10 +349,8 @@ static uint _dma_ctrlflags(struct dma_info *di, uint mask, uint flags)
 {
 	uint dmactrlflags;
 
-	if (di == NULL) {
-		brcms_dbg_dma(di->core, "NULL dma handle\n");
+	if (di == NULL)
 		return 0;
-	}
 
 	dmactrlflags = di->dma.dmactrlflags;
 	dmactrlflags &= ~mask;
Signature · 1 line
1.7.9.5