usermode/usermode-1.114-fixfree.patch
Michal Hlavinka 5033378421 do not (double) free environ as glibc may want to do that (RHEL-76332)
do not (double) free environ as glibc may want to do that (RHEL-76332)
Resolves: RHEL-76332
2025-01-27 15:41:05 +01:00

164 lines
4.4 KiB
Diff

diff -up usermode-1.114/userhelper.c.fixfree usermode-1.114/userhelper.c
--- usermode-1.114/userhelper.c.fixfree 2025-01-23 23:33:24.778721387 +0100
+++ usermode-1.114/userhelper.c 2025-01-23 23:57:54.375799100 +0100
@@ -1749,7 +1755,6 @@ wrap(const char *user, const char *progr
displaying any unwanted GUI dialogs. */
retval = pipe_conv_exec_start(data);
if (retval != 0) {
- g_strfreev(environ);
environ = environ_save;
die(data, retval);
}
@@ -1802,7 +1808,6 @@ wrap(const char *user, const char *progr
/* Nope, not there, either. */
debug_msg("userhelper: couldn't find wrapped "
"binary\n");
- g_strfreev(environ);
environ = environ_save;
die(data, ERR_NO_PROGRAM);
}
@@ -1837,7 +1843,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
die(data, ERR_NO_USER);
}
@@ -1934,7 +1940,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
}
@@ -1957,7 +1963,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
} else
@@ -1965,7 +1971,6 @@ wrap(const char *user, const char *progr
/* Reset the user's environment so that the
* application can run normally. */
argv[optind - 1] = strdup(program);
- g_strfreev(environ);
environ = environ_save;
become_normal(data, user);
if (data->input != NULL) {
@@ -2008,7 +2014,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
}
@@ -2022,7 +2028,6 @@ wrap(const char *user, const char *progr
close(fd);
#endif
pam_end(data->pamh, retval);
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
}
@@ -2030,7 +2036,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
die(data, ERR_UNK_ERROR);
}
@@ -2043,7 +2049,6 @@ wrap(const char *user, const char *progr
close(fd);
#endif
pam_end(data->pamh, retval);
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
}
@@ -2056,7 +2062,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
die(data, ERR_NO_USER);
}
@@ -2081,7 +2087,6 @@ wrap(const char *user, const char *progr
close(fd);
#endif
pam_end(data->pamh, retval);
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
}
@@ -2094,7 +2100,6 @@ wrap(const char *user, const char *progr
close(fd);
#endif
pam_end(data->pamh, retval);
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
}
@@ -2105,7 +2111,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
die(data, ERR_EXEC_FAILED);
}
@@ -2143,7 +2149,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
die(data, retval);
}
@@ -2175,7 +2181,6 @@ wrap(const char *user, const char *progr
cmdline, user, strerror(errno));
if (data->output != NULL)
pipe_conv_exec_fail(data);
- g_strfreev(environ);
environ = environ_save;
die(data, ERR_EXEC_FAILED);
}
@@ -2197,7 +2203,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
fail_exit(data, retval);
}
@@ -2207,7 +2213,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
if (WIFEXITED(status))
exit(WEXITSTATUS(status));
@@ -2241,7 +2247,6 @@ wrap(const char *user, const char *progr
#ifdef HAVE_FEXECVE
close(fd);
#endif
- g_strfreev(environ);
environ = environ_save;
die(data, retval);
}
@@ -2270,7 +2276,6 @@ wrap(const char *user, const char *progr
"root privileges on behalf of '%s': %s",
cmdline, user, strerror(errno));
pipe_conv_exec_fail(data);
- g_strfreev(environ);
environ = environ_save;
die(data, ERR_EXEC_FAILED);
}