[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20100910115809.GF5959@bicker>
Date: Fri, 10 Sep 2010 13:58:10 +0200
From: Dan Carpenter <error27@...il.com>
To: Paul Mackerras <paulus@...ba.org>
Cc: "David S. Miller" <davem@...emloft.net>,
Simon Arlott <simon@...e.lp0.eu>,
Ben McKeegan <ben@...servers.co.uk>,
Stephen Hemminger <shemminger@...tta.com>,
Len Sorensen <lsorense@...lub.uwaterloo.ca>,
linux-ppp@...r.kernel.org, netdev@...r.kernel.org,
kernel-janitors@...r.kernel.org
Subject: [patch] ppp: potential NULL dereference in ppp_mp_explode()
Smatch complains because we check whether "pch->chan" is NULL and then
dereference it unconditionally on the next line. Partly the reason this
bug was introduced is because code was too complicated. I've simplified
it a little.
Signed-off-by: Dan Carpenter <error27@...il.com>
---
Compile tested only. Perhaps it would be better to set pch->speed to
zero? The comments say that zero implies the speed hasn't been set.
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c
index 6695a51..736b917 100644
--- a/drivers/net/ppp_generic.c
+++ b/drivers/net/ppp_generic.c
@@ -1314,8 +1314,13 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb)
hdrlen = (ppp->flags & SC_MP_XSHORTSEQ)? MPHDRLEN_SSN: MPHDRLEN;
i = 0;
list_for_each_entry(pch, &ppp->channels, clist) {
- navail += pch->avail = (pch->chan != NULL);
- pch->speed = pch->chan->speed;
+ if (pch->chan) {
+ pch->avail = 1;
+ navail++;
+ pch->speed = pch->chan->speed;
+ } else {
+ pch->avail = 0;
+ }
if (pch->avail) {
if (skb_queue_empty(&pch->file.xq) ||
!pch->had_frag) {
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists