Loading net/netfilter/xt_TCPMSS.c +13 −29 Original line number Diff line number Diff line Loading @@ -147,17 +147,21 @@ tcpmss_mangle_packet(struct sk_buff *skb, return TCPOLEN_MSS; } static u_int32_t tcpmss_reverse_mtu4(const struct iphdr *iph) static u_int32_t tcpmss_reverse_mtu(const struct sk_buff *skb, unsigned int family) { struct flowi fl = { .fl4_dst = iph->saddr, }; struct flowi fl = {}; const struct nf_afinfo *ai; struct rtable *rt = NULL; u_int32_t mtu = ~0U; if (family == PF_INET) fl.fl4_dst = ip_hdr(skb)->saddr; else fl.fl6_dst = ipv6_hdr(skb)->saddr; rcu_read_lock(); ai = nf_get_afinfo(AF_INET); ai = nf_get_afinfo(family); if (ai != NULL) ai->route((struct dst_entry **)&rt, &fl); rcu_read_unlock(); Loading @@ -178,7 +182,8 @@ tcpmss_tg4(struct sk_buff *skb, const struct net_device *in, __be16 newlen; int ret; ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu4(iph), ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu(skb, PF_INET), iph->ihl * 4, sizeof(*iph) + sizeof(struct tcphdr)); if (ret < 0) Loading @@ -193,28 +198,6 @@ tcpmss_tg4(struct sk_buff *skb, const struct net_device *in, } #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) static u_int32_t tcpmss_reverse_mtu6(const struct ipv6hdr *iph) { struct flowi fl = { .fl6_dst = iph->saddr, }; const struct nf_afinfo *ai; struct rtable *rt = NULL; u_int32_t mtu = ~0U; rcu_read_lock(); ai = nf_get_afinfo(AF_INET6); if (ai != NULL) ai->route((struct dst_entry **)&rt, &fl); rcu_read_unlock(); if (rt != NULL) { mtu = dst_mtu(&rt->u.dst); dst_release(&rt->u.dst); } return mtu; } static unsigned int tcpmss_tg6(struct sk_buff *skb, const struct net_device *in, const struct net_device *out, unsigned int hooknum, Loading @@ -229,7 +212,8 @@ tcpmss_tg6(struct sk_buff *skb, const struct net_device *in, tcphoff = ipv6_skip_exthdr(skb, sizeof(*ipv6h), &nexthdr); if (tcphoff < 0) return NF_DROP; ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu6(ipv6h), ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu(skb, PF_INET6), tcphoff, sizeof(*ipv6h) + sizeof(struct tcphdr)); if (ret < 0) Loading Loading
net/netfilter/xt_TCPMSS.c +13 −29 Original line number Diff line number Diff line Loading @@ -147,17 +147,21 @@ tcpmss_mangle_packet(struct sk_buff *skb, return TCPOLEN_MSS; } static u_int32_t tcpmss_reverse_mtu4(const struct iphdr *iph) static u_int32_t tcpmss_reverse_mtu(const struct sk_buff *skb, unsigned int family) { struct flowi fl = { .fl4_dst = iph->saddr, }; struct flowi fl = {}; const struct nf_afinfo *ai; struct rtable *rt = NULL; u_int32_t mtu = ~0U; if (family == PF_INET) fl.fl4_dst = ip_hdr(skb)->saddr; else fl.fl6_dst = ipv6_hdr(skb)->saddr; rcu_read_lock(); ai = nf_get_afinfo(AF_INET); ai = nf_get_afinfo(family); if (ai != NULL) ai->route((struct dst_entry **)&rt, &fl); rcu_read_unlock(); Loading @@ -178,7 +182,8 @@ tcpmss_tg4(struct sk_buff *skb, const struct net_device *in, __be16 newlen; int ret; ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu4(iph), ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu(skb, PF_INET), iph->ihl * 4, sizeof(*iph) + sizeof(struct tcphdr)); if (ret < 0) Loading @@ -193,28 +198,6 @@ tcpmss_tg4(struct sk_buff *skb, const struct net_device *in, } #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) static u_int32_t tcpmss_reverse_mtu6(const struct ipv6hdr *iph) { struct flowi fl = { .fl6_dst = iph->saddr, }; const struct nf_afinfo *ai; struct rtable *rt = NULL; u_int32_t mtu = ~0U; rcu_read_lock(); ai = nf_get_afinfo(AF_INET6); if (ai != NULL) ai->route((struct dst_entry **)&rt, &fl); rcu_read_unlock(); if (rt != NULL) { mtu = dst_mtu(&rt->u.dst); dst_release(&rt->u.dst); } return mtu; } static unsigned int tcpmss_tg6(struct sk_buff *skb, const struct net_device *in, const struct net_device *out, unsigned int hooknum, Loading @@ -229,7 +212,8 @@ tcpmss_tg6(struct sk_buff *skb, const struct net_device *in, tcphoff = ipv6_skip_exthdr(skb, sizeof(*ipv6h), &nexthdr); if (tcphoff < 0) return NF_DROP; ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu6(ipv6h), ret = tcpmss_mangle_packet(skb, targinfo, tcpmss_reverse_mtu(skb, PF_INET6), tcphoff, sizeof(*ipv6h) + sizeof(struct tcphdr)); if (ret < 0) Loading