1. 15 Jul, 2019 15 commits
    • Jann Horn's avatar
      LSM: SafeSetID: fix use of literal -1 in capable hook · e10337da
      Jann Horn authored
      The capable() hook returns an error number. -EPERM is actually the same as
      -1, so this doesn't make a difference in behavior.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      e10337da
    • Jann Horn's avatar
      LSM: SafeSetID: verify transitive constrainedness · 4f72123d
      Jann Horn authored
      Someone might write a ruleset like the following, expecting that it
      securely constrains UID 1 to UIDs 1, 2 and 3:
      
          1:2
          1:3
      
      However, because no constraints are applied to UIDs 2 and 3, an attacker
      with UID 1 can simply first switch to UID 2, then switch to any UID from
      there. The secure way to write this ruleset would be:
      
          1:2
          1:3
          2:2
          3:3
      
      , which uses "transition to self" as a way to inhibit the default-allow
      policy without allowing anything specific.
      
      This is somewhat unintuitive. To make sure that policy authors don't
      accidentally write insecure policies because of this, let the kernel verify
      that a new ruleset does not contain any entries that are constrained, but
      transitively unconstrained.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      4f72123d
    • Jann Horn's avatar
      LSM: SafeSetID: add read handler · fbd9acb2
      Jann Horn authored
      For debugging a running system, it is very helpful to be able to see what
      policy the system is using. Add a read handler that can dump out a copy of
      the loaded policy.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      fbd9acb2
    • Jann Horn's avatar
      LSM: SafeSetID: rewrite userspace API to atomic updates · 03638e62
      Jann Horn authored
      The current API of the SafeSetID LSM uses one write() per rule, and applies
      each written rule instantly. This has several downsides:
      
       - While a policy is being loaded, once a single parent-child pair has been
         loaded, the parent is restricted to that specific child, even if
         subsequent rules would allow transitions to other child UIDs. This means
         that during policy loading, set*uid() can randomly fail.
       - To replace the policy without rebooting, it is necessary to first flush
         all old rules. This creates a time window in which no constraints are
         placed on the use of CAP_SETUID.
       - If we want to perform sanity checks on the final policy, this requires
         that the policy isn't constructed in a piecemeal fashion without telling
         the kernel when it's done.
      
      Other kernel APIs - including things like the userns code and netfilter -
      avoid this problem by performing updates atomically. Luckily, SafeSetID
      hasn't landed in a stable (upstream) release yet, so maybe it's not too
      late to completely change the API.
      
      The new API for SafeSetID is: If you want to change the policy, open
      "safesetid/whitelist_policy" and write the entire policy,
      newline-delimited, in there.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      03638e62
    • Jann Horn's avatar
      LSM: SafeSetID: fix userns handling in securityfs · 71a98971
      Jann Horn authored
      Looking at current_cred() in write handlers is bad form, stop doing that.
      
      Also, let's just require that the write is coming from the initial user
      namespace. Especially SAFESETID_WHITELIST_FLUSH requires privilege over all
      namespaces, and SAFESETID_WHITELIST_ADD should probably require it as well.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      71a98971
    • Jann Horn's avatar
      LSM: SafeSetID: refactor policy parsing · 78ae7df9
      Jann Horn authored
      In preparation for changing the policy parsing logic, refactor the line
      parsing logic to be less verbose and move it into a separate function.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      78ae7df9
    • Jann Horn's avatar
      LSM: SafeSetID: refactor safesetid_security_capable() · 8068866c
      Jann Horn authored
      At the moment, safesetid_security_capable() has two nested conditional
      blocks, and one big comment for all the logic. Chop it up and reduce the
      amount of indentation.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      8068866c
    • Jann Horn's avatar
      LSM: SafeSetID: refactor policy hash table · 1cd02a27
      Jann Horn authored
      parent_kuid and child_kuid are kuids, there is no reason to make them
      uint64_t. (And anyway, in the kernel, the normal name for that would be
      u64, not uint64_t.)
      
      check_setuid_policy_hashtable_key() and
      check_setuid_policy_hashtable_key_value() are basically the same thing,
      merge them.
      
      Also fix the comment that claimed that (1<<8)==128.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      1cd02a27
    • Jann Horn's avatar
      LSM: SafeSetID: fix check for setresuid(new1, new2, new3) · 7ef6b306
      Jann Horn authored
      With the old code, when a process with the (real,effective,saved) UID set
      (1,1,1) calls setresuid(2,3,4), safesetid_task_fix_setuid() only checks
      whether the transition 1->2 is permitted; the transitions 1->3 and 1->4 are
      not checked. Fix this.
      
      This is also a good opportunity to refactor safesetid_task_fix_setuid() to
      be less verbose - having one branch per set*uid() syscall is unnecessary.
      
      Note that this slightly changes semantics: The UID transition check for
      UIDs that were not in the old cred struct is now always performed against
      the policy of the RUID. I think that's more consistent anyway, since the
      RUID is also the one that decides whether any policy is enforced at all.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      7ef6b306
    • Jann Horn's avatar
      LSM: SafeSetID: fix pr_warn() to include newline · c783d525
      Jann Horn authored
      Fix the pr_warn() calls in the SafeSetID LSM to have newlines at the end.
      Without this, denial messages will be buffered as incomplete lines in
      log_output(), and will then only show up once something else prints into
      dmesg.
      Signed-off-by: default avatarJann Horn <jannh@google.com>
      Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
      c783d525
    • Linus Torvalds's avatar
      Merge tag 'for-linus-hmm' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma · fec88ab0
      Linus Torvalds authored
      Pull HMM updates from Jason Gunthorpe:
       "Improvements and bug fixes for the hmm interface in the kernel:
      
         - Improve clarity, locking and APIs related to the 'hmm mirror'
           feature merged last cycle. In linux-next we now see AMDGPU and
           nouveau to be using this API.
      
         - Remove old or transitional hmm APIs. These are hold overs from the
           past with no users, or APIs that existed only to manage cross tree
           conflicts. There are still a few more of these cleanups that didn't
           make the merge window cut off.
      
         - Improve some core mm APIs:
             - export alloc_pages_vma() for driver use
             - refactor into devm_request_free_mem_region() to manage
               DEVICE_PRIVATE resource reservations
             - refactor duplicative driver code into the core dev_pagemap
               struct
      
         - Remove hmm wrappers of improved core mm APIs, instead have drivers
           use the simplified API directly
      
         - Remove DEVICE_PUBLIC
      
         - Simplify the kconfig flow for the hmm users and core code"
      
      * tag 'for-linus-hmm' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (42 commits)
        mm: don't select MIGRATE_VMA_HELPER from HMM_MIRROR
        mm: remove the HMM config option
        mm: sort out the DEVICE_PRIVATE Kconfig mess
        mm: simplify ZONE_DEVICE page private data
        mm: remove hmm_devmem_add
        mm: remove hmm_vma_alloc_locked_page
        nouveau: use devm_memremap_pages directly
        nouveau: use alloc_page_vma directly
        PCI/P2PDMA: use the dev_pagemap internal refcount
        device-dax: use the dev_pagemap internal refcount
        memremap: provide an optional internal refcount in struct dev_pagemap
        memremap: replace the altmap_valid field with a PGMAP_ALTMAP_VALID flag
        memremap: remove the data field in struct dev_pagemap
        memremap: add a migrate_to_ram method to struct dev_pagemap_ops
        memremap: lift the devmap_enable manipulation into devm_memremap_pages
        memremap: pass a struct dev_pagemap to ->kill and ->cleanup
        memremap: move dev_pagemap callbacks into a separate structure
        memremap: validate the pagemap type passed to devm_memremap_pages
        mm: factor out a devm_request_free_mem_region helper
        mm: export alloc_pages_vma
        ...
      fec88ab0
    • Linus Torvalds's avatar
      Merge tag 'ecryptfs-5.3-rc1-fixes' of... · fa6e951a
      Linus Torvalds authored
      Merge tag 'ecryptfs-5.3-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs
      
      Pull eCryptfs updates from Tyler Hicks:
      
       - Fix error handling when ecryptfs_read_lower() encounters an error
      
       - Fix read-only file creation when the eCryptfs mount is configured to
         store metadata in xattrs
      
       - Minor code cleanups
      
      * tag 'ecryptfs-5.3-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs:
        ecryptfs: Change return type of ecryptfs_process_flags
        ecryptfs: Make ecryptfs_xattr_handler static
        ecryptfs: remove unnessesary null check in ecryptfs_keyring_auth_tok_for_sig
        ecryptfs: use print_hex_dump_bytes for hexdump
        eCryptfs: fix permission denied with ecryptfs_xattr mount option when create readonly file
        ecryptfs: re-order a condition for static checkers
        eCryptfs: fix a couple type promotion bugs
      fa6e951a
    • Linus Torvalds's avatar
      Merge tag 'upstream-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs · a318423b
      Linus Torvalds authored
      Pull UBIFS updates from Richard Weinberger:
      
       - Support for zstd compression
      
       - Support for offline signed filesystems
      
       - Various fixes for regressions
      
      * tag 'upstream-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs:
        ubifs: Don't leak orphans on memory during commit
        ubifs: Check link count of inodes when killing orphans.
        ubifs: Add support for zstd compression.
        ubifs: support offline signed images
        ubifs: remove unnecessary check in ubifs_log_start_commit
        ubifs: Fix typo of output in get_cs_sqnum
        ubifs: Simplify redundant code
        ubifs: Correctly use tnc_next() in search_dh_cookie()
      a318423b
    • Linus Torvalds's avatar
      Merge tag 'for-linus-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml · f2772a0e
      Linus Torvalds authored
      Pull UML updates from Richard Weinberger:
      
       - A new timer mode, time travel, for testing with UML
      
       - Many bugixes/improvements for the serial line driver
      
       - Various bugfixes
      
      * tag 'for-linus-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml:
        um: fix build without CONFIG_UML_TIME_TRAVEL_SUPPORT
        um: Fix kcov crash during startup
        um: configs: Remove useless UEVENT_HELPER_PATH
        um: Support time travel mode
        um: Pass nsecs to os timer functions
        um: Remove drivers/ssl.h
        um: Don't garbage collect in deactivate_all_fds()
        um: Silence lockdep complaint about mmap_sem
        um: Remove locking in deactivate_all_fds()
        um: Timer code cleanup
        um: fix os_timer_one_shot()
        um: Fix IRQ controller regression on console read
      f2772a0e
    • Linus Torvalds's avatar
      Merge tag 'stream_open-5.3' of https://lab.nexedi.com/kirr/linux · fcd98147
      Linus Torvalds authored
      Pull stream_open() updates from Kirill Smelkov:
       "This time on stream_open front it is only two small changes:
      
         - the first one converts stream_open.cocci to treat all functions
           that start with wait_.* as blocking. Previously it was only
           wait_event_.* functions that were considered as blocking, but this
           was falsely reporting several deadlock cases as only warning.
      
           This was picked by linux-kbuild and entered mainline as commit
           0c4ab18f ("coccinelle: api/stream_open: treat all wait_.*()
           calls as blocking"), and already merged earlier.
      
         - the second one teaches stream_open.cocci to consider files as being
           stream-like even if they use noop_llseek. It results in two more
           drivers being converted to stream_open() (mousedev.c and
           hid-sensor-custom.c)"
      
      * tag 'stream_open-5.3' of https://lab.nexedi.com/kirr/linux:
        *: convert stream-like files -> stream_open, even if they use noop_llseek
      fcd98147
  2. 14 Jul, 2019 8 commits
    • Linus Torvalds's avatar
      Merge tag 'platform-drivers-x86-v5.3-1' of git://git.infradead.org/linux-platform-drivers-x86 · 55167453
      Linus Torvalds authored
      Pull x86 platform driver updates from Andy Shevchenko:
       "Gathered a bunch of x86 platform driver changes. It's rather big,
        since includes two big refactors and completely new driver:
      
         - ASUS WMI driver got a big refactoring in order to support the TUF
           Gaming laptops. Besides that, the regression with backlight being
           permanently off on various EeePC laptops has been fixed.
      
         - Accelerometer on HP ProBook 450 G0 shows wrong measurements due to
           X axis being inverted. This has been fixed.
      
         - Intel PMC core driver has been extended to be ACPI enumerated if
           the DSDT provides device with _HID "INT33A1". This allows to
           convert the driver to be pure platform and support new hardware
           purely based on ACPI DSDT.
      
         - From now on the Intel Speed Select Technology is supported thru a
           corresponding driver. This driver provides an access to the
           features of the ISST, such as Performance Profile, Core Power, Base
           frequency and Turbo Frequency.
      
         - Mellanox platform drivers has been refactored and now extended to
           support more systems, including new coming ones.
      
         - The OLPC XO-1.75 platform is now supported.
      
         - CB4063 Beckhoff Automation board is using PMC clocks, provided via
           pmc_atom driver, for ethernet controllers in a way that they can't
           be managed by the clock driver. The quirk has been extended to
           cover this case.
      
         - Touchscreen on Chuwi Hi10 Plus tablet has been enabled. Meanwhile
           the information of Chuwi Hi10 Air has been fixed to cover more
           models based on the same platform.
      
         - Xiaomi notebooks have WMI interface enabled. Thus, the driver to
           support it has been provided. It required some extension of the
           generic WMI library, which allows to propagate opaque context to
           the ->probe() of the individual drivers.
      
        This release includes debugfs clean up from Greg KH for several
        drivers that drop return code check and make debugfs absence or
        failure non-fatal.
      
        Also miscellaneous fixes here and there, mostly for Acer WMI and
        various Intel drivers"
      
      * tag 'platform-drivers-x86-v5.3-1' of git://git.infradead.org/linux-platform-drivers-x86: (74 commits)
        platform/x86: Fix PCENGINES_APU2 Kconfig warning
        tools/power/x86/intel-speed-select: Add .gitignore file
        platform/x86: mlx-platform: Fix error handling in mlxplat_init()
        platform/x86: intel_pmc_core: Attach using APCI HID "INT33A1"
        platform/x86: intel_pmc_core: transform Pkg C-state residency from TSC ticks into microseconds
        platform/x86: asus-wmi: Use dev_get_drvdata()
        Documentation/ABI: Add new attribute for mlxreg-io sysfs interfaces
        platform/x86: mlx-platform: Add more reset cause attributes
        platform/x86: mlx-platform: Modify DMI matching order
        platform/x86: mlx-platform: Add regmap structure for the next generation systems
        platform/x86: mlx-platform: Change API for i2c-mlxcpld driver activation
        platform/x86: mlx-platform: Move regmap initialization before all drivers activation
        MAINTAINERS: Update for Intel Speed Select Technology
        tools/power/x86: A tool to validate Intel Speed Select commands
        platform/x86: ISST: Restore state on resume
        platform/x86: ISST: Add Intel Speed Select PUNIT MSR interface
        platform/x86: ISST: Add Intel Speed Select mailbox interface via MSRs
        platform/x86: ISST: Add Intel Speed Select mailbox interface via PCI
        platform/x86: ISST: Add Intel Speed Select mmio interface
        platform/x86: ISST: Add IOCTL to Translate Linux logical CPU to PUNIT CPU number
        ...
      55167453
    • Linus Torvalds's avatar
      Merge tag 'mailbox-v5.3' of git://git.linaro.org/landing-teams/working/fujitsu/integration · fde7dc63
      Linus Torvalds authored
      Pull mailbox updates from Jassi Brar:
      
       - stm32: race fix by adding a spinlock
      
       - mhu: trim included headers
      
       - omap: add support for K3 SoCs
      
       - imx: Irq disable fix
      
       - bcm: tidy up extracting driver data
      
       - tegra: make resume 'noirq'
      
       - api: fix error handling
      
      * tag 'mailbox-v5.3' of git://git.linaro.org/landing-teams/working/fujitsu/integration:
        mailbox: handle failed named mailbox channel request
        mailbox: tegra: avoid resume NULL mailboxes
        mailbox: tegra: hsp: add noirq resume
        mailbox: bcm-flexrm-mailbox: using dev_get_drvdata directly
        mailbox: imx: Clear GIEn bit at shutdown
        mailbox: omap: Add support for TI K3 SoCs
        dt-bindings: mailbox: omap: Update bindings for TI K3 SoCs
        mailbox: arm_mhu: reorder header inclusion and drop unneeded ones
        mailbox: stm32_ipcc: add spinlock to fix channels concurrent access
      fde7dc63
    • Linus Torvalds's avatar
      Merge branch 'for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu · a1240cf7
      Linus Torvalds authored
      Pull percpu updates from Dennis Zhou:
       "This includes changes to let percpu_ref release the backing percpu
        memory earlier after it has been switched to atomic in cases where the
        percpu ref is not revived.
      
        This will help recycle percpu memory earlier in cases where the
        refcounts are pinned for prolonged periods of time"
      
      * 'for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu:
        percpu_ref: release percpu memory early without PERCPU_REF_ALLOW_REINIT
        md: initialize percpu refcounters using PERCU_REF_ALLOW_REINIT
        io_uring: initialize percpu refcounters using PERCU_REF_ALLOW_REINIT
        percpu_ref: introduce PERCPU_REF_ALLOW_REINIT flag
      a1240cf7
    • Linus Torvalds's avatar
      Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 1d039859
      Linus Torvalds authored
      Pull perf fixes from Ingo Molnar:
       "A number of PMU driver corner case fixes, a race fix, an event
        grouping fix, plus a bunch of tooling fixes/updates"
      
      * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (30 commits)
        perf/x86/intel: Fix spurious NMI on fixed counter
        perf/core: Fix exclusive events' grouping
        perf/x86/amd/uncore: Set the thread mask for F17h L3 PMCs
        perf/x86/amd/uncore: Do not set 'ThreadMask' and 'SliceMask' for non-L3 PMCs
        perf/core: Fix race between close() and fork()
        perf intel-pt: Fix potential NULL pointer dereference found by the smatch tool
        perf intel-bts: Fix potential NULL pointer dereference found by the smatch tool
        perf script: Assume native_arch for pipe mode
        perf scripts python: export-to-sqlite.py: Fix DROP VIEW power_events_view
        perf scripts python: export-to-postgresql.py: Fix DROP VIEW power_events_view
        perf hists browser: Fix potential NULL pointer dereference found by the smatch tool
        perf cs-etm: Fix potential NULL pointer dereference found by the smatch tool
        perf parse-events: Remove unused variable: error
        perf parse-events: Remove unused variable 'i'
        perf metricgroup: Add missing list_del_init() when flushing egroups list
        perf tools: Use list_del_init() more thorougly
        perf tools: Use zfree() where applicable
        tools lib: Adopt zalloc()/zfree() from tools/perf
        perf tools: Move get_current_dir_name() cond prototype out of util.h
        perf namespaces: Move the conditional setns() prototype to namespaces.h
        ...
      1d039859
    • Linus Torvalds's avatar
      Merge branch 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 0c85ce13
      Linus Torvalds authored
      Pull locking fix from Ingo Molnar:
       "A single fix for a locking statistics bug"
      
      * 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        locking/lockdep: Fix lock used or unused stats error
      0c85ce13
    • Linus Torvalds's avatar
      Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 577d9460
      Linus Torvalds authored
      Pull x86 fix from Ingo Molnar:
       "A single build system bugfix"
      
      * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/vdso: Fix flip/flop vdso build bug
      577d9460
    • Linus Torvalds's avatar
      Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 50ec1881
      Linus Torvalds authored
      Pull scheduler fix from Ingo Molnar:
       "Fix a sched statistics related bug that would trigger a kernel warning
        on certain configs"
      
      * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        sched/core: Fix preempt warning in ttwu
      50ec1881
    • Kirill Smelkov's avatar
      *: convert stream-like files -> stream_open, even if they use noop_llseek · 3975b097
      Kirill Smelkov authored
      This patch continues 10dce8af (fs: stream_open - opener for
      stream-like files so that read and write can run simultaneously without
      deadlock) and c5bf68fe (*: convert stream-like files from
      nonseekable_open -> stream_open) and teaches steam_open.cocci to
      consider files as being stream-like not only if they have
      .llseek=no_llseek, but also if they have .llseek=noop_llseek.
      
      This is safe to do: the comment about noop_llseek says
      
      	This is an implementation of ->llseek useable for the rare special case when
      	userspace expects the seek to succeed but the (device) file is actually not
      	able to perform the seek. In this case you use noop_llseek() instead of
      	falling back to the default implementation of ->llseek.
      
      and in general noop_llseek was massively added to drivers in 6038f373
      (llseek: automatically add .llseek fop) when changing default for NULL .llseek
      from NOP to no_llseek with the idea to avoid breaking compatibility, if
      maybe some user-space program was using lseek on a device without caring
      about the result, but caring if it was an error or not.
      
      Amended semantic patch produces two changes when applied tree-wide:
      
              drivers/hid/hid-sensor-custom.c:690:8-24: WARNING: hid_sensor_custom_fops: .read() has stream semantic; safe to change nonseekable_open -> stream_open.
              drivers/input/mousedev.c:564:1-17: ERROR: mousedev_fops: .read() can deadlock .write(); change nonseekable_open -> stream_open to fix.
      
      Cc: Julia Lawall <Julia.Lawall@lip6.fr>
      Cc: Jan Blunck <jblunck@suse.de>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Jiri Kosina <jikos@kernel.org>
      Cc: Jonathan Cameron <jic23@kernel.org>
      Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
      Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: Kirill Smelkov's avatarKirill Smelkov <kirr@nexedi.com>
      3975b097
  3. 13 Jul, 2019 17 commits
    • Linus Torvalds's avatar
      Merge tag 'powerpc-5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux · 192f0f8e
      Linus Torvalds authored
      Pull powerpc updates from Michael Ellerman:
       "Notable changes:
      
         - Removal of the NPU DMA code, used by the out-of-tree Nvidia driver,
           as well as some other functions only used by drivers that haven't
           (yet?) made it upstream.
      
         - A fix for a bug in our handling of hardware watchpoints (eg. perf
           record -e mem: ...) which could lead to register corruption and
           kernel crashes.
      
         - Enable HAVE_ARCH_HUGE_VMAP, which allows us to use large pages for
           vmalloc when using the Radix MMU.
      
         - A large but incremental rewrite of our exception handling code to
           use gas macros rather than multiple levels of nested CPP macros.
      
        And the usual small fixes, cleanups and improvements.
      
        Thanks to: Alastair D'Silva, Alexey Kardashevskiy, Andreas Schwab,
        Aneesh Kumar K.V, Anju T Sudhakar, Anton Blanchard, Arnd Bergmann,
        Athira Rajeev, Cédric Le Goater, Christian Lamparter, Christophe
        Leroy, Christophe Lombard, Christoph Hellwig, Daniel Axtens, Denis
        Efremov, Enrico Weigelt, Frederic Barrat, Gautham R. Shenoy, Geert
        Uytterhoeven, Geliang Tang, Gen Zhang, Greg Kroah-Hartman, Greg Kurz,
        Gustavo Romero, Krzysztof Kozlowski, Madhavan Srinivasan, Masahiro
        Yamada, Mathieu Malaterre, Michael Neuling, Nathan Lynch, Naveen N.
        Rao, Nicholas Piggin, Nishad Kamdar, Oliver O'Halloran, Qian Cai, Ravi
        Bangoria, Sachin Sant, Sam Bobroff, Satheesh Rajendran, Segher
        Boessenkool, Shaokun Zhang, Shawn Anastasio, Stewart Smith, Suraj
        Jitindar Singh, Thiago Jung Bauermann, YueHaibing"
      
      * tag 'powerpc-5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (163 commits)
        powerpc/powernv/idle: Fix restore of SPRN_LDBAR for POWER9 stop state.
        powerpc/eeh: Handle hugepages in ioremap space
        ocxl: Update for AFU descriptor template version 1.1
        powerpc/boot: pass CONFIG options in a simpler and more robust way
        powerpc/boot: add {get, put}_unaligned_be32 to xz_config.h
        powerpc/irq: Don't WARN continuously in arch_local_irq_restore()
        powerpc/module64: Use symbolic instructions names.
        powerpc/module32: Use symbolic instructions names.
        powerpc: Move PPC_HA() PPC_HI() and PPC_LO() to ppc-opcode.h
        powerpc/module64: Fix comment in R_PPC64_ENTRY handling
        powerpc/boot: Add lzo support for uImage
        powerpc/boot: Add lzma support for uImage
        powerpc/boot: don't force gzipped uImage
        powerpc/8xx: Add microcode patch to move SMC parameter RAM.
        powerpc/8xx: Use IO accessors in microcode programming.
        powerpc/8xx: replace #ifdefs by IS_ENABLED() in microcode.c
        powerpc/8xx: refactor programming of microcode CPM params.
        powerpc/8xx: refactor printing of microcode patch name.
        powerpc/8xx: Refactor microcode write
        powerpc/8xx: refactor writing of CPM microcode arrays
        ...
      192f0f8e
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc · ec924975
      Linus Torvalds authored
      Pull sparc updates from David Miller:
       "Just a few small changes:
      
         - Fix console naming inconsistency with hypervisor consoles, from
           John Paul Adrian Glaubitz
      
         - Fix userland compilation due to use of u_int, from Masahiro Yamada"
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc:
        sparc64: Add missing newline at end of file
        sparc: fix unknown type name u_int in uapi header
        sparc: configs: Remove useless UEVENT_HELPER_PATH
        sparc: Remove redundant copy of the LGPL-2.0
        sunhv: Fix device naming inconsistency between sunhv_console and sunhv_reg
      ec924975
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net · d1210929
      Linus Torvalds authored
      Pull networking fixes from David Miller:
      
       1) Fix excessive stack usage in cxgb4, from Arnd Bergmann.
      
       2) Missing skb queue lock init in tipc, from Chris Packham.
      
       3) Fix some regressions in ipv6 flow label handling, from Eric Dumazet.
      
       4) Elide flow dissection of local packets in FIB rules, from Petar
          Penkov.
      
       5) Fix TLS support build failure in mlx5, from Tariq Toukab.
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (36 commits)
        ppp: mppe: Revert "ppp: mppe: Add softdep to arc4"
        net: dsa: qca8k: replace legacy gpio include
        net: hisilicon: Use devm_platform_ioremap_resource
        cxgb4: reduce kernel stack usage in cudbg_collect_mem_region()
        tipc: ensure head->lock is initialised
        tc-tests: updated skbedit tests
        nfp: flower: ensure ip protocol is specified for L4 matches
        nfp: flower: fix ethernet check on match fields
        net/mlx5e: Provide cb_list pointer when setting up tc block on rep
        net: phy: make exported variables non-static
        net: sched: Fix NULL-pointer dereference in tc_indr_block_ing_cmd()
        davinci_cpdma: don't cast dma_addr_t to pointer
        net: openvswitch: do not update max_headroom if new headroom is equal to old headroom
        net/mlx5e: Convert single case statement switch statements into if statements
        net/mlx5: E-Switch, Reduce ingress acl modify metadata stack usage
        net/mlx5e: Fix unused variable warning when CONFIG_MLX5_ESWITCH is off
        net/mlx5e: Fix compilation error in TLS code
        ipv6: fix static key imbalance in fl_create()
        ipv6: fix potential crash in ip6_datagram_dst_update()
        ipv6: tcp: fix flowlabels reflection for RST packets
        ...
      d1210929
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide · 1fa91854
      Linus Torvalds authored
      Pull IDE update from David Miller:
       "Small cleanup"
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide:
        ide: use BIT() macro for defining bit-flags
      1fa91854
    • Linus Torvalds's avatar
      Merge tag 'mtd/for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux · 3f069622
      Linus Torvalds authored
      Pull MTD updates from Miquel Raynal:
       "This contains the following changes for MTD:
      
        MTD core changes:
         - New Hyperbus framework
         - New _is_locked (concat) implementation
         - Various cleanups
      
        NAND core changes:
         - use longest matching pattern in ->exec_op() default parser
         - export NAND operation tracer
         - add flag to indicate panic_write in MTD
         - use kzalloc() instead of kmalloc() and memset()
      
        Raw NAND controller drivers changes:
         - brcmnand:
             - fix BCH ECC layout for large page NAND parts
             - fallback to detected ecc-strength, ecc-step-size
             - when oops in progress use pio and interrupt polling
             - code refactor code to introduce helper functions
             - add support for v7.3 controller
         - FSMC:
             - use nand_op_trace for operation tracing
         - GPMI:
             - move all driver code into single file
             - various cleanups (including dmaengine changes)
             - use runtime PM to manage clocks
             - implement exec_op
         - MTK:
             - correct low level time calculation of r/w cycle
             - improve data sampling timing for read cycle
             - add validity check for CE# pin setting
             - fix wrongly assigned OOB buffer pointer issue
             - re-license MTK NAND driver as Dual MIT/GPL
         - STM32:
             - manage the get_irq error case
             - increase DMA completion timeouts
      
        Raw NAND chips drivers changes:
         - Macronix: add read-retry support
      
        Onenand driver changes:
         - add support for 8Gb datasize chips
         - avoid fall-through warnings
      
        SPI-NAND changes:
         - define macros for page-read ops with three-byte addresses
         - add support for two-byte device IDs and then for GigaDevice
           GD5F1GQ4UFxxG
         - add initial support for Paragon PN26G0xA
         - handle the case where the last page read has bitflips
      
        SPI-NOR core changes:
         - add support for the mt25ql02g and w25q16jv flashes
         - print error in case of jedec read id fails
         - is25lp256: add post BFPT fix to correct the addr_width
      
        SPI NOR controller drivers changes:
         - intel-spi: Add support for Intel Elkhart Lake SPI serial flash
         - smt32: remove the driver as the driver was replaced by spi-stm32-qspi.c
         - cadence-quadspi: add reset control"
      
      * tag 'mtd/for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux: (60 commits)
        mtd: concat: implement _is_locked mtd operation
        mtd: concat: refactor concat_lock/concat_unlock
        mtd: abi: do not use C++ style comments in uapi header
        mtd: afs: remove unneeded NULL check
        mtd: rawnand: stm32_fmc2: increase DMA completion timeouts
        mtd: rawnand: Use kzalloc() instead of kmalloc() and memset()
        mtd: hyperbus: Add driver for TI's HyperBus memory controller
        mtd: spinand: read returns badly if the last page has bitflips
        mtd: spinand: Add initial support for Paragon PN26G0xA
        mtd: rawnand: mtk: Re-license MTK NAND driver as Dual MIT/GPL
        mtd: rawnand: gpmi: remove double assignment to block_size
        dt-bindings: mtd: brcmnand: Add brcmnand, brcmnand-v7.3 support
        mtd: rawnand: brcmnand: Add support for v7.3 controller
        mtd: rawnand: brcmnand: Refactored code to introduce helper functions
        mtd: rawnand: brcmnand: When oops in progress use pio and interrupt polling
        mtd: Add flag to indicate panic_write
        mtd: rawnand: Add Macronix NAND read retry support
        mtd: onenand: Avoid fall-through warnings
        mtd: spinand: Add support for GigaDevice GD5F1GQ4UFxxG
        mtd: spinand: Add support for two-byte device IDs
        ...
      3f069622
    • Linus Torvalds's avatar
      Merge tag 'for-5.3/dm-changes' of... · 22608405
      Linus Torvalds authored
      Merge tag 'for-5.3/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
      
      Pull device mapper updates from Mike Snitzer:
      
       - Add encrypted byte-offset initialization vector (eboiv) to DM crypt.
      
       - Add optional discard features to DM snapshot which allow freeing
         space from a DM device whose free space was exhausted.
      
       - Various small improvements to use struct_size() and kzalloc().
      
       - Fix to check if DM thin metadata is in fail_io mode before attempting
         to update the superblock to set the needs_check flag. Otherwise the
         DM thin-pool can hang.
      
       - Fix DM bufio shrinker's potential for ABBA recursion deadlock with DM
         thin provisioning on loop usecase.
      
      * tag 'for-5.3/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
        dm bufio: fix deadlock with loop device
        dm snapshot: add optional discard support features
        dm crypt: implement eboiv - encrypted byte-offset initialization vector
        dm crypt: remove obsolete comment about plumb IV
        dm crypt: wipe private IV struct after key invalid flag is set
        dm integrity: use kzalloc() instead of kmalloc() + memset()
        dm: update stale comment in end_clone_bio()
        dm log writes: fix incorrect comment about the logged sequence example
        dm log writes: use struct_size() to calculate size of pending_block
        dm crypt: use struct_size() when allocating encryption context
        dm integrity: always set version on superblock update
        dm thin metadata: check if in fail_io mode when setting needs_check
      22608405
    • Linus Torvalds's avatar
      Merge tag 'for-linus-5.3' of git://github.com/cminyard/linux-ipmi · 92adeb61
      Linus Torvalds authored
      Pull IPMI updates from Corey Minyard:
       "Some small fixes for various things, nothing huge, mostly found by
        automated tools.
      
        Plus add a driver that allows Linux to act as an IPMB slave device, so
        it can be a satellite MC in an IPMI network"
      
      * tag 'for-linus-5.3' of git://github.com/cminyard/linux-ipmi:
        docs: ipmb: place it at driver-api and convert to ReST
        fix platform_no_drv_owner.cocci warnings
        ipmi: ipmb: don't allocate i2c_client on stack
        ipmi: ipmb: Fix build error while CONFIG_I2C is set to m
        Add support for IPMB driver
        drivers: ipmi: Drop device reference
        ipmi_ssif: fix unexpected driver unregister warning
        ipmi_si: use bool type for initialized variable
        ipmi_si: fix unexpected driver unregister warning
      92adeb61
    • Linus Torvalds's avatar
      Merge tag 'pinctrl-v5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl · 43c95d36
      Linus Torvalds authored
      Pull pin control updates from Linus Walleij:
       "This is the bulk of pin control changes for the v5.3 kernel cycle:
      
        Core changes:
      
         - Device links can optionally be added between a pin control producer
           and its consumers. This will affect how the system power management
           is handled: a pin controller will not suspend before all of its
           consumers have been suspended.
      
           This was necessary for the ST Microelectronics STMFX expander and
           need to be tested on other systems as well: it makes sense to make
           this default in the long run.
      
           Right now it is opt-in per driver.
      
         - Drive strength can be specified in microamps. With decreases in
           silicon technology, milliamps isn't granular enough, let's make it
           possible to select drive strengths in microamps.
      
           Right now the Meson (AMlogic) driver needs this.
      
        New drivers:
      
         - New subdriver for the Tegra 194 SoC.
      
         - New subdriver for the Qualcomm SDM845.
      
         - New subdriver for the Qualcomm SM8150.
      
         - New subdriver for the Freescale i.MX8MN (Freescale is now a product
           line of NXP).
      
         - New subdriver for Marvell MV98DX1135.
      
        Driver improvements:
      
         - The Bitmain BM1880 driver now supports pin config in addition to
           muxing.
      
         - The Qualcomm drivers can now reserve some GPIOs as taken aside and
           not usable for users. This is used in ACPI systems to take out some
           GPIO lines used by the BIOS so that noone else (neither kernel nor
           userspace) will play with them by mistake and crash the machine.
      
         - A slew of refurbishing around the Aspeed drivers (board management
           controllers for servers) in preparation for the new Aspeed AST2600
           SoC.
      
         - A slew of improvements over the SH PFC drivers as usual.
      
         - Misc cleanups and fixes"
      
      * tag 'pinctrl-v5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (106 commits)
        pinctrl: aspeed: Strip moved macros and structs from private header
        pinctrl: aspeed: Fix missed include
        pinctrl: baytrail: Use GENMASK() consistently
        pinctrl: baytrail: Re-use data structures from pinctrl-intel.h
        pinctrl: baytrail: Use defined macro instead of magic in byt_get_gpio_mux()
        pinctrl: qcom: Add SM8150 pinctrl driver
        dt-bindings: pinctrl: qcom: Add SM8150 pinctrl binding
        dt-bindings: pinctrl: qcom: Document missing gpio nodes
        pinctrl: aspeed: Add implementation-related documentation
        pinctrl: aspeed: Split out pinmux from general pinctrl
        pinctrl: aspeed: Clarify comment about strapping W1C
        pinctrl: aspeed: Correct comment that is no longer true
        MAINTAINERS: Add entry for ASPEED pinctrl drivers
        dt-bindings: pinctrl: aspeed: Convert AST2500 bindings to json-schema
        dt-bindings: pinctrl: aspeed: Convert AST2400 bindings to json-schema
        dt-bindings: pinctrl: aspeed: Split bindings document in two
        pinctrl: qcom: Add irq_enable callback for msm gpio
        pinctrl: madera: Fixup SPDX headers
        pinctrl: qcom: sdm845: Fix CONFIG preprocessor guard
        pinctrl: tegra: Add bitmask support for parked bits
        ...
      43c95d36
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input · 073c916b
      Linus Torvalds authored
      Pull input updates from Dmitry Torokhov:
      
       - an update to Elan touchpad SMBus driver to fetch device parameters
         (size, resolution) while it is still in PS/2 mode, before switching
         over to SMBus, as in that mode some devices return garbage dimensions
      
       - update to iforce joystick driver
      
       - miscellaneous driver fixes
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (48 commits)
        Input: gpio_keys_polled - allow specifying name of input device
        Input: edt-ft5x06 - simplify event reporting code
        Input: max77650-onkey - add MODULE_ALIAS()
        Input: atmel_mxt_ts - fix leak in mxt_update_cfg()
        Input: synaptics - enable SMBUS on T480 thinkpad trackpad
        Input: atmel_mxt_ts - fix -Wunused-const-variable
        Input: joydev - extend absolute mouse detection
        HID: quirks: Refactor ELAN 400 and 401 handling
        Input: elan_i2c - export the device id whitelist
        Input: edt-ft5x06 - use get_unaligned_be16()
        Input: iforce - add the Saitek R440 Force Wheel
        Input: iforce - use unaligned accessors, where appropriate
        Input: iforce - drop couple of temps from transport code
        Input: iforce - drop bus type from iforce structure
        Input: iforce - use DMA-safe buffores for USB transfers
        Input: iforce - allow callers supply data buffer when fetching device IDs
        Input: iforce - only call iforce_process_packet() if initialized
        Input: iforce - signal command completion from transport code
        Input: iforce - do not combine arguments for iforce_process_packet()
        Input: iforce - factor out hat handling when parsing packets
        ...
      073c916b
    • Linus Torvalds's avatar
      Merge tag 'for-5.3/io_uring-20190711' of git://git.kernel.dk/linux-block · a2d79c71
      Linus Torvalds authored
      Pull io_uring updates from Jens Axboe:
       "This contains:
      
         - Support for recvmsg/sendmsg as first class opcodes.
      
           I don't envision going much further down this path, as there are
           plans in progress to support potentially any system call in an
           async fashion through io_uring. But I think it does make sense to
           have certain core ops available directly, especially those that can
           support a "try this non-blocking" flag/mode. (me)
      
         - Handle generic short reads automatically.
      
           This can happen fairly easily if parts of the buffered read is
           cached. Since the application needs to issue another request for
           the remainder, just do this internally and save kernel/user
           roundtrip while providing a nicer more robust API. (me)
      
         - Support for linked SQEs.
      
           This allows SQEs to depend on each other, enabling an application
           to eg queue a read-from-this-file,write-to-that-file pair. (me)
      
         - Fix race in stopping SQ thread (Jackie)"
      
      * tag 'for-5.3/io_uring-20190711' of git://git.kernel.dk/linux-block:
        io_uring: fix io_sq_thread_stop running in front of io_sq_thread
        io_uring: add support for recvmsg()
        io_uring: add support for sendmsg()
        io_uring: add support for sqe links
        io_uring: punt short reads to async context
        uio: make import_iovec()/compat_import_iovec() return bytes on success
      a2d79c71
    • Yuyang Du's avatar
      locking/lockdep: Fix lock used or unused stats error · 68d41d8c
      Yuyang Du authored
      The stats variable nr_unused_locks is incremented every time a new lock
      class is register and decremented when the lock is first used in
      __lock_acquire(). And after all, it is shown and checked in lockdep_stats.
      
      However, under configurations that either CONFIG_TRACE_IRQFLAGS or
      CONFIG_PROVE_LOCKING is not defined:
      
      The commit:
      
        09180651 ("locking/lockdep: Consolidate lock usage bit initialization")
      
      missed marking the LOCK_USED flag at IRQ usage initialization because
      as mark_usage() is not called. And the commit:
      
        886532ae ("locking/lockdep: Move mark_lock() inside CONFIG_TRACE_IRQFLAGS && CONFIG_PROVE_LOCKING")
      
      further made mark_lock() not defined such that the LOCK_USED cannot be
      marked at all when the lock is first acquired.
      
      As a result, we fix this by not showing and checking the stats under such
      configurations for lockdep_stats.
      Reported-by: default avatarQian Cai <cai@lca.pw>
      Signed-off-by: default avatarYuyang Du <duyuyang@gmail.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: arnd@arndb.de
      Cc: frederic@kernel.org
      Link: https://lkml.kernel.org/r/20190709101522.9117-1-duyuyang@gmail.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      68d41d8c
    • Peter Zijlstra's avatar
      sched/core: Fix preempt warning in ttwu · e3d85487
      Peter Zijlstra authored
      John reported a DEBUG_PREEMPT warning caused by commit:
      
        aacedf26 ("sched/core: Optimize try_to_wake_up() for local wakeups")
      
      I overlooked that ttwu_stat() requires preemption disabled.
      Reported-by: default avatarJohn Stultz <john.stultz@linaro.org>
      Tested-by: default avatarJohn Stultz <john.stultz@linaro.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Fixes: aacedf26 ("sched/core: Optimize try_to_wake_up() for local wakeups")
      Link: https://lkml.kernel.org/r/20190710105736.GK3402@hirez.programming.kicks-ass.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      e3d85487
    • Kan Liang's avatar
      perf/x86/intel: Fix spurious NMI on fixed counter · e4557c1a
      Kan Liang authored
      If a user first sample a PEBS event on a fixed counter, then sample a
      non-PEBS event on the same fixed counter on Icelake, it will trigger
      spurious NMI. For example:
      
        perf record -e 'cycles:p' -a
        perf record -e 'cycles' -a
      
      The error message for spurious NMI:
      
        [June 21 15:38] Uhhuh. NMI received for unknown reason 30 on CPU 2.
        [    +0.000000] Do you have a strange power saving mode enabled?
        [    +0.000000] Dazed and confused, but trying to continue
      
      The bug was introduced by the following commit:
      
        commit 6f55967a ("perf/x86/intel: Fix race in intel_pmu_disable_event()")
      
      The commit moves the intel_pmu_pebs_disable() after intel_pmu_disable_fixed(),
      which returns immediately.  The related bit of PEBS_ENABLE MSR will never be
      cleared for the fixed counter. Then a non-PEBS event runs on the fixed counter,
      but the bit on PEBS_ENABLE is still set, which triggers spurious NMIs.
      
      Check and disable PEBS for fixed counters after intel_pmu_disable_fixed().
      Reported-by: default avatarYi, Ammy <ammy.yi@intel.com>
      Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: <stable@vger.kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vince Weaver <vincent.weaver@maine.edu>
      Fixes: 6f55967a ("perf/x86/intel: Fix race in intel_pmu_disable_event()")
      Link: https://lkml.kernel.org/r/20190625142135.22112-1-kan.liang@linux.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      e4557c1a
    • Alexander Shishkin's avatar
      perf/core: Fix exclusive events' grouping · 8a58ddae
      Alexander Shishkin authored
      So far, we tried to disallow grouping exclusive events for the fear of
      complications they would cause with moving between contexts. Specifically,
      moving a software group to a hardware context would violate the exclusivity
      rules if both groups contain matching exclusive events.
      
      This attempt was, however, unsuccessful: the check that we have in the
      perf_event_open() syscall is both wrong (looks at wrong PMU) and
      insufficient (group leader may still be exclusive), as can be illustrated
      by running:
      
        $ perf record -e '{intel_pt//,cycles}' uname
        $ perf record -e '{cycles,intel_pt//}' uname
      
      ultimately successfully.
      
      Furthermore, we are completely free to trigger the exclusivity violation
      by:
      
         perf -e '{cycles,intel_pt//}' -e '{intel_pt//,instructions}'
      
      even though the helpful perf record will not allow that, the ABI will.
      
      The warning later in the perf_event_open() path will also not trigger, because
      it's also wrong.
      
      Fix all this by validating the original group before moving, getting rid
      of broken safeguards and placing a useful one to perf_install_in_context().
      Signed-off-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: <stable@vger.kernel.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vince Weaver <vincent.weaver@maine.edu>
      Cc: mathieu.poirier@linaro.org
      Cc: will.deacon@arm.com
      Fixes: bed5b25a ("perf: Add a pmu capability for "exclusive" events")
      Link: https://lkml.kernel.org/r/20190701110755.24646-1-alexander.shishkin@linux.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      8a58ddae
    • Kim Phillips's avatar
      perf/x86/amd/uncore: Set the thread mask for F17h L3 PMCs · 2f217d58
      Kim Phillips authored
      Fill in the L3 performance event select register ThreadMask
      bitfield, to enable per hardware thread accounting.
      Signed-off-by: default avatarKim Phillips <kim.phillips@amd.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: <stable@vger.kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Gary Hook <Gary.Hook@amd.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Janakarajan Natarajan <Janakarajan.Natarajan@amd.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Martin Liska <mliska@suse.cz>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Pu Wen <puwen@hygon.cn>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vince Weaver <vincent.weaver@maine.edu>
      Link: https://lkml.kernel.org/r/20190628215906.4276-2-kim.phillips@amd.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      2f217d58
    • Kim Phillips's avatar
      perf/x86/amd/uncore: Do not set 'ThreadMask' and 'SliceMask' for non-L3 PMCs · 16f46411
      Kim Phillips authored
      The following commit:
      
        d7cbbe49 ("perf/x86/amd/uncore: Set ThreadMask and SliceMask for L3 Cache perf events")
      
      enables L3 PMC events for all threads and slices by writing 1's in
      'ChL3PmcCfg' (L3 PMC PERF_CTL) register fields.
      
      Those bitfields overlap with high order event select bits in the Data
      Fabric PMC control register, however.
      
      So when a user requests raw Data Fabric events (-e amd_df/event=0xYYY/),
      the two highest order bits get inadvertently set, changing the counter
      select to events that don't exist, and for which no counts are read.
      
      This patch changes the logic to write the L3 masks only when dealing
      with L3 PMC counters.
      
      AMD Family 16h and below Northbridge (NB) counters were not affected.
      Signed-off-by: default avatarKim Phillips <kim.phillips@amd.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: <stable@vger.kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Gary Hook <Gary.Hook@amd.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Janakarajan Natarajan <Janakarajan.Natarajan@amd.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Martin Liska <mliska@suse.cz>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Pu Wen <puwen@hygon.cn>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vince Weaver <vincent.weaver@maine.edu>
      Fixes: d7cbbe49 ("perf/x86/amd/uncore: Set ThreadMask and SliceMask for L3 Cache perf events")
      Link: https://lkml.kernel.org/r/20190628215906.4276-1-kim.phillips@amd.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      16f46411
    • Peter Zijlstra's avatar
      perf/core: Fix race between close() and fork() · 1cf8dfe8
      Peter Zijlstra authored
      Syzcaller reported the following Use-after-Free bug:
      
      	close()						clone()
      
      							  copy_process()
      							    perf_event_init_task()
      							      perf_event_init_context()
      							        mutex_lock(parent_ctx->mutex)
      								inherit_task_group()
      								  inherit_group()
      								    inherit_event()
      								      mutex_lock(event->child_mutex)
      								      // expose event on child list
      								      list_add_tail()
      								      mutex_unlock(event->child_mutex)
      							        mutex_unlock(parent_ctx->mutex)
      
      							    ...
      							    goto bad_fork_*
      
      							  bad_fork_cleanup_perf:
      							    perf_event_free_task()
      
      	  perf_release()
      	    perf_event_release_kernel()
      	      list_for_each_entry()
      		mutex_lock(ctx->mutex)
      		mutex_lock(event->child_mutex)
      		// event is from the failing inherit
      		// on the other CPU
      		perf_remove_from_context()
      		list_move()
      		mutex_unlock(event->child_mutex)
      		mutex_unlock(ctx->mutex)
      
      							      mutex_lock(ctx->mutex)
      							      list_for_each_entry_safe()
      							        // event already stolen
      							      mutex_unlock(ctx->mutex)
      
      							    delayed_free_task()
      							      free_task()
      
      	     list_for_each_entry_safe()
      	       list_del()
      	       free_event()
      	         _free_event()
      		   // and so event->hw.target
      		   // is the already freed failed clone()
      		   if (event->hw.target)
      		     put_task_struct(event->hw.target)
      		       // WHOOPSIE, already quite dead
      
      Which puts the lie to the the comment on perf_event_free_task():
      'unexposed, unused context' not so much.
      
      Which is a 'fun' confluence of fail; copy_process() doing an
      unconditional free_task() and not respecting refcounts, and perf having
      creative locking. In particular:
      
        82d94856 ("perf/core: Fix lock inversion between perf,trace,cpuhp")
      
      seems to have overlooked this 'fun' parade.
      
      Solve it by using the fact that detached events still have a reference
      count on their (previous) context. With this perf_event_free_task()
      can detect when events have escaped and wait for their destruction.
      Debugged-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
      Reported-by: syzbot+a24c397a29ad22d86c98@syzkaller.appspotmail.com
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
      Cc: <stable@vger.kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Vince Weaver <vincent.weaver@maine.edu>
      Fixes: 82d94856 ("perf/core: Fix lock inversion between perf,trace,cpuhp")
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      1cf8dfe8