1. 23 Jan, 2018 40 commits
    • Marc Kleine-Budde's avatar
      can: af_can: canfd_rcv(): replace WARN_ONCE by pr_warn_once · 41812e40
      Marc Kleine-Budde authored
      commit d4689846 upstream.
      
      If an invalid CANFD frame is received, from a driver or from a tun
      interface, a Kernel warning is generated.
      
      This patch replaces the WARN_ONCE by a simple pr_warn_once, so that a
      kernel, bootet with panic_on_warn, does not panic. A printk seems to be
      more appropriate here.
      
      Reported-by: syzbot+e3b775f40babeff6e68b@syzkaller.appspotmail.com
      Suggested-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Acked-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      41812e40
    • Marc Kleine-Budde's avatar
      can: af_can: can_rcv(): replace WARN_ONCE by pr_warn_once · 91c5fbf1
      Marc Kleine-Budde authored
      commit 8cb68751 upstream.
      
      If an invalid CAN frame is received, from a driver or from a tun
      interface, a Kernel warning is generated.
      
      This patch replaces the WARN_ONCE by a simple pr_warn_once, so that a
      kernel, bootet with panic_on_warn, does not panic. A printk seems to be
      more appropriate here.
      
      Reported-by: syzbot+4386709c0c1284dca827@syzkaller.appspotmail.com
      Suggested-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Acked-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      91c5fbf1
    • Stephane Grosjean's avatar
      can: peak: fix potential bug in packet fragmentation · 659af12a
      Stephane Grosjean authored
      commit d8a243af upstream.
      
      In some rare conditions when running one PEAK USB-FD interface over
      a non high-speed USB controller, one useless USB fragment might be sent.
      This patch fixes the way a USB command is fragmented when its length is
      greater than 64 bytes and when the underlying USB controller is not a
      high-speed one.
      Signed-off-by: default avatarStephane Grosjean <s.grosjean@peak-system.com>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      659af12a
    • Thomas Petazzoni's avatar
      ARM: dts: kirkwood: fix pin-muxing of MPP7 on OpenBlocks A7 · e53050a8
      Thomas Petazzoni authored
      commit 56aeb07c upstream.
      
      MPP7 is currently muxed as "gpio", but this function doesn't exist for
      MPP7, only "gpo" is available. This causes the following error:
      
      kirkwood-pinctrl f1010000.pin-controller: unsupported function gpio on pin mpp7
      pinctrl core: failed to register map default (6): invalid type given
      kirkwood-pinctrl f1010000.pin-controller: error claiming hogs: -22
      kirkwood-pinctrl f1010000.pin-controller: could not claim hogs: -22
      kirkwood-pinctrl f1010000.pin-controller: unable to register pinctrl driver
      kirkwood-pinctrl: probe of f1010000.pin-controller failed with error -22
      
      So the pinctrl driver is not probed, all device drivers (including the
      UART driver) do a -EPROBE_DEFER, and therefore the system doesn't
      really boot (well, it boots, but with no UART, and no devices that
      require pin-muxing).
      
      Back when the Device Tree file for this board was introduced, the
      definition was already wrong. The pinctrl driver also always described
      as "gpo" this function for MPP7. However, between Linux 4.10 and 4.11,
      a hog pin failing to be muxed was turned from a simple warning to a
      hard error that caused the entire pinctrl driver probe to bail
      out. This is probably the result of commit 61187142 ("pinctrl:
      core: Fix pinctrl_register_and_init() with pinctrl_enable()").
      
      This commit fixes the Device Tree to use the proper "gpo" function for
      MPP7, which fixes the boot of OpenBlocks A7, which was broken since
      Linux 4.11.
      
      Fixes: f24b56cb ("ARM: kirkwood: add support for OpenBlocks A7 platform")
      Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e53050a8
    • Maxime Ripard's avatar
      ARM: sunxi_defconfig: Enable CMA · fb7f328c
      Maxime Ripard authored
      commit c13e7f31 upstream.
      
      The DRM driver most notably, but also out of tree drivers (for now) like
      the VPU or GPU drivers, are quite big consumers of large, contiguous memory
      buffers. However, the sunxi_defconfig doesn't enable CMA in order to
      mitigate that, which makes them almost unusable.
      
      Enable it to make sure it somewhat works.
      Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fb7f328c
    • Gregory CLEMENT's avatar
      ARM64: dts: marvell: armada-cp110: Fix clock resources for various node · ebc8d9c3
      Gregory CLEMENT authored
      commit e3af9f7c upstream.
      
      On the CP modules we found on Armada 7K/8K, many IP block actually also
      need a "functional" clock (from the bus). This patch add them which allows
      to fix some issues hanging the kernel:
      
      If Ethernet and sdhci driver are built as modules and sdhci was loaded
      first then the kernel hang.
      
      Fixes: bb16ea17 ("mmc: sdhci-xenon: Fix clock resource by adding an optional bus clock")
      Reported-by: default avatarRiku Voipio <riku.voipio@linaro.org>
      Signed-off-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ebc8d9c3
    • Arnd Bergmann's avatar
      phy: work around 'phys' references to usb-nop-xceiv devices · c0443694
      Arnd Bergmann authored
      commit b7563e27 upstream.
      
      Stefan Wahren reports a problem with a warning fix that was merged
      for v4.15: we had lots of device nodes with a 'phys' property pointing
      to a device node that is not compliant with the binding documented in
      Documentation/devicetree/bindings/phy/phy-bindings.txt
      
      This generally works because USB HCD drivers that support both the generic
      phy subsystem and the older usb-phy subsystem ignore most errors from
      phy_get() and related calls and then use the usb-phy driver instead.
      
      However, it turns out that making the usb-nop-xceiv device compatible with
      the generic-phy binding changes the phy_get() return code from -EINVAL to
      -EPROBE_DEFER, and the dwc2 usb controller driver for bcm2835 now returns
      -EPROBE_DEFER from its probe function rather than ignoring the failure,
      breaking all USB support on raspberry-pi when CONFIG_GENERIC_PHY is
      enabled. The same code is used in the dwc3 driver and the usb_add_hcd()
      function, so a reasonable assumption would be that many other platforms
      are affected as well.
      
      I have reviewed all the related patches and concluded that "usb-nop-xceiv"
      is the only USB phy that is affected by the change, and since it is by far
      the most commonly referenced phy, all the other USB phy drivers appear
      to be used in ways that are are either safe in DT (they don't use the
      'phys' property), or in the driver (they already ignore -EPROBE_DEFER
      from generic-phy when usb-phy is available).
      
      To work around the problem, this adds a special case to _of_phy_get()
      so we ignore any PHY node that is compatible with "usb-nop-xceiv",
      as we know that this can never load no matter how much we defer. In the
      future, we might implement a generic-phy driver for "usb-nop-xceiv"
      and then remove this workaround.
      
      Since we generally want older kernels to also want to work with the
      fixed devicetree files, it would be good to backport the patch into
      stable kernels as well (3.13+ are possibly affected), even though they
      don't contain any of the patches that may have caused regressions.
      
      Fixes: 014d6da6 ARM: dts: bcm283x: Fix DTC warnings about missing phy-cells
      Fixes: c5bbf358 arm: dts: nspire: Add missing #phy-cells to usb-nop-xceiv
      Fixes: 44e5dced arm: dts: marvell: Add missing #phy-cells to usb-nop-xceiv
      Fixes: f568f6f5 ARM: dts: omap: Add missing #phy-cells to usb-nop-xceiv
      Fixes: d745d5f2 ARM: dts: imx51-zii-rdu1: Add missing #phy-cells to usb-nop-xceiv
      Fixes: 915fbe59 ARM: dts: imx: Add missing #phy-cells to usb-nop-xceiv
      Link: https://marc.info/?l=linux-usb&m=151518314314753&w=2
      Link: https://patchwork.kernel.org/patch/10158145/
      Cc: Felipe Balbi <balbi@kernel.org>
      Cc: Eric Anholt <eric@anholt.net>
      Tested-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
      Acked-by: default avatarRob Herring <robh@kernel.org>
      Tested-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
      Acked-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c0443694
    • Steven Rostedt (VMware)'s avatar
      tracing: Fix converting enum's from the map in trace_event_eval_update() · 7296666e
      Steven Rostedt (VMware) authored
      commit 1ebe1eaf upstream.
      
      Since enums do not get converted by the TRACE_EVENT macro into their values,
      the event format displaces the enum name and not the value. This breaks
      tools like perf and trace-cmd that need to interpret the raw binary data. To
      solve this, an enum map was created to convert these enums into their actual
      numbers on boot up. This is done by TRACE_EVENTS() adding a
      TRACE_DEFINE_ENUM() macro.
      
      Some enums were not being converted. This was caused by an optization that
      had a bug in it.
      
      All calls get checked against this enum map to see if it should be converted
      or not, and it compares the call's system to the system that the enum map
      was created under. If they match, then they call is processed.
      
      To cut down on the number of iterations needed to find the maps with a
      matching system, since calls and maps are grouped by system, when a match is
      made, the index into the map array is saved, so that the next call, if it
      belongs to the same system as the previous call, could start right at that
      array index and not have to scan all the previous arrays.
      
      The problem was, the saved index was used as the variable to know if this is
      a call in a new system or not. If the index was zero, it was assumed that
      the call is in a new system and would keep incrementing the saved index
      until it found a matching system. The issue arises when the first matching
      system was at index zero. The next map, if it belonged to the same system,
      would then think it was the first match and increment the index to one. If
      the next call belong to the same system, it would begin its search of the
      maps off by one, and miss the first enum that should be converted. This left
      a single enum not converted properly.
      
      Also add a comment to describe exactly what that index was for. It took me a
      bit too long to figure out what I was thinking when debugging this issue.
      
      Link: http://lkml.kernel.org/r/717BE572-2070-4C1E-9902-9F2E0FEDA4F8@oracle.com
      
      Fixes: 0c564a53 ("tracing: Add TRACE_DEFINE_ENUM() macro to map enums to their values")
      Reported-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Teste-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7296666e
    • Johan Hovold's avatar
      Input: twl4030-vibra - fix sibling-node lookup · b1c7c57f
      Johan Hovold authored
      commit 5b189201 upstream.
      
      A helper purported to look up a child node based on its name was using
      the wrong of-helper and ended up prematurely freeing the parent of-node
      while searching the whole device tree depth-first starting at the parent
      node.
      
      Fixes: 64b9e4d8 ("input: twl4030-vibra: Support for DT booted kernel")
      Fixes: e661d0a0 ("Input: twl4030-vibra - fix ERROR: Bad of_node_put() warning")
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b1c7c57f
    • Johan Hovold's avatar
      Input: twl6040-vibra - fix child-node lookup · aabc966e
      Johan Hovold authored
      commit dcaf12a8 upstream.
      
      Fix child-node lookup during probe, which ended up searching the whole
      device tree depth-first starting at parent rather than just matching on
      its children.
      
      Later sanity checks on node properties (which would likely be missing)
      should prevent this from causing much trouble however, especially as the
      original premature free of the parent node has already been fixed
      separately (but that "fix" was apparently never backported to stable).
      
      Fixes: e7ec014a ("Input: twl6040-vibra - update for device tree support")
      Fixes: c52c545e ("Input: twl6040-vibra - fix DT node memory management")
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Acked-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
      Tested-by: H. Nikolaus Schaller <hns@goldelico.com> (on Pyra OMAP5 hardware)
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      aabc966e
    • Johan Hovold's avatar
      Input: 88pm860x-ts - fix child-node lookup · 1bb19ef3
      Johan Hovold authored
      commit 906bf7da upstream.
      
      Fix child node-lookup during probe, which ended up searching the whole
      device tree depth-first starting at parent rather than just matching on
      its children.
      
      To make things worse, the parent node was prematurely freed, while the
      child node was leaked.
      
      Fixes: 2e57d567 ("mfd: 88pm860x: Device tree support")
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1bb19ef3
    • Nick Desaulniers's avatar
      Input: synaptics-rmi4 - prevent UAF reported by KASAN · b276eae8
      Nick Desaulniers authored
      commit 55edde9f upstream.
      
      KASAN found a UAF due to dangling pointer. As the report below says,
      rmi_f11_attention() accesses drvdata->attn_data.data, which was freed in
      rmi_irq_fn.
      
      [  311.424062] BUG: KASAN: use-after-free in rmi_f11_attention+0x526/0x5e0 [rmi_core]
      [  311.424067] Read of size 27 at addr ffff88041fd610db by task irq/131-i2c_hid/1162
      [  311.424075] CPU: 0 PID: 1162 Comm: irq/131-i2c_hid Not tainted 4.15.0-rc8+ #2
      [  311.424076] Hardware name: Razer Blade Stealth/Razer, BIOS 6.05 01/26/2017
      [  311.424078] Call Trace:
      [  311.424086]  dump_stack+0xae/0x12d
      [  311.424090]  ? _atomic_dec_and_lock+0x103/0x103
      [  311.424094]  ? show_regs_print_info+0xa/0xa
      [  311.424099]  ? input_handle_event+0x10b/0x810
      [  311.424104]  print_address_description+0x65/0x229
      [  311.424108]  kasan_report.cold.5+0xa7/0x281
      [  311.424117]  rmi_f11_attention+0x526/0x5e0 [rmi_core]
      [  311.424123]  ? memcpy+0x1f/0x50
      [  311.424132]  ? rmi_f11_attention+0x526/0x5e0 [rmi_core]
      [  311.424143]  ? rmi_f11_probe+0x1e20/0x1e20 [rmi_core]
      [  311.424153]  ? rmi_process_interrupt_requests+0x220/0x2a0 [rmi_core]
      [  311.424163]  ? rmi_irq_fn+0x22c/0x270 [rmi_core]
      [  311.424173]  ? rmi_process_interrupt_requests+0x2a0/0x2a0 [rmi_core]
      [  311.424177]  ? free_irq+0xa0/0xa0
      [  311.424180]  ? irq_finalize_oneshot.part.39+0xeb/0x180
      [  311.424190]  ? rmi_process_interrupt_requests+0x2a0/0x2a0 [rmi_core]
      [  311.424193]  ? irq_thread_fn+0x3d/0x80
      [  311.424197]  ? irq_finalize_oneshot.part.39+0x180/0x180
      [  311.424200]  ? irq_thread+0x21d/0x290
      [  311.424203]  ? irq_thread_check_affinity+0x170/0x170
      [  311.424207]  ? remove_wait_queue+0x150/0x150
      [  311.424212]  ? kasan_unpoison_shadow+0x30/0x40
      [  311.424214]  ? __init_waitqueue_head+0xa0/0xd0
      [  311.424218]  ? task_non_contending.cold.55+0x18/0x18
      [  311.424221]  ? irq_forced_thread_fn+0xa0/0xa0
      [  311.424226]  ? irq_thread_check_affinity+0x170/0x170
      [  311.424230]  ? kthread+0x19e/0x1c0
      [  311.424233]  ? kthread_create_worker_on_cpu+0xc0/0xc0
      [  311.424237]  ? ret_from_fork+0x32/0x40
      
      [  311.424244] Allocated by task 899:
      [  311.424249]  kasan_kmalloc+0xbf/0xe0
      [  311.424252]  __kmalloc_track_caller+0xd9/0x1f0
      [  311.424255]  kmemdup+0x17/0x40
      [  311.424264]  rmi_set_attn_data+0xa4/0x1b0 [rmi_core]
      [  311.424269]  rmi_raw_event+0x10b/0x1f0 [hid_rmi]
      [  311.424278]  hid_input_report+0x1a8/0x2c0 [hid]
      [  311.424283]  i2c_hid_irq+0x146/0x1d0 [i2c_hid]
      [  311.424286]  irq_thread_fn+0x3d/0x80
      [  311.424288]  irq_thread+0x21d/0x290
      [  311.424291]  kthread+0x19e/0x1c0
      [  311.424293]  ret_from_fork+0x32/0x40
      
      [  311.424296] Freed by task 1162:
      [  311.424300]  kasan_slab_free+0x71/0xc0
      [  311.424303]  kfree+0x90/0x190
      [  311.424311]  rmi_irq_fn+0x1b2/0x270 [rmi_core]
      [  311.424319]  rmi_irq_fn+0x257/0x270 [rmi_core]
      [  311.424322]  irq_thread_fn+0x3d/0x80
      [  311.424324]  irq_thread+0x21d/0x290
      [  311.424327]  kthread+0x19e/0x1c0
      [  311.424330]  ret_from_fork+0x32/0x40
      
      [  311.424334] The buggy address belongs to the object at ffff88041fd610c0 which belongs to the cache kmalloc-64 of size 64
      [  311.424340] The buggy address is located 27 bytes inside of 64-byte region [ffff88041fd610c0, ffff88041fd61100)
      [  311.424344] The buggy address belongs to the page:
      [  311.424348] page:ffffea00107f5840 count:1 mapcount:0 mapping: (null) index:0x0
      [  311.424353] flags: 0x17ffffc0000100(slab)
      [  311.424358] raw: 0017ffffc0000100 0000000000000000 0000000000000000 00000001802a002a
      [  311.424363] raw: dead000000000100 dead000000000200 ffff8804228036c0 0000000000000000
      [  311.424366] page dumped because: kasan: bad access detected
      
      [  311.424369] Memory state around the buggy address:
      [  311.424373]  ffff88041fd60f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      [  311.424377]  ffff88041fd61000: fb fb fb fb fb fb fb fb fc fc fc fc fb fb fb fb
      [  311.424381] >ffff88041fd61080: fb fb fb fb fc fc fc fc fb fb fb fb fb fb fb fb
      [  311.424384]                                                     ^
      [  311.424387]  ffff88041fd61100: fc fc fc fc fb fb fb fb fb fb fb fb fc fc fc fc
      [  311.424391]  ffff88041fd61180: fb fb fb fb fb fb fb fb fc fc fc fc fb fb fb fb
      Signed-off-by: default avatarNick Desaulniers <nick.desaulniers@gmail.com>
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b276eae8
    • Nir Perry's avatar
      Input: ALPS - fix multi-touch decoding on SS4 plus touchpads · e86e5430
      Nir Perry authored
      commit 4d94e776 upstream.
      
      The fix for handling two-finger scroll (i4a646580 - "Input: ALPS -
      fix two-finger scroll breakage in right side on ALPS touchpad")
      introduced a minor "typo" that broke decoding of multi-touch events are
      decoded on some ALPS touchpads.  For example, tapping with three-fingers
      can no longer be used to emulate middle-mouse-button (the kernel doesn't
      recognize this as the proper event, and doesn't report it correctly to
      userspace).  This affects touchpads that use SS4 "plus" protocol
      variant, like those found on Dell E7270 & E7470 laptops (tested on
      E7270).
      
      First, probably the code in alps_decode_ss4_v2() for case
      SS4_PACKET_ID_MULTI used inconsistent indices to "f->mt[]". You can see
      0 & 1 are used for the "if" part but 2 & 3 are used for the "else" part.
      
      Second, in the previous patch, new macros were introduced to decode X
      coordinates specific to the SS4 "plus" variant, but the macro to
      define the maximum X value wasn't changed accordingly. The macros to
      decode X values for "plus" variant are effectively shifted right by 1
      bit, but the max wasn't shifted too. This causes the driver to
      incorrectly handle "no data" cases, which also interfered with how
      multi-touch was handled.
      
      Fixes: 4a646580 ("Input: ALPS - fix two-finger scroll breakage...")
      Signed-off-by: default avatarNir Perry <nirperry@gmail.com>
      Reviewed-by: default avatarMasaki Ota <masaki.ota@jp.alps.com>
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e86e5430
    • Tom Lendacky's avatar
      x86/mm: Encrypt the initrd earlier for BSP microcode update · e0f82cbd
      Tom Lendacky authored
      commit 107cd253 upstream.
      
      Currently the BSP microcode update code examines the initrd very early
      in the boot process.  If SME is active, the initrd is treated as being
      encrypted but it has not been encrypted (in place) yet.  Update the
      early boot code that encrypts the kernel to also encrypt the initrd so
      that early BSP microcode updates work.
      Tested-by: default avatarGabriel Craciunescu <nix.or.die@gmail.com>
      Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brijesh Singh <brijesh.singh@amd.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/20180110192634.6026.10452.stgit@tlendack-t1.amdoffice.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e0f82cbd
    • Tero Kristo's avatar
      ARM: OMAP3: hwmod_data: add missing module_offs for MMC3 · 5455eef0
      Tero Kristo authored
      commit 3c4d296e upstream.
      
      MMC3 hwmod data is missing the module_offs definition. MMC3 belongs under
      core, so add CORE_MOD for it.
      Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      Cc: Adam Ford <aford173@gmail.com>
      Fixes: 6c0afb50 ("clk: ti: convert to use proper register definition for all accesses")
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5455eef0
    • Tom Lendacky's avatar
      x86/mm: Prepare sme_encrypt_kernel() for PAGE aligned encryption · 33e4ca36
      Tom Lendacky authored
      commit cc5f01e2 upstream.
      
      In preparation for encrypting more than just the kernel, the encryption
      support in sme_encrypt_kernel() needs to support 4KB page aligned
      encryption instead of just 2MB large page aligned encryption.
      
      Update the routines that populate the PGD to support non-2MB aligned
      addresses.  This is done by creating PTE page tables for the start
      and end portion of the address range that fall outside of the 2MB
      alignment.  This results in, at most, two extra pages to hold the
      PTE entries for each mapping of a range.
      Tested-by: default avatarGabriel Craciunescu <nix.or.die@gmail.com>
      Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brijesh Singh <brijesh.singh@amd.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/20180110192626.6026.75387.stgit@tlendack-t1.amdoffice.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      33e4ca36
    • Tom Lendacky's avatar
      x86/mm: Centralize PMD flags in sme_encrypt_kernel() · 69a39cf3
      Tom Lendacky authored
      commit 2b5d00b6 upstream.
      
      In preparation for encrypting more than just the kernel during early
      boot processing, centralize the use of the PMD flag settings based
      on the type of mapping desired.  When 4KB aligned encryption is added,
      this will allow either PTE flags or large page PMD flags to be used
      without requiring the caller to adjust.
      Tested-by: default avatarGabriel Craciunescu <nix.or.die@gmail.com>
      Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brijesh Singh <brijesh.singh@amd.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/20180110192615.6026.14767.stgit@tlendack-t1.amdoffice.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      69a39cf3
    • Tom Lendacky's avatar
      x86/mm: Use a struct to reduce parameters for SME PGD mapping · ce1805fd
      Tom Lendacky authored
      commit bacf6b49 upstream.
      
      In preparation for follow-on patches, combine the PGD mapping parameters
      into a struct to reduce the number of function arguments and allow for
      direct updating of the next pagetable mapping area pointer.
      Tested-by: default avatarGabriel Craciunescu <nix.or.die@gmail.com>
      Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brijesh Singh <brijesh.singh@amd.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/20180110192605.6026.96206.stgit@tlendack-t1.amdoffice.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ce1805fd
    • Tom Lendacky's avatar
      x86/mm: Clean up register saving in the __enc_copy() assembly code · 25e11971
      Tom Lendacky authored
      commit 13038801 upstream.
      
      Clean up the use of PUSH and POP and when registers are saved in the
      __enc_copy() assembly function in order to improve the readability of the code.
      
      Move parameter register saving into general purpose registers earlier
      in the code and move all the pushes to the beginning of the function
      with corresponding pops at the end.
      
      We do this to prepare fixes.
      Tested-by: default avatarGabriel Craciunescu <nix.or.die@gmail.com>
      Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brijesh Singh <brijesh.singh@amd.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/20180110192556.6026.74187.stgit@tlendack-t1.amdoffice.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      25e11971
    • Thomas Gleixner's avatar
      x86/apic/vector: Fix off by one in error path · 0062c10a
      Thomas Gleixner authored
      commit 45d55e7b upstream.
      
      Keith reported the following warning:
      
      WARNING: CPU: 28 PID: 1420 at kernel/irq/matrix.c:222 irq_matrix_remove_managed+0x10f/0x120
        x86_vector_free_irqs+0xa1/0x180
        x86_vector_alloc_irqs+0x1e4/0x3a0
        msi_domain_alloc+0x62/0x130
      
      The reason for this is that if the vector allocation fails the error
      handling code tries to free the failed vector as well, which causes the
      above imbalance warning to trigger.
      
      Adjust the error path to handle this correctly.
      
      Fixes: b5dc8e6c ("x86/irq: Use hierarchical irqdomain to manage CPU interrupt vectors")
      Reported-by: default avatarKeith Busch <keith.busch@intel.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarKeith Busch <keith.busch@intel.com>
      Cc: stable@vger.kernel.org
      Link: https://lkml.kernel.org/r/alpine.DEB.2.20.1801161217300.1823@nanosSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      0062c10a
    • Joe Lawrence's avatar
      pipe: avoid round_pipe_size() nr_pages overflow on 32-bit · e109607e
      Joe Lawrence authored
      commit d3f14c48 upstream.
      
      round_pipe_size() contains a right-bit-shift expression which may
      overflow, which would cause undefined results in a subsequent
      roundup_pow_of_two() call.
      
        static inline unsigned int round_pipe_size(unsigned int size)
        {
                unsigned long nr_pages;
      
                nr_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
                return roundup_pow_of_two(nr_pages) << PAGE_SHIFT;
        }
      
      PAGE_SIZE is defined as (1UL << PAGE_SHIFT), so:
        - 4 bytes wide on 32-bit (0 to 0xffffffff)
        - 8 bytes wide on 64-bit (0 to 0xffffffffffffffff)
      
      That means that 32-bit round_pipe_size(), nr_pages may overflow to 0:
      
        size=0x00000000    nr_pages=0x0
        size=0x00000001    nr_pages=0x1
        size=0xfffff000    nr_pages=0xfffff
        size=0xfffff001    nr_pages=0x0         << !
        size=0xffffffff    nr_pages=0x0         << !
      
      This is bad because roundup_pow_of_two(n) is undefined when n == 0!
      
      64-bit is not a problem as the unsigned int size is 4 bytes wide
      (similar to 32-bit) and the larger, 8 byte wide unsigned long, is
      sufficient to handle the largest value of the bit shift expression:
      
        size=0xffffffff    nr_pages=100000
      
      Modify round_pipe_size() to return 0 if n == 0 and updates its callers to
      handle accordingly.
      
      Link: http://lkml.kernel.org/r/1507658689-11669-3-git-send-email-joe.lawrence@redhat.comSigned-off-by: default avatarJoe Lawrence <joe.lawrence@redhat.com>
      Reported-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Reviewed-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Michael Kerrisk <mtk.manpages@gmail.com>
      Cc: Randy Dunlap <rdunlap@infradead.org>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarDong Jinguang <dongjinguang@huawei.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e109607e
    • Len Brown's avatar
      x86/tsc: Fix erroneous TSC rate on Skylake Xeon · 8352a3fe
      Len Brown authored
      commit b5112030 upstream.
      
      The INTEL_FAM6_SKYLAKE_X hardcoded crystal_khz value of 25MHZ is
      problematic:
      
       - SKX workstations (with same model # as server variants) use a 24 MHz
         crystal.  This results in a -4.0% time drift rate on SKX workstations.
      
       - SKX servers subject the crystal to an EMI reduction circuit that reduces its
         actual frequency by (approximately) -0.25%.  This results in -1 second per
         10 minute time drift as compared to network time.
      
      This issue can also trigger a timer and power problem, on configurations
      that use the LAPIC timer (versus the TSC deadline timer).  Clock ticks
      scheduled with the LAPIC timer arrive a few usec before the time they are
      expected (according to the slow TSC).  This causes Linux to poll-idle, when
      it should be in an idle power saving state.  The idle and clock code do not
      graciously recover from this error, sometimes resulting in significant
      polling and measurable power impact.
      
      Stop using native_calibrate_tsc() for INTEL_FAM6_SKYLAKE_X.
      native_calibrate_tsc() will return 0, boot will run with tsc_khz = cpu_khz,
      and the TSC refined calibration will update tsc_khz to correct for the
      difference.
      
      [ tglx: Sanitized change log ]
      
      Fixes: 6baf3d61 ("x86/tsc: Add additional Intel CPU models to the crystal quirk list")
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: peterz@infradead.org
      Cc: Prarit Bhargava <prarit@redhat.com>
      Link: https://lkml.kernel.org/r/ff6dcea166e8ff8f2f6a03c17beab2cb436aa779.1513920414.git.len.brown@intel.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8352a3fe
    • Len Brown's avatar
      x86/tsc: Future-proof native_calibrate_tsc() · a5ab7b5d
      Len Brown authored
      commit da4ae6c4 upstream.
      
      If the crystal frequency cannot be determined via CPUID(15).crystal_khz or
      the built-in table then native_calibrate_tsc() will still set the
      X86_FEATURE_TSC_KNOWN_FREQ flag which prevents the refined TSC calibration.
      
      As a consequence such systems use cpu_khz for the TSC frequency which is
      incorrect when cpu_khz != tsc_khz resulting in time drift.
      
      Return early when the crystal frequency cannot be retrieved without setting
      the X86_FEATURE_TSC_KNOWN_FREQ flag. This ensures that the refined TSC
      calibration is invoked.
      
      [ tglx: Steam-blastered changelog. Sigh ]
      
      Fixes: 4ca4df0b ("x86/tsc: Mark TSC frequency determined by CPUID as known")
      Signed-off-by: default avatarLen Brown <len.brown@intel.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: peterz@infradead.org
      Cc: Bin Gao <bin.gao@intel.com>
      Link: https://lkml.kernel.org/r/0fe2503aa7d7fc69137141fc705541a78101d2b9.1513920414.git.len.brown@intel.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a5ab7b5d
    • Andi Kleen's avatar
      x86/idt: Mark IDT tables __initconst · ad2d6203
      Andi Kleen authored
      commit 327867fa upstream.
      
      const variables must use __initconst, not __initdata.
      
      Fix this up for the IDT tables, which got it consistently wrong.
      
      Fixes: 16bc18d8 ("x86/idt: Move 32-bit idt_descr to C code")
      Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20171222001821.2157-7-andi@firstfloor.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ad2d6203
    • Eric W. Biederman's avatar
      x86/mm/pkeys: Fix fill_sig_info_pkey · 239f2888
      Eric W. Biederman authored
      commit beacd6f7 upstream.
      
      SEGV_PKUERR is a signal specific si_code which happens to have the same
      numeric value as several others: BUS_MCEERR_AR, ILL_ILLTRP, FPE_FLTOVF,
      TRAP_HWBKPT, CLD_TRAPPED, POLL_ERR, SEGV_THREAD_ID, as such it is not safe
      to just test the si_code the signal number must also be tested to prevent a
      false positive in fill_sig_info_pkey.
      
      This error was by inspection, and BUS_MCEERR_AR appears to be a real
      candidate for confusion.  So pass in si_signo and check for SIG_SEGV to
      verify that it is actually a SEGV_PKUERR
      
      Fixes: 019132ff ("x86/mm/pkeys: Fill in pkey field in siginfo")
      Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: linux-arch@vger.kernel.org
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Link: https://lkml.kernel.org/r/20180112203135.4669-2-ebiederm@xmission.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      239f2888
    • Thomas Gleixner's avatar
      x86/intel_rdt/cqm: Prevent use after free · 929e4b35
      Thomas Gleixner authored
      commit d4792441 upstream.
      
      intel_rdt_iffline_cpu() -> domain_remove_cpu() frees memory first and then
      proceeds accessing it.
      
       BUG: KASAN: use-after-free in find_first_bit+0x1f/0x80
       Read of size 8 at addr ffff883ff7c1e780 by task cpuhp/31/195
       find_first_bit+0x1f/0x80
       has_busy_rmid+0x47/0x70
       intel_rdt_offline_cpu+0x4b4/0x510
      
       Freed by task 195:
       kfree+0x94/0x1a0
       intel_rdt_offline_cpu+0x17d/0x510
      
      Do the teardown first and then free memory.
      
      Fixes: 24247aee ("x86/intel_rdt/cqm: Improve limbo list processing")
      Reported-by: default avatarJoseph Salisbury <joseph.salisbury@canonical.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Ravi Shankar <ravi.v.shankar@intel.com>
      Cc: Peter Zilstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Vikas Shivappa <vikas.shivappa@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: "Roderick W. Smith" <rod.smith@canonical.com>
      Cc: 1733662@bugs.launchpad.net
      Cc: Fenghua Yu <fenghua.yu@intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Link: https://lkml.kernel.org/r/alpine.DEB.2.20.1801161957510.2366@nanosSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      929e4b35
    • Andi Kleen's avatar
      module: Add retpoline tag to VERMAGIC · 8c556782
      Andi Kleen authored
      commit 6cfb521a upstream.
      
      Add a marker for retpoline to the module VERMAGIC. This catches the case
      when a non RETPOLINE compiled module gets loaded into a retpoline kernel,
      making it insecure.
      
      It doesn't handle the case when retpoline has been runtime disabled.  Even
      in this case the match of the retcompile status will be enforced.  This
      implies that even with retpoline run time disabled all modules loaded need
      to be recompiled.
      Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Acked-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
      Cc: rusty@rustcorp.com.au
      Cc: arjan.van.de.ven@intel.com
      Cc: jeyu@kernel.org
      Cc: torvalds@linux-foundation.org
      Link: https://lkml.kernel.org/r/20180116205228.4890-1-andi@firstfloor.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8c556782
    • Paolo Bonzini's avatar
      x86/cpufeature: Move processor tracing out of scattered features · 4d9c9abf
      Paolo Bonzini authored
      commit 4fdec203 upstream.
      
      Processor tracing is already enumerated in word 9 (CPUID[7,0].EBX),
      so do not duplicate it in the scattered features word.
      
      Besides being more tidy, this will be useful for KVM when it presents
      processor tracing to the guests.  KVM selects host features that are
      supported by both the host kernel (depending on command line options,
      CPU errata, or whatever) and KVM.  Whenever a full feature word exists,
      KVM's code is written in the expectation that the CPUID bit number
      matches the X86_FEATURE_* bit number, but this is not the case for
      X86_FEATURE_INTEL_PT.
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Luwei Kang <luwei.kang@intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Radim Krčmář <rkrcmar@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: kvm@vger.kernel.org
      Link: http://lkml.kernel.org/r/1516117345-34561-1-git-send-email-pbonzini@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4d9c9abf
    • Josh Poimboeuf's avatar
      objtool: Improve error message for bad file argument · f45bbd95
      Josh Poimboeuf authored
      commit 385d11b1 upstream.
      
      If a nonexistent file is supplied to objtool, it complains with a
      non-helpful error:
      
        open: No such file or directory
      
      Improve it to:
      
        objtool: Can't open 'foo': No such file or directory
      Reported-by: default avatarMarkus <M4rkusXXL@web.de>
      Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/406a3d00a21225eee2819844048e17f68523ccf6.1516025651.git.jpoimboe@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f45bbd95
    • Tom Lendacky's avatar
      x86/retpoline: Add LFENCE to the retpoline/RSB filling RSB macros · 956ec9e7
      Tom Lendacky authored
      commit 28d437d5 upstream.
      
      The PAUSE instruction is currently used in the retpoline and RSB filling
      macros as a speculation trap.  The use of PAUSE was originally suggested
      because it showed a very, very small difference in the amount of
      cycles/time used to execute the retpoline as compared to LFENCE.  On AMD,
      the PAUSE instruction is not a serializing instruction, so the pause/jmp
      loop will use excess power as it is speculated over waiting for return
      to mispredict to the correct target.
      
      The RSB filling macro is applicable to AMD, and, if software is unable to
      verify that LFENCE is serializing on AMD (possible when running under a
      hypervisor), the generic retpoline support will be used and, so, is also
      applicable to AMD.  Keep the current usage of PAUSE for Intel, but add an
      LFENCE instruction to the speculation trap for AMD.
      
      The same sequence has been adopted by GCC for the GCC generated retpolines.
      Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Reviewed-by: default avatarBorislav Petkov <bp@alien8.de>
      Acked-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
      Acked-by: default avatarArjan van de Ven <arjan@linux.intel.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Paul Turner <pjt@google.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Tim Chen <tim.c.chen@linux.intel.com>
      Cc: Jiri Kosina <jikos@kernel.org>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
      Cc: Kees Cook <keescook@google.com>
      Link: https://lkml.kernel.org/r/20180113232730.31060.36287.stgit@tlendack-t1.amdoffice.netSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      956ec9e7
    • David Woodhouse's avatar
      x86/retpoline: Fill RSB on context switch for affected CPUs · 05154758
      David Woodhouse authored
      commit c995efd5 upstream.
      
      On context switch from a shallow call stack to a deeper one, as the CPU
      does 'ret' up the deeper side it may encounter RSB entries (predictions for
      where the 'ret' goes to) which were populated in userspace.
      
      This is problematic if neither SMEP nor KPTI (the latter of which marks
      userspace pages as NX for the kernel) are active, as malicious code in
      userspace may then be executed speculatively.
      
      Overwrite the CPU's return prediction stack with calls which are predicted
      to return to an infinite loop, to "capture" speculation if this
      happens. This is required both for retpoline, and also in conjunction with
      IBRS for !SMEP && !KPTI.
      
      On Skylake+ the problem is slightly different, and an *underflow* of the
      RSB may cause errant branch predictions to occur. So there it's not so much
      overwrite, as *filling* the RSB to attempt to prevent it getting
      empty. This is only a partial solution for Skylake+ since there are many
      other conditions which may result in the RSB becoming empty. The full
      solution on Skylake+ is to use IBRS, which will prevent the problem even
      when the RSB becomes empty. With IBRS, the RSB-stuffing will not be
      required on context switch.
      
      [ tglx: Added missing vendor check and slighty massaged comments and
        	changelog ]
      Signed-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Acked-by: default avatarArjan van de Ven <arjan@linux.intel.com>
      Cc: gnomes@lxorguk.ukuu.org.uk
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: thomas.lendacky@amd.com
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Jiri Kosina <jikos@kernel.org>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Kees Cook <keescook@google.com>
      Cc: Tim Chen <tim.c.chen@linux.intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
      Cc: Paul Turner <pjt@google.com>
      Link: https://lkml.kernel.org/r/1515779365-9032-1-git-send-email-dwmw@amazon.co.ukSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      05154758
    • Andrey Ryabinin's avatar
      x86/kasan: Panic if there is not enough memory to boot · fbb8c0ac
      Andrey Ryabinin authored
      commit 0d39e266 upstream.
      
      Currently KASAN doesn't panic in case it don't have enough memory
      to boot. Instead, it crashes in some random place:
      
       kernel BUG at arch/x86/mm/physaddr.c:27!
      
       RIP: 0010:__phys_addr+0x268/0x276
       Call Trace:
        kasan_populate_shadow+0x3f2/0x497
        kasan_init+0x12e/0x2b2
        setup_arch+0x2825/0x2a2c
        start_kernel+0xc8/0x15f4
        x86_64_start_reservations+0x2a/0x2c
        x86_64_start_kernel+0x72/0x75
        secondary_startup_64+0xa5/0xb0
      
      Use memblock_virt_alloc_try_nid() for allocations without failure
      fallback. It will panic with an out of memory message.
      Reported-by: default avatarkernel test robot <xiaolong.ye@intel.com>
      Signed-off-by: default avatarAndrey Ryabinin <aryabinin@virtuozzo.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Acked-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Cc: kasan-dev@googlegroups.com
      Cc: Alexander Potapenko <glider@google.com>
      Cc: lkp@01.org
      Link: https://lkml.kernel.org/r/20180110153602.18919-1-aryabinin@virtuozzo.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fbb8c0ac
    • Benoît Thébaudeau's avatar
      mmc: sdhci-esdhc-imx: Fix i.MX53 eSDHCv3 clock · f2264bb0
      Benoît Thébaudeau authored
      commit 499ed50f upstream.
      
      Commit 5143c953 ("mmc: sdhci-esdhc-imx: Allow all supported
      prescaler values") made it possible to set SYSCTL.SDCLKFS to 0 in SDR
      mode, thus bypassing the SD clock frequency prescaler, in order to be
      able to get higher SD clock frequencies in some contexts. However, that
      commit missed the fact that this value is illegal on the eSDHCv3
      instance of the i.MX53. This seems to be the only exception on i.MX,
      this value being legal even for the eSDHCv2 instances of the i.MX53.
      
      Fix this issue by changing the minimum prescaler value if the i.MX53
      eSDHCv3 is detected. According to the i.MX53 reference manual, if
      DLLCTRL[10] can be set, then the controller is eSDHCv3, else it is
      eSDHCv2.
      
      This commit fixes the following issue, which was preventing the i.MX53
      Loco (IMX53QSB) board from booting Linux 4.15.0-rc5:
      [    1.882668] mmcblk1: error -84 transferring data, sector 2048, nr 8, cmd response 0x900, card status 0xc00
      [    2.002255] mmcblk1: error -84 transferring data, sector 2050, nr 6, cmd response 0x900, card status 0xc00
      [   12.645056] mmc1: Timeout waiting for hardware interrupt.
      [   12.650473] mmc1: sdhci: ============ SDHCI REGISTER DUMP ===========
      [   12.656921] mmc1: sdhci: Sys addr:  0x00000000 | Version:  0x00001201
      [   12.663366] mmc1: sdhci: Blk size:  0x00000004 | Blk cnt:  0x00000000
      [   12.669813] mmc1: sdhci: Argument:  0x00000000 | Trn mode: 0x00000013
      [   12.676258] mmc1: sdhci: Present:   0x01f8028f | Host ctl: 0x00000013
      [   12.682703] mmc1: sdhci: Power:     0x00000002 | Blk gap:  0x00000000
      [   12.689148] mmc1: sdhci: Wake-up:   0x00000000 | Clock:    0x0000003f
      [   12.695594] mmc1: sdhci: Timeout:   0x0000008e | Int stat: 0x00000000
      [   12.702039] mmc1: sdhci: Int enab:  0x107f004b | Sig enab: 0x107f004b
      [   12.708485] mmc1: sdhci: AC12 err:  0x00000000 | Slot int: 0x00001201
      [   12.714930] mmc1: sdhci: Caps:      0x07eb0000 | Caps_1:   0x08100810
      [   12.721375] mmc1: sdhci: Cmd:       0x0000163a | Max curr: 0x00000000
      [   12.727821] mmc1: sdhci: Resp[0]:   0x00000920 | Resp[1]:  0x00000000
      [   12.734265] mmc1: sdhci: Resp[2]:   0x00000000 | Resp[3]:  0x00000000
      [   12.740709] mmc1: sdhci: Host ctl2: 0x00000000
      [   12.745157] mmc1: sdhci: ADMA Err:  0x00000001 | ADMA Ptr: 0xc8049200
      [   12.751601] mmc1: sdhci: ============================================
      [   12.758110] print_req_error: I/O error, dev mmcblk1, sector 2050
      [   12.764135] Buffer I/O error on dev mmcblk1p1, logical block 0, lost sync page write
      [   12.775163] EXT4-fs (mmcblk1p1): mounted filesystem without journal. Opts: (null)
      [   12.782746] VFS: Mounted root (ext4 filesystem) on device 179:9.
      [   12.789151] mmcblk1: response CRC error sending SET_BLOCK_COUNT command, card status 0x900
      Signed-off-by: default avatarBenoît Thébaudeau <benoit.thebaudeau.dev@gmail.com>
      Reported-by: default avatarWladimir J. van der Laan <laanwj@gmail.com>
      Tested-by: default avatarWladimir J. van der Laan <laanwj@gmail.com>
      Fixes: 5143c953 ("mmc: sdhci-esdhc-imx: Allow all supported prescaler values")
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f2264bb0
    • Josh Poimboeuf's avatar
      objtool: Fix seg fault with gold linker · f41b2d7e
      Josh Poimboeuf authored
      commit 2a0098d7 upstream.
      
      Objtool segfaults when the gold linker is used with
      CONFIG_MODVERSIONS=y and CONFIG_UNWINDER_ORC=y.
      
      With CONFIG_MODVERSIONS=y, the .o file gets passed to the linker before
      being passed to objtool.  The gold linker seems to strip unused ELF
      symbols by default, which confuses objtool and causes the seg fault when
      it's trying to generate ORC metadata.
      
      Objtool should really be running immediately after GCC anyway, without a
      linker call in between.  Change the makefile ordering so that objtool is
      called before the linker.
      Reported-and-tested-by: default avatarMarkus <M4rkusXXL@web.de>
      Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Fixes: ee9f8fce ("x86/unwind: Add the ORC unwinder")
      Link: http://lkml.kernel.org/r/355f04da33581f4a3bf82e5b512973624a1e23a2.1516025651.git.jpoimboe@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Cc: Guenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f41b2d7e
    • Josh Snyder's avatar
      delayacct: Account blkio completion on the correct task · 36ae2e6f
      Josh Snyder authored
      commit c96f5471 upstream.
      
      Before commit:
      
        e33a9bba ("sched/core: move IO scheduling accounting from io_schedule_timeout() into scheduler")
      
      delayacct_blkio_end() was called after context-switching into the task which
      completed I/O.
      
      This resulted in double counting: the task would account a delay both waiting
      for I/O and for time spent in the runqueue.
      
      With e33a9bba, delayacct_blkio_end() is called by try_to_wake_up().
      In ttwu, we have not yet context-switched. This is more correct, in that
      the delay accounting ends when the I/O is complete.
      
      But delayacct_blkio_end() relies on 'get_current()', and we have not yet
      context-switched into the task whose I/O completed. This results in the
      wrong task having its delay accounting statistics updated.
      
      Instead of doing that, pass the task_struct being woken to delayacct_blkio_end(),
      so that it can update the statistics of the correct task.
      Signed-off-by: default avatarJosh Snyder <joshs@netflix.com>
      Acked-by: default avatarTejun Heo <tj@kernel.org>
      Acked-by: default avatarBalbir Singh <bsingharora@gmail.com>
      Cc: Brendan Gregg <bgregg@netflix.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-block@vger.kernel.org
      Fixes: e33a9bba ("sched/core: move IO scheduling accounting from io_schedule_timeout() into scheduler")
      Link: http://lkml.kernel.org/r/1513613712-571-1-git-send-email-joshs@netflix.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      36ae2e6f
    • Sagi Grimberg's avatar
      iser-target: Fix possible use-after-free in connection establishment error · 9ace222b
      Sagi Grimberg authored
      commit cd52cb26 upstream.
      
      In case we fail to establish the connection we must drain our pre-posted
      login recieve work request before continuing safely with connection
      teardown.
      
      Fixes: a060b562 ("IB/core: generic RDMA READ/WRITE API")
      Reported-by: default avatarAmrani, Ram <Ram.Amrani@cavium.com>
      Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9ace222b
    • Eric Biggers's avatar
      af_key: fix buffer overread in parse_exthdrs() · 754705d8
      Eric Biggers authored
      commit 4e765b49 upstream.
      
      If a message sent to a PF_KEY socket ended with an incomplete extension
      header (fewer than 4 bytes remaining), then parse_exthdrs() read past
      the end of the message, into uninitialized memory.  Fix it by returning
      -EINVAL in this case.
      
      Reproducer:
      
      	#include <linux/pfkeyv2.h>
      	#include <sys/socket.h>
      	#include <unistd.h>
      
      	int main()
      	{
      		int sock = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
      		char buf[17] = { 0 };
      		struct sadb_msg *msg = (void *)buf;
      
      		msg->sadb_msg_version = PF_KEY_V2;
      		msg->sadb_msg_type = SADB_DELETE;
      		msg->sadb_msg_len = 2;
      
      		write(sock, buf, 17);
      	}
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      754705d8
    • Eric Biggers's avatar
      af_key: fix buffer overread in verify_address_len() · bee113ae
      Eric Biggers authored
      commit 06b335cb upstream.
      
      If a message sent to a PF_KEY socket ended with one of the extensions
      that takes a 'struct sadb_address' but there were not enough bytes
      remaining in the message for the ->sa_family member of the 'struct
      sockaddr' which is supposed to follow, then verify_address_len() read
      past the end of the message, into uninitialized memory.  Fix it by
      returning -EINVAL in this case.
      
      This bug was found using syzkaller with KMSAN.
      
      Reproducer:
      
      	#include <linux/pfkeyv2.h>
      	#include <sys/socket.h>
      	#include <unistd.h>
      
      	int main()
      	{
      		int sock = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
      		char buf[24] = { 0 };
      		struct sadb_msg *msg = (void *)buf;
      		struct sadb_address *addr = (void *)(msg + 1);
      
      		msg->sadb_msg_version = PF_KEY_V2;
      		msg->sadb_msg_type = SADB_DELETE;
      		msg->sadb_msg_len = 3;
      		addr->sadb_address_len = 1;
      		addr->sadb_address_exttype = SADB_EXT_ADDRESS_SRC;
      
      		write(sock, buf, 24);
      	}
      Reported-by: default avatarAlexander Potapenko <glider@google.com>
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bee113ae
    • Thomas Gleixner's avatar
      timers: Unconditionally check deferrable base · 4db98c58
      Thomas Gleixner authored
      commit ed4bbf79 upstream.
      
      When the timer base is checked for expired timers then the deferrable base
      must be checked as well. This was missed when making the deferrable base
      independent of base::nohz_active.
      
      Fixes: ced6d5c1 ("timers: Use deferrable base independent of base::nohz_active")
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sebastian Siewior <bigeasy@linutronix.de>
      Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
      Cc: rt@linutronix.de
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4db98c58
    • Leon Romanovsky's avatar
      RDMA/mlx5: Fix out-of-bound access while querying AH · 69857621
      Leon Romanovsky authored
      commit ae59c3f0 upstream.
      
      The rdma_ah_find_type() accesses the port array based on an index
      controlled by userspace. The existing bounds check is after the first use
      of the index, so userspace can generate an out of bounds access, as shown
      by the KASN report below.
      
      ==================================================================
      BUG: KASAN: slab-out-of-bounds in to_rdma_ah_attr+0xa8/0x3b0
      Read of size 4 at addr ffff880019ae2268 by task ibv_rc_pingpong/409
      
      CPU: 0 PID: 409 Comm: ibv_rc_pingpong Not tainted 4.15.0-rc2-00031-gb60a3faf5b83-dirty #3
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
      Call Trace:
       dump_stack+0xe9/0x18f
       print_address_description+0xa2/0x350
       kasan_report+0x3a5/0x400
       to_rdma_ah_attr+0xa8/0x3b0
       mlx5_ib_query_qp+0xd35/0x1330
       ib_query_qp+0x8a/0xb0
       ib_uverbs_query_qp+0x237/0x7f0
       ib_uverbs_write+0x617/0xd80
       __vfs_write+0xf7/0x500
       vfs_write+0x149/0x310
       SyS_write+0xca/0x190
       entry_SYSCALL_64_fastpath+0x18/0x85
      RIP: 0033:0x7fe9c7a275a0
      RSP: 002b:00007ffee5498738 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
      RAX: ffffffffffffffda RBX: 00007fe9c7ce4b00 RCX: 00007fe9c7a275a0
      RDX: 0000000000000018 RSI: 00007ffee5498800 RDI: 0000000000000003
      RBP: 000055d0c8d3f010 R08: 00007ffee5498800 R09: 0000000000000018
      R10: 00000000000000ba R11: 0000000000000246 R12: 0000000000008000
      R13: 0000000000004fb0 R14: 000055d0c8d3f050 R15: 00007ffee5498560
      
      Allocated by task 1:
       __kmalloc+0x3f9/0x430
       alloc_mad_private+0x25/0x50
       ib_mad_post_receive_mads+0x204/0xa60
       ib_mad_init_device+0xa59/0x1020
       ib_register_device+0x83a/0xbc0
       mlx5_ib_add+0x50e/0x5c0
       mlx5_add_device+0x142/0x410
       mlx5_register_interface+0x18f/0x210
       mlx5_ib_init+0x56/0x63
       do_one_initcall+0x15b/0x270
       kernel_init_freeable+0x2d8/0x3d0
       kernel_init+0x14/0x190
       ret_from_fork+0x24/0x30
      
      Freed by task 0:
      (stack is not available)
      
      The buggy address belongs to the object at ffff880019ae2000
       which belongs to the cache kmalloc-512 of size 512
      The buggy address is located 104 bytes to the right of
       512-byte region [ffff880019ae2000, ffff880019ae2200)
      The buggy address belongs to the page:
      page:000000005d674e18 count:1 mapcount:0 mapping:          (null) index:0x0 compound_mapcount: 0
      flags: 0x4000000000008100(slab|head)
      raw: 4000000000008100 0000000000000000 0000000000000000 00000001000c000c
      raw: dead000000000100 dead000000000200 ffff88001a402000 0000000000000000
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
       ffff880019ae2100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       ffff880019ae2180: 00 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc
      >ffff880019ae2200: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                                                                ^
       ffff880019ae2280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       ffff880019ae2300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      ==================================================================
      Disabling lock debugging due to kernel taint
      
      Fixes: 44c58487 ("IB/core: Define 'ib' and 'roce' rdma_ah_attr types")
      Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      69857621