* [PATCH 0/5] netfilter fixes for 3.10-rc3 @ 2013-05-29 16:03 Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 Pablo Neira Ayuso ` (5 more replies) 0 siblings, 6 replies; 9+ messages in thread From: Pablo Neira Ayuso @ 2013-05-29 16:03 UTC (permalink / raw) To: netfilter-devel; +Cc: davem, netdev Hi David, The following patchset contains Netfilter/IPVS fixes for 3.10-rc3, they are: * fix xt_addrtype with IPv6, from Florian Westphal. This required a new hook for IPv6 functions in the netfilter core to avoid hard dependencies with the ipv6 subsystem when this match is only used for IPv4. * fix connection reuse case in IPVS. Currently, if an reused connection are directed to the same server. If that server is down, those connection would fail. Therefore, clear the connection and choose a new server among the available ones. * fix possible non-nul terminated string sent to user-space if ipt_ULOG is used as the default netfilter logging stub, from Chen Gang. * fix mark logging of IPv6 packets in xt_LOG, from Michal Kubecek. This bug has been there since 2.6.26. * Fix breakage ip_vs_sh due to incorrect structure layout for RCU, from Jan Beulich. The following changes since commit 497574c72c9922cf20c12aed15313c389f722fa0: xfrm: properly handle invalid states as an error (2013-05-23 01:20:07 -0700) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master for you to fetch changes up to a70b9641e6a90d6821e4354a2c2fede74015db29: ipvs: ip_vs_sh: fix build (2013-05-29 17:50:39 +0200) ---------------------------------------------------------------- Chen Gang (1): netfilter: ipt_ULOG: fix non-null terminated string in the nf_log path Florian Westphal (1): netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 Grzegorz Lyczba (1): ipvs: Fix reuse connection if real server is dead Jan Beulich (1): ipvs: ip_vs_sh: fix build Michal Kubeček (1): netfilter: xt_LOG: fix mark logging for IPv6 packets include/linux/netfilter_ipv6.h | 16 ++++++++++++++++ include/net/addrconf.h | 2 +- net/ipv4/netfilter/ipt_ULOG.c | 6 ++++-- net/ipv6/addrconf.c | 2 +- net/ipv6/netfilter.c | 7 +++++++ net/netfilter/core.c | 2 ++ net/netfilter/ipvs/ip_vs_core.c | 35 +++++++++++++++++++++++++++++++++++ net/netfilter/ipvs/ip_vs_sh.c | 2 +- net/netfilter/xt_LOG.c | 2 +- net/netfilter/xt_addrtype.c | 27 ++++++++++++++++----------- 10 files changed, 84 insertions(+), 17 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 2013-05-29 16:03 [PATCH 0/5] netfilter fixes for 3.10-rc3 Pablo Neira Ayuso @ 2013-05-29 16:03 ` Pablo Neira Ayuso 2013-05-31 0:24 ` Lorenzo Colitti 2013-05-29 16:03 ` [PATCH 2/5] netfilter: ipt_ULOG: fix non-null terminated string in the nf_log path Pablo Neira Ayuso ` (4 subsequent siblings) 5 siblings, 1 reply; 9+ messages in thread From: Pablo Neira Ayuso @ 2013-05-29 16:03 UTC (permalink / raw) To: netfilter-devel; +Cc: davem, netdev From: Florian Westphal <fw@strlen.de> Quoting https://bugzilla.netfilter.org/show_bug.cgi?id=812: [ ip6tables -m addrtype ] When I tried to use in the nat/PREROUTING it messes up the routing cache even if the rule didn't matched at all. [..] If I remove the --limit-iface-in from the non-working scenario, so just use the -m addrtype --dst-type LOCAL it works! This happens when LOCAL type matching is requested with --limit-iface-in, and the default ipv6 route is via the interface the packet we test arrived on. Because xt_addrtype uses ip6_route_output, the ipv6 routing implementation creates an unwanted cached entry, and the packet won't make it to the real/expected destination. Silently ignoring --limit-iface-in makes the routing work but it breaks rule matching (--dst-type LOCAL with limit-iface-in is supposed to only match if the dst address is configured on the incoming interface; without --limit-iface-in it will match if the address is reachable via lo). The test should call ipv6_chk_addr() instead. However, this would add a link-time dependency on ipv6. There are two possible solutions: 1) Revert the commit that moved ipt_addrtype to xt_addrtype, and put ipv6 specific code into ip6t_addrtype. 2) add new "nf_ipv6_ops" struct to register pointers to ipv6 functions. While the former might seem preferable, Pablo pointed out that there are more xt modules with link-time dependeny issues regarding ipv6, so lets go for 2). Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- include/linux/netfilter_ipv6.h | 16 ++++++++++++++++ include/net/addrconf.h | 2 +- net/ipv6/addrconf.c | 2 +- net/ipv6/netfilter.c | 7 +++++++ net/netfilter/core.c | 2 ++ net/netfilter/xt_addrtype.c | 27 ++++++++++++++++----------- 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h index 98ffb54..2d4df6ce 100644 --- a/include/linux/netfilter_ipv6.h +++ b/include/linux/netfilter_ipv6.h @@ -17,6 +17,22 @@ extern __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, extern int ipv6_netfilter_init(void); extern void ipv6_netfilter_fini(void); + +/* + * Hook functions for ipv6 to allow xt_* modules to be built-in even + * if IPv6 is a module. + */ +struct nf_ipv6_ops { + int (*chk_addr)(struct net *net, const struct in6_addr *addr, + const struct net_device *dev, int strict); +}; + +extern const struct nf_ipv6_ops __rcu *nf_ipv6_ops; +static inline const struct nf_ipv6_ops *nf_get_ipv6_ops(void) +{ + return rcu_dereference(nf_ipv6_ops); +} + #else /* CONFIG_NETFILTER */ static inline int ipv6_netfilter_init(void) { return 0; } static inline void ipv6_netfilter_fini(void) { return; } diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 84a6440..21f70270 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h @@ -65,7 +65,7 @@ extern int addrconf_set_dstaddr(struct net *net, extern int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, - struct net_device *dev, + const struct net_device *dev, int strict); #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index d1ab6ab..d1b2d80 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1487,7 +1487,7 @@ static int ipv6_count_addresses(struct inet6_dev *idev) } int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, - struct net_device *dev, int strict) + const struct net_device *dev, int strict) { struct inet6_ifaddr *ifp; unsigned int hash = inet6_addr_hash(addr); diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c index 72836f4..95f3f1d 100644 --- a/net/ipv6/netfilter.c +++ b/net/ipv6/netfilter.c @@ -10,6 +10,7 @@ #include <linux/netfilter.h> #include <linux/netfilter_ipv6.h> #include <linux/export.h> +#include <net/addrconf.h> #include <net/dst.h> #include <net/ipv6.h> #include <net/ip6_route.h> @@ -186,6 +187,10 @@ static __sum16 nf_ip6_checksum_partial(struct sk_buff *skb, unsigned int hook, return csum; }; +static const struct nf_ipv6_ops ipv6ops = { + .chk_addr = ipv6_chk_addr, +}; + static const struct nf_afinfo nf_ip6_afinfo = { .family = AF_INET6, .checksum = nf_ip6_checksum, @@ -198,6 +203,7 @@ static const struct nf_afinfo nf_ip6_afinfo = { int __init ipv6_netfilter_init(void) { + RCU_INIT_POINTER(nf_ipv6_ops, &ipv6ops); return nf_register_afinfo(&nf_ip6_afinfo); } @@ -206,5 +212,6 @@ int __init ipv6_netfilter_init(void) */ void ipv6_netfilter_fini(void) { + RCU_INIT_POINTER(nf_ipv6_ops, NULL); nf_unregister_afinfo(&nf_ip6_afinfo); } diff --git a/net/netfilter/core.c b/net/netfilter/core.c index 07c865a..857ca9f 100644 --- a/net/netfilter/core.c +++ b/net/netfilter/core.c @@ -30,6 +30,8 @@ static DEFINE_MUTEX(afinfo_mutex); const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO] __read_mostly; EXPORT_SYMBOL(nf_afinfo); +const struct nf_ipv6_ops __rcu *nf_ipv6_ops __read_mostly; +EXPORT_SYMBOL_GPL(nf_ipv6_ops); int nf_register_afinfo(const struct nf_afinfo *afinfo) { diff --git a/net/netfilter/xt_addrtype.c b/net/netfilter/xt_addrtype.c index 49c5ff7..68ff29f 100644 --- a/net/netfilter/xt_addrtype.c +++ b/net/netfilter/xt_addrtype.c @@ -22,6 +22,7 @@ #include <net/ip6_fib.h> #endif +#include <linux/netfilter_ipv6.h> #include <linux/netfilter/xt_addrtype.h> #include <linux/netfilter/x_tables.h> @@ -33,12 +34,12 @@ MODULE_ALIAS("ip6t_addrtype"); #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES) static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, - const struct in6_addr *addr) + const struct in6_addr *addr, u16 mask) { const struct nf_afinfo *afinfo; struct flowi6 flow; struct rt6_info *rt; - u32 ret; + u32 ret = 0; int route_err; memset(&flow, 0, sizeof(flow)); @@ -49,12 +50,19 @@ static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, rcu_read_lock(); afinfo = nf_get_afinfo(NFPROTO_IPV6); - if (afinfo != NULL) + if (afinfo != NULL) { + const struct nf_ipv6_ops *v6ops; + + if (dev && (mask & XT_ADDRTYPE_LOCAL)) { + v6ops = nf_get_ipv6_ops(); + if (v6ops && v6ops->chk_addr(net, addr, dev, true)) + ret = XT_ADDRTYPE_LOCAL; + } route_err = afinfo->route(net, (struct dst_entry **)&rt, - flowi6_to_flowi(&flow), !!dev); - else + flowi6_to_flowi(&flow), false); + } else { route_err = 1; - + } rcu_read_unlock(); if (route_err) @@ -62,15 +70,12 @@ static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, if (rt->rt6i_flags & RTF_REJECT) ret = XT_ADDRTYPE_UNREACHABLE; - else - ret = 0; - if (rt->rt6i_flags & RTF_LOCAL) + if (dev == NULL && rt->rt6i_flags & RTF_LOCAL) ret |= XT_ADDRTYPE_LOCAL; if (rt->rt6i_flags & RTF_ANYCAST) ret |= XT_ADDRTYPE_ANYCAST; - dst_release(&rt->dst); return ret; } @@ -90,7 +95,7 @@ static bool match_type6(struct net *net, const struct net_device *dev, if ((XT_ADDRTYPE_LOCAL | XT_ADDRTYPE_ANYCAST | XT_ADDRTYPE_UNREACHABLE) & mask) - return !!(mask & match_lookup_rt6(net, dev, addr)); + return !!(mask & match_lookup_rt6(net, dev, addr, mask)); return true; } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 2013-05-29 16:03 ` [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 Pablo Neira Ayuso @ 2013-05-31 0:24 ` Lorenzo Colitti 2013-06-02 22:06 ` Florian Westphal 0 siblings, 1 reply; 9+ messages in thread From: Lorenzo Colitti @ 2013-05-31 0:24 UTC (permalink / raw) To: Pablo Neira Ayuso Cc: netfilter-devel, David Miller, netdev@vger.kernel.org, Eric Dumazet On Thu, May 30, 2013 at 1:03 AM, Pablo Neira Ayuso <pablo@netfilter.org> wrote: > 2) add new "nf_ipv6_ops" struct to register pointers to ipv6 functions. > > While the former might seem preferable, Pablo pointed out that there > are more xt modules with link-time dependeny issues regarding ipv6, > so lets go for 2). I had to do this recently for the ping socket as well: http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=6d0bfe22611602f36617bc7aa2ffa1bbb2f54c67 +/* Compatibility glue so we can support IPv6 when it's compiled as a module */ +struct pingv6_ops { [...] + int (*ipv6_chk_addr)(struct net *net, const struct in6_addr *addr, + struct net_device *dev, int strict); +}; Is it a better idea to share these structures and have just one structure containing all IPv6 dummy functions? If it was in an include file, it would be easily accessible to most of the tree even when CONFIG_IPV6={n,m}, and we could have the ipv6 module init (and exit) code just set all the function pointers. That way, we wouldn't have to reinvent this particular wheel in multiple places of the code. David? [Personally, I'd just rather see CONFIG_IPV6=m go away, since it adds a lot of complexity like this and doesn't bring much benefit that I can see, but I doubt there will be agreement on that :-)] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 2013-05-31 0:24 ` Lorenzo Colitti @ 2013-06-02 22:06 ` Florian Westphal 0 siblings, 0 replies; 9+ messages in thread From: Florian Westphal @ 2013-06-02 22:06 UTC (permalink / raw) To: Lorenzo Colitti Cc: Pablo Neira Ayuso, netfilter-devel, David Miller, netdev@vger.kernel.org, Eric Dumazet Lorenzo Colitti <lorenzo@google.com> wrote: > > While the former might seem preferable, Pablo pointed out that there > > are more xt modules with link-time dependeny issues regarding ipv6, > > so lets go for 2). > > I had to do this recently for the ping socket as well: > > http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=6d0bfe22611602f36617bc7aa2ffa1bbb2f54c67 > > +/* Compatibility glue so we can support IPv6 when it's compiled as a module */ > +struct pingv6_ops { > [...] > + int (*ipv6_chk_addr)(struct net *net, const struct in6_addr *addr, > + struct net_device *dev, int strict); > +}; > > Is it a better idea to share these structures and have just one > structure containing all IPv6 dummy functions? I think so, yes. > If it was in an include > file, it would be easily accessible to most of the tree even when > CONFIG_IPV6={n,m}, and we could have the ipv6 module init (and exit) > code just set all the function pointers. That way, we wouldn't have to > reinvent this particular wheel in multiple places of the code. FWIW, I agree. We should avoid having multiple copies of this. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/5] netfilter: ipt_ULOG: fix non-null terminated string in the nf_log path 2013-05-29 16:03 [PATCH 0/5] netfilter fixes for 3.10-rc3 Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 Pablo Neira Ayuso @ 2013-05-29 16:03 ` Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 3/5] ipvs: Fix reuse connection if real server is dead Pablo Neira Ayuso ` (3 subsequent siblings) 5 siblings, 0 replies; 9+ messages in thread From: Pablo Neira Ayuso @ 2013-05-29 16:03 UTC (permalink / raw) To: netfilter-devel; +Cc: davem, netdev From: Chen Gang <gang.chen@asianux.com> If nf_log uses ipt_ULOG as logging output, we can deliver non-null terminated strings to user-space since the maximum length of the prefix that is passed by nf_log is NF_LOG_PREFIXLEN but pm->prefix is 32 bytes long (ULOG_PREFIX_LEN). This is actually happening already from nf_conntrack_tcp if ipt_ULOG is used, since it is passing strings longer than 32 bytes. Signed-off-by: Chen Gang <gang.chen@asianux.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- net/ipv4/netfilter/ipt_ULOG.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c index cf08218..ff4b781 100644 --- a/net/ipv4/netfilter/ipt_ULOG.c +++ b/net/ipv4/netfilter/ipt_ULOG.c @@ -231,8 +231,10 @@ static void ipt_ulog_packet(struct net *net, put_unaligned(tv.tv_usec, &pm->timestamp_usec); put_unaligned(skb->mark, &pm->mark); pm->hook = hooknum; - if (prefix != NULL) - strncpy(pm->prefix, prefix, sizeof(pm->prefix)); + if (prefix != NULL) { + strncpy(pm->prefix, prefix, sizeof(pm->prefix) - 1); + pm->prefix[sizeof(pm->prefix) - 1] = '\0'; + } else if (loginfo->prefix[0] != '\0') strncpy(pm->prefix, loginfo->prefix, sizeof(pm->prefix)); else -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/5] ipvs: Fix reuse connection if real server is dead 2013-05-29 16:03 [PATCH 0/5] netfilter fixes for 3.10-rc3 Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 2/5] netfilter: ipt_ULOG: fix non-null terminated string in the nf_log path Pablo Neira Ayuso @ 2013-05-29 16:03 ` Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 4/5] netfilter: xt_LOG: fix mark logging for IPv6 packets Pablo Neira Ayuso ` (2 subsequent siblings) 5 siblings, 0 replies; 9+ messages in thread From: Pablo Neira Ayuso @ 2013-05-29 16:03 UTC (permalink / raw) To: netfilter-devel; +Cc: davem, netdev From: Grzegorz Lyczba <grzegorz.lyczba@gmail.com> Expire cached connection for new TCP/SCTP connection if real server is down. Otherwise, IPVS uses the dead server for the reused connection, instead of a new working one. Signed-off-by: Grzegorz Lyczba <grzegorz.lyczba@gmail.com> Acked-by: Hans Schillstrom <hans@schillstrom.com> Acked-by: Julian Anastasov <ja@ssi.bg> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- net/netfilter/ipvs/ip_vs_core.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c index 085b588..05565d2 100644 --- a/net/netfilter/ipvs/ip_vs_core.c +++ b/net/netfilter/ipvs/ip_vs_core.c @@ -1001,6 +1001,32 @@ static inline int is_tcp_reset(const struct sk_buff *skb, int nh_len) return th->rst; } +static inline bool is_new_conn(const struct sk_buff *skb, + struct ip_vs_iphdr *iph) +{ + switch (iph->protocol) { + case IPPROTO_TCP: { + struct tcphdr _tcph, *th; + + th = skb_header_pointer(skb, iph->len, sizeof(_tcph), &_tcph); + if (th == NULL) + return false; + return th->syn; + } + case IPPROTO_SCTP: { + sctp_chunkhdr_t *sch, schunk; + + sch = skb_header_pointer(skb, iph->len + sizeof(sctp_sctphdr_t), + sizeof(schunk), &schunk); + if (sch == NULL) + return false; + return sch->type == SCTP_CID_INIT; + } + default: + return false; + } +} + /* Handle response packets: rewrite addresses and send away... */ static unsigned int @@ -1612,6 +1638,15 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af) * Check if the packet belongs to an existing connection entry */ cp = pp->conn_in_get(af, skb, &iph, 0); + + if (unlikely(sysctl_expire_nodest_conn(ipvs)) && cp && cp->dest && + unlikely(!atomic_read(&cp->dest->weight)) && !iph.fragoffs && + is_new_conn(skb, &iph)) { + ip_vs_conn_expire_now(cp); + __ip_vs_conn_put(cp); + cp = NULL; + } + if (unlikely(!cp) && !iph.fragoffs) { /* No (second) fragments need to enter here, as nf_defrag_ipv6 * replayed fragment zero will already have created the cp -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 4/5] netfilter: xt_LOG: fix mark logging for IPv6 packets 2013-05-29 16:03 [PATCH 0/5] netfilter fixes for 3.10-rc3 Pablo Neira Ayuso ` (2 preceding siblings ...) 2013-05-29 16:03 ` [PATCH 3/5] ipvs: Fix reuse connection if real server is dead Pablo Neira Ayuso @ 2013-05-29 16:03 ` Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 5/5] ipvs: ip_vs_sh: fix build Pablo Neira Ayuso 2013-05-30 23:39 ` [PATCH 0/5] netfilter fixes for 3.10-rc3 David Miller 5 siblings, 0 replies; 9+ messages in thread From: Pablo Neira Ayuso @ 2013-05-29 16:03 UTC (permalink / raw) To: netfilter-devel; +Cc: davem, netdev From: Michal Kubeček <mkubecek@suse.cz> In dump_ipv6_packet(), the "recurse" parameter is zero only if dumping contents of a packet embedded into an ICMPv6 error message. Therefore we want to log packet mark if recurse is non-zero, not when it is zero. Signed-off-by: Michal Kubecek <mkubecek@suse.cz> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- net/netfilter/xt_LOG.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netfilter/xt_LOG.c b/net/netfilter/xt_LOG.c index 491c7d8..5ab2484 100644 --- a/net/netfilter/xt_LOG.c +++ b/net/netfilter/xt_LOG.c @@ -737,7 +737,7 @@ static void dump_ipv6_packet(struct sbuff *m, dump_sk_uid_gid(m, skb->sk); /* Max length: 16 "MARK=0xFFFFFFFF " */ - if (!recurse && skb->mark) + if (recurse && skb->mark) sb_add(m, "MARK=0x%x ", skb->mark); } -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 5/5] ipvs: ip_vs_sh: fix build 2013-05-29 16:03 [PATCH 0/5] netfilter fixes for 3.10-rc3 Pablo Neira Ayuso ` (3 preceding siblings ...) 2013-05-29 16:03 ` [PATCH 4/5] netfilter: xt_LOG: fix mark logging for IPv6 packets Pablo Neira Ayuso @ 2013-05-29 16:03 ` Pablo Neira Ayuso 2013-05-30 23:39 ` [PATCH 0/5] netfilter fixes for 3.10-rc3 David Miller 5 siblings, 0 replies; 9+ messages in thread From: Pablo Neira Ayuso @ 2013-05-29 16:03 UTC (permalink / raw) To: netfilter-devel; +Cc: davem, netdev From: Jan Beulich <JBeulich@suse.com> kfree_rcu() requires offsetof(..., rcu_head) < 4096, which can get violated with a sufficiently high CONFIG_IP_VS_SH_TAB_BITS. Signed-off-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- net/netfilter/ipvs/ip_vs_sh.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netfilter/ipvs/ip_vs_sh.c b/net/netfilter/ipvs/ip_vs_sh.c index 0df269d..a65edfe4 100644 --- a/net/netfilter/ipvs/ip_vs_sh.c +++ b/net/netfilter/ipvs/ip_vs_sh.c @@ -67,8 +67,8 @@ struct ip_vs_sh_bucket { #define IP_VS_SH_TAB_MASK (IP_VS_SH_TAB_SIZE - 1) struct ip_vs_sh_state { - struct ip_vs_sh_bucket buckets[IP_VS_SH_TAB_SIZE]; struct rcu_head rcu_head; + struct ip_vs_sh_bucket buckets[IP_VS_SH_TAB_SIZE]; }; /* -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/5] netfilter fixes for 3.10-rc3 2013-05-29 16:03 [PATCH 0/5] netfilter fixes for 3.10-rc3 Pablo Neira Ayuso ` (4 preceding siblings ...) 2013-05-29 16:03 ` [PATCH 5/5] ipvs: ip_vs_sh: fix build Pablo Neira Ayuso @ 2013-05-30 23:39 ` David Miller 5 siblings, 0 replies; 9+ messages in thread From: David Miller @ 2013-05-30 23:39 UTC (permalink / raw) To: pablo; +Cc: netfilter-devel, netdev From: Pablo Neira Ayuso <pablo@netfilter.org> Date: Wed, 29 May 2013 18:03:08 +0200 > The following patchset contains Netfilter/IPVS fixes for 3.10-rc3, > they are: > > * fix xt_addrtype with IPv6, from Florian Westphal. This required > a new hook for IPv6 functions in the netfilter core to avoid > hard dependencies with the ipv6 subsystem when this match is > only used for IPv4. > > * fix connection reuse case in IPVS. Currently, if an reused > connection are directed to the same server. If that server is > down, those connection would fail. Therefore, clear the > connection and choose a new server among the available ones. > > * fix possible non-nul terminated string sent to user-space if > ipt_ULOG is used as the default netfilter logging stub, from > Chen Gang. > > * fix mark logging of IPv6 packets in xt_LOG, from Michal Kubecek. > This bug has been there since 2.6.26. > > * Fix breakage ip_vs_sh due to incorrect structure layout for > RCU, from Jan Beulich. ... > git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master Pulled, thanks Pablo! ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2013-06-02 22:06 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-05-29 16:03 [PATCH 0/5] netfilter fixes for 3.10-rc3 Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 1/5] netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 Pablo Neira Ayuso 2013-05-31 0:24 ` Lorenzo Colitti 2013-06-02 22:06 ` Florian Westphal 2013-05-29 16:03 ` [PATCH 2/5] netfilter: ipt_ULOG: fix non-null terminated string in the nf_log path Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 3/5] ipvs: Fix reuse connection if real server is dead Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 4/5] netfilter: xt_LOG: fix mark logging for IPv6 packets Pablo Neira Ayuso 2013-05-29 16:03 ` [PATCH 5/5] ipvs: ip_vs_sh: fix build Pablo Neira Ayuso 2013-05-30 23:39 ` [PATCH 0/5] netfilter fixes for 3.10-rc3 David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).