Patch "net/sched: pedit: make sure that offset is valid" has been added to the 4.8-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net/sched: pedit: make sure that offset is valid
to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-sched-pedit-make-sure-that-offset-is-valid.patch
and it can be found in the queue-4.8 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Dec 8 07:19:12 CET 2016
From: Amir Vadai <[email protected]>
Date: Mon, 28 Nov 2016 12:56:40 +0200
Subject: net/sched: pedit: make sure that offset is valid
From: Amir Vadai <[email protected]>
[ Upstream commit 95c2027bfeda21a28eb245121e6a249f38d0788e ]
Add a validation function to make sure offset is valid:
1. Not below skb head (could happen when offset is negative).
2. Validate both 'offset' and 'at'.
--- net/sched/act_pedit.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-)
net/sched/act_pedit.c +20 -4
@@ -108,6 +108,17 @@ static void tcf_pedit_cleanup(struct tc_kfree (keys); } +static bool offset_valid (struct sk_buff *skb,int offset) +{ +if (offset >0 && offset > skb->len) +return false; + +if (offset <0 && -offset >skb_headroom (skb)) +return false; + +return true; +} +static int tcf_pedit (struct sk_buff *skb,const struct tc_action *a,struct tcf_result *res) {
@@ -134,6 +145,11 @@ static int tcf_pedit(struct sk_buff *skbif (tkey->offmask) {char *d, _d; +if (!offset_valid (skb, off + tkey->at)) { +pr_info ("tc filter pedit 'at' offset %d out of bounds\n" , + off + tkey->at); + goto bad; + } d =skb_header_pointer (skb, off + tkey->at,1 , &_d);if (!d)
@@ -146,10 +162,10 @@ static int tcf_pedit(struct sk_buff *skb " offset must be on 32 bit boundaries\n"); goto bad; } -if (offset >0 && offset > skb->len) { -pr_info ("tc filter pedit" -" offset %d can't exceed pkt length %d\n" , - offset, skb->len); + +if (!offset_valid (skb, off + offset)) { +pr_info ("tc filter pedit offset %d out of bounds\n" , + offset); goto bad; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.8/net-sched-pedit-make-sure-that-offset-is-valid.patch