diff --git a/doc/changelog.txt b/doc/changelog.txt index a2c37df..4c279fa 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -5,6 +5,8 @@ Fixes: - xt_psd: avoid crash due to curr->next corruption Changes: - xt_psd: reject invalid match options +Enhancements: +- Support for Linux 3.5 v1.42 (2012-04-05) diff --git a/extensions/compat_xtables.c b/extensions/compat_xtables.c index 26f6a00..1a82a5c 100644 --- a/extensions/compat_xtables.c +++ b/extensions/compat_xtables.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -612,4 +613,12 @@ void *HX_memmem(const void *space, size_t spacesize, } EXPORT_SYMBOL_GPL(HX_memmem); +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 5, 0) +int xtnu_ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, + int target, unsigned short *fragoff, int *fragflg) +{ + return ipv6_find_hdr(skb, offset, target, fragoff); +} +#endif + MODULE_LICENSE("GPL"); diff --git a/extensions/compat_xtables.h b/extensions/compat_xtables.h index 06d34b1..1af9536 100644 --- a/extensions/compat_xtables.h +++ b/extensions/compat_xtables.h @@ -119,6 +119,10 @@ # define NIPQUAD_FMT "%u.%u.%u.%u" #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 5, 0) +# define ipv6_find_hdr xtnu_ipv6_find_hdr +#endif + #define ip_route_me_harder xtnu_ip_route_me_harder #define skb_make_writable xtnu_skb_make_writable #define xt_target xtnu_target diff --git a/extensions/compat_xtnu.h b/extensions/compat_xtnu.h index 02b6575..147ad57 100644 --- a/extensions/compat_xtnu.h +++ b/extensions/compat_xtnu.h @@ -162,6 +162,8 @@ extern void xtnu_csum_replace4(__u16 __bitwise *, __be32, __be32); extern void xtnu_proto_csum_replace4(__u16 __bitwise *, struct sk_buff *, __be32, __be32, bool); extern int xtnu_skb_linearize(struct sk_buff *); +extern int xtnu_ipv6_find_hdr(const struct sk_buff *, unsigned int *, + int, unsigned short *, int *); extern void *HX_memmem(const void *, size_t, const void *, size_t); diff --git a/extensions/xt_RAWNAT.c b/extensions/xt_RAWNAT.c index 56cfbfa..bebcfe5 100644 --- a/extensions/xt_RAWNAT.c +++ b/extensions/xt_RAWNAT.c @@ -181,7 +181,7 @@ static bool rawnat6_prepare_l4(struct sk_buff **pskb, unsigned int *l4offset, *l4proto = NEXTHDR_MAX; for (i = 0; i < ARRAY_SIZE(types); ++i) { - err = ipv6_find_hdr(*pskb, l4offset, types[i], NULL); + err = ipv6_find_hdr(*pskb, l4offset, types[i], NULL, NULL); if (err >= 0) { *l4proto = types[i]; break; diff --git a/extensions/xt_SYSRQ.c b/extensions/xt_SYSRQ.c index 82c0c2e..f7c76f0 100644 --- a/extensions/xt_SYSRQ.c +++ b/extensions/xt_SYSRQ.c @@ -247,8 +247,9 @@ sysrq_tg6(struct sk_buff **pskb, const struct xt_action_param *par) return NF_DROP; iph = ipv6_hdr(skb); - if ((ipv6_find_hdr(skb, &th_off, IPPROTO_UDP, &frag_off) < 0 && - ipv6_find_hdr(skb, &th_off, IPPROTO_UDPLITE, &frag_off) < 0) || + /* Should probably be using %IP6T_FH_F_AUTH */ + if ((ipv6_find_hdr(skb, &th_off, IPPROTO_UDP, &frag_off, NULL) < 0 && + ipv6_find_hdr(skb, &th_off, IPPROTO_UDPLITE, &frag_off, NULL) < 0) || frag_off > 0) return NF_DROP; diff --git a/extensions/xt_length2.c b/extensions/xt_length2.c index 4b0fcec..2755e2f 100644 --- a/extensions/xt_length2.c +++ b/extensions/xt_length2.c @@ -185,7 +185,7 @@ llayer4_proto(const struct sk_buff *skb, unsigned int *offset, bool *hotdrop) int err; for (i = 0; i < ARRAY_SIZE(types); ++i) { - err = ipv6_find_hdr(skb, offset, types[i], NULL); + err = ipv6_find_hdr(skb, offset, types[i], NULL, NULL); if (err >= 0) return types[i]; if (err != -ENOENT) {