arm64 fixes:
- keep the tail of an unaligned initrd reserved - adjust ftrace_make_call() to deal with the relative nature of PLTs -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE5RElWfyWxS+3PLO2a9axLQDIXvEFAlzDOjcACgkQa9axLQDI XvFJag/7BER6yur0NSCAAMCcbn0cL7guNNUBJaLwZIPSN7lFNvqWZ+5wN50Yja7k B9D+6EhX8h8VUHJ5ne1veQQGka1eNaldzFvS6mzj8xt4aNiTqZaTLgYS2CW5iEPA ga0VJB0vT3Lvu7SGziN7P6jw+5YOeyohL89VYCdHSN7ATM8nc9HsUXjONYEwD6ip /d6psCWh0wEmioUPSDhbxSr7zxJ6w5MPwG1V+t8HbsFVY1D3OBOyaW9I6SrA07Kj vzV3N8sY1pxY3MtnIwt4lOC39vW2GyW5x1ULCMiaASRSYsmxkAfQ3j0FR+trZ4kd VGEK54NTUQerG4e2hJSxMVORxtb/zhzM/NNu8wT2yZqig2Bf6/WfWBW6laFtOX5e c1olY03qUC5AZLSXTbmOm2REPUhMv4gOLUKnDHWuVpo2583Cef/Na9290B4vSe5X XHYJhj13tVekuDOBJR47SSTVqf/Kpt+WTjxVgLKTyQjtujXkqPg37jktV1e9hVvl eD50YhpEqOFNxPYlo/ACc+sFDxSAEVwqnRzCjoQJOcri3t9EEK7mzvJMyFJz89IH Sc0kM53VUAaD4QoEng3/wtMcQQ4QJAGnCezZ5Cux5HVJXmCarTVt9N87HJmO2Qnw 4rj3lVoSc3B20sYCfeERlHsKA6JIp1+LH7qNYOdIyxdMLabQRUQ= =0qQL -----END PGP SIGNATURE----- Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux Pull arm64 fixes from Catalin Marinas: - keep the tail of an unaligned initrd reserved - adjust ftrace_make_call() to deal with the relative nature of PLTs * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: arm64/module: ftrace: deal with place relative nature of PLTs arm64: mm: Ensure tail of unaligned initrd is reserved
This commit is contained in:
commit
857e17c2ee
|
@ -103,10 +103,15 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
|
||||||
* to be revisited if support for multiple ftrace entry points
|
* to be revisited if support for multiple ftrace entry points
|
||||||
* is added in the future, but for now, the pr_err() below
|
* is added in the future, but for now, the pr_err() below
|
||||||
* deals with a theoretical issue only.
|
* deals with a theoretical issue only.
|
||||||
|
*
|
||||||
|
* Note that PLTs are place relative, and plt_entries_equal()
|
||||||
|
* checks whether they point to the same target. Here, we need
|
||||||
|
* to check if the actual opcodes are in fact identical,
|
||||||
|
* regardless of the offset in memory so use memcmp() instead.
|
||||||
*/
|
*/
|
||||||
trampoline = get_plt_entry(addr, mod->arch.ftrace_trampoline);
|
trampoline = get_plt_entry(addr, mod->arch.ftrace_trampoline);
|
||||||
if (!plt_entries_equal(mod->arch.ftrace_trampoline,
|
if (memcmp(mod->arch.ftrace_trampoline, &trampoline,
|
||||||
&trampoline)) {
|
sizeof(trampoline))) {
|
||||||
if (plt_entry_is_initialized(mod->arch.ftrace_trampoline)) {
|
if (plt_entry_is_initialized(mod->arch.ftrace_trampoline)) {
|
||||||
pr_err("ftrace: far branches to multiple entry points unsupported inside a single module\n");
|
pr_err("ftrace: far branches to multiple entry points unsupported inside a single module\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -363,7 +363,7 @@ void __init arm64_memblock_init(void)
|
||||||
* Otherwise, this is a no-op
|
* Otherwise, this is a no-op
|
||||||
*/
|
*/
|
||||||
u64 base = phys_initrd_start & PAGE_MASK;
|
u64 base = phys_initrd_start & PAGE_MASK;
|
||||||
u64 size = PAGE_ALIGN(phys_initrd_size);
|
u64 size = PAGE_ALIGN(phys_initrd_start + phys_initrd_size) - base;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can only add back the initrd memory if we don't end up
|
* We can only add back the initrd memory if we don't end up
|
||||||
|
|
Loading…
Reference in New Issue