git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
net
/
bridge
/
netfilter
/
ebt_ip.c
diff --git
a/net/bridge/netfilter/ebt_ip.c
b/net/bridge/netfilter/ebt_ip.c
index
7323805
..
e4c6424
100644
(file)
--- a/
net/bridge/netfilter/ebt_ip.c
+++ b/
net/bridge/netfilter/ebt_ip.c
@@
-15,12
+15,13
@@
#include <linux/netfilter_bridge/ebtables.h>
#include <linux/netfilter_bridge/ebt_ip.h>
#include <linux/ip.h>
#include <linux/netfilter_bridge/ebtables.h>
#include <linux/netfilter_bridge/ebt_ip.h>
#include <linux/ip.h>
+#include <net/ip.h>
#include <linux/in.h>
#include <linux/module.h>
struct tcpudphdr {
#include <linux/in.h>
#include <linux/module.h>
struct tcpudphdr {
-
uint16_t
src;
-
uint16_t
dst;
+
__be16
src;
+
__be16
dst;
};
static int ebt_filter_ip(const struct sk_buff *skb, const struct net_device *in,
};
static int ebt_filter_ip(const struct sk_buff *skb, const struct net_device *in,
@@
-51,6
+52,8
@@
static int ebt_filter_ip(const struct sk_buff *skb, const struct net_device *in,
if (!(info->bitmask & EBT_IP_DPORT) &&
!(info->bitmask & EBT_IP_SPORT))
return EBT_MATCH;
if (!(info->bitmask & EBT_IP_DPORT) &&
!(info->bitmask & EBT_IP_SPORT))
return EBT_MATCH;
+ if (ntohs(ih->frag_off) & IP_OFFSET)
+ return EBT_NOMATCH;
pptr = skb_header_pointer(skb, ih->ihl*4,
sizeof(_ports), &_ports);
if (pptr == NULL)
pptr = skb_header_pointer(skb, ih->ihl*4,
sizeof(_ports), &_ports);
if (pptr == NULL)
@@
-89,7
+92,9
@@
static int ebt_ip_check(const char *tablename, unsigned int hookmask,
if (info->invflags & EBT_IP_PROTO)
return -EINVAL;
if (info->protocol != IPPROTO_TCP &&
if (info->invflags & EBT_IP_PROTO)
return -EINVAL;
if (info->protocol != IPPROTO_TCP &&
- info->protocol != IPPROTO_UDP)
+ info->protocol != IPPROTO_UDP &&
+ info->protocol != IPPROTO_SCTP &&
+ info->protocol != IPPROTO_DCCP)
return -EINVAL;
}
if (info->bitmask & EBT_IP_DPORT && info->dport[0] > info->dport[1])
return -EINVAL;
}
if (info->bitmask & EBT_IP_DPORT && info->dport[0] > info->dport[1])
@@
-107,16
+112,16
@@
static struct ebt_match filter_ip =
.me = THIS_MODULE,
};
.me = THIS_MODULE,
};
-static int __init init(void)
+static int __init
ebt_ip_
init(void)
{
return ebt_register_match(&filter_ip);
}
{
return ebt_register_match(&filter_ip);
}
-static void __exit fini(void)
+static void __exit
ebt_ip_
fini(void)
{
ebt_unregister_match(&filter_ip);
}
{
ebt_unregister_match(&filter_ip);
}
-module_init(init);
-module_exit(fini);
+module_init(
ebt_ip_
init);
+module_exit(
ebt_ip_
fini);
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");