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:cac2661c53("esp4: Avoid skb_cow_data whenever possible") Fixes:03e2a30f6a("esp6: Avoid skb_cow_data whenever possible") Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user