From: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
To: dev@dpdk.org
Cc: matan@mellanox.com, rasland@mellanox.com,
stephen@networkplumber.org, nelio.laranjeiro@6wind.com,
stable@dpdk.org
Subject: [dpdk-dev] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack
Date: Thu, 14 May 2020 07:11:12 +0000 [thread overview]
Message-ID: <1589440272-8058-1-git-send-email-viacheslavo@mellanox.com> (raw)
In-Reply-To: <20200422223000.16602-1-stephen@networkplumber.org>
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: nelio.laranjeiro@6wind.com
Cc: stable@dpdk.org
Reported-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
---
v2: allocation from heap, instead of reducing buffer size
v1: http://patches.dpdk.org/patch/69158/
---
drivers/common/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 65efcd3..1a1033a 100644
--- a/drivers/common/mlx5/mlx5_nl.c
+++ b/drivers/common/mlx5/mlx5_nl.c
@@ -330,10 +330,10 @@ struct mlx5_nl_ifindex_data {
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,
@@ -345,6 +345,10 @@ struct mlx5_nl_ifindex_data {
int multipart = 0;
int ret = 0;
+ if (!buf) {
+ rte_errno = ENOMEM;
+ return -rte_errno;
+ }
do {
struct nlmsghdr *nh;
int recv_bytes = 0;
@@ -353,7 +357,8 @@ struct mlx5_nl_ifindex_data {
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);
@@ -365,24 +370,30 @@ struct mlx5_nl_ifindex_data {
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;
}
--
1.8.3.1
next prev parent reply other threads:[~2020-05-14 7:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-22 22:30 [dpdk-dev] [PATCH] common/mlx5: reduce size of netlink buffer Stephen Hemminger
2020-04-28 9:34 ` Slava Ovsiienko
2020-05-14 7:11 ` Viacheslav Ovsiienko [this message]
2020-05-17 12:02 ` [dpdk-dev] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack Matan Azrad
2020-05-17 12:51 ` Raslan Darawsheh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1589440272-8058-1-git-send-email-viacheslavo@mellanox.com \
--to=viacheslavo@mellanox.com \
--cc=dev@dpdk.org \
--cc=matan@mellanox.com \
--cc=nelio.laranjeiro@6wind.com \
--cc=rasland@mellanox.com \
--cc=stable@dpdk.org \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).