Message ID | 20210124155347.61959-1-bluca@debian.org |
---|---|
State | New |
Headers | show |
Series | [iproute2] iproute get: force rtm_dst_len to 32/128 | expand |
diff --git a/ip/iproute.c b/ip/iproute.c index ebb5f160..3646d531 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -2069,7 +2069,12 @@ static int iproute_get(int argc, char **argv) if (addr.bytelen) addattr_l(&req.n, sizeof(req), RTA_DST, &addr.data, addr.bytelen); - req.r.rtm_dst_len = addr.bitlen; + if (req.r.rtm_family == AF_INET) + req.r.rtm_dst_len = 32; + else if (req.r.rtm_family == AF_INET6) + req.r.rtm_dst_len = 128; + else + req.r.rtm_dst_len = addr.bitlen; address_found = true; } argc--; argv++;
Since NETLINK_GET_STRICT_CHK was enabled, the kernel rejects commands that pass a prefix length, eg: ip route get `1.0.0.0/1 Error: ipv4: Invalid values in header for route get request. ip route get 0.0.0.0/0 Error: ipv4: rtm_src_len and rtm_dst_len must be 32 for IPv4 Since there's no point in setting a rtm_dst_len that we know is going to be rejected, just force it to the right value if it's passed on the command line. Bug-Debian: https://bugs.debian.org/944730 Reported-By: Clément 'wxcafé' Hertling <wxcafe@wxcafe.net> Signed-off-by: Luca Boccassi <bluca@debian.org> --- As mentioned by David on: https://www.spinics.net/lists/netdev/msg624125.html ip/iproute.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)