From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 09B8AA0093 for ; Fri, 22 May 2020 11:41:51 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id F31321D945; Fri, 22 May 2020 11:41:50 +0200 (CEST) Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by dpdk.org (Postfix) with ESMTP id B9D521D945 for ; Fri, 22 May 2020 11:41:49 +0200 (CEST) Received: by mail-wm1-f67.google.com with SMTP id n5so9202975wmd.0 for ; Fri, 22 May 2020 02:41:49 -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 :mime-version:content-transfer-encoding; bh=9nPjjrEFyoicghRhpx/S9v/SBLVLisRLIJn3GuIT2CA=; b=Yr5Vpa1Dtthu08ulyQL6RVs3NwzZjjrniQgr5anyAsYepMcTj6WNpqc3TLwu5Cj4Ry ZVC2vL9rsXXKgXSFfZn5pCDmGAvUkXQvPR7wzx6If4iVRoWVZkATHSLcgRl49hd5TEqk N0K+xSEhWpi3+aE+y3SqMPtvbtdK9VR/MWFiCBWq/kGzM5tgpO7TPB0QBKoQvuK6Emr8 WYY3ZEhpZOjSAHmPZ5Uyqgy7XdoJFmcNFmnEB6Mct5Nf0R/fgweZErxIlbwBO35HdjAu M8fmYYlO36DjqdnC036bZuv7q+84bStgvvJ5y2BeH2gRHxChWmwLTrrwY5Sto85RW2Uw VKdg== 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:mime-version:content-transfer-encoding; bh=9nPjjrEFyoicghRhpx/S9v/SBLVLisRLIJn3GuIT2CA=; b=Na+6C6V/+MvynCpoDLMUb5h95ZEw74UVXLnfQKbDQvyz2Som9xPtXuHTRbbcqh3w3X 9BIOsRaRuT8Z1eTHXD50dEoYxSgzujQmnwh1INkYXInMNg2IRqXzELEepqAx8467qocA Vt0vLTbfl7GmiMnVbkRfljUZHM1OvIbDD8rAFuEa7C/N1LziR6pDPqbi8Hm68v20yrr/ i8Sb3gSAWo7yl291uar8IGTbYDrbE/P8cSnytNgC7VsPJiWTdXgZsftIgeCU5qF78JKt FvO5D5QiL9buORDzbc4hB5RoCapq4nczigqUMNUzivdVkV7P6IubzqIPQBt1kAi7slWO JP7w== X-Gm-Message-State: AOAM5304/6VscXvog+W5kSQLTB5cZwj4R4LfQRfXnvqjB83fjzRAvheC 0O0nNfpYYoFynJNBvegrWS4= X-Google-Smtp-Source: ABdhPJx01Lm+/SSHk/KaWxM/2SxjTDSr9MshnByGiRqSkeYpzohmIXZTjsOqyw7YzV6EwzEk42xwvw== X-Received: by 2002:a1c:7d02:: with SMTP id y2mr11607699wmc.92.1590140509482; Fri, 22 May 2020 02:41:49 -0700 (PDT) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id 81sm9757572wme.16.2020.05.22.02.41.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2020 02:41:48 -0700 (PDT) From: luca.boccassi@gmail.com To: Viacheslav Ovsiienko Cc: Stephen Hemminger , Matan Azrad , dpdk stable Date: Fri, 22 May 2020 10:40:06 +0100 Message-Id: <20200522094022.1025696-27-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200522094022.1025696-1-luca.boccassi@gmail.com> References: <20200519130549.112823-214-luca.boccassi@gmail.com> <20200522094022.1025696-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'common/mlx5: fix netlink buffer allocation from stack' has been queued to stable release 19.11.3 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 19.11.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 05/24/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Luca Boccassi --- >From 070a7b832dacc6a633585f3ec963682783c69b9b Mon Sep 17 00:00:00 2001 From: Viacheslav Ovsiienko Date: Thu, 14 May 2020 07:11:12 +0000 Subject: [PATCH] common/mlx5: fix netlink buffer allocation from stack [ upstream commit 3acf1071958185d2a299b9765e0c5c82e67ff416 ] The buffer size to receive netlink reply messages is relatively large (32K), and it is allocated on the stack and it might break in application is using smaller per-thread stacks. This patch allocates temporary buffer from heap. Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses") Reported-by: Stephen Hemminger Signed-off-by: Viacheslav Ovsiienko Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5_nl.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c index e7ba03471d..64580b9e6a 100644 --- a/drivers/net/mlx5/mlx5_nl.c +++ b/drivers/net/mlx5/mlx5_nl.c @@ -269,10 +269,10 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), void *arg) { struct sockaddr_nl sa; - char buf[MLX5_RECV_BUF_SIZE]; + void *buf = malloc(MLX5_RECV_BUF_SIZE); struct iovec iov = { .iov_base = buf, - .iov_len = sizeof(buf), + .iov_len = MLX5_RECV_BUF_SIZE, }; struct msghdr msg = { .msg_name = &sa, @@ -284,6 +284,10 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), int multipart = 0; int ret = 0; + if (!buf) { + rte_errno = ENOMEM; + return -rte_errno; + } do { struct nlmsghdr *nh; int recv_bytes = 0; @@ -292,7 +296,8 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), recv_bytes = recvmsg(nlsk_fd, &msg, 0); if (recv_bytes == -1) { rte_errno = errno; - return -rte_errno; + ret = -rte_errno; + goto exit; } nh = (struct nlmsghdr *)buf; } while (nh->nlmsg_seq != sn); @@ -304,24 +309,30 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), if (err_data->error < 0) { rte_errno = -err_data->error; - return -rte_errno; + ret = -rte_errno; + goto exit; } /* Ack message. */ - return 0; + ret = 0; + goto exit; } /* Multi-part msgs and their trailing DONE message. */ if (nh->nlmsg_flags & NLM_F_MULTI) { - if (nh->nlmsg_type == NLMSG_DONE) - return 0; + if (nh->nlmsg_type == NLMSG_DONE) { + ret = 0; + goto exit; + } multipart = 1; } if (cb) { ret = cb(nh, arg); if (ret < 0) - return ret; + goto exit; } } } while (multipart); +exit: + free(buf); return ret; } -- 2.20.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-05-22 10:37:40.262884873 +0100 +++ 0027-common-mlx5-fix-netlink-buffer-allocation-from-stack.patch 2020-05-22 10:37:39.144413000 +0100 @@ -1,28 +1,29 @@ -From 3acf1071958185d2a299b9765e0c5c82e67ff416 Mon Sep 17 00:00:00 2001 +From 070a7b832dacc6a633585f3ec963682783c69b9b Mon Sep 17 00:00:00 2001 From: Viacheslav Ovsiienko Date: Thu, 14 May 2020 07:11:12 +0000 Subject: [PATCH] common/mlx5: fix netlink buffer allocation from stack +[ upstream commit 3acf1071958185d2a299b9765e0c5c82e67ff416 ] + The buffer size to receive netlink reply messages is relatively large (32K), and it is allocated on the stack and it might break in application is using smaller per-thread stacks. This patch allocates temporary buffer from heap. Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses") -Cc: stable@dpdk.org Reported-by: Stephen Hemminger Signed-off-by: Viacheslav Ovsiienko Acked-by: Matan Azrad --- - drivers/common/mlx5/mlx5_nl.c | 27 +++++++++++++++++++-------- + drivers/net/mlx5/mlx5_nl.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) -diff --git a/drivers/common/mlx5/mlx5_nl.c b/drivers/common/mlx5/mlx5_nl.c -index 65efcd3df2..1a1033a40b 100644 ---- a/drivers/common/mlx5/mlx5_nl.c -+++ b/drivers/common/mlx5/mlx5_nl.c -@@ -330,10 +330,10 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), +diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c +index e7ba03471d..64580b9e6a 100644 +--- a/drivers/net/mlx5/mlx5_nl.c ++++ b/drivers/net/mlx5/mlx5_nl.c +@@ -269,10 +269,10 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), void *arg) { struct sockaddr_nl sa; @@ -35,7 +36,7 @@ }; struct msghdr msg = { .msg_name = &sa, -@@ -345,6 +345,10 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), +@@ -284,6 +284,10 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), int multipart = 0; int ret = 0; @@ -46,7 +47,7 @@ do { struct nlmsghdr *nh; int recv_bytes = 0; -@@ -353,7 +357,8 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), +@@ -292,7 +296,8 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), recv_bytes = recvmsg(nlsk_fd, &msg, 0); if (recv_bytes == -1) { rte_errno = errno; @@ -56,7 +57,7 @@ } nh = (struct nlmsghdr *)buf; } while (nh->nlmsg_seq != sn); -@@ -365,24 +370,30 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), +@@ -304,24 +309,30 @@ mlx5_nl_recv(int nlsk_fd, uint32_t sn, int (*cb)(struct nlmsghdr *, void *arg), if (err_data->error < 0) { rte_errno = -err_data->error;