lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20231115023703.15417-1-heminhong@kylinos.cn> Date: Wed, 15 Nov 2023 10:37:03 +0800 From: heminhong <heminhong@...inos.cn> To: stephen@...workplumber.org Cc: heminhong@...inos.cn, netdev@...r.kernel.org Subject: [PATCH v2] iproute2: prevent memory leak When the return value of rtnl_talk() is less than 0, 'answer' does not need to release. When the return value of rtnl_talk() is greater than or equal to 0, 'answer' will be allocated, if subsequent processing fails, the memory should be free, otherwise it will cause memory leak. Signed-off-by: heminhong <heminhong@...inos.cn> --- ip/link_gre.c | 2 ++ ip/link_gre6.c | 2 ++ ip/link_ip6tnl.c | 2 ++ ip/link_iptnl.c | 2 ++ ip/link_vti.c | 2 ++ ip/link_vti6.c | 2 ++ 6 files changed, 12 insertions(+) diff --git a/ip/link_gre.c b/ip/link_gre.c index 74a5b5e9..b86ec22d 100644 --- a/ip/link_gre.c +++ b/ip/link_gre.c @@ -111,6 +111,8 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv, if (rtnl_talk(&rth, &req.n, &answer) < 0) { get_failed: + if (answer) + free(answer); fprintf(stderr, "Failed to get existing tunnel info.\n"); return -1; diff --git a/ip/link_gre6.c b/ip/link_gre6.c index b03bd65a..72ce148a 100644 --- a/ip/link_gre6.c +++ b/ip/link_gre6.c @@ -113,6 +113,8 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv, if (rtnl_talk(&rth, &req.n, &answer) < 0) { get_failed: + if (answer) + free(answer); fprintf(stderr, "Failed to get existing tunnel info.\n"); return -1; diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c index b27d696f..cffa8345 100644 --- a/ip/link_ip6tnl.c +++ b/ip/link_ip6tnl.c @@ -99,6 +99,8 @@ static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv, if (rtnl_talk(&rth, &req.n, &answer) < 0) { get_failed: + if (answer) + free(answer); fprintf(stderr, "Failed to get existing tunnel info.\n"); return -1; diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c index 1315aebe..b4ffed25 100644 --- a/ip/link_iptnl.c +++ b/ip/link_iptnl.c @@ -103,6 +103,8 @@ static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv, if (rtnl_talk(&rth, &req.n, &answer) < 0) { get_failed: + if (answer) + free(answer); fprintf(stderr, "Failed to get existing tunnel info.\n"); return -1; diff --git a/ip/link_vti.c b/ip/link_vti.c index 50943254..3e4fd95e 100644 --- a/ip/link_vti.c +++ b/ip/link_vti.c @@ -67,6 +67,8 @@ static int vti_parse_opt(struct link_util *lu, int argc, char **argv, if (rtnl_talk(&rth, &req.n, &answer) < 0) { get_failed: + if (answer) + free(answer); fprintf(stderr, "Failed to get existing tunnel info.\n"); return -1; diff --git a/ip/link_vti6.c b/ip/link_vti6.c index 5764221e..e70f5612 100644 --- a/ip/link_vti6.c +++ b/ip/link_vti6.c @@ -69,6 +69,8 @@ static int vti6_parse_opt(struct link_util *lu, int argc, char **argv, if (rtnl_talk(&rth, &req.n, &answer) < 0) { get_failed: + if (answer) + free(answer); fprintf(stderr, "Failed to get existing tunnel info.\n"); return -1; -- 2.25.1
Powered by blists - more mailing lists