]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
ip route: get: allow zero-length subnet mask
authorLuca Boccassi <bluca@debian.org>
Thu, 14 Feb 2019 23:29:18 +0000 (23:29 +0000)
committerStephen Hemminger <stephen@networkplumber.org>
Tue, 19 Feb 2019 23:19:31 +0000 (15:19 -0800)
A /0 subnet mask is theoretically valid, but ip route get doesn't allow
it:

$ ip route get 1.0.0.0/0
need at least a destination address

Change the check and remember whether we found an address or not, since
according to the documentation it's a mandatory parameter.

$ ip/ip route get 1.0.0.0/0
1.0.0.0 via 192.168.1.1 dev eth0 src 192.168.1.91 uid 1000
    cache

Reported-by: Clément Hertling <wxcafe@wxcafe.net>
Signed-off-by: Luca Boccassi <bluca@debian.org>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
ip/iproute.c

index 5f58a3b344061c991fef31df75f1cf29fa18a64b..cc02a3e1b0aa65ba1e4f1c4e701d3897a1e14ff6 100644 (file)
@@ -1932,6 +1932,7 @@ static int iproute_get(int argc, char **argv)
        int fib_match = 0;
        int from_ok = 0;
        unsigned int mark = 0;
+       bool address_found = false;
 
        iproute_reset_filter(0);
        filter.cloned = 2;
@@ -2037,11 +2038,12 @@ static int iproute_get(int argc, char **argv)
                                addattr_l(&req.n, sizeof(req),
                                          RTA_DST, &addr.data, addr.bytelen);
                        req.r.rtm_dst_len = addr.bitlen;
+                       address_found = true;
                }
                argc--; argv++;
        }
 
-       if (req.r.rtm_dst_len == 0) {
+       if (!address_found) {
                fprintf(stderr, "need at least a destination address\n");
                return -1;
        }