On Fri, Apr 19, 2024, at 7:27 PM, Florian Weimer wrote: > * Mikulas Patocka: > >> On Fri, 19 Apr 2024, Zack Weinberg wrote: >> >>> On Fri, Apr 19, 2024, at 4:15 PM, Mikulas Patocka wrote: >>> > On Fri, 19 Apr 2024, Zack Weinberg wrote: >>> >> ... the copy >>> >> of round_keys in the vector registers *won't* get erased -- the exact >>> >> problem being discussed in this thread. >>> > >>> > On the SYSV ABI, all the vector registers are volatile, so you can erase >>> > them in explicit_bzero. >>> > >>> > On Windows 64-bit ABI, it is more problematic, because some of the vector >>> > registers must be preserved. >>> >>> Oh, huh. Yes, that would work. >> >> I've just realized that this wouldn't work - if the function >> explicit_bzero is lazily resolved, the dynamic linker would spill the >> vector registers to the stack prior to calling explicit_bzero. > > No, the dynamic linker makes a tail call to explicit_bzero. There's no > register restore on the return path, all that happens before the tail > call. Doesn't help — if the vector registers get spilled at all, we lose. zw