From patchwork Tue May 15 23:01:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 914004 X-Patchwork-Delegate: davem@davemloft.net 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Z8npQv9b"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40ltQ744MDz9ryk for ; Wed, 16 May 2018 09:02:55 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752661AbeEOXCl (ORCPT ); Tue, 15 May 2018 19:02:41 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:36977 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752061AbeEOXCB (ORCPT ); Tue, 15 May 2018 19:02:01 -0400 Received: by mail-pg0-f67.google.com with SMTP id a13-v6so690109pgu.4; Tue, 15 May 2018 16:02:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=VAxmg3tXjl/q/7rfH0o/lVd/gCs4lGOvEvHgIutkfh0=; b=Z8npQv9b8buzzBLie3wUgEjc4zS2i2VK+FD/C62vdk1ur6kisX1SCNdJKlw1ym03QG NoXI80p6VUwypJXEbd0SpLDuQ9aTR/YBzsijlcgRfddRfWYt0fZ6e7Q0mwxV+6LRaYfX /DEZRWreTQzRcd1vhWJWTRuBp86foB1V8fxg/TlxKrSX3L1YyIkC+EmW1k6EDONLwh6F 2uvja7VBXv02XcBA9CtKKhb1JS+IKOGn5Cszbr03qVwvr0krVQ7Oi/m9tGlZ0yRXIG9y tTsR/fN/fH5PlWsnSsz8ljpex1+yjkO3oAPMKp/Rzbi05LFig8GP4EFxKxqG2kremgpE +d6A== 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; bh=VAxmg3tXjl/q/7rfH0o/lVd/gCs4lGOvEvHgIutkfh0=; b=hLJh6r8OIp0qjI71vlz1uuDdNVfh56NrMq4R9tNQXwANlLAkAV1pwYsdmV28DBkj1x 33UsOkgua3YG3Z86jbfU76UsnYcwF+k7xnFYcUYe9euGh2HiEO2Q72dGobq3bee6NDJi hwlF8lqsuTOJKL+Ok4XTtnbVmsJR/yGKGl4PEzR92uhKoMOb5uSOj7hOPzhp0iSpEHsj YsKCc3CBGGJYvqTO81qIF/O+p76Z7AmJqfrBPkwF3F5kwb1DnIMLpwlYJxDihFlAPYzr juubqf90LeT3no7ku6+gP1yPy9EMCLXkNWWaZa5YM0OsHX/I6tWGOSoFeTwOkMNE9rcw yrtg== X-Gm-Message-State: ALKqPwc0zRAOrXEVZQpFddSbfeznkWz0s6MO898x5+P/zwsCxSHnT0ZT WrujcmR7cg5ZWBQ5mbY1zxE2THsx X-Google-Smtp-Source: AB8JxZrGVRvtJTzy6m45SiKIFISZ1jV2gS8Grkx6k2oYXJe4Bfh6KX8ziOlu0OlbaPXFOriAlpnOaw== X-Received: by 2002:a65:4a87:: with SMTP id b7-v6mr13690921pgu.36.1526425320659; Tue, 15 May 2018 16:02:00 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id g26-v6sm1339517pfh.76.2018.05.15.16.01.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 May 2018 16:01:59 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , Andrew Lunn , Vivien Didelot , linux-kernel@vger.kernel.org (open list), opendmb@gmail.com, davem@davemloft.net Subject: [PATCH net v2 1/3] net: dsa: bcm_sf2: Fix RX_CLS_LOC_ANY overwrite for last rule Date: Tue, 15 May 2018 16:01:23 -0700 Message-Id: <20180515230125.25886-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180515230125.25886-1-f.fainelli@gmail.com> References: <20180515230125.25886-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When we let the kernel pick up a rule location with RX_CLS_LOC_ANY, we would be able to overwrite the last rules because of a number of issues. The IPv4 code path would not be checking that rule_index is within bounds, and it would also only be allowed to pick up rules from range 0..126 instead of the full 0..127 range. This would lead us to allow overwriting the last rule when we let the kernel pick-up the location. Fixes: 3306145866b6 ("net: dsa: bcm_sf2: Move IPv4 CFP processing to specific functions") Signed-off-by: Florian Fainelli --- drivers/net/dsa/bcm_sf2_cfp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index 23b45da784cb..9e04786e3139 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -354,10 +354,13 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, /* Locate the first rule available */ if (fs->location == RX_CLS_LOC_ANY) rule_index = find_first_zero_bit(priv->cfp.used, - bcm_sf2_cfp_rule_size(priv)); + priv->num_cfp_rules); else rule_index = fs->location; + if (rule_index > bcm_sf2_cfp_rule_size(priv)) + return -ENOSPC; + layout = &udf_tcpip4_layout; /* We only use one UDF slice for now */ slice_num = bcm_sf2_get_slice_number(layout, 0);