You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[CommandLine][Linux] Don't read argv from /proc/self/cmdline.
Instead of reading from `/proc/self/cmdline`, take advantage of the fact
that the initial stack layout is ABI specified, and that we already have
a pointer into it (`environ`). This lets us walk up the stack until we
find `argc`, at which point we also know where `argv` is.
We do this from a static initializer because a `setenv()` or `putenv()`
can change `environ` (if you add a new environment variable), and it's
even permissible to just outright change `environ` yourself too. It
seems reasonable to suggest to people that they shouldn't be doing those
things from a static initializer, and as long as they don't, they won't
run before we've had a chance to find `argv`.
Just in case someone _does_ do this, we also check that `environ` points
into the stack. If it doesn't, they won't get any arguments, so if that
happens, that's a clue that they're messing with `environ` too early.
This works around a problem (#69658) with Docker Desktop 4.25.0 and
Rosetta, wherein we end up with an extra argument visible in
`/proc/self/cmdline`, and also avoids allocating memory for the command
line arguments.
rdar://117963394
0 commit comments