diff -NurpP --minimal linux-2.6.19.3-vs2.2.0-rc12/include/linux/vserver/network.h linux-2.6.19.3-vs2.2.0-rc12.2/include/linux/vserver/network.h --- linux-2.6.19.3-vs2.2.0-rc12/include/linux/vserver/network.h 2006-12-06 21:03:02 +0100 +++ linux-2.6.19.3-vs2.2.0-rc12.2/include/linux/vserver/network.h 2007-02-14 04:53:34 +0100 @@ -127,10 +127,10 @@ int dev_in_nx_info(struct net_device *d, struct sock; #ifdef CONFIG_INET -int nx_addr_conflict(struct nx_info *, uint32_t, struct sock *); +int nx_addr_conflict(struct nx_info *, uint32_t, const struct sock *); #else /* CONFIG_INET */ static inline -int nx_addr_conflict(struct nx_info *n, uint32_t a, struct sock *s) +int nx_addr_conflict(struct nx_info *n, uint32_t a, const struct sock *s) { return 1; } diff -NurpP --minimal linux-2.6.19.3-vs2.2.0-rc12/kernel/vserver/network.c linux-2.6.19.3-vs2.2.0-rc12.2/kernel/vserver/network.c --- linux-2.6.19.3-vs2.2.0-rc12/kernel/vserver/network.c 2007-01-26 01:58:15 +0100 +++ linux-2.6.19.3-vs2.2.0-rc12.2/kernel/vserver/network.c 2007-02-14 04:52:09 +0100 @@ -478,7 +478,7 @@ out: * sk: the socket to check against * addr: the address in question (must be != 0) */ -static inline int __addr_in_socket(struct sock *sk, uint32_t addr) +static inline int __addr_in_socket(const struct sock *sk, uint32_t addr) { struct nx_info *nxi = sk->sk_nx_info; uint32_t saddr = inet_rcv_saddr(sk); @@ -501,7 +501,7 @@ static inline int __addr_in_socket(struc } -int nx_addr_conflict(struct nx_info *nxi, uint32_t addr, struct sock *sk) +int nx_addr_conflict(struct nx_info *nxi, uint32_t addr, const struct sock *sk) { vxdprintk(VXD_CBIT(net, 2), "nx_addr_conflict(%p,%p) %d.%d,%d.%d", diff -NurpP --minimal linux-2.6.19.3-vs2.2.0-rc12/net/ipv4/udp.c linux-2.6.19.3-vs2.2.0-rc12.2/net/ipv4/udp.c --- linux-2.6.19.3-vs2.2.0-rc12/net/ipv4/udp.c 2007-01-18 04:57:33 +0100 +++ linux-2.6.19.3-vs2.2.0-rc12.2/net/ipv4/udp.c 2007-02-14 04:52:53 +0100 @@ -218,11 +218,8 @@ fail: static inline int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2) { - struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2); - return ( !ipv6_only_sock(sk2) && - (!inet1->rcv_saddr || !inet2->rcv_saddr || - inet1->rcv_saddr == inet2->rcv_saddr )); + nx_addr_conflict(sk1->sk_nx_info, inet_rcv_saddr(sk1), sk2)); } static inline int udp_v4_get_port(struct sock *sk, unsigned short snum)