git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.3
[linux-2.6.git]
/
net
/
ipv4
/
ipvs
/
ip_vs_proto_udp.c
diff --git
a/net/ipv4/ipvs/ip_vs_proto_udp.c
b/net/ipv4/ipvs/ip_vs_proto_udp.c
index
81501c9
..
443ec45
100644
(file)
--- a/
net/ipv4/ipvs/ip_vs_proto_udp.c
+++ b/
net/ipv4/ipvs/ip_vs_proto_udp.c
@@
-26,19
+26,20
@@
udp_conn_in_get(const struct sk_buff *skb, struct ip_vs_protocol *pp,
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
- __u16
ports[2]
;
+ __u16
_ports[2], *pptr
;
- if (skb_copy_bits(skb, proto_off, ports, sizeof(ports)) < 0)
+ pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
+ if (pptr == NULL)
return NULL;
if (likely(!inverse)) {
cp = ip_vs_conn_in_get(iph->protocol,
return NULL;
if (likely(!inverse)) {
cp = ip_vs_conn_in_get(iph->protocol,
- iph->saddr, p
orts
[0],
- iph->daddr, p
orts
[1]);
+ iph->saddr, p
ptr
[0],
+ iph->daddr, p
ptr
[1]);
} else {
cp = ip_vs_conn_in_get(iph->protocol,
} else {
cp = ip_vs_conn_in_get(iph->protocol,
- iph->daddr, p
orts
[1],
- iph->saddr, p
orts
[0]);
+ iph->daddr, p
ptr
[1],
+ iph->saddr, p
ptr
[0]);
}
return cp;
}
return cp;
@@
-50,19
+51,21
@@
udp_conn_out_get(const struct sk_buff *skb, struct ip_vs_protocol *pp,
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
- __u16
ports[2]
;
+ __u16
_ports[2], *pptr
;
- if (skb_copy_bits(skb, skb->nh.iph->ihl*4, ports, sizeof(ports)) < 0)
+ pptr = skb_header_pointer(skb, skb->nh.iph->ihl*4,
+ sizeof(_ports), _ports);
+ if (pptr == NULL)
return NULL;
if (likely(!inverse)) {
cp = ip_vs_conn_out_get(iph->protocol,
return NULL;
if (likely(!inverse)) {
cp = ip_vs_conn_out_get(iph->protocol,
- iph->saddr, p
orts
[0],
- iph->daddr, p
orts
[1]);
+ iph->saddr, p
ptr
[0],
+ iph->daddr, p
ptr
[1]);
} else {
cp = ip_vs_conn_out_get(iph->protocol,
} else {
cp = ip_vs_conn_out_get(iph->protocol,
- iph->daddr, p
orts
[1],
- iph->saddr, p
orts
[0]);
+ iph->daddr, p
ptr
[1],
+ iph->saddr, p
ptr
[0]);
}
return cp;
}
return cp;
@@
-74,15
+77,17
@@
udp_conn_schedule(struct sk_buff *skb, struct ip_vs_protocol *pp,
int *verdict, struct ip_vs_conn **cpp)
{
struct ip_vs_service *svc;
int *verdict, struct ip_vs_conn **cpp)
{
struct ip_vs_service *svc;
- struct udphdr
udp
h;
+ struct udphdr
_udph, *u
h;
- if (skb_copy_bits(skb, skb->nh.iph->ihl*4, &udph, sizeof(udph)) < 0) {
+ uh = skb_header_pointer(skb, skb->nh.iph->ihl*4,
+ sizeof(_udph), &_udph);
+ if (uh == NULL) {
*verdict = NF_DROP;
return 0;
}
if ((svc = ip_vs_service_get(skb->nfmark, skb->nh.iph->protocol,
*verdict = NF_DROP;
return 0;
}
if ((svc = ip_vs_service_get(skb->nfmark, skb->nh.iph->protocol,
- skb->nh.iph->daddr, u
dph.
dest))) {
+ skb->nh.iph->daddr, u
h->
dest))) {
if (ip_vs_todrop()) {
/*
* It seems that we are very loaded.
if (ip_vs_todrop()) {
/*
* It seems that we are very loaded.
@@
-230,13
+235,14
@@
udp_dnat_handler(struct sk_buff **pskb,
static int
udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)
{
static int
udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)
{
- struct udphdr
udp
h;
+ struct udphdr
_udph, *u
h;
unsigned int udphoff = skb->nh.iph->ihl*4;
unsigned int udphoff = skb->nh.iph->ihl*4;
- if (skb_copy_bits(skb, udphoff, &udph, sizeof(udph)) < 0)
+ uh = skb_header_pointer(skb, udphoff, sizeof(_udph), &_udph);
+ if (uh == NULL)
return 0;
return 0;
- if (u
dph.
check != 0) {
+ if (u
h->
check != 0) {
switch (skb->ip_summed) {
case CHECKSUM_NONE:
skb->csum = skb_checksum(skb, udphoff,
switch (skb->ip_summed) {
case CHECKSUM_NONE:
skb->csum = skb_checksum(skb, udphoff,