File tree Expand file tree Collapse file tree 1 file changed +3
-16
lines changed Expand file tree Collapse file tree 1 file changed +3
-16
lines changed Original file line number Diff line number Diff line change @@ -166,22 +166,9 @@ SYM_INNER_LABEL(entry_SYSCALL_64_after_hwframe, SYM_L_GLOBAL)
166
166
jne swapgs_restore_regs_and_return_to_usermode
167
167
168
168
/*
169
- * SYSCALL clears RF when it saves RFLAGS in R11 and SYSRET cannot
170
- * restore RF properly. If the slowpath sets it for whatever reason, we
171
- * need to restore it correctly.
172
- *
173
- * SYSRET can restore TF, but unlike IRET, restoring TF results in a
174
- * trap from userspace immediately after SYSRET. This would cause an
175
- * infinite loop whenever #DB happens with register state that satisfies
176
- * the opportunistic SYSRET conditions. For example, single-stepping
177
- * this user code:
178
- *
179
- * movq $stuck_here, %rcx
180
- * pushfq
181
- * popq %r11
182
- * stuck_here:
183
- *
184
- * would never get past 'stuck_here'.
169
+ * SYSRET cannot restore RF. It can restore TF, but unlike IRET,
170
+ * restoring TF results in a trap from userspace immediately after
171
+ * SYSRET.
185
172
*/
186
173
testq $(X86_EFLAGS_RF|X86_EFLAGS_TF), %r11
187
174
jnz swapgs_restore_regs_and_return_to_usermode
You can’t perform that action at this time.
0 commit comments