summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2022-12-15 20:41:22 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-12-31 13:26:39 +0100
commit64a02459211419e2a9ad4b163c0ad0ea5492f3d0 (patch)
tree26abf933ae9b7081c5a607c2bd99e335cce5d99d /net
parentb93528b638e680ac559c9cca6097b06ecc5caf11 (diff)
downloadlinux-64a02459211419e2a9ad4b163c0ad0ea5492f3d0.tar.gz
linux-64a02459211419e2a9ad4b163c0ad0ea5492f3d0.tar.bz2
linux-64a02459211419e2a9ad4b163c0ad0ea5492f3d0.zip
devlink: protect devlink dump by the instance lock
[ Upstream commit 214964a13ab56a9757d146b79b468a7ca190fbfb ] Take the instance lock around devlink_nl_fill() when dumping, doit takes it already. We are only dumping basic info so in the worst case we were risking data races around the reload statistics. Until the big devlink mutex was removed all relevant code was protected by it, so the missing instance lock was not exposed. Fixes: d3efc2a6a6d8 ("net: devlink: remove devlink_mutex") Reviewed-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://lore.kernel.org/r/20221216044122.1863550-1-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'net')
-rw-r--r--net/core/devlink.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/core/devlink.c b/net/core/devlink.c
index b3a869ccc8ed..5f894bd20c31 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -1498,10 +1498,13 @@ static int devlink_nl_cmd_get_dumpit(struct sk_buff *msg,
continue;
}
+ devl_lock(devlink);
err = devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW,
NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq, NLM_F_MULTI);
+ devl_unlock(devlink);
devlink_put(devlink);
+
if (err)
goto out;
idx++;