netfilter: xt_TCPMSS: lookup route from proper net namespace
authorGao feng <gaofeng@cn.fujitsu.com>
Thu, 26 Sep 2013 07:00:31 +0000 (15:00 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 27 Sep 2013 14:18:23 +0000 (16:18 +0200)
Otherwise the pmtu will be incorrect.

Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/xt_TCPMSS.c

index 62776de..e762de5 100644 (file)
@@ -43,7 +43,8 @@ optlen(const u_int8_t *opt, unsigned int offset)
                return opt[offset+1];
 }
 
-static u_int32_t tcpmss_reverse_mtu(const struct sk_buff *skb,
+static u_int32_t tcpmss_reverse_mtu(struct net *net,
+                                   const struct sk_buff *skb,
                                    unsigned int family)
 {
        struct flowi fl;
@@ -64,7 +65,7 @@ static u_int32_t tcpmss_reverse_mtu(const struct sk_buff *skb,
        rcu_read_lock();
        ai = nf_get_afinfo(family);
        if (ai != NULL)
-               ai->route(&init_net, (struct dst_entry **)&rt, &fl, false);
+               ai->route(net, (struct dst_entry **)&rt, &fl, false);
        rcu_read_unlock();
 
        if (rt != NULL) {
@@ -107,7 +108,8 @@ tcpmss_mangle_packet(struct sk_buff *skb,
                return -1;
 
        if (info->mss == XT_TCPMSS_CLAMP_PMTU) {
-               unsigned int in_mtu = tcpmss_reverse_mtu(skb, family);
+               struct net *net = dev_net(par->in ? par->in : par->out);
+               unsigned int in_mtu = tcpmss_reverse_mtu(net, skb, family);
 
                if (dst_mtu(skb_dst(skb)) <= minlen) {
                        net_err_ratelimited("unknown or invalid path-MTU (%u)\n",