diff options
Diffstat (limited to 'net/ipv4/ipvs')
-rw-r--r-- | net/ipv4/ipvs/ip_vs_app.c | 3 | ||||
-rw-r--r-- | net/ipv4/ipvs/ip_vs_core.c | 4 | ||||
-rw-r--r-- | net/ipv4/ipvs/ip_vs_proto.c | 8 | ||||
-rw-r--r-- | net/ipv4/ipvs/ip_vs_proto_tcp.c | 16 | ||||
-rw-r--r-- | net/ipv4/ipvs/ip_vs_proto_udp.c | 22 |
5 files changed, 25 insertions, 28 deletions
diff --git a/net/ipv4/ipvs/ip_vs_app.c b/net/ipv4/ipvs/ip_vs_app.c index e7752334d296..6c40899aa161 100644 --- a/net/ipv4/ipvs/ip_vs_app.c +++ b/net/ipv4/ipvs/ip_vs_app.c | |||
@@ -80,10 +80,9 @@ ip_vs_app_inc_new(struct ip_vs_app *app, __u16 proto, __u16 port) | |||
80 | if (!pp->unregister_app) | 80 | if (!pp->unregister_app) |
81 | return -EOPNOTSUPP; | 81 | return -EOPNOTSUPP; |
82 | 82 | ||
83 | inc = kmalloc(sizeof(struct ip_vs_app), GFP_KERNEL); | 83 | inc = kmemdup(app, sizeof(*inc), GFP_KERNEL); |
84 | if (!inc) | 84 | if (!inc) |
85 | return -ENOMEM; | 85 | return -ENOMEM; |
86 | memcpy(inc, app, sizeof(*inc)); | ||
87 | INIT_LIST_HEAD(&inc->p_list); | 86 | INIT_LIST_HEAD(&inc->p_list); |
88 | INIT_LIST_HEAD(&inc->incs_list); | 87 | INIT_LIST_HEAD(&inc->incs_list); |
89 | inc->app = app; | 88 | inc->app = app; |
diff --git a/net/ipv4/ipvs/ip_vs_core.c b/net/ipv4/ipvs/ip_vs_core.c index 1445bb47fea4..34257520a3a6 100644 --- a/net/ipv4/ipvs/ip_vs_core.c +++ b/net/ipv4/ipvs/ip_vs_core.c | |||
@@ -536,9 +536,9 @@ static unsigned int ip_vs_post_routing(unsigned int hooknum, | |||
536 | return NF_STOP; | 536 | return NF_STOP; |
537 | } | 537 | } |
538 | 538 | ||
539 | u16 ip_vs_checksum_complete(struct sk_buff *skb, int offset) | 539 | __sum16 ip_vs_checksum_complete(struct sk_buff *skb, int offset) |
540 | { | 540 | { |
541 | return (u16) csum_fold(skb_checksum(skb, offset, skb->len - offset, 0)); | 541 | return csum_fold(skb_checksum(skb, offset, skb->len - offset, 0)); |
542 | } | 542 | } |
543 | 543 | ||
544 | static inline struct sk_buff * | 544 | static inline struct sk_buff * |
diff --git a/net/ipv4/ipvs/ip_vs_proto.c b/net/ipv4/ipvs/ip_vs_proto.c index c4528b5c800d..e844ddb82b9a 100644 --- a/net/ipv4/ipvs/ip_vs_proto.c +++ b/net/ipv4/ipvs/ip_vs_proto.c | |||
@@ -118,13 +118,7 @@ void ip_vs_protocol_timeout_change(int flags) | |||
118 | int * | 118 | int * |
119 | ip_vs_create_timeout_table(int *table, int size) | 119 | ip_vs_create_timeout_table(int *table, int size) |
120 | { | 120 | { |
121 | int *t; | 121 | return kmemdup(table, size, GFP_ATOMIC); |
122 | |||
123 | t = kmalloc(size, GFP_ATOMIC); | ||
124 | if (t == NULL) | ||
125 | return NULL; | ||
126 | memcpy(t, table, size); | ||
127 | return t; | ||
128 | } | 122 | } |
129 | 123 | ||
130 | 124 | ||
diff --git a/net/ipv4/ipvs/ip_vs_proto_tcp.c b/net/ipv4/ipvs/ip_vs_proto_tcp.c index 6ff05c3a32e6..16a9ebee2fe6 100644 --- a/net/ipv4/ipvs/ip_vs_proto_tcp.c +++ b/net/ipv4/ipvs/ip_vs_proto_tcp.c | |||
@@ -84,7 +84,7 @@ tcp_conn_schedule(struct sk_buff *skb, | |||
84 | } | 84 | } |
85 | 85 | ||
86 | if (th->syn && | 86 | if (th->syn && |
87 | (svc = ip_vs_service_get(skb->nfmark, skb->nh.iph->protocol, | 87 | (svc = ip_vs_service_get(skb->mark, skb->nh.iph->protocol, |
88 | skb->nh.iph->daddr, th->dest))) { | 88 | skb->nh.iph->daddr, th->dest))) { |
89 | if (ip_vs_todrop()) { | 89 | if (ip_vs_todrop()) { |
90 | /* | 90 | /* |
@@ -116,9 +116,9 @@ tcp_fast_csum_update(struct tcphdr *tcph, __be32 oldip, __be32 newip, | |||
116 | __be16 oldport, __be16 newport) | 116 | __be16 oldport, __be16 newport) |
117 | { | 117 | { |
118 | tcph->check = | 118 | tcph->check = |
119 | ip_vs_check_diff(~oldip, newip, | 119 | csum_fold(ip_vs_check_diff4(oldip, newip, |
120 | ip_vs_check_diff(oldport ^ htons(0xFFFF), | 120 | ip_vs_check_diff2(oldport, newport, |
121 | newport, tcph->check)); | 121 | ~csum_unfold(tcph->check)))); |
122 | } | 122 | } |
123 | 123 | ||
124 | 124 | ||
@@ -490,16 +490,18 @@ tcp_state_transition(struct ip_vs_conn *cp, int direction, | |||
490 | static struct list_head tcp_apps[TCP_APP_TAB_SIZE]; | 490 | static struct list_head tcp_apps[TCP_APP_TAB_SIZE]; |
491 | static DEFINE_SPINLOCK(tcp_app_lock); | 491 | static DEFINE_SPINLOCK(tcp_app_lock); |
492 | 492 | ||
493 | static inline __u16 tcp_app_hashkey(__u16 port) | 493 | static inline __u16 tcp_app_hashkey(__be16 port) |
494 | { | 494 | { |
495 | return ((port >> TCP_APP_TAB_BITS) ^ port) & TCP_APP_TAB_MASK; | 495 | return (((__force u16)port >> TCP_APP_TAB_BITS) ^ (__force u16)port) |
496 | & TCP_APP_TAB_MASK; | ||
496 | } | 497 | } |
497 | 498 | ||
498 | 499 | ||
499 | static int tcp_register_app(struct ip_vs_app *inc) | 500 | static int tcp_register_app(struct ip_vs_app *inc) |
500 | { | 501 | { |
501 | struct ip_vs_app *i; | 502 | struct ip_vs_app *i; |
502 | __u16 hash, port = inc->port; | 503 | __u16 hash; |
504 | __be16 port = inc->port; | ||
503 | int ret = 0; | 505 | int ret = 0; |
504 | 506 | ||
505 | hash = tcp_app_hashkey(port); | 507 | hash = tcp_app_hashkey(port); |
diff --git a/net/ipv4/ipvs/ip_vs_proto_udp.c b/net/ipv4/ipvs/ip_vs_proto_udp.c index 691c8b637b29..03f0a414cfa4 100644 --- a/net/ipv4/ipvs/ip_vs_proto_udp.c +++ b/net/ipv4/ipvs/ip_vs_proto_udp.c | |||
@@ -89,7 +89,7 @@ udp_conn_schedule(struct sk_buff *skb, struct ip_vs_protocol *pp, | |||
89 | return 0; | 89 | return 0; |
90 | } | 90 | } |
91 | 91 | ||
92 | if ((svc = ip_vs_service_get(skb->nfmark, skb->nh.iph->protocol, | 92 | if ((svc = ip_vs_service_get(skb->mark, skb->nh.iph->protocol, |
93 | skb->nh.iph->daddr, uh->dest))) { | 93 | skb->nh.iph->daddr, uh->dest))) { |
94 | if (ip_vs_todrop()) { | 94 | if (ip_vs_todrop()) { |
95 | /* | 95 | /* |
@@ -121,11 +121,11 @@ udp_fast_csum_update(struct udphdr *uhdr, __be32 oldip, __be32 newip, | |||
121 | __be16 oldport, __be16 newport) | 121 | __be16 oldport, __be16 newport) |
122 | { | 122 | { |
123 | uhdr->check = | 123 | uhdr->check = |
124 | ip_vs_check_diff(~oldip, newip, | 124 | csum_fold(ip_vs_check_diff4(oldip, newip, |
125 | ip_vs_check_diff(oldport ^ htons(0xFFFF), | 125 | ip_vs_check_diff2(oldport, newport, |
126 | newport, uhdr->check)); | 126 | ~csum_unfold(uhdr->check)))); |
127 | if (!uhdr->check) | 127 | if (!uhdr->check) |
128 | uhdr->check = -1; | 128 | uhdr->check = CSUM_MANGLED_0; |
129 | } | 129 | } |
130 | 130 | ||
131 | static int | 131 | static int |
@@ -173,7 +173,7 @@ udp_snat_handler(struct sk_buff **pskb, | |||
173 | cp->protocol, | 173 | cp->protocol, |
174 | (*pskb)->csum); | 174 | (*pskb)->csum); |
175 | if (udph->check == 0) | 175 | if (udph->check == 0) |
176 | udph->check = -1; | 176 | udph->check = CSUM_MANGLED_0; |
177 | IP_VS_DBG(11, "O-pkt: %s O-csum=%d (+%zd)\n", | 177 | IP_VS_DBG(11, "O-pkt: %s O-csum=%d (+%zd)\n", |
178 | pp->name, udph->check, | 178 | pp->name, udph->check, |
179 | (char*)&(udph->check) - (char*)udph); | 179 | (char*)&(udph->check) - (char*)udph); |
@@ -228,7 +228,7 @@ udp_dnat_handler(struct sk_buff **pskb, | |||
228 | cp->protocol, | 228 | cp->protocol, |
229 | (*pskb)->csum); | 229 | (*pskb)->csum); |
230 | if (udph->check == 0) | 230 | if (udph->check == 0) |
231 | udph->check = -1; | 231 | udph->check = CSUM_MANGLED_0; |
232 | (*pskb)->ip_summed = CHECKSUM_UNNECESSARY; | 232 | (*pskb)->ip_summed = CHECKSUM_UNNECESSARY; |
233 | } | 233 | } |
234 | return 1; | 234 | return 1; |
@@ -282,16 +282,18 @@ udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp) | |||
282 | static struct list_head udp_apps[UDP_APP_TAB_SIZE]; | 282 | static struct list_head udp_apps[UDP_APP_TAB_SIZE]; |
283 | static DEFINE_SPINLOCK(udp_app_lock); | 283 | static DEFINE_SPINLOCK(udp_app_lock); |
284 | 284 | ||
285 | static inline __u16 udp_app_hashkey(__u16 port) | 285 | static inline __u16 udp_app_hashkey(__be16 port) |
286 | { | 286 | { |
287 | return ((port >> UDP_APP_TAB_BITS) ^ port) & UDP_APP_TAB_MASK; | 287 | return (((__force u16)port >> UDP_APP_TAB_BITS) ^ (__force u16)port) |
288 | & UDP_APP_TAB_MASK; | ||
288 | } | 289 | } |
289 | 290 | ||
290 | 291 | ||
291 | static int udp_register_app(struct ip_vs_app *inc) | 292 | static int udp_register_app(struct ip_vs_app *inc) |
292 | { | 293 | { |
293 | struct ip_vs_app *i; | 294 | struct ip_vs_app *i; |
294 | __u16 hash, port = inc->port; | 295 | __u16 hash; |
296 | __be16 port = inc->port; | ||
295 | int ret = 0; | 297 | int ret = 0; |
296 | 298 | ||
297 | hash = udp_app_hashkey(port); | 299 | hash = udp_app_hashkey(port); |