Commit 54ffd790 authored by Steffen Klassert's avatar Steffen Klassert
Browse files

esp: Fix skb tailroom calculation



We use skb_availroom to calculate the skb tailroom for the
ESP trailer. skb_availroom calculates the tailroom and
subtracts this value by reserved_tailroom. However
reserved_tailroom is a union with the skb mark. This means
that we subtract the tailroom by the skb mark if set.
Fix this by using skb_tailroom instead.

Fixes: cac2661c ("esp4: Avoid skb_cow_data whenever possible")
Fixes: 03e2a30f ("esp6: Avoid skb_cow_data whenever possible")
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent 36ff0dd3
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -258,7 +258,7 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *
		esp_output_udp_encap(x, skb, esp);
		esp_output_udp_encap(x, skb, esp);


	if (!skb_cloned(skb)) {
	if (!skb_cloned(skb)) {
		if (tailen <= skb_availroom(skb)) {
		if (tailen <= skb_tailroom(skb)) {
			nfrags = 1;
			nfrags = 1;
			trailer = skb;
			trailer = skb;
			tail = skb_tail_pointer(trailer);
			tail = skb_tail_pointer(trailer);
+1 −1
Original line number Original line Diff line number Diff line
@@ -226,7 +226,7 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info
	int tailen = esp->tailen;
	int tailen = esp->tailen;


	if (!skb_cloned(skb)) {
	if (!skb_cloned(skb)) {
		if (tailen <= skb_availroom(skb)) {
		if (tailen <= skb_tailroom(skb)) {
			nfrags = 1;
			nfrags = 1;
			trailer = skb;
			trailer = skb;
			tail = skb_tail_pointer(trailer);
			tail = skb_tail_pointer(trailer);