projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
6392b5b
)
net: skbuff: ensure LSE is pullable before decrementing the MPLS ttl
author
Davide Caratti
<dcaratti@redhat.com>
Thu, 3 Dec 2020 09:58:21 +0000
(10:58 +0100)
committer
Jakub Kicinski
<kuba@kernel.org>
Thu, 3 Dec 2020 19:13:21 +0000
(11:13 -0800)
skb_mpls_dec_ttl() reads the LSE without ensuring that it is contained in
the skb "linear" area. Fix this calling pskb_may_pull() before reading the
current ttl.
Found by code inspection.
Fixes:
2a2ea50870ba
("net: sched: add mpls manipulation actions to TC")
Reported-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Link:
https://lore.kernel.org/r/53659f28be8bc336c113b5254dc637cc76bbae91.1606987074.git.dcaratti@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/skbuff.c
patch
|
blob
|
history
diff --git
a/net/core/skbuff.c
b/net/core/skbuff.c
index
06c526e
..
e578544
100644
(file)
--- a/
net/core/skbuff.c
+++ b/
net/core/skbuff.c
@@
-5786,6
+5786,9
@@
int skb_mpls_dec_ttl(struct sk_buff *skb)
if (unlikely(!eth_p_mpls(skb->protocol)))
return -EINVAL;
+ if (!pskb_may_pull(skb, skb_network_offset(skb) + MPLS_HLEN))
+ return -ENOMEM;
+
lse = be32_to_cpu(mpls_hdr(skb)->label_stack_entry);
ttl = (lse & MPLS_LS_TTL_MASK) >> MPLS_LS_TTL_SHIFT;
if (!--ttl)