Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp335731pxb; Mon, 16 Aug 2021 06:35:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwjy9OYz8gx8UCWikdXEXoVTEez5sCJuBHnz+SQOoHPq0lm5QEnUYZUIBQQx/jBGP5vW3nw X-Received: by 2002:a05:6402:1711:: with SMTP id y17mr12243150edu.91.1629120916544; Mon, 16 Aug 2021 06:35:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629120916; cv=none; d=google.com; s=arc-20160816; b=LM/++kLLcI1eFzbx6NDysFgZYQ7CQUiSV+rqOwycwRNRYbjfBlfWy9FSvDexnfT58o G66s3byPSxmwf5g71TwWHOhmZpJlYmqEjtXXPpk/9mCfsBN3OeCdoSxLhvMOSXzPQkn5 zSX2ahiz7dSnP27spufGGT/0uUOQaBG+Xj0/Xa7CLmybyo1nzPaaWxMzbZf6+KAZQNTY EBiS4lapK6V6Rkr+iWpPpBJiuOhhsIUrbBKJoZ0XXO6s3OiteVJLjJjUGTEPhEfp3Kzy mlMX32e41yc77uBN+ao/dooLLGJRWcLbA7hpcCSJyX3Qc49sQu3wZ3p2XhpVvXA6WgvI fuYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=K5IJdwAqze1/2SsMCtOM/wm8oOzYkgAat+4pTIIpsG4=; b=x8lzau0S+VqXF53cYHGzipz80D74iZedDxxsBCexIVRICA8uBI+QcZYOnQB8Txsh6G xaOSIu93HSXP69WfbxNLkk7zhQRzp8bkeWRKPUMAjNQahHhoPwYPPlHRuNTiJRbWCeB6 el7sbTrjUr6wsJcbeqEDYXQkhbFqWsJEWblx3d/pPj9Q6B4DJZJOYVr8AyFyvUAb4lMo F97wV1vBl7dOsSbQhkuHGL1RYGAbGal1HtAH4IKyAp0Ahlfb45tLiXYvI9x1c0jPkPZu lRmhoqt8QIRMRYxB/MKZ/GIK3F0hdll0kDY2T76fEuEa6v2VTRzwin59S1tGWG30usJI EBew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=y61BdJKf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i22si10514265ejw.286.2021.08.16.06.34.52; Mon, 16 Aug 2021 06:35:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=y61BdJKf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240063AbhHPNbO (ORCPT + 99 others); Mon, 16 Aug 2021 09:31:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:44618 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240656AbhHPNT7 (ORCPT ); Mon, 16 Aug 2021 09:19:59 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 77941632CD; Mon, 16 Aug 2021 13:15:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1629119717; bh=u3aC0WlkHwHUxv5QOQjX/DflPSIcjW/7B8GDa3abAqQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=y61BdJKfPQ1S5RlvTZ61CXiA6LblxUxSn5YcO2DrnesJk3Iq4Evyfis6JzHTx8hN1 KHhdbdjnIm5OvwkApyw1mGkaGU9Egbbj0AtMp6YtXUpm5RE5fbfREM2bDq+KfcArNw 4EBFTLAph8NfHoeuB79YyaQzCWuIfU4hjyzCGY7I= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vladimir Oltean , "David S. Miller" , Sasha Levin Subject: [PATCH 5.13 102/151] net: dsa: lantiq: fix broken backpressure in .port_fdb_dump Date: Mon, 16 Aug 2021 15:02:12 +0200 Message-Id: <20210816125447.442562570@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210816125444.082226187@linuxfoundation.org> References: <20210816125444.082226187@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vladimir Oltean [ Upstream commit 871a73a1c8f55da0a3db234e9dd816ea4fd546f2 ] rtnl_fdb_dump() has logic to split a dump of PF_BRIDGE neighbors into multiple netlink skbs if the buffer provided by user space is too small (one buffer will typically handle a few hundred FDB entries). When the current buffer becomes full, nlmsg_put() in dsa_slave_port_fdb_do_dump() returns -EMSGSIZE and DSA saves the index of the last dumped FDB entry, returns to rtnl_fdb_dump() up to that point, and then the dump resumes on the same port with a new skb, and FDB entries up to the saved index are simply skipped. Since dsa_slave_port_fdb_do_dump() is pointed to by the "cb" passed to drivers, then drivers must check for the -EMSGSIZE error code returned by it. Otherwise, when a netlink skb becomes full, DSA will no longer save newly dumped FDB entries to it, but the driver will continue dumping. So FDB entries will be missing from the dump. Fix the broken backpressure by propagating the "cb" return code and allow rtnl_fdb_dump() to restart the FDB dump with a new skb. Fixes: 58c59ef9e930 ("net: dsa: lantiq: Add Forwarding Database access") Signed-off-by: Vladimir Oltean Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/dsa/lantiq_gswip.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c index 314ae78bbdd6..e78026ef6d8c 100644 --- a/drivers/net/dsa/lantiq_gswip.c +++ b/drivers/net/dsa/lantiq_gswip.c @@ -1404,11 +1404,17 @@ static int gswip_port_fdb_dump(struct dsa_switch *ds, int port, addr[1] = mac_bridge.key[2] & 0xff; addr[0] = (mac_bridge.key[2] >> 8) & 0xff; if (mac_bridge.val[1] & GSWIP_TABLE_MAC_BRIDGE_STATIC) { - if (mac_bridge.val[0] & BIT(port)) - cb(addr, 0, true, data); + if (mac_bridge.val[0] & BIT(port)) { + err = cb(addr, 0, true, data); + if (err) + return err; + } } else { - if (((mac_bridge.val[0] & GENMASK(7, 4)) >> 4) == port) - cb(addr, 0, false, data); + if (((mac_bridge.val[0] & GENMASK(7, 4)) >> 4) == port) { + err = cb(addr, 0, false, data); + if (err) + return err; + } } } return 0; -- 2.30.2