* [dpdk-stable] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack
[not found] <20200422223000.16602-1-stephen@networkplumber.org>
@ 2020-05-14 7:11 ` Viacheslav Ovsiienko
2020-05-17 12:02 ` Matan Azrad
2020-05-17 12:51 ` Raslan Darawsheh
0 siblings, 2 replies; 3+ messages in thread
From: Viacheslav Ovsiienko @ 2020-05-14 7:11 UTC (permalink / raw)
To: dev; +Cc: matan, rasland, stephen, nelio.laranjeiro, stable
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-stable] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack
2020-05-14 7:11 ` [dpdk-stable] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack Viacheslav Ovsiienko
@ 2020-05-17 12:02 ` Matan Azrad
2020-05-17 12:51 ` Raslan Darawsheh
1 sibling, 0 replies; 3+ messages in thread
From: Matan Azrad @ 2020-05-17 12:02 UTC (permalink / raw)
To: Slava Ovsiienko, dev
Cc: Raslan Darawsheh, stephen, Nélio Laranjeiro, stable
From: Viacheslav Ovsiienko
> 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>
Acked-by: Matan Azrad <matan@mellanox.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-stable] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack
2020-05-14 7:11 ` [dpdk-stable] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack Viacheslav Ovsiienko
2020-05-17 12:02 ` Matan Azrad
@ 2020-05-17 12:51 ` Raslan Darawsheh
1 sibling, 0 replies; 3+ messages in thread
From: Raslan Darawsheh @ 2020-05-17 12:51 UTC (permalink / raw)
To: Slava Ovsiienko, dev; +Cc: Matan Azrad, stephen, Nélio Laranjeiro, stable
Hi,
> -----Original Message-----
> From: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> Sent: Thursday, May 14, 2020 10:11 AM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@mellanox.com>; Raslan Darawsheh
> <rasland@mellanox.com>; stephen@networkplumber.org; Nélio Laranjeiro
> <nelio.laranjeiro@6wind.com>; stable@dpdk.org
> Subject: [PATCH v2] common/mlx5: fix netlink buffer allocation from stack
>
> 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:
> https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fpatch
> es.dpdk.org%2Fpatch%2F69158%2F&data=02%7C01%7Crasland%40mell
> anox.com%7C1e38e272cede42d2cfc008d7f7d60e00%7Ca652971c7d2e4d9ba6
> a4d149256f461b%7C0%7C0%7C637250371034928200&sdata=cZ1hFsnSZz
> 5oMj8zOLbB6vmcthY1FnPZWa%2FgoNDibmg%3D&reserved=0
> ---
> 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
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-05-17 12:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20200422223000.16602-1-stephen@networkplumber.org>
2020-05-14 7:11 ` [dpdk-stable] [PATCH v2] common/mlx5: fix netlink buffer allocation from stack Viacheslav Ovsiienko
2020-05-17 12:02 ` Matan Azrad
2020-05-17 12:51 ` Raslan Darawsheh
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).