Commit 602e65a3 authored by David S. Miller's avatar David S. Miller

Merge branch 'master' of git://1984.lsi.us.es/nf

Pablo Neira Ayuso says:

====================
I know that we're in fairly late stage to request pulls, but the IPVS people
pinged me with little patches with oops fixes last week.

One of them was recently introduced (during the 3.4 development cycle) while
cleaning up the IPVS netns support. They are:

* Fix one regression introduced in 3.4 while cleaning up the
  netns support for IPVS, from Julian Anastasov.

* Fix one oops triggered due to resetting the conntrack attached to the skb
  instead of just putting it in the forward hook, from Lin Ming. This problem
  seems to be there since 2.6.37 according to Simon Horman.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 10cc1bdd 283283c4
...@@ -1425,7 +1425,7 @@ static inline void ip_vs_notrack(struct sk_buff *skb) ...@@ -1425,7 +1425,7 @@ static inline void ip_vs_notrack(struct sk_buff *skb)
struct nf_conn *ct = nf_ct_get(skb, &ctinfo); struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
if (!ct || !nf_ct_is_untracked(ct)) { if (!ct || !nf_ct_is_untracked(ct)) {
nf_reset(skb); nf_conntrack_put(skb->nfct);
skb->nfct = &nf_ct_untracked_get()->ct_general; skb->nfct = &nf_ct_untracked_get()->ct_general;
skb->nfctinfo = IP_CT_NEW; skb->nfctinfo = IP_CT_NEW;
nf_conntrack_get(skb->nfct); nf_conntrack_get(skb->nfct);
......
...@@ -1521,11 +1521,12 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event, ...@@ -1521,11 +1521,12 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event,
{ {
struct net_device *dev = ptr; struct net_device *dev = ptr;
struct net *net = dev_net(dev); struct net *net = dev_net(dev);
struct netns_ipvs *ipvs = net_ipvs(net);
struct ip_vs_service *svc; struct ip_vs_service *svc;
struct ip_vs_dest *dest; struct ip_vs_dest *dest;
unsigned int idx; unsigned int idx;
if (event != NETDEV_UNREGISTER) if (event != NETDEV_UNREGISTER || !ipvs)
return NOTIFY_DONE; return NOTIFY_DONE;
IP_VS_DBG(3, "%s() dev=%s\n", __func__, dev->name); IP_VS_DBG(3, "%s() dev=%s\n", __func__, dev->name);
EnterFunction(2); EnterFunction(2);
...@@ -1551,7 +1552,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event, ...@@ -1551,7 +1552,7 @@ static int ip_vs_dst_event(struct notifier_block *this, unsigned long event,
} }
} }
list_for_each_entry(dest, &net_ipvs(net)->dest_trash, n_list) { list_for_each_entry(dest, &ipvs->dest_trash, n_list) {
__ip_vs_dev_reset(dest, dev); __ip_vs_dev_reset(dest, dev);
} }
mutex_unlock(&__ip_vs_mutex); mutex_unlock(&__ip_vs_mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment