From patchwork Thu Oct 27 07:36:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shmulik Ladkani X-Patchwork-Id: 687498 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 3t4Jbp36YBz9s9c for ; Thu, 27 Oct 2016 18:36:22 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=jYnoxJ98; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934171AbcJ0HgT (ORCPT ); Thu, 27 Oct 2016 03:36:19 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:35124 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933572AbcJ0HgQ (ORCPT ); Thu, 27 Oct 2016 03:36:16 -0400 Received: by mail-wm0-f65.google.com with SMTP id b80so1236863wme.2 for ; Thu, 27 Oct 2016 00:36:16 -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=D76SdvchBtJRAmYCioF28m/vKN/BfY2Qj9D0z23VU6o=; b=jYnoxJ98+R6aXB+vSFb65T+g0U2zZIkJUsVNygMJAb5LNm3eC2NqoG9OvDAdsJMeiE sIkfQL3A99ZoVwQAmtiJ+LETUh0JhutZ2CUvFxAMaESZzwsvBjaTdtLBa+ZJ89jY16JF r6op6yReq4SY6bvNtA9yQru6UoaBpoVeJMW4vKs0N+k4vyJBSxHtMBSIkOBdjzihAhoN z/R6y10MjFlb4RODakVPXp2OzeDw3vEUUrnU8/eXkQalgjGuNGftmSWn9bUTRpfrVNyR KKU3fSDHTqQ+/HfybtmmB/E6s0n0NfzGOgB+LAgHw2oSkXlpj6uglkTX5av8j0FYXKyF wZ2A== 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=D76SdvchBtJRAmYCioF28m/vKN/BfY2Qj9D0z23VU6o=; b=UVbw1LPt4O6hKD0CdRFH362ZCjc7zSJbukqaW+DfwKEgZZU+37MwTUbpRN+2GJLFIQ Ji3igKCO9bSDcQZiTmch3pJ2+GdOy7jSJkB11aO60B6m+KVICXxazkJus9FtazZX6sRk sKAwsVyE+KZD0PWXvjffScb/xRNSYVkXAdJOK2C/iHeB45o2NQLA+cViOeYDU3Sc97DC rTC7MXjQ7qcB11hjKjOQk7MF+ICVaEDv4wZkg02oBwttYevC7OwkzbcYhFHYy2Qr0DIq RTOWji06r6TVYuJ6OYzYQjdvRZpiEbtQX46nDYmMk+e6GRZ/d58NeTcvfNh+BsQumLlv 6Exw== X-Gm-Message-State: ABUngveuveWFe1b0e/3Xj1BPWYw3SA32cnpsy1K5ausKX34yy8yhv3c5Kg0uRVbblwAlPg== X-Received: by 10.28.125.150 with SMTP id y144mr12488512wmc.77.1477553775315; Thu, 27 Oct 2016 00:36:15 -0700 (PDT) Received: from localhost.localdomain (bzq-237-168-31-165.red.bezeqint.net. [31.168.237.165]) by smtp.gmail.com with ESMTPSA id o62sm1655922wmg.9.2016.10.27.00.36.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 27 Oct 2016 00:36:14 -0700 (PDT) From: Shmulik Ladkani To: Stephen Hemminger Cc: Jamal Hadi Salim , netdev@vger.kernel.org, Shmulik Ladkani Subject: [PATCHv2 iproute2 net-next] tc: m_mirred: Fix parsing of 'index' optional argument Date: Thu, 27 Oct 2016 10:36:06 +0300 Message-Id: <20161027073606.6112-1-shmulik.ladkani@gmail.com> X-Mailer: git-send-email 2.10.1 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/ingress clause, or as the first argument (after "action mirred"). However, parse_direction() 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_direction as follows: - continue parsing after valid "index" is seen - don't issue the RTNETLINK unless valid "egress"/"ingress" is seen Signed-off-by: Shmulik Ladkani --- v2: rebased to recent tip of net-next, amended log message An alternative solution: 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 01f916d..64d870a 100644 --- a/tc/m_mirred.c +++ b/tc/m_mirred.c @@ -105,9 +105,8 @@ parse_direction(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 or ingress (%s)\n", *argv); @@ -150,7 +149,7 @@ parse_direction(struct action_util *a, int *argc_p, char ***argv_p, NEXT_ARG(); } - if (!ok && !iok) { + if (!ok) { return -1; }