GCC version 11 and newer use more aggressive way to eliminate dead stores which ends up removing ngx_memzero() calls in several places. Such optimization affects calculations of md5 and sha1 implemented internally in nginx. The effect could be easily observed by adding a random data to buffer array in md5_init() or sha1_init() functions. With this simple modifications the result of the hash computation will be different each time even though the provided data to hash is not changed. Changing the code to use current implementation of ngx_explicit_memzero() doesn't help because of link-time optimizations enabled in RHEL 9 and derivatives. Glibc 2.34 found in RHEL 9 provides explicit_bzero() function which should be used to avoid such optimization. ngx_explicit_memzero() is changed to use explicit_bzero() if possible. _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel
[PATCH 0 of 4] Avoid dead store elimination in GCC 11+
Vadim Fedorenko via nginx-devel Mon, 17 Apr 2023 16:08:05 -0700
- [PATCH 0 of 4] Avoid dead store eliminatio... Vadim Fedorenko via nginx-devel
- [PATCH 1 of 4] Core: use explicit_bze... Vadim Fedorenko via nginx-devel
- [PATCH 4 of 4] inet: use explicit mem... Vadim Fedorenko via nginx-devel
- [PATCH 2 of 4] md5: use explicit memz... Vadim Fedorenko via nginx-devel
- [PATCH 3 of 4] sha1: use explicit mem... Vadim Fedorenko via nginx-devel
- Re: [PATCH 0 of 4] Avoid dead store e... Maxim Dounin
- Re: [PATCH 0 of 4] Avoid dead sto... Vadim Fedorenko via nginx-devel
- Re: [PATCH 0 of 4] Avoid dead... Alejandro Colomar
- Re: [PATCH 0 of 4] Avoid dead... Maxim Dounin
- Re: [PATCH 0 of 4] Avoid ... Vadim Fedorenko via nginx-devel