[XFRM]: beet: fix worst case header_len calculation
esp_init_state doesn't account for the beet pseudo header in the header_len calculation, which may result in undersized skbs hitting xfrm4_beet_output, causing unnecessary reallocations in ip_finish_output2. The skbs should still always have enough room to avoid causing skb_under_panic in skb_push since we have at least 16 bytes available from LL_RESERVED_SPACE in xfrm_state_check_space. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c5c2523893
commit
ac758e3c55
@ -40,7 +40,7 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
if (unlikely(optlen))
|
||||
hdrlen += IPV4_BEET_PHMAXLEN - (optlen & 4);
|
||||
|
||||
skb_push(skb, x->props.header_len + hdrlen);
|
||||
skb_push(skb, x->props.header_len - IPV4_BEET_PHMAXLEN + hdrlen);
|
||||
skb_reset_network_header(skb);
|
||||
top_iph = ip_hdr(skb);
|
||||
skb->transport_header += sizeof(*iph) - hdrlen;
|
||||
|
Reference in New Issue
Block a user