Scott, Yes, there are apparent bugs in these IA32 version assembly codes. And looks they were duplicated from X64 codes with simple replacement. And yes, it's me. I only validated X64 platform at that time, and missed any double-check on IA32 codes.
For Intel CPU check, the reference comes from the DRNG software implementation guide (https://software.intel.com/sites/default/files/managed/4d/91/DRNG_Software_Implementation_Guide_2.0.pdf). I am not sure why this kind of checking was still placed in sample code. I am fine to remove those vendor checking if ECX feature flag is enough. Best Regards & Thanks, LONG, Qin -----Original Message----- From: Scott Duplichan [mailto:sc...@notabs.org] Sent: Saturday, June 20, 2015 10:25 AM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] [PATCH 1/2] SecurityPkg: Add RandLib from existing RngDxe code El-Haj-Mahmoud, Samer [mailto:samer.el-haj-mahm...@hp.com] wrote: ]Sent: Friday, June 19, 2015 04:12 PM ]To: edk2-devel@lists.sourceforge.net ]Subject: Re: [edk2] [PATCH 1/2] SecurityPkg: Add RandLib from existing RngDxe code ] ]Scott, ] ]The code refactoring the Jonathan did is simply moving the existing code from RngDxe to the new RandLib. He ]did not change any of the existing code, so your comments apply to the existing EDK2 implementation. Hello Samer, OK, I see. I diffed without applying patch 2 of 2. On the other hand, there is that annoying principle of 'you touch it you own it'. Anyway, either I am misreading the code, or the 32-bit build will corrupt memory by writing the return value of asm functions to the wrong address. ]With Jonathan's change, it is possible for others to provide multiple implementations of RandLib to support ]any processors (including non-Intel CPUs that support rdrand, as well as other processors that may not ]necessarily have a similar instruction). RDRAND works like many other x86 instruction set options. A processor reports support for the instruction with CPUID function 1 ecx feature flags. An unnecessary check for vendor=Intel can be viewed as an "Artificial Performance Impairment" to non-Intel processors. The Intel C compiler used to place the same unneeded vendor=Intel check in binaries it generated. On November 11, 2009, Intel agreed to stop doing this: http://download.intel.com/pressroom/legal/AMD_settlement_agreement.pdf As for making an AMD version of this code, I don't think it would get past code review because it would be an exact duplicate of the existing code (except for the vendor=Intel check). EDK2 doesn't check vendor=Intel anywhere else, even though it checks other cupid feature flags. For example, ArchDebugSupport.c determines support for debug extensions using a cpuid feature flag check and no cpuid vendor check. Same for MtrrLib.c when it checks for mtrr support. Thanks, Scott ]Thanks, ]--Samer ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel