lkml.org 
[lkml]   [2020]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v11 00/11] x86: PIE support to extend KASLR randomization
    On Thu, Feb 27, 2020 at 04:00:45PM -0800, Thomas Garnier wrote:
    > Minor changes based on feedback and rebase from v10.
    >
    > Splitting the previous serie in two. This part contains assembly code
    > changes required for PIE but without any direct dependencies with the
    > rest of the patchset.
    >
    > Note: Using objtool to detect non-compliant PIE relocations is not yet
    > possible as this patchset only includes the simplest PIE changes.
    > Additional changes are needed in kvm, xen and percpu code.
    >
    > Changes:
    > - patch v11 (assembly);
    > - Fix comments on x86/entry/64.
    > - Remove KASLR PIE explanation on all commits.
    > - Add note on objtool not being possible at this stage of the patchset.

    This moves us closer to PIE in a clean first step. I think these patches
    look good to go, and unblock the work in kvm, xen, and percpu code. Can
    one of the x86 maintainers pick this series up?

    Thanks!

    -Kees

    > - patch v10 (assembly):
    > - Swap rax for rdx on entry/64 changes based on feedback.
    > - Addressed feedback from Borislav Petkov on boot, paravirt, alternatives
    > and globally.
    > - Rebased the patchset and ensure it works with large kaslr (not included).
    > - patch v9 (assembly):
    > - Moved to relative reference for sync_core based on feedback.
    > - x86/crypto had multiple algorithms deleted, removed PIE changes to them.
    > - fix typo on comment end line.
    > - patch v8 (assembly):
    > - Fix issues in crypto changes (thanks to Eric Biggers).
    > - Remove unnecessary jump table change.
    > - Change author and signoff to chromium email address.
    > - patch v7 (assembly):
    > - Split patchset and reorder changes.
    > - patch v6:
    > - Rebase on latest changes in jump tables and crypto.
    > - Fix wording on couple commits.
    > - Revisit checkpatch warnings.
    > - Moving to @chromium.org.
    > - patch v5:
    > - Adapt new crypto modules for PIE.
    > - Improve per-cpu commit message.
    > - Fix xen 32-bit build error with .quad.
    > - Remove extra code for ftrace.
    > - patch v4:
    > - Simplify early boot by removing global variables.
    > - Modify the mcount location script for __mcount_loc intead of the address
    > read in the ftrace implementation.
    > - Edit commit description to explain better where the kernel can be located.
    > - Streamlined the testing done on each patch proposal. Always testing
    > hibernation, suspend, ftrace and kprobe to ensure no regressions.
    > - patch v3:
    > - Update on message to describe longer term PIE goal.
    > - Minor change on ftrace if condition.
    > - Changed code using xchgq.
    > - patch v2:
    > - Adapt patch to work post KPTI and compiler changes
    > - Redo all performance testing with latest configs and compilers
    > - Simplify mov macro on PIE (MOVABS now)
    > - Reduce GOT footprint
    > - patch v1:
    > - Simplify ftrace implementation.
    > - Use gcc mstack-protector-guard-reg=%gs with PIE when possible.
    > - rfc v3:
    > - Use --emit-relocs instead of -pie to reduce dynamic relocation space on
    > mapped memory. It also simplifies the relocation process.
    > - Move the start the module section next to the kernel. Remove the need for
    > -mcmodel=large on modules. Extends module space from 1 to 2G maximum.
    > - Support for XEN PVH as 32-bit relocations can be ignored with
    > --emit-relocs.
    > - Support for GOT relocations previously done automatically with -pie.
    > - Remove need for dynamic PLT in modules.
    > - Support dymamic GOT for modules.
    > - rfc v2:
    > - Add support for global stack cookie while compiler default to fs without
    > mcmodel=kernel
    > - Change patch 7 to correctly jump out of the identity mapping on kexec load
    > preserve.
    >
    > These patches make some of the changes necessary to build the kernel as
    > Position Independent Executable (PIE) on x86_64. Another patchset will
    > add the PIE option and larger architecture changes. PIE allows the kernel to be
    > placed below the 0xffffffff80000000 increasing the range of KASLR.
    >
    > The patches:
    > - 1, 3-11: Change in assembly code to be PIE compliant.
    > - 2: Add a new _ASM_MOVABS macro to fetch a symbol address generically.
    >
    > diffstat:
    > crypto/aegis128-aesni-asm.S | 6 +-
    > crypto/aesni-intel_asm.S | 8 +--
    > crypto/aesni-intel_avx-x86_64.S | 3 -
    > crypto/camellia-aesni-avx-asm_64.S | 42 +++++++--------
    > crypto/camellia-aesni-avx2-asm_64.S | 44 ++++++++--------
    > crypto/camellia-x86_64-asm_64.S | 8 +--
    > crypto/cast5-avx-x86_64-asm_64.S | 50 ++++++++++--------
    > crypto/cast6-avx-x86_64-asm_64.S | 44 +++++++++-------
    > crypto/des3_ede-asm_64.S | 96 ++++++++++++++++++++++++------------
    > crypto/ghash-clmulni-intel_asm.S | 4 -
    > crypto/glue_helper-asm-avx.S | 4 -
    > crypto/glue_helper-asm-avx2.S | 6 +-
    > crypto/sha256-avx2-asm.S | 18 ++++--
    > entry/entry_64.S | 16 ++++--
    > include/asm/alternative.h | 6 +-
    > include/asm/asm.h | 1
    > include/asm/bug.h | 2
    > include/asm/paravirt_types.h | 32 ++++++++++--
    > include/asm/pm-trace.h | 2
    > include/asm/processor.h | 6 +-
    > kernel/acpi/wakeup_64.S | 31 ++++++-----
    > kernel/head_64.S | 15 +++--
    > kernel/relocate_kernel_64.S | 2
    > power/hibernate_asm_64.S | 4 -
    > 24 files changed, 268 insertions(+), 182 deletions(-)
    >
    > Patchset is based on next-20200227.
    >
    >

    --
    Kees Cook

    \
     
     \ /
      Last update: 2020-03-03 06:02    [W:4.426 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site