[NETFILTER]: Do not copy skb in skb_make_writable

Now that all callers of netfilter can guarantee that the skb is not shared,
we no longer have to copy the skb in skb_make_writable.

Signed-off-by: Herbert Xu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
Herbert Xu 2007-10-14 00:39:18 -07:00 • committed by David S. Miller
commit 37d4187922
18 changed files with 37 additions and 47 deletions

View file

@ -365,7 +365,7 @@ ipq_mangle_ipv4(ipq_verdict_msg_t *v, struct ipq_queue_entry *e)
}
skb_put(e->skb, diff);
}
if (!skb_make_writable(&e->skb, v->data_len))
if (!skb_make_writable(e->skb, v->data_len))
return -ENOMEM;
skb_copy_to_linear_data(e->skb, v->payload, v->data_len);
e->skb->ip_summed = CHECKSUM_NONE;

View file

@ -32,7 +32,7 @@ set_ect_ip(struct sk_buff **pskb, const struct ipt_ECN_info *einfo)
if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
__u8 oldtos;
if (!skb_make_writable(pskb, sizeof(struct iphdr)))
if (!skb_make_writable(*pskb, sizeof(struct iphdr)))
return false;
iph = ip_hdr(*pskb);
oldtos = iph->tos;
@ -62,7 +62,7 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo)
tcph->cwr == einfo->proto.tcp.cwr))
return true;
if (!skb_make_writable(pskb, ip_hdrlen(*pskb) + sizeof(*tcph)))
if (!skb_make_writable(*pskb, ip_hdrlen(*pskb) + sizeof(*tcph)))
return false;
tcph = (void *)ip_hdr(*pskb) + ip_hdrlen(*pskb);

View file

@ -33,7 +33,7 @@ target(struct sk_buff **pskb,
if ((iph->tos & IPTOS_TOS_MASK) != tosinfo->tos) {
__u8 oldtos;
if (!skb_make_writable(pskb, sizeof(struct iphdr)))
if (!skb_make_writable(*pskb, sizeof(struct iphdr)))
return NF_DROP;
iph = ip_hdr(*pskb);
oldtos = iph->tos;

View file

@ -29,7 +29,7 @@ ipt_ttl_target(struct sk_buff **pskb,
const struct ipt_TTL_info *info = targinfo;
int new_ttl;
if (!skb_make_writable(pskb, (*pskb)->len))
if (!skb_make_writable(*pskb, (*pskb)->len))
return NF_DROP;
iph = ip_hdr(*pskb);

View file

@ -357,7 +357,7 @@ manip_pkt(u_int16_t proto,
struct iphdr *iph;
struct nf_nat_protocol *p;
if (!skb_make_writable(pskb, iphdroff + sizeof(*iph)))
if (!skb_make_writable(*pskb, iphdroff + sizeof(*iph)))
return 0;
iph = (void *)(*pskb)->data + iphdroff;
@ -431,7 +431,7 @@ int nf_nat_icmp_reply_translation(struct nf_conn *ct,
unsigned long statusbit;
enum nf_nat_manip_type manip = HOOK2MANIP(hooknum);
if (!skb_make_writable(pskb, hdrlen + sizeof(*inside)))
if (!skb_make_writable(*pskb, hdrlen + sizeof(*inside)))
return 0;
inside = (void *)(*pskb)->data + ip_hdrlen(*pskb);

View file

@ -152,7 +152,7 @@ nf_nat_mangle_tcp_packet(struct sk_buff **pskb,
struct tcphdr *tcph;
int oldlen, datalen;
if (!skb_make_writable(pskb, (*pskb)->len))
if (!skb_make_writable(*pskb, (*pskb)->len))
return 0;
if (rep_len > match_len &&
@ -234,7 +234,7 @@ nf_nat_mangle_udp_packet(struct sk_buff **pskb,
match_offset + match_len)
return 0;
if (!skb_make_writable(pskb, (*pskb)->len))
if (!skb_make_writable(*pskb, (*pskb)->len))
return 0;
if (rep_len > match_len &&
@ -341,7 +341,7 @@ nf_nat_sack_adjust(struct sk_buff **pskb,
optoff = ip_hdrlen(*pskb) + sizeof(struct tcphdr);
optend = ip_hdrlen(*pskb) + tcph->doff * 4;
if (!skb_make_writable(pskb, optend))
if (!skb_make_writable(*pskb, optend))
return 0;
dir = CTINFO2DIR(ctinfo);
@ -390,7 +390,7 @@ nf_nat_seq_adjust(struct sk_buff **pskb,
this_way = &nat->seq[dir];
other_way = &nat->seq[!dir];
if (!skb_make_writable(pskb, ip_hdrlen(*pskb) + sizeof(*tcph)))
if (!skb_make_writable(*pskb, ip_hdrlen(*pskb) + sizeof(*tcph)))
return 0;
tcph = (void *)(*pskb)->data + ip_hdrlen(*pskb);

View file

@ -109,7 +109,7 @@ gre_manip_pkt(struct sk_buff **pskb, unsigned int iphdroff,
/* pgreh includes two optional 32bit fields which are not required
* to be there. That's where the magic '8' comes from */
if (!skb_make_writable(pskb, hdroff + sizeof(*pgreh) - 8))
if (!skb_make_writable(*pskb, hdroff + sizeof(*pgreh) - 8))
return 0;
greh = (void *)(*pskb)->data + hdroff;

View file

@ -61,7 +61,7 @@ icmp_manip_pkt(struct sk_buff **pskb,
struct icmphdr *hdr;
unsigned int hdroff = iphdroff + iph->ihl*4;
if (!skb_make_writable(pskb, hdroff + sizeof(*hdr)))
if (!skb_make_writable(*pskb, hdroff + sizeof(*hdr)))
return 0;
hdr = (struct icmphdr *)((*pskb)->data + hdroff);

View file

@ -106,7 +106,7 @@ tcp_manip_pkt(struct sk_buff **pskb,
if ((*pskb)->len >= hdroff + sizeof(struct tcphdr))
hdrsize = sizeof(struct tcphdr);
if (!skb_make_writable(pskb, hdroff + hdrsize))
if (!skb_make_writable(*pskb, hdroff + hdrsize))
return 0;
iph = (struct iphdr *)((*pskb)->data + iphdroff);

View file

@ -97,7 +97,7 @@ udp_manip_pkt(struct sk_buff **pskb,
__be32 oldip, newip;
__be16 *portptr, newport;
if (!skb_make_writable(pskb, hdroff + sizeof(*hdr)))
if (!skb_make_writable(*pskb, hdroff + sizeof(*hdr)))
return 0;
iph = (struct iphdr *)((*pskb)->data + iphdroff);

View file

@ -1258,7 +1258,7 @@ static int help(struct sk_buff **pskb, unsigned int protoff,
return NF_DROP;
}
if (!skb_make_writable(pskb, (*pskb)->len))
if (!skb_make_writable(*pskb, (*pskb)->len))
return NF_DROP;
spin_lock_bh(&snmp_lock);