summaryrefslogtreecommitdiffstats
path: root/results/classifier/111/review/1503031
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/111/review/1503031')
-rw-r--r--results/classifier/111/review/150303150
1 files changed, 50 insertions, 0 deletions
diff --git a/results/classifier/111/review/1503031 b/results/classifier/111/review/1503031
new file mode 100644
index 00000000..17af4d87
--- /dev/null
+++ b/results/classifier/111/review/1503031
@@ -0,0 +1,50 @@
+semantic: 0.197
+other: 0.176
+device: 0.083
+permissions: 0.080
+graphic: 0.061
+files: 0.055
+socket: 0.055
+PID: 0.054
+performance: 0.049
+vnc: 0.047
+network: 0.046
+debug: 0.040
+KVM: 0.028
+boot: 0.028
+debug: 0.304
+files: 0.150
+semantic: 0.148
+other: 0.096
+PID: 0.062
+device: 0.038
+performance: 0.036
+network: 0.033
+vnc: 0.025
+boot: 0.024
+graphic: 0.023
+permissions: 0.022
+socket: 0.019
+KVM: 0.019
+
+32-to-64-bit call gate unsupported in IA32e mode
+
+In particular, the lcall implementation doesn't support the 64-bit TSS.
+
+helper_lcall_protected (target-i386/seg_helper.c:1884) calls get_ss_esp_from_tss() on a call gate to a lower privilege level, which tries to extract a 32-bit ESP and 16-bit SS from the TSS. In IA32e mode (64-bit or compatibility mode), this instead grabs the lower 32-bits of the target RSP, and 16 of the upper bits as the SS. Additionally, several of the subsequent checks are incorrect (even if the correct stack pointer were extracted).
+
+This isn't a problem for interrupts since the interrupts are given their own implementation entirely, that uses get_rsp_from_tss() rather than get_ss_esp_from_tss().
+
+I believe the missing logic is from the branch starting "ELSE (* current TSS is 64-bit *)" in the CALL pseudocode in the Intel manual (page 3-124 of the PDF I have).
+
+Reproduced at master (c0b520dfb8890294a9f8879f4759172900585995), and also as of a qemu built a year ago.
+
+I also suspect that qemu will incorrectly allow calls through 32-bit call gates in compatibility mode (rather than raising a GP fault --- see Intel manuals volume 3A 5-21). And I doubt 64-to-64-bit call gates work either. I haven't actually tested either of those scenarios, though, this is just from reading the code.
+
+Looking through old bug tickets... is this still an issue with the latest version of QEMU? Or could we close this ticket nowadays?
+
+Looking at the commit log it looks like Andrew fixed this in commit 0aca060526d3ff9632aaed in 2018 ?
+
+
+That looks like the corresponding fix, indeed. Let's close this ticket.
+