From patchwork Fri Oct 21 20:01:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shmulik Ladkani X-Patchwork-Id: 685255 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3t0xQJ339Yz9sD6 for ; Sat, 22 Oct 2016 07:01:28 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=BCCnV9qq; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755533AbcJUUBY (ORCPT ); Fri, 21 Oct 2016 16:01:24 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:36400 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754732AbcJUUBX (ORCPT ); Fri, 21 Oct 2016 16:01:23 -0400 Received: by mail-wm0-f67.google.com with SMTP id f193so271277wmg.3 for ; Fri, 21 Oct 2016 13:01:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=fEywfw8AeTVwetaUUSvNs8bBa0FAMC3xc9ZNhk1cMeY=; b=BCCnV9qqPHk7wxEcC2wXjHcfaaWVveidvA4Ct3RInl0xB9bFFkLDPAyAN3do5GWQgZ luYhS5u3iMBQ/Q1+iR59ZIgFvUDcldZv8nU/oJmK1mdUIAwoGa/n8NQefcigm9CSAsWT 97XsMxOkPe3BcxAcm9/Ly5kpnJ/mgygjqnoD4riRIPYh+V9UQ+KXasxFDyFCLlPalOib 7pc4v813guO/nbaZ16pWmzAHYgcTLKWSqfW4BTKtCJbrtNCbCFiRbWf0hdWhY9M0/iix ysR7bgKTFhAojWoRCzW0EwpukYrnJ5p9QDrQzviIE5MeXRaMBJ3pSAYMDmYa8KNLlygl lrHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=fEywfw8AeTVwetaUUSvNs8bBa0FAMC3xc9ZNhk1cMeY=; b=Mx31etqwSLP/4/DE4rRC+8MATECXTnKC6tXtISXICU02eHXOOSb0BZLTkjbTTdv3QO Rtbt8F2ITRX8EmBdN8nlNoFvUBDyf/rb13wrlrIyPUj0/ISB+ECLv0BwbCafUvymeJiz LixfoiF6a4yQrNuR1LhDDnUCjZUtPZp/ndf1jDBc/L7pbO7B5jHiWuiOZgLLjg6uAG8k DGGAxOHrAJJ6pD+DdrRlz/jr0F19vCCLXxGk5R7c29YTujcpx0A7P7mO7SdzJJZBJfDP 3GLDm8pP/gNGERXevP1H5nrun70jU03l4kw7jitkPVBwbDjnS5w69YW5CAcJkbxJFQn+ c2KQ== X-Gm-Message-State: ABUngvfqAkG04FVmve1gFWTuwbZvrxhasytBJHNSyqJ58f+lZoH2Cwx0viiuvpYdN29ddQ== X-Received: by 10.194.16.161 with SMTP id h1mr2157344wjd.164.1477080081195; Fri, 21 Oct 2016 13:01:21 -0700 (PDT) Received: from halley.home ([37.46.41.157]) by smtp.gmail.com with ESMTPSA id xq9sm4517939wjb.35.2016.10.21.13.01.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 21 Oct 2016 13:01:20 -0700 (PDT) From: Shmulik Ladkani To: Stephen Hemminger Cc: Jamal Hadi Salim , netdev@vger.kernel.org, Shmulik Ladkani Subject: [PATCH iproute2 net-next] tc: m_mirred: Fix parsing of 'index' optional argument Date: Fri, 21 Oct 2016 23:01:15 +0300 Message-Id: <1477080075-17146-1-git-send-email-shmulik.ladkani@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Code in parse_mirred() suggests "index" argument can be placed either after the "egress" clause, or as the first argument (after "action mirred"). However, parse_egress() fails to correctly parse "index" if it's the first argument. For example: # tc filter add ... action mirred index 5 RTNETLINK answers: Invalid argument (unnecessary RTNETLINK issued, should have been parse error) # tc filter add ... action mirred index 5 egress redirect dev eth0 bad action type egress (should have been parsed successfully) Fix parse_egress as follows: - continue parsing after valid "index" is seen - don't issue the RTNETLINK unless valid "egress" is seen Signed-off-by: Shmulik Ladkani --- Well, both man and usage suggest "index" comes after the egress clause: tc ... action mirred DIRECTION ACTION [ index INDEX ] dev DEVICENAME So an alternative would be banning "index" as 1st argument in parse_mirred. tc/m_mirred.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tc/m_mirred.c b/tc/m_mirred.c index 11f4c9b46f..d3e750b89b 100644 --- a/tc/m_mirred.c +++ b/tc/m_mirred.c @@ -91,9 +91,8 @@ parse_egress(struct action_util *a, int *argc_p, char ***argv_p, } iok++; if (!ok) { - argc--; - argv++; - break; + NEXT_ARG(); + continue; } } else if (!ok) { fprintf(stderr, "was expecting egress (%s)\n", *argv); @@ -134,7 +133,7 @@ parse_egress(struct action_util *a, int *argc_p, char ***argv_p, NEXT_ARG(); } - if (!ok && !iok) { + if (!ok) { return -1; }