Loading include/net/ip_vs.h +0 −1 Original line number Diff line number Diff line Loading @@ -984,7 +984,6 @@ static inline char ip_vs_fwd_tag(struct ip_vs_conn *cp) return fwd; } extern int ip_vs_make_skb_writable(struct sk_buff **pskb, int len); extern void ip_vs_nat_icmp(struct sk_buff *skb, struct ip_vs_protocol *pp, struct ip_vs_conn *cp, int dir); Loading net/ipv4/ipvs/ip_vs_app.c +3 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/skbuff.h> #include <linux/in.h> #include <linux/ip.h> #include <linux/netfilter.h> #include <net/net_namespace.h> #include <net/protocol.h> #include <net/tcp.h> Loading Loading @@ -336,7 +337,7 @@ static inline int app_tcp_pkt_out(struct ip_vs_conn *cp, struct sk_buff **pskb, struct tcphdr *th; __u32 seq; if (!ip_vs_make_skb_writable(pskb, tcp_offset + sizeof(*th))) if (!skb_make_writable(*pskb, tcp_offset + sizeof(*th))) return 0; th = (struct tcphdr *)(skb_network_header(*pskb) + tcp_offset); Loading Loading @@ -411,7 +412,7 @@ static inline int app_tcp_pkt_in(struct ip_vs_conn *cp, struct sk_buff **pskb, struct tcphdr *th; __u32 seq; if (!ip_vs_make_skb_writable(pskb, tcp_offset + sizeof(*th))) if (!skb_make_writable(*pskb, tcp_offset + sizeof(*th))) return 0; th = (struct tcphdr *)(skb_network_header(*pskb) + tcp_offset); Loading net/ipv4/ipvs/ip_vs_core.c +2 −40 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ EXPORT_SYMBOL(ip_vs_conn_put); #ifdef CONFIG_IP_VS_DEBUG EXPORT_SYMBOL(ip_vs_get_debug_level); #endif EXPORT_SYMBOL(ip_vs_make_skb_writable); /* ID used in ICMP lookups */ Loading Loading @@ -163,42 +162,6 @@ ip_vs_set_state(struct ip_vs_conn *cp, int direction, } int ip_vs_make_skb_writable(struct sk_buff **pskb, int writable_len) { struct sk_buff *skb = *pskb; /* skb is already used, better copy skb and its payload */ if (unlikely(skb_shared(skb) || skb->sk)) goto copy_skb; /* skb data is already used, copy it */ if (unlikely(skb_cloned(skb))) goto copy_data; return pskb_may_pull(skb, writable_len); copy_data: if (unlikely(writable_len > skb->len)) return 0; return !pskb_expand_head(skb, 0, 0, GFP_ATOMIC); copy_skb: if (unlikely(writable_len > skb->len)) return 0; skb = skb_copy(skb, GFP_ATOMIC); if (!skb) return 0; BUG_ON(skb_is_nonlinear(skb)); /* Rest of kernel will get very unhappy if we pass it a suddenly-orphaned skbuff */ if ((*pskb)->sk) skb_set_owner_w(skb, (*pskb)->sk); kfree_skb(*pskb); *pskb = skb; return 1; } /* * IPVS persistent scheduling function * It creates a connection entry according to its template if exists, Loading Loading @@ -689,9 +652,8 @@ static int ip_vs_out_icmp(struct sk_buff **pskb, int *related) if (IPPROTO_TCP == cih->protocol || IPPROTO_UDP == cih->protocol) offset += 2 * sizeof(__u16); if (!ip_vs_make_skb_writable(pskb, offset)) if (!skb_make_writable(skb, offset)) goto out; skb = *pskb; ip_vs_nat_icmp(skb, pp, cp, 1); Loading Loading @@ -799,7 +761,7 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb, IP_VS_DBG_PKT(11, pp, skb, 0, "Outgoing packet"); if (!ip_vs_make_skb_writable(pskb, ihl)) if (!skb_make_writable(skb, ihl)) goto drop; /* mangle the packet */ Loading net/ipv4/ipvs/ip_vs_ftp.c +3 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <linux/skbuff.h> #include <linux/in.h> #include <linux/ip.h> #include <linux/netfilter.h> #include <net/protocol.h> #include <net/tcp.h> #include <asm/unaligned.h> Loading Loading @@ -155,7 +156,7 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, return 1; /* Linear packets are much easier to deal with. */ if (!ip_vs_make_skb_writable(pskb, (*pskb)->len)) if (!skb_make_writable(*pskb, (*pskb)->len)) return 0; if (cp->app_data == &ip_vs_ftp_pasv) { Loading Loading @@ -256,7 +257,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, return 1; /* Linear packets are much easier to deal with. */ if (!ip_vs_make_skb_writable(pskb, (*pskb)->len)) if (!skb_make_writable(*pskb, (*pskb)->len)) return 0; /* Loading net/ipv4/ipvs/ip_vs_proto_tcp.c +3 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <linux/tcp.h> /* for tcphdr */ #include <net/ip.h> #include <net/tcp.h> /* for csum_tcpudp_magic */ #include <linux/netfilter.h> #include <linux/netfilter_ipv4.h> #include <net/ip_vs.h> Loading Loading @@ -129,7 +130,7 @@ tcp_snat_handler(struct sk_buff **pskb, const unsigned int tcphoff = ip_hdrlen(*pskb); /* csum_check requires unshared skb */ if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) if (!skb_make_writable(*pskb, tcphoff+sizeof(*tcph))) return 0; if (unlikely(cp->app != NULL)) { Loading Loading @@ -177,7 +178,7 @@ tcp_dnat_handler(struct sk_buff **pskb, const unsigned int tcphoff = ip_hdrlen(*pskb); /* csum_check requires unshared skb */ if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) if (!skb_make_writable(*pskb, tcphoff+sizeof(*tcph))) return 0; if (unlikely(cp->app != NULL)) { Loading Loading
include/net/ip_vs.h +0 −1 Original line number Diff line number Diff line Loading @@ -984,7 +984,6 @@ static inline char ip_vs_fwd_tag(struct ip_vs_conn *cp) return fwd; } extern int ip_vs_make_skb_writable(struct sk_buff **pskb, int len); extern void ip_vs_nat_icmp(struct sk_buff *skb, struct ip_vs_protocol *pp, struct ip_vs_conn *cp, int dir); Loading
net/ipv4/ipvs/ip_vs_app.c +3 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/skbuff.h> #include <linux/in.h> #include <linux/ip.h> #include <linux/netfilter.h> #include <net/net_namespace.h> #include <net/protocol.h> #include <net/tcp.h> Loading Loading @@ -336,7 +337,7 @@ static inline int app_tcp_pkt_out(struct ip_vs_conn *cp, struct sk_buff **pskb, struct tcphdr *th; __u32 seq; if (!ip_vs_make_skb_writable(pskb, tcp_offset + sizeof(*th))) if (!skb_make_writable(*pskb, tcp_offset + sizeof(*th))) return 0; th = (struct tcphdr *)(skb_network_header(*pskb) + tcp_offset); Loading Loading @@ -411,7 +412,7 @@ static inline int app_tcp_pkt_in(struct ip_vs_conn *cp, struct sk_buff **pskb, struct tcphdr *th; __u32 seq; if (!ip_vs_make_skb_writable(pskb, tcp_offset + sizeof(*th))) if (!skb_make_writable(*pskb, tcp_offset + sizeof(*th))) return 0; th = (struct tcphdr *)(skb_network_header(*pskb) + tcp_offset); Loading
net/ipv4/ipvs/ip_vs_core.c +2 −40 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ EXPORT_SYMBOL(ip_vs_conn_put); #ifdef CONFIG_IP_VS_DEBUG EXPORT_SYMBOL(ip_vs_get_debug_level); #endif EXPORT_SYMBOL(ip_vs_make_skb_writable); /* ID used in ICMP lookups */ Loading Loading @@ -163,42 +162,6 @@ ip_vs_set_state(struct ip_vs_conn *cp, int direction, } int ip_vs_make_skb_writable(struct sk_buff **pskb, int writable_len) { struct sk_buff *skb = *pskb; /* skb is already used, better copy skb and its payload */ if (unlikely(skb_shared(skb) || skb->sk)) goto copy_skb; /* skb data is already used, copy it */ if (unlikely(skb_cloned(skb))) goto copy_data; return pskb_may_pull(skb, writable_len); copy_data: if (unlikely(writable_len > skb->len)) return 0; return !pskb_expand_head(skb, 0, 0, GFP_ATOMIC); copy_skb: if (unlikely(writable_len > skb->len)) return 0; skb = skb_copy(skb, GFP_ATOMIC); if (!skb) return 0; BUG_ON(skb_is_nonlinear(skb)); /* Rest of kernel will get very unhappy if we pass it a suddenly-orphaned skbuff */ if ((*pskb)->sk) skb_set_owner_w(skb, (*pskb)->sk); kfree_skb(*pskb); *pskb = skb; return 1; } /* * IPVS persistent scheduling function * It creates a connection entry according to its template if exists, Loading Loading @@ -689,9 +652,8 @@ static int ip_vs_out_icmp(struct sk_buff **pskb, int *related) if (IPPROTO_TCP == cih->protocol || IPPROTO_UDP == cih->protocol) offset += 2 * sizeof(__u16); if (!ip_vs_make_skb_writable(pskb, offset)) if (!skb_make_writable(skb, offset)) goto out; skb = *pskb; ip_vs_nat_icmp(skb, pp, cp, 1); Loading Loading @@ -799,7 +761,7 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb, IP_VS_DBG_PKT(11, pp, skb, 0, "Outgoing packet"); if (!ip_vs_make_skb_writable(pskb, ihl)) if (!skb_make_writable(skb, ihl)) goto drop; /* mangle the packet */ Loading
net/ipv4/ipvs/ip_vs_ftp.c +3 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <linux/skbuff.h> #include <linux/in.h> #include <linux/ip.h> #include <linux/netfilter.h> #include <net/protocol.h> #include <net/tcp.h> #include <asm/unaligned.h> Loading Loading @@ -155,7 +156,7 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, return 1; /* Linear packets are much easier to deal with. */ if (!ip_vs_make_skb_writable(pskb, (*pskb)->len)) if (!skb_make_writable(*pskb, (*pskb)->len)) return 0; if (cp->app_data == &ip_vs_ftp_pasv) { Loading Loading @@ -256,7 +257,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, return 1; /* Linear packets are much easier to deal with. */ if (!ip_vs_make_skb_writable(pskb, (*pskb)->len)) if (!skb_make_writable(*pskb, (*pskb)->len)) return 0; /* Loading
net/ipv4/ipvs/ip_vs_proto_tcp.c +3 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <linux/tcp.h> /* for tcphdr */ #include <net/ip.h> #include <net/tcp.h> /* for csum_tcpudp_magic */ #include <linux/netfilter.h> #include <linux/netfilter_ipv4.h> #include <net/ip_vs.h> Loading Loading @@ -129,7 +130,7 @@ tcp_snat_handler(struct sk_buff **pskb, const unsigned int tcphoff = ip_hdrlen(*pskb); /* csum_check requires unshared skb */ if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) if (!skb_make_writable(*pskb, tcphoff+sizeof(*tcph))) return 0; if (unlikely(cp->app != NULL)) { Loading Loading @@ -177,7 +178,7 @@ tcp_dnat_handler(struct sk_buff **pskb, const unsigned int tcphoff = ip_hdrlen(*pskb); /* csum_check requires unshared skb */ if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) if (!skb_make_writable(*pskb, tcphoff+sizeof(*tcph))) return 0; if (unlikely(cp->app != NULL)) { Loading