mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 06:10:56 +00:00
x86/boot/compressed/64: Set up trampoline memory
This patch clears up trampoline memory and copies trampoline code in place. It's not yet used though. Tested-by: Borislav Petkov <bp@suse.de> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Andy Shevchenko <andy.shevchenko@gmail.com> Cc: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Eric Biederman <ebiederm@xmission.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Juergen Gross <jgross@suse.com> Cc: Kees Cook <keescook@chromium.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/20180226180451.86788-5-kirill.shutemov@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
fb5268354d
commit
32fcefa2bf
3 changed files with 18 additions and 1 deletions
|
@ -501,8 +501,9 @@ relocated:
|
|||
jmp *%rax
|
||||
|
||||
.code32
|
||||
ENTRY(trampoline_32bit_src)
|
||||
compatible_mode:
|
||||
/* Setup data and stack segments */
|
||||
/* Set up data and stack segments */
|
||||
movl $__KERNEL_DS, %eax
|
||||
movl %eax, %ds
|
||||
movl %eax, %ss
|
||||
|
|
|
@ -3,9 +3,18 @@
|
|||
|
||||
#define TRAMPOLINE_32BIT_SIZE (2 * PAGE_SIZE)
|
||||
|
||||
#define TRAMPOLINE_32BIT_PGTABLE_OFFSET 0
|
||||
|
||||
#define TRAMPOLINE_32BIT_CODE_OFFSET PAGE_SIZE
|
||||
#define TRAMPOLINE_32BIT_CODE_SIZE 0x60
|
||||
|
||||
#define TRAMPOLINE_32BIT_STACK_END TRAMPOLINE_32BIT_SIZE
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
extern unsigned long *trampoline_32bit;
|
||||
|
||||
extern void trampoline_32bit_src(void *return_ptr);
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif /* BOOT_COMPRESSED_PAGETABLE_H */
|
||||
|
|
|
@ -76,6 +76,13 @@ struct paging_config paging_prepare(void)
|
|||
/* Preserve trampoline memory */
|
||||
memcpy(trampoline_save, trampoline_32bit, TRAMPOLINE_32BIT_SIZE);
|
||||
|
||||
/* Clear trampoline memory first */
|
||||
memset(trampoline_32bit, 0, TRAMPOLINE_32BIT_SIZE);
|
||||
|
||||
/* Copy trampoline code in place */
|
||||
memcpy(trampoline_32bit + TRAMPOLINE_32BIT_CODE_OFFSET / sizeof(unsigned long),
|
||||
&trampoline_32bit_src, TRAMPOLINE_32BIT_CODE_SIZE);
|
||||
|
||||
return paging_config;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue