netfilter: xt_TCPMSS: Add safe fragmentation handling
Subsystems (2)
PATCH 1/1 netfilter: xt_TCPMSS: Add safe fragmentation handling
Similar to commit bc6bcb59 ("netfilter: xt_TCPOPTSTRIP: fix possible mangling beyond packet boundary"), add safe fragment handling to xt_TCPMSS.
Phil
Signed-off-by Phil Oester <[email protected]>
net/netfilter/xt_TCPMSS.c +8 -3
@@ -45,17 +45,22 @@ optlen(const u_int8_t *opt, unsigned int offset)static int tcpmss_mangle_packet (struct sk_buff *skb, -const struct xt_tcpmss_info *info, +const struct xt_action_param *par,unsigned int in_mtu,unsigned int tcphoff,unsigned int minlen) { +const struct xt_tcpmss_info *info = par->targinfo;struct tcphdr *tcph;unsigned int tcplen, i;__be16 oldval;u16 newmss;u8 *opt; +/* This is a fragment, no TCP header is available */ +if (par->fragoff !=0 ) +return XT_CONTINUE ; +if (!skb_make_writable (skb, skb->len))return -1 ;
@@ -182,7 +187,7 @@ tcpmss_tg4(struct sk_buff *skb, const struct xt_action_param *par)__be16 newlen;int ret; - ret =tcpmss_mangle_packet (skb, par->targinfo, + ret =tcpmss_mangle_packet (skb, par,tcpmss_reverse_mtu (skb,PF_INET ), iph->ihl *4 ,sizeof (*iph) +sizeof (struct tcphdr ));
@@ -211,7 +216,7 @@ tcpmss_tg6(struct sk_buff *skb, const struct xt_action_param *par) tcphoff =ipv6_skip_exthdr (skb,sizeof (*ipv6h), &nexthdr, &frag_off);if (tcphoff <0 )return NF_DROP ; - ret =tcpmss_mangle_packet (skb, par->targinfo, + ret =tcpmss_mangle_packet (skb, par,tcpmss_reverse_mtu (skb,PF_INET6 ), tcphoff,sizeof (*ipv6h) +sizeof (struct tcphdr ));
Quoted 2 lines · Phil Oester
Similar to commit
bc6bcb59("netfilter:xt_TCPOPTSTRIP: fix possible mangling beyond packet boundary"), add safe fragment handling toxt_TCPMSS.
Applied, thanks.
I have used the previous changes to make it smaller.