diff options
author | Michal Kubecek <mkubecek@suse.cz> | 2014-01-30 02:50:20 -0500 |
---|---|---|
committer | Simon Horman <horms@verge.net.au> | 2014-02-04 07:13:47 -0500 |
commit | 2a971354e74f3837d14b9c8d7f7983b0c9c330e4 (patch) | |
tree | faf9c92d7d340b80fdd4ddb1ada5973368514404 /net | |
parent | d922e1cb1ea17ac7f0a5c3c2be98d4bd80d055b8 (diff) |
ipvs: fix AF assignment in ip_vs_conn_new()
If a fwmark is passed to ip_vs_conn_new(), it is passed in
vaddr, not daddr. Therefore we should set AF to AF_UNSPEC in
vaddr assignment (like we do in ip_vs_ct_in_get()), otherwise we
may copy only first 4 bytes of an IPv6 address into cp->daddr.
Signed-off-by: Bogdano Arendartchuk <barendartchuk@suse.com>
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/ipvs/ip_vs_conn.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c index 59a1a85bcb3e..a8eb0a89326a 100644 --- a/net/netfilter/ipvs/ip_vs_conn.c +++ b/net/netfilter/ipvs/ip_vs_conn.c | |||
@@ -871,11 +871,11 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, | |||
871 | cp->protocol = p->protocol; | 871 | cp->protocol = p->protocol; |
872 | ip_vs_addr_set(p->af, &cp->caddr, p->caddr); | 872 | ip_vs_addr_set(p->af, &cp->caddr, p->caddr); |
873 | cp->cport = p->cport; | 873 | cp->cport = p->cport; |
874 | ip_vs_addr_set(p->af, &cp->vaddr, p->vaddr); | 874 | /* proto should only be IPPROTO_IP if p->vaddr is a fwmark */ |
875 | cp->vport = p->vport; | ||
876 | /* proto should only be IPPROTO_IP if d_addr is a fwmark */ | ||
877 | ip_vs_addr_set(p->protocol == IPPROTO_IP ? AF_UNSPEC : p->af, | 875 | ip_vs_addr_set(p->protocol == IPPROTO_IP ? AF_UNSPEC : p->af, |
878 | &cp->daddr, daddr); | 876 | &cp->vaddr, p->vaddr); |
877 | cp->vport = p->vport; | ||
878 | ip_vs_addr_set(p->af, &cp->daddr, daddr); | ||
879 | cp->dport = dport; | 879 | cp->dport = dport; |
880 | cp->flags = flags; | 880 | cp->flags = flags; |
881 | cp->fwmark = fwmark; | 881 | cp->fwmark = fwmark; |