From 5ab3bf7122eafe3bf06b147f8d936a976fe810ba Mon Sep 17 00:00:00 2001 From: Beniamino Galvani 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 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 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 #include +#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 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