Page MenuHomePhabricator

D6254.diff
No OneTemporary

D6254.diff

diff --git a/src/randomenv.cpp b/src/randomenv.cpp
--- a/src/randomenv.cpp
+++ b/src/randomenv.cpp
@@ -218,17 +218,32 @@
// Returns max leaf in ax
AddCPUID(hasher, 0, 0, ax, bx, cx, dx);
uint32_t max = ax;
- for (uint32_t leaf = 1; leaf <= max; ++leaf) {
- for (uint32_t subleaf = 0;; ++subleaf) {
+ for (uint32_t leaf = 1; leaf <= max && leaf <= 0xFF; ++leaf) {
+ uint32_t maxsub = 0;
+ for (uint32_t subleaf = 0; subleaf <= 0xFF; ++subleaf) {
AddCPUID(hasher, leaf, subleaf, ax, bx, cx, dx);
- // Iterate over subleaves for leaf 4, 11, 13
- if (leaf != 4 && leaf != 11 && leaf != 13) {
- break;
- }
- if ((leaf == 4 || leaf == 13) && ax == 0) {
- break;
- }
- if (leaf == 11 && (cx & 0xFF00) == 0) {
+ // Iterate subleafs for leaf values 4, 7, 11, 13
+ if (leaf == 4) {
+ if ((ax & 0x1f) == 0) {
+ break;
+ }
+ } else if (leaf == 7) {
+ if (subleaf == 0) {
+ maxsub = ax;
+ }
+ if (subleaf == maxsub) {
+ break;
+ }
+ } else if (leaf == 11) {
+ if ((cx & 0xff00) == 0) {
+ break;
+ }
+ } else if (leaf == 13) {
+ if (ax == 0 && bx == 0 && cx == 0 && dx == 0) {
+ break;
+ }
+ } else {
+ // For any other leaf, stop after subleaf 0.
break;
}
}
@@ -237,7 +252,8 @@
// Returns max extended leaf in ax
AddCPUID(hasher, 0x80000000, 0, ax, bx, cx, dx);
uint32_t ext_max = ax;
- for (uint32_t leaf = 0x80000001; leaf <= ext_max; ++leaf) {
+ for (uint32_t leaf = 0x80000001; leaf <= ext_max && leaf <= 0x800000FF;
+ ++leaf) {
AddCPUID(hasher, leaf, 0, ax, bx, cx, dx);
}
}

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 1, 10:11 (7 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5187305
Default Alt Text
D6254.diff (1 KB)

Event Timeline