On Tue, May 9, 2017 at 4:17 PM, Ted Unangst <[email protected]> wrote:
> Matthew Martin wrote:
I would suggest N^2 loops are automatically forgiveable, If there
is a limit on N,
which is a reasonable number for any supported environment, but total potential
impact on performance for launching a process could be worth considering.
Also, what the impact will be when an application constructs a
4-Megabyte envp with a
million environment variables passed through envp.
And I would question: What is the basis for rejecting an environment
that differs from the
structure that Sh, Bash, or Tcsh expects ?
By convention Shell environments use Name=Value lines, and so do C
library utilities
such as getenv().
But as far as I know, Applications are allowed to pass arbitrary data
to one another
using the envp environment blob, or may use other delimiters besides =
within string data which the caller and callee agree upon, And there are
Probably useful reasons for doing so.
Maybe fix this in the C library utility functions instead where more assumptions
about the runtime environment may be implied....
I would suggest handling invalid or not-understood entries by ignoring
them or skipping
the entry, when querying the environment in the C library.
I would suggest handling duplicates by adopting a consistent search rule,
such as getenv("A") will Only return the last A=B entry in the list;
putenv("A=B") will always replace the last entry in the list, and
ignore preceding occurences.
>> Duplicate environment variables have been a source of bugs, so perhaps
>> the kernel should fail an execve with an invalid envp. Diff below checks
>> that each environment string contains a '=' and that there are no
>> duplicates up to the equals sign.
> It's not really the kernel's job to save you from yourself. Also, you're
> adding a n^2 loop in the kernel, which is not good.
--
-JH