From: Arne Schwabe <[email protected]> All the iproute2 functions use the gc only to create local variables and strings to ultimately pass to openvpn_execve_check. These do not need to live longer than the function that calls openvpn_execve_check
Change-Id: I494a427924ea501382275ea96ef85a6abcd780e5 Signed-off-by: Arne Schwabe <[email protected]> Acked-by: Antonio Quartulli <[email protected]> Acked-by: Razvan Cojocaru <[email protected]> Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2105 --- This change was reviewed on Gerrit and approved by at least one developer. I request to merge it to master. Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2105 This mail reflects revision 1 of this Change. Acked-by according to Gerrit (reflected above): Antonio Quartulli <[email protected]> Razvan Cojocaru <[email protected]> diff --git a/src/openvpn/networking_iproute2.c b/src/openvpn/networking_iproute2.c index f091fb3..4685465 100644 --- a/src/openvpn/networking_iproute2.c +++ b/src/openvpn/networking_iproute2.c @@ -43,21 +43,19 @@ { ctx->es = c->es; } - ctx->gc = gc_new(); - return 0; } void net_ctx_reset(openvpn_net_ctx_t *ctx) { - gc_reset(&ctx->gc); + (void)ctx; } void net_ctx_free(openvpn_net_ctx_t *ctx) { - gc_free(&ctx->gc); + (void)ctx; } int @@ -147,13 +145,15 @@ net_addr_v4_add(openvpn_net_ctx_t *ctx, const char *iface, const in_addr_t *addr, int prefixlen) { struct argv argv = argv_new(); + struct gc_arena gc = gc_new(); - const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc); + const char *addr_str = print_in_addr_t(*addr, 0, &gc); argv_printf(&argv, "%s addr add dev %s %s/%d broadcast +", iproute_path, iface, addr_str, prefixlen); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip addr add failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -164,12 +164,15 @@ int prefixlen) { struct argv argv = argv_new(); - char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + + char *addr_str = (char *)print_in6_addr(*addr, 0, &gc); argv_printf(&argv, "%s -6 addr add %s/%d dev %s", iproute_path, addr_str, prefixlen, iface); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip -6 addr add failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -179,13 +182,16 @@ net_addr_v4_del(openvpn_net_ctx_t *ctx, const char *iface, const in_addr_t *addr, int prefixlen) { struct argv argv = argv_new(); - const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + + const char *addr_str = print_in_addr_t(*addr, 0, &gc); argv_printf(&argv, "%s addr del dev %s %s/%d", iproute_path, iface, addr_str, prefixlen); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, 0, "Linux ip addr del failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -196,12 +202,15 @@ int prefixlen) { struct argv argv = argv_new(); - char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + + char *addr_str = (char *)print_in6_addr(*addr, 0, &gc); argv_printf(&argv, "%s -6 addr del %s/%d dev %s", iproute_path, addr_str, prefixlen, iface); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, 0, "Linux ip -6 addr del failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -212,14 +221,16 @@ const in_addr_t *remote) { struct argv argv = argv_new(); - const char *local_str = print_in_addr_t(*local, 0, &ctx->gc); - const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *local_str = print_in_addr_t(*local, 0, &gc); + const char *remote_str = print_in_addr_t(*remote, 0, &gc); argv_printf(&argv, "%s addr add dev %s local %s peer %s", iproute_path, iface, local_str, remote_str); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip addr add failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -230,14 +241,16 @@ const in_addr_t *remote) { struct argv argv = argv_new(); - const char *local_str = print_in_addr_t(*local, 0, &ctx->gc); - const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *local_str = print_in_addr_t(*local, 0, &gc); + const char *remote_str = print_in_addr_t(*remote, 0, &gc); argv_printf(&argv, "%s addr del dev %s local %s peer %s", iproute_path, iface, local_str, remote_str); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, 0, "Linux ip addr del failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -248,7 +261,8 @@ const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *dst_str = print_in_addr_t(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s route add %s/%d", iproute_path, dst_str, prefixlen); @@ -265,7 +279,7 @@ if (gw) { - const char *gw_str = print_in_addr_t(*gw, 0, &ctx->gc); + const char *gw_str = print_in_addr_t(*gw, 0, &gc); argv_printf_cat(&argv, "via %s", gw_str); } @@ -276,6 +290,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; @@ -286,14 +301,15 @@ const struct in6_addr *gw, const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + char *dst_str = (char *)print_in6_addr(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s -6 route add %s/%d dev %s", iproute_path, dst_str, prefixlen, iface); if (gw) { - char *gw_str = (char *)print_in6_addr(*gw, 0, &ctx->gc); + char *gw_str = (char *)print_in6_addr(*gw, 0, &gc); argv_printf_cat(&argv, "via %s", gw_str); } @@ -309,6 +325,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; @@ -319,7 +336,8 @@ const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *dst_str = print_in_addr_t(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s route del %s/%d", iproute_path, dst_str, prefixlen); @@ -335,6 +353,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; @@ -345,14 +364,15 @@ const struct in6_addr *gw, const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + char *dst_str = (char *)print_in6_addr(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s -6 route del %s/%d dev %s", iproute_path, dst_str, prefixlen, iface); if (gw) { - char *gw_str = (char *)print_in6_addr(*gw, 0, &ctx->gc); + char *gw_str = (char *)print_in6_addr(*gw, 0, &gc); argv_printf_cat(&argv, "via %s", gw_str); } @@ -368,6 +388,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; diff --git a/src/openvpn/networking_iproute2.h b/src/openvpn/networking_iproute2.h index dd7d8b3..dac5f0d 100644 --- a/src/openvpn/networking_iproute2.h +++ b/src/openvpn/networking_iproute2.h @@ -28,7 +28,6 @@ struct openvpn_net_ctx { struct env_set *es; - struct gc_arena gc; }; typedef struct openvpn_net_ctx openvpn_net_ctx_t; _______________________________________________ Openvpn-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openvpn-devel
