netlink: Use correct interface index in NL_SET mode
nl_addr() and nl_route() take an 'op' selector which affects a number of parameters to the netlink call. Unfortunately when we introduced this option a bug was introduced so that we always use the interface index for the host side, rather than the one for the pasta namespace. Really, the entire interface to nl_addr() and nl_route() is pretty bad: it's tightly coupled with the use cases of its callers. This is a minimal fix which doesn't address that, but also doesn't make it significantly worse. Link: https://bugs.passt.top/show_bug.cgi?id=59 Fixes:2fe0461856
("netlink: Add functionality to copy routes from outer namespace") Fixes:e89da3cf03
("netlink: Add functionality to copy addresses from outer namespace") Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
32660cea04
commit
289301b39c
1 changed files with 2 additions and 2 deletions
|
@ -226,7 +226,7 @@ void nl_route(enum nl_op op, unsigned int ifi, unsigned int ifi_ns,
|
||||||
|
|
||||||
.rta.rta_type = RTA_OIF,
|
.rta.rta_type = RTA_OIF,
|
||||||
.rta.rta_len = RTA_LENGTH(sizeof(unsigned int)),
|
.rta.rta_len = RTA_LENGTH(sizeof(unsigned int)),
|
||||||
.ifi = ifi,
|
.ifi = op == NL_SET ? ifi_ns : ifi,
|
||||||
};
|
};
|
||||||
unsigned dup_routes = 0;
|
unsigned dup_routes = 0;
|
||||||
ssize_t n, nlmsgs_size;
|
ssize_t n, nlmsgs_size;
|
||||||
|
@ -370,7 +370,7 @@ void nl_addr(enum nl_op op, unsigned int ifi, unsigned int ifi_ns,
|
||||||
.nlh.nlmsg_seq = nl_seq++,
|
.nlh.nlmsg_seq = nl_seq++,
|
||||||
|
|
||||||
.ifa.ifa_family = af,
|
.ifa.ifa_family = af,
|
||||||
.ifa.ifa_index = ifi,
|
.ifa.ifa_index = op == NL_SET ? ifi_ns : ifi,
|
||||||
.ifa.ifa_prefixlen = op == NL_SET ? *prefix_len : 0,
|
.ifa.ifa_prefixlen = op == NL_SET ? *prefix_len : 0,
|
||||||
};
|
};
|
||||||
ssize_t n, nlmsgs_size;
|
ssize_t n, nlmsgs_size;
|
||||||
|
|
Loading…
Reference in a new issue