06 Feb, 2020

1 commit

  • [ Upstream commit 0e31e3573f0cd94d7b821117db854187ffc85765 ]

    When building ARCH=um with CONFIG_UML_X86=y and CONFIG_64BIT=y we get
    the build errors:

    drivers/misc/lkdtm/bugs.c: In function ‘lkdtm_UNSET_SMEP’:
    drivers/misc/lkdtm/bugs.c:288:8: error: implicit declaration of function ‘native_read_cr4’ [-Werror=implicit-function-declaration]
    cr4 = native_read_cr4();
    ^~~~~~~~~~~~~~~
    drivers/misc/lkdtm/bugs.c:290:13: error: ‘X86_CR4_SMEP’ undeclared (first use in this function); did you mean ‘X86_FEATURE_SMEP’?
    if ((cr4 & X86_CR4_SMEP) != X86_CR4_SMEP) {
    ^~~~~~~~~~~~
    X86_FEATURE_SMEP
    drivers/misc/lkdtm/bugs.c:290:13: note: each undeclared identifier is reported only once for each function it appears in
    drivers/misc/lkdtm/bugs.c:297:2: error: implicit declaration of function ‘native_write_cr4’; did you mean ‘direct_write_cr4’? [-Werror=implicit-function-declaration]
    native_write_cr4(cr4);
    ^~~~~~~~~~~~~~~~
    direct_write_cr4

    So specify that this block of code should only build when
    CONFIG_X86_64=y *AND* CONFIG_UML is unset.

    Signed-off-by: Brendan Higgins
    Acked-by: Kees Cook
    Link: https://lore.kernel.org/r/20191213003522.66450-1-brendanhiggins@google.com
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Sasha Levin

    Brendan Higgins
     

03 Sep, 2019

1 commit


29 Aug, 2019

1 commit

  • lkdtm/bugs.c:94:2: error: format '%d' expects argument of type 'int', but argument 2 has type 'long unsigned int' [-Werror=format=]
    pr_info("Calling function with %d frame size to depth %d ...\n",
    ^
    THREAD_SIZE is defined as a unsigned long, cast CONFIG_FRAME_WARN to
    unsigned long as well.

    Fixes: 24cccab42c419 ("lkdtm/bugs: Adjust recursion test to avoid elision")
    Cc: stable
    Signed-off-by: Raul E Rangel
    Acked-by: Kees Cook
    Link: https://lore.kernel.org/r/20190827173619.170065-1-rrangel@chromium.org
    Signed-off-by: Greg Kroah-Hartman

    Raul E Rangel
     

20 Aug, 2019

1 commit

  • There are three paths through the kernel code exception logging:

    - BUG (no configurable printk message)
    - WARN_ON (no configurable printk message)
    - WARN (configurable printk message)

    LKDTM was not testing WARN_ON(). This is needed to evaluate the placement
    of the "cut here" line, which needs special handling in each of the
    three exceptions (and between architectures that implement instruction
    exceptions to implement the code exceptions).

    Signed-off-by: Kees Cook

    Kees Cook
     

13 Aug, 2019

1 commit


13 Jul, 2019

3 commits

  • Pull driver core and debugfs updates from Greg KH:
    "Here is the "big" driver core and debugfs changes for 5.3-rc1

    It's a lot of different patches, all across the tree due to some api
    changes and lots of debugfs cleanups.

    Other than the debugfs cleanups, in this set of changes we have:

    - bus iteration function cleanups

    - scripts/get_abi.pl tool to display and parse Documentation/ABI
    entries in a simple way

    - cleanups to Documenatation/ABI/ entries to make them parse easier
    due to typos and other minor things

    - default_attrs use for some ktype users

    - driver model documentation file conversions to .rst

    - compressed firmware file loading

    - deferred probe fixes

    All of these have been in linux-next for a while, with a bunch of
    merge issues that Stephen has been patient with me for"

    * tag 'driver-core-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (102 commits)
    debugfs: make error message a bit more verbose
    orangefs: fix build warning from debugfs cleanup patch
    ubifs: fix build warning after debugfs cleanup patch
    driver: core: Allow subsystems to continue deferring probe
    drivers: base: cacheinfo: Ensure cpu hotplug work is done before Intel RDT
    arch_topology: Remove error messages on out-of-memory conditions
    lib: notifier-error-inject: no need to check return value of debugfs_create functions
    swiotlb: no need to check return value of debugfs_create functions
    ceph: no need to check return value of debugfs_create functions
    sunrpc: no need to check return value of debugfs_create functions
    ubifs: no need to check return value of debugfs_create functions
    orangefs: no need to check return value of debugfs_create functions
    nfsd: no need to check return value of debugfs_create functions
    lib: 842: no need to check return value of debugfs_create functions
    debugfs: provide pr_fmt() macro
    debugfs: log errors when something goes wrong
    drivers: s390/cio: Fix compilation warning about const qualifiers
    drivers: Add generic helper to match by of_node
    driver_find_device: Unify the match function with class_find_device()
    bus_find_device: Unify the match callback with class_find_device
    ...

    Linus Torvalds
     
  • Merge updates from Andrew Morton:
    "Am experimenting with splitting MM up into identifiable subsystems
    perhaps with a view to gitifying it in complex ways. Also with more
    verbose "incoming" emails.

    Most of MM is here and a few other trees.

    Subsystems affected by this patch series:
    - hotfixes
    - iommu
    - scripts
    - arch/sh
    - ocfs2
    - mm:slab-generic
    - mm:slub
    - mm:kmemleak
    - mm:kasan
    - mm:cleanups
    - mm:debug
    - mm:pagecache
    - mm:swap
    - mm:memcg
    - mm:gup
    - mm:pagemap
    - mm:infrastructure
    - mm:vmalloc
    - mm:initialization
    - mm:pagealloc
    - mm:vmscan
    - mm:tools
    - mm:proc
    - mm:ras
    - mm:oom-kill

    hotfixes:
    mm: vmscan: scan anonymous pages on file refaults
    mm/nvdimm: add is_ioremap_addr and use that to check ioremap address
    mm/memcontrol: fix wrong statistics in memory.stat
    mm/z3fold.c: lock z3fold page before __SetPageMovable()
    nilfs2: do not use unexported cpu_to_le32()/le32_to_cpu() in uapi header
    MAINTAINERS: nilfs2: update email address

    iommu:
    include/linux/dmar.h: replace single-char identifiers in macros

    scripts:
    scripts/decode_stacktrace: match basepath using shell prefix operator, not regex
    scripts/decode_stacktrace: look for modules with .ko.debug extension
    scripts/spelling.txt: drop "sepc" from the misspelling list
    scripts/spelling.txt: add spelling fix for prohibited
    scripts/decode_stacktrace: Accept dash/underscore in modules
    scripts/spelling.txt: add more spellings to spelling.txt

    arch/sh:
    arch/sh/configs/sdk7786_defconfig: remove CONFIG_LOGFS
    sh: config: remove left-over BACKLIGHT_LCD_SUPPORT
    sh: prevent warnings when using iounmap

    ocfs2:
    fs: ocfs: fix spelling mistake "hearbeating" -> "heartbeat"
    ocfs2/dlm: use struct_size() helper
    ocfs2: add last unlock times in locking_state
    ocfs2: add locking filter debugfs file
    ocfs2: add first lock wait time in locking_state
    ocfs: no need to check return value of debugfs_create functions
    fs/ocfs2/dlmglue.c: unneeded variable: "status"
    ocfs2: use kmemdup rather than duplicating its implementation

    mm:slab-generic:
    Patch series "mm/slab: Improved sanity checking":
    mm/slab: validate cache membership under freelist hardening
    mm/slab: sanity-check page type when looking up cache
    lkdtm/heap: add tests for freelist hardening

    mm:slub:
    mm/slub.c: avoid double string traverse in kmem_cache_flags()
    slub: don't panic for memcg kmem cache creation failure

    mm:kmemleak:
    mm/kmemleak.c: fix check for softirq context
    mm/kmemleak.c: change error at _write when kmemleak is disabled
    docs: kmemleak: add more documentation details

    mm:kasan:
    mm/kasan: print frame description for stack bugs
    Patch series "Bitops instrumentation for KASAN", v5:
    lib/test_kasan: add bitops tests
    x86: use static_cpu_has in uaccess region to avoid instrumentation
    asm-generic, x86: add bitops instrumentation for KASAN
    Patch series "mm/kasan: Add object validation in ksize()", v3:
    mm/kasan: introduce __kasan_check_{read,write}
    mm/kasan: change kasan_check_{read,write} to return boolean
    lib/test_kasan: Add test for double-kzfree detection
    mm/slab: refactor common ksize KASAN logic into slab_common.c
    mm/kasan: add object validation in ksize()

    mm:cleanups:
    include/linux/pfn_t.h: remove pfn_t_to_virt()
    Patch series "remove ARCH_SELECT_MEMORY_MODEL where it has no effect":
    arm: remove ARCH_SELECT_MEMORY_MODEL
    s390: remove ARCH_SELECT_MEMORY_MODEL
    sparc: remove ARCH_SELECT_MEMORY_MODEL
    mm/gup.c: make follow_page_mask() static
    mm/memory.c: trivial clean up in insert_page()
    mm: make !CONFIG_HUGE_PAGE wrappers into static inlines
    include/linux/mm_types.h: ifdef struct vm_area_struct::swap_readahead_info
    mm: remove the account_page_dirtied export
    mm/page_isolation.c: change the prototype of undo_isolate_page_range()
    include/linux/vmpressure.h: use spinlock_t instead of struct spinlock
    mm: remove the exporting of totalram_pages
    include/linux/pagemap.h: document trylock_page() return value

    mm:debug:
    mm/failslab.c: by default, do not fail allocations with direct reclaim only
    Patch series "debug_pagealloc improvements":
    mm, debug_pagelloc: use static keys to enable debugging
    mm, page_alloc: more extensive free page checking with debug_pagealloc
    mm, debug_pagealloc: use a page type instead of page_ext flag

    mm:pagecache:
    Patch series "fix filler_t callback type mismatches", v2:
    mm/filemap.c: fix an overly long line in read_cache_page
    mm/filemap: don't cast ->readpage to filler_t for do_read_cache_page
    jffs2: pass the correct prototype to read_cache_page
    9p: pass the correct prototype to read_cache_page
    mm/filemap.c: correct the comment about VM_FAULT_RETRY

    mm:swap:
    mm, swap: fix race between swapoff and some swap operations
    mm/swap_state.c: simplify total_swapcache_pages() with get_swap_device()
    mm, swap: use rbtree for swap_extent
    mm/mincore.c: fix race between swapoff and mincore

    mm:memcg:
    memcg, oom: no oom-kill for __GFP_RETRY_MAYFAIL
    memcg, fsnotify: no oom-kill for remote memcg charging
    mm, memcg: introduce memory.events.local
    mm: memcontrol: dump memory.stat during cgroup OOM
    Patch series "mm: reparent slab memory on cgroup removal", v7:
    mm: memcg/slab: postpone kmem_cache memcg pointer initialization to memcg_link_cache()
    mm: memcg/slab: rename slab delayed deactivation functions and fields
    mm: memcg/slab: generalize postponed non-root kmem_cache deactivation
    mm: memcg/slab: introduce __memcg_kmem_uncharge_memcg()
    mm: memcg/slab: unify SLAB and SLUB page accounting
    mm: memcg/slab: don't check the dying flag on kmem_cache creation
    mm: memcg/slab: synchronize access to kmem_cache dying flag using a spinlock
    mm: memcg/slab: rework non-root kmem_cache lifecycle management
    mm: memcg/slab: stop setting page->mem_cgroup pointer for slab pages
    mm: memcg/slab: reparent memcg kmem_caches on cgroup removal
    mm, memcg: add a memcg_slabinfo debugfs file

    mm:gup:
    Patch series "switch the remaining architectures to use generic GUP", v4:
    mm: use untagged_addr() for get_user_pages_fast addresses
    mm: simplify gup_fast_permitted
    mm: lift the x86_32 PAE version of gup_get_pte to common code
    MIPS: use the generic get_user_pages_fast code
    sh: add the missing pud_page definition
    sh: use the generic get_user_pages_fast code
    sparc64: add the missing pgd_page definition
    sparc64: define untagged_addr()
    sparc64: use the generic get_user_pages_fast code
    mm: rename CONFIG_HAVE_GENERIC_GUP to CONFIG_HAVE_FAST_GUP
    mm: reorder code blocks in gup.c
    mm: consolidate the get_user_pages* implementations
    mm: validate get_user_pages_fast flags
    mm: move the powerpc hugepd code to mm/gup.c
    mm: switch gup_hugepte to use try_get_compound_head
    mm: mark the page referenced in gup_hugepte
    mm/gup: speed up check_and_migrate_cma_pages() on huge page
    mm/gup.c: remove some BUG_ONs from get_gate_page()
    mm/gup.c: mark undo_dev_pagemap as __maybe_unused

    mm:pagemap:
    asm-generic, x86: introduce generic pte_{alloc,free}_one[_kernel]
    alpha: switch to generic version of pte allocation
    arm: switch to generic version of pte allocation
    arm64: switch to generic version of pte allocation
    csky: switch to generic version of pte allocation
    m68k: sun3: switch to generic version of pte allocation
    mips: switch to generic version of pte allocation
    nds32: switch to generic version of pte allocation
    nios2: switch to generic version of pte allocation
    parisc: switch to generic version of pte allocation
    riscv: switch to generic version of pte allocation
    um: switch to generic version of pte allocation
    unicore32: switch to generic version of pte allocation
    mm/pgtable: drop pgtable_t variable from pte_fn_t functions
    mm/memory.c: fail when offset == num in first check of __vm_map_pages()

    mm:infrastructure:
    mm/mmu_notifier: use hlist_add_head_rcu()

    mm:vmalloc:
    Patch series "Some cleanups for the KVA/vmalloc", v5:
    mm/vmalloc.c: remove "node" argument
    mm/vmalloc.c: preload a CPU with one object for split purpose
    mm/vmalloc.c: get rid of one single unlink_va() when merge
    mm/vmalloc.c: switch to WARN_ON() and move it under unlink_va()
    mm/vmalloc.c: spelling> s/informaion/information/

    mm:initialization:
    mm/large system hash: use vmalloc for size > MAX_ORDER when !hashdist
    mm/large system hash: clear hashdist when only one node with memory is booted

    mm:pagealloc:
    arm64: move jump_label_init() before parse_early_param()
    Patch series "add init_on_alloc/init_on_free boot options", v10:
    mm: security: introduce init_on_alloc=1 and init_on_free=1 boot options
    mm: init: report memory auto-initialization features at boot time

    mm:vmscan:
    mm: vmscan: remove double slab pressure by inc'ing sc->nr_scanned
    mm: vmscan: correct some vmscan counters for THP swapout

    mm:tools:
    tools/vm/slabinfo: order command line options
    tools/vm/slabinfo: add partial slab listing to -X
    tools/vm/slabinfo: add option to sort by partial slabs
    tools/vm/slabinfo: add sorting info to help menu

    mm:proc:
    proc: use down_read_killable mmap_sem for /proc/pid/maps
    proc: use down_read_killable mmap_sem for /proc/pid/smaps_rollup
    proc: use down_read_killable mmap_sem for /proc/pid/pagemap
    proc: use down_read_killable mmap_sem for /proc/pid/clear_refs
    proc: use down_read_killable mmap_sem for /proc/pid/map_files
    mm: use down_read_killable for locking mmap_sem in access_remote_vm
    mm: smaps: split PSS into components
    mm: vmalloc: show number of vmalloc pages in /proc/meminfo

    mm:ras:
    mm/memory-failure.c: clarify error message

    mm:oom-kill:
    mm: memcontrol: use CSS_TASK_ITER_PROCS at mem_cgroup_scan_tasks()
    mm, oom: refactor dump_tasks for memcg OOMs
    mm, oom: remove redundant task_in_mem_cgroup() check
    oom: decouple mems_allowed from oom_unkillable_task
    mm/oom_kill.c: remove redundant OOM score normalization in select_bad_process()"

    * akpm: (147 commits)
    mm/oom_kill.c: remove redundant OOM score normalization in select_bad_process()
    oom: decouple mems_allowed from oom_unkillable_task
    mm, oom: remove redundant task_in_mem_cgroup() check
    mm, oom: refactor dump_tasks for memcg OOMs
    mm: memcontrol: use CSS_TASK_ITER_PROCS at mem_cgroup_scan_tasks()
    mm/memory-failure.c: clarify error message
    mm: vmalloc: show number of vmalloc pages in /proc/meminfo
    mm: smaps: split PSS into components
    mm: use down_read_killable for locking mmap_sem in access_remote_vm
    proc: use down_read_killable mmap_sem for /proc/pid/map_files
    proc: use down_read_killable mmap_sem for /proc/pid/clear_refs
    proc: use down_read_killable mmap_sem for /proc/pid/pagemap
    proc: use down_read_killable mmap_sem for /proc/pid/smaps_rollup
    proc: use down_read_killable mmap_sem for /proc/pid/maps
    tools/vm/slabinfo: add sorting info to help menu
    tools/vm/slabinfo: add option to sort by partial slabs
    tools/vm/slabinfo: add partial slab listing to -X
    tools/vm/slabinfo: order command line options
    mm: vmscan: correct some vmscan counters for THP swapout
    mm: vmscan: remove double slab pressure by inc'ing sc->nr_scanned
    ...

    Linus Torvalds
     
  • This adds tests for double free and cross-cache freeing, which should both
    be caught by CONFIG_SLAB_FREELIST_HARDENED.

    Link: http://lkml.kernel.org/r/20190530045017.15252-4-keescook@chromium.org
    Signed-off-by: Kees Cook
    Cc: Alexander Popov
    Cc: Alexander Potapenko
    Cc: Christoph Lameter
    Cc: David Rientjes
    Cc: Greg Kroah-Hartman
    Cc: Joonsoo Kim
    Cc: Matthew Wilcox
    Cc: Pekka Enberg
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kees Cook
     

12 Jul, 2019

1 commit

  • Pull char / misc driver updates from Greg KH:
    "Here is the "large" pull request for char and misc and other assorted
    smaller driver subsystems for 5.3-rc1.

    It seems that this tree is becoming the funnel point of lots of
    smaller driver subsystems, which is fine for me, but that's why it is
    getting larger over time and does not just contain stuff under
    drivers/char/ and drivers/misc.

    Lots of small updates all over the place here from different driver
    subsystems:
    - habana driver updates
    - coresight driver updates
    - documentation file movements and updates
    - Android binder fixes and updates
    - extcon driver updates
    - google firmware driver updates
    - fsi driver updates
    - smaller misc and char driver updates
    - soundwire driver updates
    - nvmem driver updates
    - w1 driver fixes

    All of these have been in linux-next for a while with no reported
    issues"

    * tag 'char-misc-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (188 commits)
    coresight: Do not default to CPU0 for missing CPU phandle
    dt-bindings: coresight: Change CPU phandle to required property
    ocxl: Allow contexts to be attached with a NULL mm
    fsi: sbefifo: Don't fail operations when in SBE IPL state
    coresight: tmc: Smatch: Fix potential NULL pointer dereference
    coresight: etm3x: Smatch: Fix potential NULL pointer dereference
    coresight: Potential uninitialized variable in probe()
    coresight: etb10: Do not call smp_processor_id from preemptible
    coresight: tmc-etf: Do not call smp_processor_id from preemptible
    coresight: tmc-etr: alloc_perf_buf: Do not call smp_processor_id from preemptible
    coresight: tmc-etr: Do not call smp_processor_id() from preemptible
    docs: misc-devices: convert files without extension to ReST
    fpga: dfl: fme: align PR buffer size per PR datawidth
    fpga: dfl: fme: remove copy_to_user() in ioctl for PR
    fpga: dfl-fme-mgr: fix FME_PR_INTFC_ID register address.
    intel_th: msu: Start read iterator from a non-empty window
    intel_th: msu: Split sgt array and pointer in multiwindow mode
    intel_th: msu: Support multipage blocks
    intel_th: pci: Add Ice Lake NNPI support
    intel_th: msu: Fix single mode with disabled IOMMU
    ...

    Linus Torvalds
     

10 Jul, 2019

1 commit

  • Pull Documentation updates from Jonathan Corbet:
    "It's been a relatively busy cycle for docs:

    - A fair pile of RST conversions, many from Mauro. These create more
    than the usual number of simple but annoying merge conflicts with
    other trees, unfortunately. He has a lot more of these waiting on
    the wings that, I think, will go to you directly later on.

    - A new document on how to use merges and rebases in kernel repos,
    and one on Spectre vulnerabilities.

    - Various improvements to the build system, including automatic
    markup of function() references because some people, for reasons I
    will never understand, were of the opinion that
    :c:func:``function()`` is unattractive and not fun to type.

    - We now recommend using sphinx 1.7, but still support back to 1.4.

    - Lots of smaller improvements, warning fixes, typo fixes, etc"

    * tag 'docs-5.3' of git://git.lwn.net/linux: (129 commits)
    docs: automarkup.py: ignore exceptions when seeking for xrefs
    docs: Move binderfs to admin-guide
    Disable Sphinx SmartyPants in HTML output
    doc: RCU callback locks need only _bh, not necessarily _irq
    docs: format kernel-parameters -- as code
    Doc : doc-guide : Fix a typo
    platform: x86: get rid of a non-existent document
    Add the RCU docs to the core-api manual
    Documentation: RCU: Add TOC tree hooks
    Documentation: RCU: Rename txt files to rst
    Documentation: RCU: Convert RCU UP systems to reST
    Documentation: RCU: Convert RCU linked list to reST
    Documentation: RCU: Convert RCU basic concepts to reST
    docs: filesystems: Remove uneeded .rst extension on toctables
    scripts/sphinx-pre-install: fix out-of-tree build
    docs: zh_CN: submitting-drivers.rst: Remove a duplicated Documentation/
    Documentation: PGP: update for newer HW devices
    Documentation: Add section about CPU vulnerabilities for Spectre
    Documentation: platform: Delete x86-laptop-drivers.txt
    docs: Note that :c:func: should no longer be used
    ...

    Linus Torvalds
     

09 Jul, 2019

1 commit

  • …iederm/user-namespace

    Pull force_sig() argument change from Eric Biederman:
    "A source of error over the years has been that force_sig has taken a
    task parameter when it is only safe to use force_sig with the current
    task.

    The force_sig function is built for delivering synchronous signals
    such as SIGSEGV where the userspace application caused a synchronous
    fault (such as a page fault) and the kernel responded with a signal.

    Because the name force_sig does not make this clear, and because the
    force_sig takes a task parameter the function force_sig has been
    abused for sending other kinds of signals over the years. Slowly those
    have been fixed when the oopses have been tracked down.

    This set of changes fixes the remaining abusers of force_sig and
    carefully rips out the task parameter from force_sig and friends
    making this kind of error almost impossible in the future"

    * 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (27 commits)
    signal/x86: Move tsk inside of CONFIG_MEMORY_FAILURE in do_sigbus
    signal: Remove the signal number and task parameters from force_sig_info
    signal: Factor force_sig_info_to_task out of force_sig_info
    signal: Generate the siginfo in force_sig
    signal: Move the computation of force into send_signal and correct it.
    signal: Properly set TRACE_SIGNAL_LOSE_INFO in __send_signal
    signal: Remove the task parameter from force_sig_fault
    signal: Use force_sig_fault_to_task for the two calls that don't deliver to current
    signal: Explicitly call force_sig_fault on current
    signal/unicore32: Remove tsk parameter from __do_user_fault
    signal/arm: Remove tsk parameter from __do_user_fault
    signal/arm: Remove tsk parameter from ptrace_break
    signal/nds32: Remove tsk parameter from send_sigtrap
    signal/riscv: Remove tsk parameter from do_trap
    signal/sh: Remove tsk parameter from force_sig_info_fault
    signal/um: Remove task parameter from send_sigtrap
    signal/x86: Remove task parameter from send_sigtrap
    signal: Remove task parameter from force_sig_mceerr
    signal: Remove task parameter from force_sig
    signal: Remove task parameter from force_sigsegv
    ...

    Linus Torvalds
     

23 Jun, 2019

2 commits

  • This adds an x86-specific test for pinned cr4 bits. A successful test
    will validate pinning and check the ROP-style call-middle-of-function
    defense, if needed. For example, in the case of native_write_cr4()
    looking like this:

    ffffffff8171bce0 :
    ffffffff8171bce0: 48 8b 35 79 46 f2 00 mov 0xf24679(%rip),%rsi
    ffffffff8171bce7: 48 09 f7 or %rsi,%rdi
    ffffffff8171bcea: 0f 22 e7 mov %rdi,%cr4
    ...
    ffffffff8171bd5a: c3 retq

    The UNSET_SMEP test will jump to ffffffff8171bcea (the mov to cr4)
    instead of ffffffff8171bce0 (native_write_cr4() entry) to simulate a
    direct-call bypass attempt.

    Expected successful results:

    # echo UNSET_SMEP > /sys/kernel/debug/provoke-crash/DIRECT
    # dmesg
    [ 79.594433] lkdtm: Performing direct entry UNSET_SMEP
    [ 79.596459] lkdtm: trying to clear SMEP normally
    [ 79.598406] lkdtm: ok: SMEP did not get cleared
    [ 79.599981] lkdtm: trying to clear SMEP with call gadget
    [ 79.601810] ------------[ cut here ]------------
    [ 79.603421] Attempt to unpin cr4 bits: 100000; bypass attack?!
    ...
    [ 79.650170] ---[ end trace 2452ca0f6126242e ]---
    [ 79.650937] lkdtm: ok: SMEP removal was reverted

    Signed-off-by: Kees Cook
    Signed-off-by: Greg Kroah-Hartman

    Kees Cook
     
  • The variable ret is being initialized with the value -EINVAL however
    this value is never read and ret is being re-assigned later on. Hence
    the initialization is redundant and can be removed.

    Addresses-Coverity: ("Unused value")
    Signed-off-by: Colin Ian King
    Acked-by: Kees Cook
    Signed-off-by: Greg Kroah-Hartman

    Colin Ian King
     

15 Jun, 2019

1 commit

  • The conversion is actually:
    - add blank lines and identation in order to identify paragraphs;
    - fix tables markups;
    - add some lists markups;
    - mark literal blocks;
    - adjust title markups.

    At its new index.rst, let's add a :orphan: while this is not linked to
    the main index.rst file, in order to avoid build warnings.

    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Federico Vaga
    Signed-off-by: Jonathan Corbet

    Mauro Carvalho Chehab
     

12 Jun, 2019

1 commit


09 Jun, 2019

2 commits

  • We want the char/misc driver fixes in here as well.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • Pull char/misc driver fixes from Greg KH:
    "Here are some small char and misc driver fixes for 5.2-rc4 to resolve
    a number of reported issues.

    The most "notable" one here is the kernel headers in proc^Wsysfs
    fixes. Those changes move the header file info into sysfs and fixes
    the build issues that you reported.

    Other than that, a bunch of small habanalabs driver fixes, some fpga
    driver fixes, and a few other tiny driver fixes.

    All of these have been in linux-next for a while with no reported
    issues"

    * tag 'char-misc-5.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
    habanalabs: Read upper bits of trace buffer from RWPHI
    habanalabs: Fix virtual address access via debugfs for 2MB pages
    fpga: zynqmp-fpga: Correctly handle error pointer
    habanalabs: fix bug in checking huge page optimization
    habanalabs: Avoid using a non-initialized MMU cache mutex
    habanalabs: fix debugfs code
    uapi/habanalabs: add opcode for enable/disable device debug mode
    habanalabs: halt debug engines on user process close
    test_firmware: Use correct snprintf() limit
    genwqe: Prevent an integer overflow in the ioctl
    parport: Fix mem leak in parport_register_dev_model
    fpga: dfl: expand minor range when registering chrdev region
    fpga: dfl: Add lockdep classes for pdata->lock
    fpga: dfl: afu: Pass the correct device to dma_mapping_error()
    fpga: stratix10-soc: fix use-after-free on s10_init()
    w1: ds2408: Fix typo after 49695ac46861 (reset on output_write retry with readback)
    kheaders: Do not regenerate archive if config is not changed
    kheaders: Move from proc to sysfs
    lkdtm/bugs: Adjust recursion test to avoid elision
    lkdtm/usercopy: Moves the KERNEL_DS test to non-canonical

    Linus Torvalds
     

31 May, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation either version 2 of the license or at
    your option any later version this program is distributed in the
    hope that it will be useful but without any warranty without even
    the implied warranty of merchantability or fitness for a particular
    purpose see the gnu general public license for more details you
    should have received a copy of the gnu general public license along
    with this program if not write to the free software foundation inc
    59 temple place suite 330 boston ma 02111 1307 usa

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 1334 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Richard Fontana
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190527070033.113240726@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

27 May, 2019

1 commit


25 May, 2019

1 commit

  • With CONFIG_LKDTM=y and make OBJCOPY=llvm-objcopy, llvm-objcopy errors:
    llvm-objcopy: error: --set-section-flags=.text conflicts with
    --rename-section=.text=.rodata

    Rather than support setting flags then renaming sections vs renaming
    then setting flags, it's simpler to just change both at the same time
    via --rename-section. Adding the load flag is required for GNU objcopy
    to mark .rodata Type as PROGBITS after the rename.

    This can be verified with:
    $ readelf -S drivers/misc/lkdtm/rodata_objcopy.o
    ...
    Section Headers:
    [Nr] Name Type Address Offset
    Size EntSize Flags Link Info Align
    ...
    [ 1] .rodata PROGBITS 0000000000000000 00000040
    0000000000000004 0000000000000000 A 0 0 4
    ...

    Which shows that .text is now renamed .rodata, the alloc flag A is set,
    the type is PROGBITS, and the section is not flagged as writeable W.

    Cc: stable@vger.kernel.org
    Link: https://sourceware.org/bugzilla/show_bug.cgi?id=24554
    Link: https://github.com/ClangBuiltLinux/linux/issues/448
    Reported-by: Nathan Chancellor
    Suggested-by: Alan Modra
    Suggested-by: Jordan Rupprect
    Suggested-by: Kees Cook
    Acked-by: Kees Cook
    Reviewed-by: Nathan Chancellor
    Signed-off-by: Nick Desaulniers
    Signed-off-by: Greg Kroah-Hartman

    Nick Desaulniers
     

08 Apr, 2019

2 commits

  • While I was able to trick gcc into keeping a pathological recursion,
    Clang was not so easily fooled. Instead, switch to using "volatile" and
    side-effects to keep the stack variable allocated and to run the function.
    Additionally renames "OVERFLOW" to "EXHAUST_STACK" to better describe the
    test.

    Signed-off-by: Kees Cook

    Kees Cook
     
  • The prior implementation of the KERNEL_DS fault checking would work on
    any unmapped kernel address, but this was narrowed to the non-canonical
    range instead. This adjusts the LKDTM test to match.

    Fixes: 00c42373d397 ("x86-64: add warning for non-canonical user access address dereferences")
    Signed-off-by: Kees Cook

    Kees Cook
     

18 Jan, 2019

1 commit

  • Change snprintf to scnprintf. There are generally two cases where using
    snprintf causes problems.

    1) Uses of size += snprintf(buf, SIZE - size, fmt, ...)
    In this case, if snprintf would have written more characters than what the
    buffer size (SIZE) is, then size will end up larger than SIZE. In later
    uses of snprintf, SIZE - size will result in a negative number, leading
    to problems. Note that size might already be too large by using
    size = snprintf before the code reaches a case of size += snprintf.

    2) If size is ultimately used as a length parameter for a copy back to user
    space, then it will potentially allow for a buffer overflow and information
    disclosure when size is greater than SIZE. When the size is used to index
    the buffer directly, we can have memory corruption. This also means when
    size = snprintf... is used, it may also cause problems since size may become
    large. Copying to userspace is mitigated by the HARDENED_USERCOPY kernel
    configuration.

    The solution to these issues is to use scnprintf which returns the number of
    characters actually written to the buffer, so the size variable will never
    exceed SIZE.

    Signed-off-by: Silvio Cesare
    Cc: Dan Carpenter
    Cc: Will Deacon
    Cc: Greg KH
    Acked-by: Kees Cook
    Signed-off-by: Willy Tarreau
    Signed-off-by: Greg Kroah-Hartman

    Silvio Cesare
     

