[openssl-dev] [openssl.org #3852] bn_gfm2.c: in BN_GF2m_mod_arr() a check is optimized out

Andy Polyakov via RT rt at openssl.org
Mon May 18 20:41:05 UTC 2015


> Found by the https://github.com/xiw/stack tool and then I checked the
> generated asm (gcc and clang) to confirm.
> 
> In the check "if (d0 && tmp_ulong)" tmp_ulong always evaluates to true
> because the compiler optimizes out the tmp_ulong value to true because
> (tmp_ulong = zz >> d1;) zz >> d1 has according to the compiler (LLVM)
> a logical right-shift overflow.

What's right-shift overflow? In either case, are you sure about it being
optimized away because it always evaluates to true? Thing is that if
tmp_ulong is 0, then xor-ing with it won't have effect on result. I mean
check for d0 alone would actually produce same outcome, wouldn't it?




More information about the openssl-dev mailing list