Under certain circumstances, the ix86_expand_builtin function in i386.c in GNU Compiler Collection (GCC) version 4.6, 4.7, 4.8, 4.9, 5 before 5.5, and 6 before 6.4 will generate instruction sequences that clobber the status flag of the RDRAND and RDSEED intrinsics before it can be read, potentially causing failures of these instructions to go unreported. This could potentially lead to less randomness in random number generation.
The product uses a Pseudo-Random Number Generator (PRNG) in a security context, but the PRNG’s algorithm is not cryptographically strong.
| Name | Vendor | Start Version | End Version |
|---|---|---|---|
| Gcc | Gnu | 4.6 (including) | 4.6 (including) |
| Gcc | Gnu | 4.7 (including) | 4.7 (including) |
| Gcc | Gnu | 4.8 (including) | 4.8 (including) |
| Gcc | Gnu | 4.9 (including) | 4.9 (including) |
| Gcc | Gnu | 5.0 (including) | 5.0 (including) |
| Gcc | Gnu | 5.1 (including) | 5.1 (including) |
| Gcc | Gnu | 5.2 (including) | 5.2 (including) |
| Gcc | Gnu | 5.3 (including) | 5.3 (including) |
| Gcc | Gnu | 5.4 (including) | 5.4 (including) |
| Gcc | Gnu | 6.0 (including) | 6.0 (including) |
| Gcc | Gnu | 6.1 (including) | 6.1 (including) |
| Gcc | Gnu | 6.2 (including) | 6.2 (including) |
| Gcc | Gnu | 6.3 (including) | 6.3 (including) |
| Red Hat Enterprise Linux 7 | RedHat | gcc-0:4.8.5-28.el7 | * |
| Gcc-3.3 | Ubuntu | artful | * |
| Gcc-3.3 | Ubuntu | bionic | * |
| Gcc-3.3 | Ubuntu | cosmic | * |
| Gcc-3.3 | Ubuntu | disco | * |
| Gcc-3.3 | Ubuntu | eoan | * |
| Gcc-3.3 | Ubuntu | esm-apps/xenial | * |
| Gcc-3.3 | Ubuntu | focal | * |
| Gcc-3.3 | Ubuntu | groovy | * |
| Gcc-3.3 | Ubuntu | hirsute | * |
| Gcc-3.3 | Ubuntu | impish | * |
| Gcc-3.3 | Ubuntu | kinetic | * |
| Gcc-3.3 | Ubuntu | lunar | * |
| Gcc-3.3 | Ubuntu | mantic | * |
| Gcc-3.3 | Ubuntu | trusty | * |
| Gcc-3.3 | Ubuntu | trusty/esm | * |
| Gcc-3.3 | Ubuntu | xenial | * |
| Gcc-3.3 | Ubuntu | zesty | * |
| Gcc-4.4 | Ubuntu | trusty | * |
| Gcc-4.6 | Ubuntu | precise/esm | * |
| Gcc-4.6 | Ubuntu | trusty | * |
| Gcc-4.7 | Ubuntu | esm-apps/xenial | * |
| Gcc-4.7 | Ubuntu | trusty | * |
| Gcc-4.7 | Ubuntu | trusty/esm | * |
| Gcc-4.7 | Ubuntu | xenial | * |
| Gcc-4.7 | Ubuntu | zesty | * |
| Gcc-4.7-armel-cross | Ubuntu | esm-apps/xenial | * |
| Gcc-4.7-armel-cross | Ubuntu | trusty | * |
| Gcc-4.7-armel-cross | Ubuntu | xenial | * |
| Gcc-4.7-armel-cross | Ubuntu | zesty | * |
| Gcc-4.7-armhf-cross | Ubuntu | esm-apps/xenial | * |
| Gcc-4.7-armhf-cross | Ubuntu | trusty | * |
| Gcc-4.7-armhf-cross | Ubuntu | xenial | * |
| Gcc-4.7-armhf-cross | Ubuntu | zesty | * |
| Gcc-4.8 | Ubuntu | artful | * |
| Gcc-4.8 | Ubuntu | bionic | * |
| Gcc-4.8 | Ubuntu | cosmic | * |
| Gcc-4.8 | Ubuntu | esm-apps/xenial | * |
| Gcc-4.8 | Ubuntu | trusty | * |
| Gcc-4.8 | Ubuntu | trusty/esm | * |
| Gcc-4.8 | Ubuntu | xenial | * |
| Gcc-4.8 | Ubuntu | zesty | * |
| Gcc-4.8-arm64-cross | Ubuntu | esm-apps/xenial | * |
| Gcc-4.8-arm64-cross | Ubuntu | trusty | * |
| Gcc-4.8-arm64-cross | Ubuntu | xenial | * |
| Gcc-4.8-armhf-cross | Ubuntu | esm-apps/xenial | * |
| Gcc-4.8-armhf-cross | Ubuntu | trusty | * |
| Gcc-4.8-armhf-cross | Ubuntu | xenial | * |
| Gcc-4.8-powerpc-cross | Ubuntu | esm-apps/xenial | * |
| Gcc-4.8-powerpc-cross | Ubuntu | trusty | * |
| Gcc-4.8-powerpc-cross | Ubuntu | xenial | * |
| Gcc-4.8-ppc64el-cross | Ubuntu | esm-apps/xenial | * |
| Gcc-4.8-ppc64el-cross | Ubuntu | trusty | * |
| Gcc-4.8-ppc64el-cross | Ubuntu | xenial | * |
| Gcc-4.9 | Ubuntu | esm-apps/xenial | * |
| Gcc-4.9 | Ubuntu | vivid/ubuntu-core | * |
| Gcc-4.9 | Ubuntu | xenial | * |
| Gcc-4.9 | Ubuntu | zesty | * |
| Gcc-5 | Ubuntu | artful | * |
| Gcc-5 | Ubuntu | esm-infra-legacy/xenial | * |
| Gcc-5 | Ubuntu | esm-infra/xenial | * |
| Gcc-5 | Ubuntu | upstream | * |
| Gcc-5 | Ubuntu | xenial | * |
| Gcc-5 | Ubuntu | zesty | * |
| Gcc-5-cross | Ubuntu | artful | * |
| Gcc-5-cross | Ubuntu | esm-infra/xenial | * |
| Gcc-5-cross | Ubuntu | xenial | * |
| Gcc-5-cross | Ubuntu | zesty | * |
| Gcc-6 | Ubuntu | artful | * |
| Gcc-6 | Ubuntu | upstream | * |
| Gcc-6 | Ubuntu | zesty | * |
| Gcc-6-cross | Ubuntu | artful | * |
| Gcc-6-cross | Ubuntu | upstream | * |
| Gcc-6-cross | Ubuntu | zesty | * |
| Gcc-6-cross-ports | Ubuntu | artful | * |
| Gcc-6-cross-ports | Ubuntu | upstream | * |
| Gcc-6-cross-ports | Ubuntu | zesty | * |
| Gcc-7 | Ubuntu | artful | * |
| Gcc-7 | Ubuntu | upstream | * |
| Gcc-7-cross | Ubuntu | artful | * |
| Gcc-7-cross-ports | Ubuntu | artful | * |
| Gcc-arm-linux-androideabi | Ubuntu | esm-apps/xenial | * |
| Gcc-arm-linux-androideabi | Ubuntu | trusty | * |
| Gcc-arm-linux-androideabi | Ubuntu | xenial | * |
| Gcc-arm-linux-androideabi | Ubuntu | zesty | * |
| Gcc-arm-none-eabi | Ubuntu | artful | * |
| Gcc-arm-none-eabi | Ubuntu | bionic | * |
| Gcc-arm-none-eabi | Ubuntu | cosmic | * |
| Gcc-arm-none-eabi | Ubuntu | disco | * |
| Gcc-arm-none-eabi | Ubuntu | eoan | * |
| Gcc-arm-none-eabi | Ubuntu | esm-apps/xenial | * |
| Gcc-arm-none-eabi | Ubuntu | focal | * |
| Gcc-arm-none-eabi | Ubuntu | groovy | * |
| Gcc-arm-none-eabi | Ubuntu | hirsute | * |
| Gcc-arm-none-eabi | Ubuntu | impish | * |
| Gcc-arm-none-eabi | Ubuntu | kinetic | * |
| Gcc-arm-none-eabi | Ubuntu | lunar | * |
| Gcc-arm-none-eabi | Ubuntu | mantic | * |
| Gcc-arm-none-eabi | Ubuntu | oracular | * |
| Gcc-arm-none-eabi | Ubuntu | plucky | * |
| Gcc-arm-none-eabi | Ubuntu | trusty | * |
| Gcc-arm-none-eabi | Ubuntu | xenial | * |
| Gcc-arm-none-eabi | Ubuntu | zesty | * |
| Gcc-avr | Ubuntu | artful | * |
| Gcc-avr | Ubuntu | bionic | * |
| Gcc-avr | Ubuntu | cosmic | * |
| Gcc-avr | Ubuntu | disco | * |
| Gcc-avr | Ubuntu | eoan | * |
| Gcc-avr | Ubuntu | esm-apps/xenial | * |
| Gcc-avr | Ubuntu | focal | * |
| Gcc-avr | Ubuntu | groovy | * |
| Gcc-avr | Ubuntu | hirsute | * |
| Gcc-avr | Ubuntu | impish | * |
| Gcc-avr | Ubuntu | kinetic | * |
| Gcc-avr | Ubuntu | lunar | * |
| Gcc-avr | Ubuntu | mantic | * |
| Gcc-avr | Ubuntu | oracular | * |
| Gcc-avr | Ubuntu | plucky | * |
| Gcc-avr | Ubuntu | trusty | * |
| Gcc-avr | Ubuntu | xenial | * |
| Gcc-avr | Ubuntu | zesty | * |
| Gcc-defaults | Ubuntu | artful | * |
| Gcc-defaults | Ubuntu | cosmic | * |
| Gcc-defaults | Ubuntu | disco | * |
| Gcc-defaults | Ubuntu | eoan | * |
| Gcc-defaults | Ubuntu | groovy | * |
| Gcc-defaults | Ubuntu | hirsute | * |
| Gcc-defaults | Ubuntu | impish | * |
| Gcc-defaults | Ubuntu | precise/esm | * |
| Gcc-defaults | Ubuntu | trusty | * |
| Gcc-defaults | Ubuntu | xenial | * |
| Gcc-defaults | Ubuntu | zesty | * |
| Gcc-defaults-arm64-cross | Ubuntu | trusty | * |
| Gcc-defaults-armel-cross | Ubuntu | trusty | * |
| Gcc-defaults-armhf-cross | Ubuntu | trusty | * |
| Gcc-defaults-powerpc-cross | Ubuntu | trusty | * |
| Gcc-defaults-ppc64el-cross | Ubuntu | trusty | * |
| Gcc-h8300-hms | Ubuntu | artful | * |
| Gcc-h8300-hms | Ubuntu | bionic | * |
| Gcc-h8300-hms | Ubuntu | cosmic | * |
| Gcc-h8300-hms | Ubuntu | disco | * |
| Gcc-h8300-hms | Ubuntu | eoan | * |
| Gcc-h8300-hms | Ubuntu | esm-apps/xenial | * |
| Gcc-h8300-hms | Ubuntu | focal | * |
| Gcc-h8300-hms | Ubuntu | groovy | * |
| Gcc-h8300-hms | Ubuntu | hirsute | * |
| Gcc-h8300-hms | Ubuntu | impish | * |
| Gcc-h8300-hms | Ubuntu | kinetic | * |
| Gcc-h8300-hms | Ubuntu | lunar | * |
| Gcc-h8300-hms | Ubuntu | mantic | * |
| Gcc-h8300-hms | Ubuntu | oracular | * |
| Gcc-h8300-hms | Ubuntu | plucky | * |
| Gcc-h8300-hms | Ubuntu | trusty | * |
| Gcc-h8300-hms | Ubuntu | xenial | * |
| Gcc-h8300-hms | Ubuntu | zesty | * |
| Gcc-i686-linux-android | Ubuntu | esm-apps/xenial | * |
| Gcc-i686-linux-android | Ubuntu | trusty | * |
| Gcc-i686-linux-android | Ubuntu | xenial | * |
| Gcc-i686-linux-android | Ubuntu | zesty | * |
| Gcc-m68hc1x | Ubuntu | artful | * |
| Gcc-m68hc1x | Ubuntu | bionic | * |
| Gcc-m68hc1x | Ubuntu | cosmic | * |
| Gcc-m68hc1x | Ubuntu | disco | * |
| Gcc-m68hc1x | Ubuntu | eoan | * |
| Gcc-m68hc1x | Ubuntu | esm-apps/xenial | * |
| Gcc-m68hc1x | Ubuntu | focal | * |
| Gcc-m68hc1x | Ubuntu | groovy | * |
| Gcc-m68hc1x | Ubuntu | hirsute | * |
| Gcc-m68hc1x | Ubuntu | impish | * |
| Gcc-m68hc1x | Ubuntu | kinetic | * |
| Gcc-m68hc1x | Ubuntu | trusty | * |
| Gcc-m68hc1x | Ubuntu | xenial | * |
| Gcc-m68hc1x | Ubuntu | zesty | * |
| Gcc-mingw-w64 | Ubuntu | artful | * |
| Gcc-mingw-w64 | Ubuntu | bionic | * |
| Gcc-mingw-w64 | Ubuntu | cosmic | * |
| Gcc-mingw-w64 | Ubuntu | disco | * |
| Gcc-mingw-w64 | Ubuntu | eoan | * |
| Gcc-mingw-w64 | Ubuntu | esm-apps/xenial | * |
| Gcc-mingw-w64 | Ubuntu | focal | * |
| Gcc-mingw-w64 | Ubuntu | groovy | * |
| Gcc-mingw-w64 | Ubuntu | hirsute | * |
| Gcc-mingw-w64 | Ubuntu | impish | * |
| Gcc-mingw-w64 | Ubuntu | kinetic | * |
| Gcc-mingw-w64 | Ubuntu | lunar | * |
| Gcc-mingw-w64 | Ubuntu | mantic | * |
| Gcc-mingw-w64 | Ubuntu | oracular | * |
| Gcc-mingw-w64 | Ubuntu | plucky | * |
| Gcc-mingw-w64 | Ubuntu | trusty | * |
| Gcc-mingw-w64 | Ubuntu | trusty/esm | * |
| Gcc-mingw-w64 | Ubuntu | xenial | * |
| Gcc-mingw-w64 | Ubuntu | zesty | * |
| Gcc-msp430 | Ubuntu | artful | * |
| Gcc-msp430 | Ubuntu | bionic | * |
| Gcc-msp430 | Ubuntu | cosmic | * |
| Gcc-msp430 | Ubuntu | disco | * |
| Gcc-msp430 | Ubuntu | eoan | * |
| Gcc-msp430 | Ubuntu | esm-apps/xenial | * |
| Gcc-msp430 | Ubuntu | focal | * |
| Gcc-msp430 | Ubuntu | groovy | * |
| Gcc-msp430 | Ubuntu | hirsute | * |
| Gcc-msp430 | Ubuntu | impish | * |
| Gcc-msp430 | Ubuntu | kinetic | * |
| Gcc-msp430 | Ubuntu | lunar | * |
| Gcc-msp430 | Ubuntu | mantic | * |
| Gcc-msp430 | Ubuntu | trusty | * |
| Gcc-msp430 | Ubuntu | xenial | * |
| Gcc-msp430 | Ubuntu | zesty | * |
| Gcc-opt | Ubuntu | artful | * |
| Gcc-opt | Ubuntu | trusty | * |
| Gcc-opt | Ubuntu | zesty | * |
| Gcc-snapshot | Ubuntu | artful | * |
| Gcc-snapshot | Ubuntu | esm-apps/xenial | * |
| Gcc-snapshot | Ubuntu | trusty | * |
| Gcc-snapshot | Ubuntu | upstream | * |
| Gcc-snapshot | Ubuntu | xenial | * |
| Gcc-snapshot | Ubuntu | zesty | * |
| Gccgo-4.9 | Ubuntu | trusty | * |
| Gccgo-4.9 | Ubuntu | trusty/esm | * |
| Gccgo-6 | Ubuntu | esm-infra-legacy/xenial | * |
| Gccgo-6 | Ubuntu | esm-infra/xenial | * |
| Gccgo-6 | Ubuntu | xenial | * |
When a non-cryptographic PRNG is used in a cryptographic context, it can expose the cryptography to certain types of attacks. Often a pseudo-random number generator (PRNG) is not designed for cryptography. Sometimes a mediocre source of randomness is sufficient or preferable for algorithms that use random numbers. Weak generators generally take less processing power and/or do not use the precious, finite, entropy sources on a system. While such PRNGs might have very useful features, these same features could be used to break the cryptography.