169 lines
5.0 KiB
Diff
169 lines
5.0 KiB
Diff
From 5ab3bf7122eafe3bf06b147f8d936a976fe810ba Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Tue, 25 May 2021 14:18:10 +0200
|
|
Subject: [PATCH 1/4] route/cls: fix cgroup's clone() function
|
|
|
|
The destination object doesn't have to be allocated because it's
|
|
passed as _dst argument. Also, the function doesn't have to copy plain
|
|
fields.
|
|
|
|
(cherry picked from commit 30552e849c38972dd11fafbb8085924987b002cc)
|
|
---
|
|
lib/route/cls/cgroup.c | 15 +++++----------
|
|
1 file changed, 5 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/lib/route/cls/cgroup.c b/lib/route/cls/cgroup.c
|
|
index b145261825f2..2461d22fd595 100644
|
|
--- a/lib/route/cls/cgroup.c
|
|
+++ b/lib/route/cls/cgroup.c
|
|
@@ -36,17 +36,12 @@ static struct nla_policy cgroup_policy[TCA_CGROUP_MAX+1] = {
|
|
|
|
static int cgroup_clone(void *_dst, void *_src)
|
|
{
|
|
- struct rtnl_cgroup *dst = NULL, *src = _src;
|
|
+ struct rtnl_cgroup *dst = _dst, *src = _src;
|
|
|
|
- dst = calloc(1, sizeof(*dst));
|
|
- if (!dst)
|
|
- return -NLE_NOMEM;
|
|
-
|
|
- dst->cg_mask = src->cg_mask;
|
|
- dst->cg_ematch = rtnl_ematch_tree_clone(src->cg_ematch);
|
|
- if (!dst) {
|
|
- free(dst);
|
|
- return -NLE_NOMEM;
|
|
+ if (src->cg_ematch) {
|
|
+ dst->cg_ematch = rtnl_ematch_tree_clone(src->cg_ematch);
|
|
+ if (!dst->cg_ematch)
|
|
+ return -NLE_NOMEM;
|
|
}
|
|
|
|
return 0;
|
|
--
|
|
2.31.1
|
|
|
|
|
|
From 6a118c6b3cf8aa8638e057a282acbf06f09c41a8 Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Tue, 25 May 2021 14:33:21 +0200
|
|
Subject: [PATCH 2/4] route/link: fix copy-paste error in geneve.c
|
|
|
|
(cherry picked from commit aa092d1e729acb8b4aa5a3aaf2f228f46bafec5b)
|
|
---
|
|
lib/route/link/geneve.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/lib/route/link/geneve.c b/lib/route/link/geneve.c
|
|
index 7232b07f8452..9de1e8f1158f 100644
|
|
--- a/lib/route/link/geneve.c
|
|
+++ b/lib/route/link/geneve.c
|
|
@@ -240,7 +240,7 @@ static void geneve_dump_details(struct rtnl_link *link, struct nl_dump_params *p
|
|
|
|
if (geneve->mask & GENEVE_ATTR_UDP_ZERO_CSUM6_RX) {
|
|
nl_dump(p, " udp-zero-csum6-rx ");
|
|
- if (geneve->udp_zero_csum6_tx)
|
|
+ if (geneve->udp_zero_csum6_rx)
|
|
nl_dump_line(p, "enabled (%#x)\n", geneve->udp_zero_csum6_rx);
|
|
else
|
|
nl_dump_line(p, "disabled\n");
|
|
--
|
|
2.31.1
|
|
|
|
|
|
From ed42caf2abdfa52fcb35416710bdcfd8189d8878 Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Tue, 25 May 2021 14:42:29 +0200
|
|
Subject: [PATCH 3/4] route/qdisc: fix memory leak in netem.c
|
|
|
|
'data' was leaked when returning -NLE_INVAL. Fix this by using the
|
|
cleanup attribute.
|
|
|
|
(cherry picked from commit d1a151eb6fe603365d93526796b3fa7e64e1c0fd)
|
|
---
|
|
lib/route/qdisc/netem.c | 10 ++++------
|
|
1 file changed, 4 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/lib/route/qdisc/netem.c b/lib/route/qdisc/netem.c
|
|
index 17dee3b7efa4..20df8fd413b2 100644
|
|
--- a/lib/route/qdisc/netem.c
|
|
+++ b/lib/route/qdisc/netem.c
|
|
@@ -26,6 +26,8 @@
|
|
#include <netlink/route/qdisc.h>
|
|
#include <netlink/route/qdisc/netem.h>
|
|
|
|
+#include "netlink-private/utils.h"
|
|
+
|
|
/** @cond SKIP */
|
|
#define SCH_NETEM_ATTR_LATENCY 0x0001
|
|
#define SCH_NETEM_ATTR_LIMIT 0x0002
|
|
@@ -911,10 +913,10 @@ int rtnl_netem_set_delay_distribution(struct rtnl_qdisc *qdisc, const char *dist
|
|
int n = 0;
|
|
size_t i;
|
|
size_t len = 2048;
|
|
- char *line;
|
|
+ _nl_auto_free char *line = NULL;
|
|
char name[NAME_MAX];
|
|
char dist_suffix[] = ".dist";
|
|
- int16_t *data;
|
|
+ _nl_auto_free int16_t *data = NULL;
|
|
char *test_suffix;
|
|
|
|
/* Check several locations for the dist file */
|
|
@@ -955,7 +957,6 @@ int rtnl_netem_set_delay_distribution(struct rtnl_qdisc *qdisc, const char *dist
|
|
if (endp == p) break;
|
|
|
|
if (n >= MAXDIST) {
|
|
- free(line);
|
|
fclose(f);
|
|
return -NLE_INVAL;
|
|
}
|
|
@@ -963,11 +964,8 @@ int rtnl_netem_set_delay_distribution(struct rtnl_qdisc *qdisc, const char *dist
|
|
}
|
|
}
|
|
|
|
- free(line);
|
|
fclose(f);
|
|
-
|
|
i = rtnl_netem_set_delay_distribution_data(qdisc, data, n);
|
|
- free(data);
|
|
return i;
|
|
}
|
|
|
|
--
|
|
2.31.1
|
|
|
|
|
|
From f60433f575beb927b69d6a857a0345d1a3206311 Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Wed, 16 Jun 2021 11:56:25 +0200
|
|
Subject: [PATCH 4/4] route/qdisc: handle error of calloc()
|
|
|
|
(cherry picked from commit 26f342d09947d5884014ec4a0553c094e41c60bc)
|
|
---
|
|
lib/route/qdisc/netem.c | 9 ++++++---
|
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/lib/route/qdisc/netem.c b/lib/route/qdisc/netem.c
|
|
index 20df8fd413b2..ceb2ad9871d2 100644
|
|
--- a/lib/route/qdisc/netem.c
|
|
+++ b/lib/route/qdisc/netem.c
|
|
@@ -942,9 +942,12 @@ int rtnl_netem_set_delay_distribution(struct rtnl_qdisc *qdisc, const char *dist
|
|
if (f == NULL)
|
|
return -nl_syserr2nlerr(errno);
|
|
|
|
- data = (int16_t *) calloc (MAXDIST, sizeof(int16_t));
|
|
-
|
|
- line = (char *) calloc (sizeof(char), len + 1);
|
|
+ data = (int16_t *) calloc(MAXDIST, sizeof(int16_t));
|
|
+ line = (char *) calloc(sizeof(char), len + 1);
|
|
+ if (!data || !line) {
|
|
+ fclose(f);
|
|
+ return -NLE_NOMEM;
|
|
+ }
|
|
|
|
while (getline(&line, &len, f) != -1) {
|
|
char *p, *endp;
|
|
--
|
|
2.31.1
|
|
|