[SK_BUFF]: More skb_reset_transport_header conversions
These are a bit more subtle, they are of this type: - skb->h.raw = payload; __skb_pull(skb, payload - skb->data); + skb_reset_transport_header(skb); __skb_pull results in: skb->data = skb->data + payload - skb->data; skb->data = payload; So after __skb_pull we have skb->data pointing to payload and we can just call skb_reset_transport_header(skb), that will do: skb->h.raw = payload; The others are similar, allowing us to get rid of some more cases where a pointer was being attributed to the layer headers. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
39b89160df
commit
bd82393ca2
@ -278,10 +278,12 @@ void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
|
|||||||
skb_network_header(skb);
|
skb_network_header(skb);
|
||||||
serr->port = port;
|
serr->port = port;
|
||||||
|
|
||||||
skb->h.raw = payload;
|
if (skb_pull(skb, payload - skb->data) != NULL) {
|
||||||
if (!skb_pull(skb, payload - skb->data) ||
|
skb_reset_transport_header(skb);
|
||||||
sock_queue_err_skb(sk, skb))
|
if (sock_queue_err_skb(sk, skb) == 0)
|
||||||
kfree_skb(skb);
|
return;
|
||||||
|
}
|
||||||
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 info)
|
void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 info)
|
||||||
@ -314,8 +316,8 @@ void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 inf
|
|||||||
serr->addr_offset = (u8 *)&iph->daddr - skb_network_header(skb);
|
serr->addr_offset = (u8 *)&iph->daddr - skb_network_header(skb);
|
||||||
serr->port = port;
|
serr->port = port;
|
||||||
|
|
||||||
skb->h.raw = skb->tail;
|
|
||||||
__skb_pull(skb, skb->tail - skb->data);
|
__skb_pull(skb, skb->tail - skb->data);
|
||||||
|
skb_reset_transport_header(skb);
|
||||||
|
|
||||||
if (sock_queue_err_skb(sk, skb))
|
if (sock_queue_err_skb(sk, skb))
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
@ -231,8 +231,8 @@ void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
|
|||||||
skb_network_header(skb);
|
skb_network_header(skb);
|
||||||
serr->port = port;
|
serr->port = port;
|
||||||
|
|
||||||
skb->h.raw = payload;
|
|
||||||
__skb_pull(skb, payload - skb->data);
|
__skb_pull(skb, payload - skb->data);
|
||||||
|
skb_reset_transport_header(skb);
|
||||||
|
|
||||||
if (sock_queue_err_skb(sk, skb))
|
if (sock_queue_err_skb(sk, skb))
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
@ -268,8 +268,8 @@ void ipv6_local_error(struct sock *sk, int err, struct flowi *fl, u32 info)
|
|||||||
serr->addr_offset = (u8 *)&iph->daddr - skb_network_header(skb);
|
serr->addr_offset = (u8 *)&iph->daddr - skb_network_header(skb);
|
||||||
serr->port = fl->fl_ip_dport;
|
serr->port = fl->fl_ip_dport;
|
||||||
|
|
||||||
skb->h.raw = skb->tail;
|
|
||||||
__skb_pull(skb, skb->tail - skb->data);
|
__skb_pull(skb, skb->tail - skb->data);
|
||||||
|
skb_reset_transport_header(skb);
|
||||||
|
|
||||||
if (sock_queue_err_skb(sk, skb))
|
if (sock_queue_err_skb(sk, skb))
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
Loading…
Reference in New Issue
Block a user