diff options
author | Jia-Ju Bai <baijiaju1990@gmail.com> | 2019-07-29 16:24:33 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-08-09 17:51:45 +0200 |
commit | a735cc5fbec67f8a21dd6b8ad935c488f4ad02a9 (patch) | |
tree | 7bf9508f321b288db699e7bc8088bf5b7f28b2b5 /net | |
parent | e3c26a6a67c2078956d4d244afb9d6d8685455d5 (diff) | |
download | linux-stable-a735cc5fbec67f8a21dd6b8ad935c488f4ad02a9.tar.gz linux-stable-a735cc5fbec67f8a21dd6b8ad935c488f4ad02a9.tar.bz2 linux-stable-a735cc5fbec67f8a21dd6b8ad935c488f4ad02a9.zip |
net: sched: Fix a possible null-pointer dereference in dequeue_func()
[ Upstream commit 051c7b39be4a91f6b7d8c4548444e4b850f1f56c ]
In dequeue_func(), there is an if statement on line 74 to check whether
skb is NULL:
if (skb)
When skb is NULL, it is used on line 77:
prefetch(&skb->end);
Thus, a possible null-pointer dereference may occur.
To fix this bug, skb->end is used when skb is not NULL.
This bug is found by a static analysis tool STCheck written by us.
Fixes: 76e3cc126bb2 ("codel: Controlled Delay AQM")
Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/sched/sch_codel.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/sched/sch_codel.c b/net/sched/sch_codel.c index 25ef172c23df..30169b3adbbb 100644 --- a/net/sched/sch_codel.c +++ b/net/sched/sch_codel.c @@ -71,10 +71,10 @@ static struct sk_buff *dequeue_func(struct codel_vars *vars, void *ctx) struct Qdisc *sch = ctx; struct sk_buff *skb = __qdisc_dequeue_head(&sch->q); - if (skb) + if (skb) { sch->qstats.backlog -= qdisc_pkt_len(skb); - - prefetch(&skb->end); /* we'll need skb_shinfo() */ + prefetch(&skb->end); /* we'll need skb_shinfo() */ + } return skb; } |