authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-18 01:38:58-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-18 12:22:46-07:00
log2b8dcc76eba92ad44bd88756218de8d2bd8a1c10
treef4528dccdeed3278ef60a96f7340d184a78743e4
parentd9368d70125abd70be380f7af38b75c152f307aa

take advantage of std.os.linux.getauxval


1 files changed, 2 insertions(+), 11 deletions(-)

lib/std/start.zig+2-11
......@@ -219,17 +219,7 @@ fn posixCallMainAndExit() noreturn {
219219 if (!@hasDecl(root, "use_AT_RANDOM_auxval") or root.use_AT_RANDOM_auxval) {
220220 // Initialize the per-thread CSPRNG since Linux gave us the handy-dandy
221221 // AT_RANDOM. This depends on the TLS initialization above.
222 var i: usize = 0;
223 while (auxv[i].a_type != std.elf.AT_NULL) : (i += 1) {
224 switch (auxv[i].a_type) {
225 std.elf.AT_RANDOM => {
226 // "The address of sixteen bytes containing a random value."
227 initCryptoSeedFromAuxVal(auxv[i].a_un.a_val);
228 break;
229 },
230 else => continue,
231 }
232 }
222 initCryptoSeedFromAuxVal(std.os.linux.getauxval(std.elf.AT_RANDOM));
233223 }
234224
235225 // TODO This is disabled because what should we do when linking libc and this code
......@@ -284,6 +274,7 @@ fn main(c_argc: i32, c_argv: [*][*:0]u8, c_envp: [*:null]?[*:0]u8) callconv(.C)
284274
285275fn initCryptoSeedFromAuxVal(addr: usize) void {
286276 if (addr == 0) return;
277 // "The address of sixteen bytes containing a random value."
287278 const ptr = @intToPtr(*[16]u8, addr);
288279 tlcsprng.init(ptr.*);
289280 // Clear AT_RANDOM after we use it, otherwise our secure