[Bug 268479] lib/libc/stdlib/getenv.c may have a problem with putenv()
Date: Mon, 26 Dec 2022 06:20:05 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268479 --- Comment #12 from Dennis Clarke <dclarke@blastwave.org> --- (In reply to Mark Millard from comment #11) Firstly, thank you for looking at this "thing" which may not be any sort of a bug at all. However it is surely very strange behavior! Only on a FreeBSD system can I entirely override the data from uname as a user. See : callisto$ callisto$ uname -apKU FreeBSD callisto 13.1-RELEASE-p3 WAT_THE_FUCK amd64 amd64 1301000 1301000 callisto$ callisto$ UNAME_s= UNAME_n= UNAME_r= UNAME_v= UNAME_m= UNAME_p= UNAME_i= UNAME_K= UNAME_U= UNAME_b= uname -apKU | od -Ax -t x1 -v 0000000 20 20 20 20 20 20 20 0a 0000008 callisto$ Well that is a real surprise. Looking in ./usr.bin/uname/uname.c where I see the wild macro : 000156 000157 #define CHECK_ENV(opt,var) \ 000158 do { \ 000159 if ((var = getenv("UNAME_" opt)) == NULL) { \ 000160 get_##var = native_##var; \ 000161 } else { \ 000162 get_##var = (get_t)NULL; \ 000163 } \ 000164 } while (0) 000165 000166 static void 000167 setup_get(void) 000168 { 000169 CHECK_ENV("s", sysname); 000170 CHECK_ENV("n", hostname); 000171 CHECK_ENV("r", release); 000172 CHECK_ENV("v", version); 000173 CHECK_ENV("m", platform); 000174 CHECK_ENV("p", arch); 000175 CHECK_ENV("i", ident); 000176 CHECK_ENV("K", kernvers); 000177 CHECK_ENV("U", uservers); 000178 CHECK_ENV("b", buildid); 000179 } 000180 So therefore the man page for UNAME(3) barely touches the true state of affairs for a user process! We can entirely hide the system data with a few env vars. So, to me, this seems like a great thing to "undo" where I the user can actually know the system we are running on. That means we need to walk around in **environ and hope the memory is contiguous? To me the environ pointer is somewhere mystical and not at all on the stack or even someplace I should mess with. I have to go digging into the core code on this and see if I can wreck havok with that array of pointers? In any case this is interesting as I never expected to run a process and not know the actual system description. Very curious and also fun. Dennis Clarke RISC-V/SPARC/PPC/ARM/CISC UNIX and Linux spoken GreyBeard and suspenders optional -- You are receiving this mail because: You are the assignee for the bug.