10 Jan, 2019

3 commits

  • Introduce lkdtm tests for NULL pointer dereference: check access or exec
    at NULL address, since these errors tend to be reported differently from
    the general fault error text. For example from x86:

    pr_alert("BUG: unable to handle kernel %s at %px\n",
    address < PAGE_SIZE ? "NULL pointer dereference" : "paging request",
    (void *)address);

    Signed-off-by: Christophe Leroy
    Signed-off-by: Kees Cook

    Christophe Leroy
     
  • Today, when doing a lkdtm test before the readiness of the
    random generator, (ptrval) is printed instead of the address
    at which it perform the fault:

    [ 1597.337030] lkdtm: Performing direct entry EXEC_USERSPACE
    [ 1597.337142] lkdtm: attempting ok execution at (ptrval)
    [ 1597.337398] lkdtm: attempting bad execution at (ptrval)
    [ 1597.337460] kernel tried to execute user page (77858000) -exploit attempt? (uid: 0)
    [ 1597.344769] Unable to handle kernel paging request for instruction fetch
    [ 1597.351392] Faulting instruction address: 0x77858000
    [ 1597.356312] Oops: Kernel access of bad area, sig: 11 [#1]

    If the lkdtm test is done later on, it prints an hashed address.

    In both cases this is pointless. The purpose of the test is to
    ensure the kernel generates an Oops at the expected address,
    so real addresses needs to be printed. This patch fixes that.

    Signed-off-by: Christophe Leroy
    Signed-off-by: Kees Cook

    Christophe Leroy
     
  • After the transition to kprobes, symbols are resolved at runtime. This
    means there is no need to have all the Kconfig and header logic to
    avoid build failures. This also paves the way to having arbitrary test
    locations.

    Reported-by: Christophe Leroy
    Signed-off-by: Kees Cook

    Kees Cook
     

02 Nov, 2018

1 commit

  • Pull stackleak gcc plugin from Kees Cook:
    "Please pull this new GCC plugin, stackleak, for v4.20-rc1. This plugin
    was ported from grsecurity by Alexander Popov. It provides efficient
    stack content poisoning at syscall exit. This creates a defense
    against at least two classes of flaws:

    - Uninitialized stack usage. (We continue to work on improving the
    compiler to do this in other ways: e.g. unconditional zero init was
    proposed to GCC and Clang, and more plugin work has started too).

    - Stack content exposure. By greatly reducing the lifetime of valid
    stack contents, exposures via either direct read bugs or unknown
    cache side-channels become much more difficult to exploit. This
    complements the existing buddy and heap poisoning options, but
    provides the coverage for stacks.

    The x86 hooks are included in this series (which have been reviewed by
    Ingo, Dave Hansen, and Thomas Gleixner). The arm64 hooks have already
    been merged through the arm64 tree (written by Laura Abbott and
    reviewed by Mark Rutland and Will Deacon).

    With VLAs having been removed this release, there is no need for
    alloca() protection, so it has been removed from the plugin"

    * tag 'stackleak-v4.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
    arm64: Drop unneeded stackleak_check_alloca()
    stackleak: Allow runtime disabling of kernel stack erasing
    doc: self-protection: Add information about STACKLEAK feature
    fs/proc: Show STACKLEAK metrics in the /proc file system
    lkdtm: Add a test for STACKLEAK
    gcc-plugins: Add STACKLEAK plugin for tracking the kernel stack
    x86/entry: Add STACKLEAK erasing the kernel stack at the end of syscalls

    Linus Torvalds
     

27 Oct, 2018

1 commit

  • Pull char/misc driver updates from Greg KH:
    "Here is the big set of char/misc patches for 4.20-rc1.

    Loads of things here, we have new code in all of these driver
    subsystems:
    - fpga
    - stm
    - extcon
    - nvmem
    - eeprom
    - hyper-v
    - gsmi
    - coresight
    - thunderbolt
    - vmw_balloon
    - goldfish
    - soundwire
    along with lots of fixes and minor changes to other small drivers.

    All of these have been in linux-next for a while with no reported
    issues"

    * tag 'char-misc-4.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (245 commits)
    Documentation/security-bugs: Clarify treatment of embargoed information
    lib: Fix ia64 bootloader linkage
    MAINTAINERS: Clarify UIO vs UIOVEC maintainer
    docs/uio: fix a grammar nitpick
    docs: fpga: document programming fpgas using regions
    fpga: add devm_fpga_region_create
    fpga: bridge: add devm_fpga_bridge_create
    fpga: mgr: add devm_fpga_mgr_create
    hv_balloon: Replace spin_is_locked() with lockdep
    sgi-xp: Replace spin_is_locked() with lockdep
    eeprom: New ee1004 driver for DDR4 memory
    eeprom: at25: remove unneeded 'at25_remove'
    w1: IAD Register is yet readable trough iad sys file. Fix snprintf (%u for unsigned, count for max size).
    misc: mic: scif: remove set but not used variables 'src_dma_addr, dst_dma_addr'
    misc: mic: fix a DMA pool free failure
    platform: goldfish: pipe: Add a blank line to separate varibles and code
    platform: goldfish: pipe: Remove redundant casting
    platform: goldfish: pipe: Call misc_deregister if init fails
    platform: goldfish: pipe: Move the file-scope goldfish_pipe_dev variable into the driver state
    platform: goldfish: pipe: Move the file-scope goldfish_pipe_miscdev variable into the driver state
    ...

    Linus Torvalds
     

12 Sep, 2018

1 commit


05 Sep, 2018

1 commit

  • Introduce an lkdtm test for the STACKLEAK feature: check that the
    current task stack is properly erased (filled with STACKLEAK_POISON).

    Signed-off-by: Alexander Popov
    Signed-off-by: Tycho Andersen
    Tested-by: Laura Abbott
    Signed-off-by: Kees Cook

    Alexander Popov
     

03 Sep, 2018

1 commit

  • Test whether the kernel WARN()s when, under KERNEL_DS, a bad kernel pointer
    is used as "userspace" pointer. Should normally be used in "DIRECT" mode.

    Signed-off-by: Jann Horn
    Signed-off-by: Thomas Gleixner
    Tested-by: Kees Cook
    Acked-by: Kees Cook
    Cc: Andy Lutomirski
    Cc: kernel-hardening@lists.openwall.com
    Cc: dvyukov@google.com
    Cc: Masami Hiramatsu
    Cc: "Naveen N. Rao"
    Cc: Anil S Keshavamurthy
    Cc: "David S. Miller"
    Cc: Alexander Viro
    Cc: linux-fsdevel@vger.kernel.org
    Cc: Borislav Petkov
    Link: https://lkml.kernel.org/r/20180828201421.157735-8-jannh@google.com

    Jann Horn
     

07 Mar, 2018

2 commits