Skip to content

Commit

Permalink
x86/entry: Avoid very early RET
Browse files Browse the repository at this point in the history
Commit

  ee774da ("x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry()")

manages to introduce a CALL/RET pair that is before SWITCH_TO_KERNEL_CR3,
which means it is before RETBleed can be mitigated.

Revert to an earlier version of the commit in Fixes. Down side is that
this will bloat .text size somewhat. The alternative is fully reverting
it.

The purpose of this patch was to allow migrating error_entry() to C,
including the whole of kPTI. Much care needs to be taken moving that
forward to not re-introduce this problem of early RETs.

Fixes: ee774da ("x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry()")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
  • Loading branch information
Peter Zijlstra authored and Borislav Petkov committed Jun 27, 2022
1 parent aa3d480 commit 7c81c0c
Showing 1 changed file with 2 additions and 10 deletions.
12 changes: 2 additions & 10 deletions arch/x86/entry/entry_64.S
Original file line number Diff line number Diff line change
@@ -322,23 +322,15 @@ SYM_CODE_END(ret_from_fork)
#endif
.endm

/* Save all registers in pt_regs */
SYM_CODE_START_LOCAL(push_and_clear_regs)
UNWIND_HINT_FUNC
PUSH_AND_CLEAR_REGS save_ret=1
ENCODE_FRAME_POINTER 8
RET
SYM_CODE_END(push_and_clear_regs)

/**
* idtentry_body - Macro to emit code calling the C function
* @cfunc: C function to be called
* @has_error_code: Hardware pushed error code on stack
*/
.macro idtentry_body cfunc has_error_code:req

call push_and_clear_regs
UNWIND_HINT_REGS
PUSH_AND_CLEAR_REGS
ENCODE_FRAME_POINTER

/*
* Call error_entry() and switch to the task stack if from userspace.

0 comments on commit 7c81c0c

Please sign in to comment.