ipvs: Supply destination address family to ip_vs_conn_new
The assumption that dest af is equal to service af is now unreliable, so we must specify it manually so as not to copy just the first 4 bytes of a v6 address or doing an illegal read of 16 butes on a v6 address. We "lie" in two places: for synchronization (which we will explicitly disallow from happening when we have heterogeneous pools) and for black hole addresses where there's no real dest. Signed-off-by: Alex Gartrell <agartrell@fb.com> Acked-by: Julian Anastasov <ja@ssi.bg> Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:

committed by
Simon Horman

parent
ad147aa4dd
commit
ba38528aae
@@ -535,6 +535,7 @@ struct ip_vs_conn {
|
||||
union nf_inet_addr daddr; /* destination address */
|
||||
volatile __u32 flags; /* status flags */
|
||||
__u16 protocol; /* Which protocol (TCP/UDP) */
|
||||
__u16 daf; /* Address family of the dest */
|
||||
#ifdef CONFIG_NET_NS
|
||||
struct net *net; /* Name space */
|
||||
#endif
|
||||
@@ -1213,7 +1214,7 @@ static inline void __ip_vs_conn_put(struct ip_vs_conn *cp)
|
||||
void ip_vs_conn_put(struct ip_vs_conn *cp);
|
||||
void ip_vs_conn_fill_cport(struct ip_vs_conn *cp, __be16 cport);
|
||||
|
||||
struct ip_vs_conn *ip_vs_conn_new(const struct ip_vs_conn_param *p,
|
||||
struct ip_vs_conn *ip_vs_conn_new(const struct ip_vs_conn_param *p, int dest_af,
|
||||
const union nf_inet_addr *daddr,
|
||||
__be16 dport, unsigned int flags,
|
||||
struct ip_vs_dest *dest, __u32 fwmark);
|
||||
|
Reference in New Issue
Block a user