aboutsummaryrefslogtreecommitdiff
path: root/elf/dblload.c
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2025-01-24 10:40:28 +0100
committerFlorian Weimer <fweimer@redhat.com>2025-01-24 22:37:49 +0100
commit12b4a1fc6ecfc278a87159164bdf1d682deb18e2 (patch)
tree58c18725571c1c62a98d8798f44f61ac278a03f7 /elf/dblload.c
parent36fcdfbbc5463e55581fec67141df3493fb81f7e (diff)
downloadglibc-12b4a1fc6ecfc278a87159164bdf1d682deb18e2.zip
glibc-12b4a1fc6ecfc278a87159164bdf1d682deb18e2.tar.gz
glibc-12b4a1fc6ecfc278a87159164bdf1d682deb18e2.tar.bz2
stdlib: Re-implement free (environ) compatibility kludge for setenv
For the originally failing application (userhelper from usermode), it is not actually necessary to call realloc on the environ pointer. Yes, there will be a memory leak because the application assigns a heap-allocated pointer to environ that it never frees, but this leak was always there: the old realloc-based setenv had a hidden internal variable, last_environ, that was used in a similar way to __environ_array_list. The application is not impacted by the leak anyway because the relevant operations do not happen in a loop. The change here just uses a separte heap allocation and points environ to that. This means that if an application calls free (environ) and restores the environ pointer to the value at process start, and does not modify the environment further, nothing bad happens. This change should not invalidate any previous testing that went into the original getenv thread safety change, commit 7a61e7f557a97ab597d6 ("stdlib: Make getenv thread-safe in more cases"). The new test cases are modeled in part on the env -i use case from bug 32588 (with !DO_MALLOC && !DO_EARLY_SETENV), and the previous stdlib/tst-setenv-malloc test. The DO_MALLOC && !DO_EARLY_SETENV case in the new test should approximate what userhelper from the usermode package does. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'elf/dblload.c')
0 files changed, 0 insertions, 0 deletions