diff options
Diffstat (limited to 'results/scraper/fex/4526')
| -rw-r--r-- | results/scraper/fex/4526 | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/results/scraper/fex/4526 b/results/scraper/fex/4526 new file mode 100644 index 00000000..2ea383e4 --- /dev/null +++ b/results/scraper/fex/4526 @@ -0,0 +1,20 @@ +Gravel game uses broken SSL with SHA +This is due to an old OpenSSL issue reported at https://github.com/openssl/openssl/issues/23144 + +The Windows build of [Gravel](https://store.steampowered.com/app/558260/Gravel/) currently crashes under FEX. This is due to a bug in old versions of OpenSSL where if SHA1 was supported then OpenSSL would hit a code path that was broken. In this case this code path should be hit unconditionally as long as the host CPU supports SSSE3 and SHA, the AVX code code path is only run if SHA isn't a supported extensions. OpenSSL is statically compiled in to the game, so it will always have this broken code path unless the game devs come back and update their game. + +The weird thing is that running this same code under Proton on my AMD system, the game runs, and my AMD system definitely supports SHA. Additional weirdness, this game also runs on Windows+Intel without issue. Additional+Additional weirdness, if FEX's CPUID is changed over to AMD style, then this game runs. + +The CPUID value that is checked for SHA lives at address `0x144333f28`, this ends up being 0 on my AMD system, but it ends up being cpuid function_7.ebx under FEX. + +The RIP of the block that sets this value to 0 is: 0x140006df0 +Then the RIP that sets it 0x218827E9 is: 0x140006eec +This is the expected outcome. + +BUT when FEX is set to `AuthenticAMD` then the second write gets skipped (Potentially similar to how my desktop is ending up with zero initialized value?) + +Ideally I could have gdb attached to the process at start on my x86 desktop and watch the value as well, but `PROTON_WAIT_ATTACH` isn't really working there. + +Maybe there is some bug in OpenSSL's old CPUID code that it never actually ends up reading func_07.ebx, but a bug in FEX's flag handling or something causes it to execute the code? + +Really annoying issue. \ No newline at end of file |