On Sat, Oct 31, 2015 at 09:58:50AM -1000, Brian Smith wrote: > Alessandro Ghedini via RT <r...@openssl.org> wrote: > > > I was also wondering whether it would make sense to just drop the asm > > implementations. Does the speed-up justify the added complexity? > > > > IMO, it should work like this: > * memset_s when memset_s is available. > * Otherwise, SecureZeroMemory, when SecureZeroMemory is available. > * Otherwise, if a flag OPENSSL_REQUIRE_SECURE_ZERO is set, fail.
I guess you mean here that if neither of those two is available, we really can't guarantee anything. > * Otherwise, use an assembly language implementation, if available. > * Otherwise, emit a warning and use the C implementation. > > Note in particular that the C compiler is allowed to completely defeat the > purpose of the function unless SecureZeroMemory or memset_s is used, even > if you use "volatile" or other tricks. The primary purpose of the assembly > language implementations is to reduce the possibility that the C compiler > will do the weird things that C compilers love to do. It's my understanding that the compiler can still try to outsmart us and remove things unless it has explicit support for something like memset_s(). Which is also why explicit_bzero() can be optimized away. This is what BoringSSL currently uses: void OPENSSL_cleanse(void *ptr, size_t len) { #if defined(OPENSSL_WINDOWS) SecureZeroMemory(ptr, len); #else memset(ptr, 0, len); #if !defined(OPENSSL_NO_ASM) /* As best as we can tell, this is sufficient to break any optimisations that might try to eliminate "superfluous" memsets. If there's an easy way to detect memset_s, it would be better to use that. */ __asm__ __volatile__("" : : "r"(ptr) : "memory"); #endif #endif /* !OPENSSL_NO_ASM */ } (The /* !OPENSSL_NO_ASM */ is at the wrong line.) I find the "#if !defined(OPENSSL_NO_ASM)" a little annoying there, building with no-asm might suddenly optimize it away. I'm also not sure we can actually use it like that, this is probably going to cause issues on some platforms. Kurt _______________________________________________ openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev