Re:Don't setenv in multi-threaded code on glibc
by to3m on Tuesday January 31, 2017 @11:31AM
(#13532038)
Yes - good point. I think the wrapper approach can still make sense for CLOEXEC sometimes, but you should absolutely always ignore what I said about using it for the environment ;)
Never having needed to do exactly this myself in practice, I'd quite forgotten about the ...e functions.
It doesn't have to be that complicated. After the fork, in the child, you can construct your own local environment array, and pass it to execve or one of the other exec functions that takes an environ argument. This is perfectly safe behavior in a multi-threaded program.