From 370b2457e7bda9ec0ed906d131d6cdbd452cd61e Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Thu, 10 Apr 2008 02:02:28 -0700 Subject: [PATCH] --- yaml --- r: 90607 b: refs/heads/master c: 4738c1db1593687713869fa69e733eebc7b0d6d8 h: refs/heads/master i: 90605: 0f83558da0bca7fa3e921884b4e4f1ede9a9f623 90603: aedd3e842f4e1d75b5a8f719c23d3c531c868452 90599: 1ad0847444479d01409ace40aff2024630516044 90591: 6f7f08a00f0e6170d3cc15e5ba4e32e6f08d732b v: v3 --- [refs] | 2 +- trunk/include/linux/filter.h | 3 ++- trunk/net/core/filter.c | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 6b7f8250d816..502100ae24d1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3cccd6078413e9707f0ef3652b4e6e9cb84e9fa0 +refs/heads/master: 4738c1db1593687713869fa69e733eebc7b0d6d8 diff --git a/trunk/include/linux/filter.h b/trunk/include/linux/filter.h index 673e5677ebcc..b6ea9aa9e853 100644 --- a/trunk/include/linux/filter.h +++ b/trunk/include/linux/filter.h @@ -121,7 +121,8 @@ struct sock_fprog /* Required for SO_ATTACH_FILTER. */ #define SKF_AD_PROTOCOL 0 #define SKF_AD_PKTTYPE 4 #define SKF_AD_IFINDEX 8 -#define SKF_AD_MAX 12 +#define SKF_AD_NLATTR 12 +#define SKF_AD_MAX 16 #define SKF_NET_OFF (-0x100000) #define SKF_LL_OFF (-0x200000) diff --git a/trunk/net/core/filter.c b/trunk/net/core/filter.c index bbb53c69857c..f5f3cf603064 100644 --- a/trunk/net/core/filter.c +++ b/trunk/net/core/filter.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -303,6 +304,22 @@ unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int case SKF_AD_IFINDEX: A = skb->dev->ifindex; continue; + case SKF_AD_NLATTR: { + struct nlattr *nla; + + if (skb_is_nonlinear(skb)) + return 0; + if (A > skb->len - sizeof(struct nlattr)) + return 0; + + nla = nla_find((struct nlattr *)&skb->data[A], + skb->len - A, X); + if (nla) + A = (void *)nla - (void *)skb->data; + else + A = 0; + continue; + } default: return 0; }