From patchwork Thu Feb 14 23:29:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luca Boccassi X-Patchwork-Id: 1042512 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=debian.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 440szp1stqz9s1l for ; Fri, 15 Feb 2019 10:29:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729093AbfBNX3Y (ORCPT ); Thu, 14 Feb 2019 18:29:24 -0500 Received: from mail-wm1-f43.google.com ([209.85.128.43]:40273 "EHLO mail-wm1-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729081AbfBNX3X (ORCPT ); Thu, 14 Feb 2019 18:29:23 -0500 Received: by mail-wm1-f43.google.com with SMTP id q21so7804786wmc.5 for ; Thu, 14 Feb 2019 15:29:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OZk9fqrrIH4ObTxk554H8ErtEII5tV76s0bW2j+vunQ=; b=rkfOK/wq/qh1ZRaOPSKYZkpe72q0hrS+Ufq/P4yiOCEW68IlaMdMbLQAcieiEcPiok FOHmi1QsVA6VYtNb7IlHB2+DvrgjcNAGGy3vIMKOJRSobk4oe60ePFMlM6TAfCmvTQWA q0UEIL3V5Fo5cR322xDULKVeWBjQ+bR6jb452chpTmNYOvQUVS1xASqC13oUNucY1UWK jFPF4HtmRLant7Fxw5ckA7xNxHFKGfD3RApzLqagUVzdoFeMhC7R7yqpGoAt4GpTUDoE TVITDjfRPO7P2Nl1uJg2TRtgh1TBtTKMe9SnvcB/gfxbuMS2y8aDD1LYEIkhJ/JL2ceI R85A== X-Gm-Message-State: AHQUAuYxHR1aGmx2cEEIrQOnegmQGNjfalpzgHpxdpr9NXDTskObKFiG 8AvD8KZJqdm1xJG/gz8/hJPdAXXG X-Google-Smtp-Source: AHgI3IZ3B9JoWRI/exC35KyqBU6H9llYOAS+16kUCSHjB1SRZzMaSIx+Ak6FmyplGvVTGoeY+G2apQ== X-Received: by 2002:a1c:67c2:: with SMTP id b185mr4041601wmc.96.1550186961210; Thu, 14 Feb 2019 15:29:21 -0800 (PST) Received: from localhost ([2a01:4b00:f419:6f00:e02f:203a:9348:b7e8]) by smtp.gmail.com with ESMTPSA id y22sm11349276wrd.45.2019.02.14.15.29.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 14 Feb 2019 15:29:20 -0800 (PST) From: Luca Boccassi To: netdev@vger.kernel.org Cc: stephen@networkplumber.org, Luca Boccassi , =?utf-8?q?Cl=C3=A9ment_Hertling?= Subject: [RFC iproute2 v2] ip route: get: allow zero-length subnet mask Date: Thu, 14 Feb 2019 23:29:18 +0000 Message-Id: <20190214232918.6185-1-bluca@debian.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190213200954.32271-1-bluca@debian.org> References: <20190213200954.32271-1-bluca@debian.org> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 Signed-off-by: Luca Boccassi --- v2: changed the check instead of removing it, so that "ip route get" fails since the address is a mandatory parameter according to the manpage. ip/iproute.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ip/iproute.c b/ip/iproute.c index 5f58a3b3..cc02a3e1 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -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; }