linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 4.8 000/138] 4.8.7-stable review
@ 2016-11-09 10:44 ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 001/138] i2c: rk3x: Give the tuning value 0 during rk3x_i2c_v0_calc_timings Greg Kroah-Hartman
                     ` (121 more replies)
  0 siblings, 122 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, torvalds, akpm, linux, shuah.kh, patches,
	ben.hutchings, stable

This is the start of the stable review cycle for the 4.8.7 release.
There are 138 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Fri Nov 11 10:28:05 UTC 2016.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:
	kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.8.7-rc1.gz
or in the git tree and branch at:
  git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.8.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Linux 4.8.7-rc1

Oliver Neukum <oneukum@suse.com>
    HID: usbhid: add ATEN CS962 to list of quirky devices

Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    cpufreq: intel_pstate: Set P-state upfront in performance mode

Boris Brezillon <boris.brezillon@free-electrons.com>
    ubi: fastmap: Fix add_vol() return value test in ubi_attach_fastmap()

Goldwyn Rodrigues <rgoldwyn@suse.com>
    btrfs: qgroup: Prevent qgroup->reserved from going subzero

Owen Hofmann <osh@google.com>
    kvm: x86: Check memopp before dereference (CVE-2016-8630)

Russell King <rmk+kernel@armlinux.org.uk>
    ARM: fix oops when using older ARMv4T CPUs

Jiri Slaby <jslaby@suse.cz>
    tty: vt, fix bogus division in csi_J

Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    v4l: vsp1: Prevent pipelines from running when not streaming

Tony Lindgren <tony@atomide.com>
    usb: musb: Fix hardirq-safe hardirq-unsafe lock order error

Stefan Wahren <stefan.wahren@i2se.com>
    usb: chipidea: host: fix NULL ptr dereference during shutdown

Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    usb: dwc3: Fix size used in dma_free_coherent()

David Hsu <davidhsu@google.com>
    pwm: Unexport children before chip removal

Wei Yongjun <weiyongjun1@huawei.com>
    omapfb: fix return value check in dsi_bind()

Dan Carpenter <dan.carpenter@oracle.com>
    video: fbdev: pxafb: potential NULL dereference on error

Emilio López <emilio.lopez@collabora.co.uk>
    uapi: add missing install of sync_file.h

Boris Brezillon <boris.brezillon@free-electrons.com>
    UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header

Liping Zhang <liping.zhang@spreadtrum.com>
    netfilter: xt_NFLOG: fix unexpected truncated packet

Ralf Ramsauer <ralf@ramses-pyramidenbau.de>
    i2c: mark device nodes only in case of successful instantiation

Daniel Stone <daniels@collabora.com>
    drm: i915: Wait for fences on new fb, not old

Paulo Zanoni <paulo.r.zanoni@intel.com>
    drm/i915/fbc: fix CFB size calculation for gen8+

Ville Syrjälä <ville.syrjala@linux.intel.com>
    drm/i915: Clean up DDI DDC/AUX CH sanitation

Ville Syrjälä <ville.syrjala@linux.intel.com>
    drm/i915: Respect alternate_aux_channel for all DDI ports

Felix Monninger <felix.monninger@gmail.com>
    drm: Release reference from blob lookup after replacing property

Ville Syrjälä <ville.syrjala@linux.intel.com>
    drm/dp/mst: Check peer device type before attempting EDID read

Paulo Zanoni <paulo.r.zanoni@intel.com>
    drm/i915/gen9: fix watermarks when using the pipe scaler

Paulo Zanoni <paulo.r.zanoni@intel.com>
    drm/i915/gen9: fix DDB partitioning for multi-screen cases

Ville Syrjälä <ville.syrjala@linux.intel.com>
    drm/fb-helper: Keep references for the current set of used connectors

Ville Syrjälä <ville.syrjala@linux.intel.com>
    drm/fb-helper: Fix connector ref leak on error

Takashi Iwai <tiwai@suse.de>
    drm/fb-helper: Don't call dirty callback for untouched clips

Peter Wu <peter@lekensteyn.nl>
    drm/nouveau/acpi: fix check for power resources support

Lucas Stach <dev@lynxeye.de>
    drm/radeon: drop register readback in cayman_cp_int_cntl_setup

Alex Deucher <alexander.deucher@amd.com>
    drm/radeon/si_dpm: workaround for SI kickers

Tom St Denis <tom.stdenis@amd.com>
    drm/radeon/si_dpm: Limit clocks on HD86xx part

Liu Ying <gnuiyl@gmail.com>
    drm/imx: ipuv3-plane: Access old u/vbo properly in ->atomic_check for YU12/YV12

Liu Ying <gnuiyl@gmail.com>
    drm/imx: ipuv3-plane: Switch EBA buffer only when we don't need modeset

Michel Dänzer <michel.daenzer@amd.com>
    Revert "drm/radeon: fix DP link training issue with second 4K monitor"

NeilBrown <neilb@suse.com>
    md: be careful not lot leak internal curr_resync value into metadata. -- (all)

Shaohua Li <shli@fb.com>
    RAID10: ignore discard error

Shaohua Li <shli@fb.com>
    RAID1: ignore discard error

Jaehoon Chung <jh80.chung@samsung.com>
    mmc: dw_mmc-pltfm: fix the potential NULL pointer dereference

Ching Huang <ching2048@areca.com.tw>
    scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware

Ewan D. Milne <emilne@redhat.com>
    scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded

Marty Faltesek <mfaltesek@google.com>
    ath10k: cache calibration data when the core is stopped

Felix Fietkau <nbd@nbd.name>
    Revert "ath9k_hw: implement temperature compensation support for AR9003+"

Johannes Berg <johannes.berg@intel.com>
    mac80211: discard multicast and 4-addr A-MSDUs

Stefan Richter <stefanr@s5r6.in-berlin.de>
    firewire: net: fix fragmented datagram_size off-by-one

Stefan Richter <stefanr@s5r6.in-berlin.de>
    firewire: net: guard against rx buffer overflows

Patrick Scheuring <patrick.scheuring.dev@gmail.com>
    Input: i8042 - add XMG C504 to keyboard reset table

Jes Sorensen <Jes.Sorensen@redhat.com>
    rtl8xxxu: Fix rtl8723bu driver reload issue

Jes Sorensen <Jes.Sorensen@redhat.com>
    rtl8xxxu: Fix big-endian problem reporting mactime

Jes Sorensen <Jes.Sorensen@redhat.com>
    rtl8xxxu: Fix memory leak in handling rxdesc16 packets

Heinz Mauelshagen <heinzm@redhat.com>
    dm raid: fix activation of existing raid4/10 devices

Andy Whitcroft <apw@canonical.com>
    dm raid: fix compat_features validation

Mike Snitzer <snitzer@redhat.com>
    dm rq: clear kworker_task if kthread_run() returned an error

tang.junhui <tang.junhui@zte.com.cn>
    dm table: fix missing dm_put_target_type() in dm_table_add_target()

Heinz Mauelshagen <heinzm@redhat.com>
    dm mirror: fix read error on recovery after default leg failure

Matt Redfearn <matt.redfearn@imgtec.com>
    virtio: console: Unlock vqs while freeing buffers

Will Deacon <will.deacon@arm.com>
    virtio_pci: Limit DMA mask to 44 bits for legacy virtio devices

Ladi Prosek <lprosek@redhat.com>
    virtio_ring: Make interrupt suppression spec compliant

John David Anglin <dave.anglin@bell.net>
    parisc: Ensure consistent state when switching to kernel stack at syscall entry

Miklos Szeredi <mszeredi@redhat.com>
    ovl: fsync after copy-up

Miklos Szeredi <mszeredi@redhat.com>
    ovl: update S_ISGID when setting posix ACLs

Miklos Szeredi <mszeredi@redhat.com>
    ovl: fix get_acl() on tmpfs

Matt Redfearn <matt.redfearn@imgtec.com>
    MIPS: KASLR: Fix handling of NULL FDT

Chuck Lever <chuck.lever@oracle.com>
    nfsd: Fix general protection fault in release_lock_stateid()

Linus Walleij <linus.walleij@linaro.org>
    ARM: dts: fix the SD card on the Snowball

Gregory CLEMENT <gregory.clement@free-electrons.com>
    ARM: mvebu: Select corediv clk for all mvebu v7 SoC

James Hogan <james.hogan@imgtec.com>
    KVM: MIPS: Precalculate MMIO load resume PC

James Hogan <james.hogan@imgtec.com>
    KVM: MIPS: Make ERET handle ERL before EXL

Janosch Frank <frankja@linux.vnet.ibm.com>
    KVM: s390: Fix STHYI buffer alignment for diag224

Ido Yariv <ido@wizery.com>
    KVM: x86: fix wbinvd_dirty_mask use-after-free

Tahsin Erdogan <tahsin@google.com>
    dm: free io_barrier after blk_cleanup_queue call

Aditya Shankar <Aditya.Shankar@microchip.com>
    Staging: wilc1000: Fix kernel Oops on opening the device

Sandhya Bankar <bankarsandhya512@gmail.com>
    iio:chemical:atlas-ph-sensor: Fix use of 32 bit int to hold 16 bit big endian value

Marcin Wojtas <mw@semihalf.com>
    arm64: dts: marvell: fix clocksource for CP110 master SPI0

Dmitry Vyukov <dvyukov@google.com>
    tty: limit terminal size to 4M chars

Mathias Nyman <mathias.nyman@linux.intel.com>
    xhci: workaround for hosts missing CAS bit

Mathias Nyman <mathias.nyman@linux.intel.com>
    xhci: add restart quirk for Intel Wildcatpoint PCH

Long Li <longli@microsoft.com>
    hv: do not lose pending heartbeat vmbus packets

Scot Doyle <lkml14@scotdoyle.com>
    vt: clear selection before resizing

Thomas Gleixner <tglx@linutronix.de>
    x86/smpboot: Init apic mapping before usage

Gerald Schaefer <gerald.schaefer@de.ibm.com>
    GenWQE: Fix bad page access during abort of resource allocation

Bryan Paluch <bryanpaluch@gmail.com>
    usb: increase ohci watchdog delay to 275 msec

Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    usb: renesas_usbhs: add wait after initialization for R-Car Gen3

Mathias Nyman <mathias.nyman@linux.intel.com>
    xhci: use default USB_RESUME_TIMEOUT when resuming ports.

Stefan Tauner <stefan.tauner@technikum-wien.at>
    USB: serial: ftdi_sio: add support for Infineon TriBoard TC2X7

Johan Hovold <johan@kernel.org>
    USB: serial: cp210x: fix tiocmget error handling

Johan Hovold <johan@kernel.org>
    USB: serial: fix potential NULL-dereference at probe

Felipe Balbi <felipe.balbi@linux.intel.com>
    usb: gadget: function: u_ether: don't starve tx request queue

Alexandre Belloni <alexandre.belloni@free-electrons.com>
    usb: gadget: udc: atmel: fix endpoint name

Alexander Usyskin <alexander.usyskin@intel.com>
    mei: txe: don't clean an unprocessed interrupt cause.

Richard Weinberger <richard@nod.at>
    ubifs: Fix regression in ubifs_readdir()

Richard Weinberger <richard@nod.at>
    ubifs: Abort readdir upon error

Thomas Gleixner <tglx@linutronix.de>
    timers: Lock base for same bucket optimization

Thomas Gleixner <tglx@linutronix.de>
    timers: Plug locking race vs. timer migration

Thomas Gleixner <tglx@linutronix.de>
    timers: Prevent base clock corruption when forwarding

Thomas Gleixner <tglx@linutronix.de>
    timers: Prevent base clock rewind when forwarding clock

Borislav Petkov <bp@suse.de>
    x86/microcode/AMD: Fix more fallout from CONFIG_RANDOMIZE_MEMORY=y

Paul Mackerras <paulus@ozlabs.org>
    powerpc/64: Fix race condition in setting lock bit in idle/wakeup code

Paul Mackerras <paulus@ozlabs.org>
    powerpc/64: Re-fix race condition between going idle and entering guest

Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    powerpc/mm/radix: Use tlbiel only if we ever ran on the current cpu

Segher Boessenkool <segher@kernel.crashing.org>
    powerpc: Convert cmp to cmpd in idle enter sequence

Chris Mason <clm@fb.com>
    btrfs: fix races on root_log_ctx lists

Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
    cxl: Fix leaking pid refs in some error paths

Arve Hjønnevåg <arve@android.com>
    ANDROID: binder: Clear binder and cookie when setting handle in flat binder struct

Arve Hjønnevåg <arve@android.com>
    ANDROID: binder: Add strong ref checks

Hui Wang <hui.wang@canonical.com>
    ALSA: hda - Fix headset mic detection problem for two Dell laptops

Takashi Iwai <tiwai@suse.de>
    ALSA: hda - Fix surround output pins for ASRock B150M mobo

Hui Wang <hui.wang@canonical.com>
    ALSA: hda - Adding a new group of pin cfg into ALC295 pin quirk table

Ard Biesheuvel <ard.biesheuvel@linaro.org>
    ALSA: hda - allow 40 bit DMA mask for NVidia devices

Takashi Iwai <tiwai@suse.de>
    ALSA: seq: Fix time account regression

Marcel Hasler <mahasler@gmail.com>
    ALSA: usb-audio: Add quirk for Syntek STK1160

Dan Williams <dan.j.williams@intel.com>
    device-dax: fix percpu_ref_exit ordering

Artem Savkov <asavkov@redhat.com>
    security/keys: make BIG_KEYS dependent on stdrng.

David Howells <dhowells@redhat.com>
    KEYS: Sort out big_key initialisation

David Howells <dhowells@redhat.com>
    KEYS: Fix short sprintf buffer in /proc/keys show function

Eric Ernst <eric.ernst@linux.intel.com>
    thermal/powerclamp: correct cpu support check

Johannes Weiner <hannes@cmpxchg.org>
    mm: memcontrol: do not recurse in direct reclaim

Joonsoo Kim <iamjoonsoo.kim@lge.com>
    mm/slab: fix kmemcg cache creation delayed issue

Alexander Polakov <apolyakov@beget.ru>
    mm/list_lru.c: avoid error-path NULL pointer deref

Darrick J. Wong <darrick.wong@oracle.com>
    libxfs: clean up _calc_dquots_per_chunk

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix another information leak

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIO_GET_LINEEVENT_IOCTL: Reject invalid line and event flags

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIO_GET_LINEHANDLE_IOCTL: Reject invalid line flags

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIO_GET_LINEEVENT_IOCTL: Validate line offset

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIO_GET_LINEHANDLE_IOCTL: Validate line offset

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIO_GET_CHIPINFO_IOCTL: Fix information leak

Lars-Peter Clausen <lars@metafoo.de>
    gpio: GPIO_GET_CHIPINFO_IOCTL: Fix line offset validation

David Arcari <darcari@redhat.com>
    gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get()

Mark Rutland <mark.rutland@arm.com>
    h8300: fix syscall restarting

Ralf Ramsauer <ralf@ramses-pyramidenbau.de>
    spi: mark device nodes only in case of successful instantiation

Arnd Bergmann <arnd@arndb.de>
    spi: fsl-espi: avoid processing uninitalized data on error

Ville Syrjälä <ville.syrjala@linux.intel.com>
    drm/dp/mst: Clear port->pdt when tearing down the i2c adapter

Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
    i2c: core: fix NULL pointer dereference under race condition

Hoan Tran <hotran@apm.com>
    i2c: xgene: Avoid dma_buffer overrun

David Wu <david.wu@rock-chips.com>
    i2c: rk3x: Give the tuning value 0 during rk3x_i2c_v0_calc_timings


-------------

Diffstat:

 Documentation/device-mapper/dm-raid.txt            |   1 +
 Makefile                                           |   4 +-
 arch/arm/boot/dts/ste-snowball.dts                 |  15 ++-
 arch/arm/mach-mvebu/Kconfig                        |   4 +-
 arch/arm/mm/abort-lv4t.S                           |  34 ++++--
 .../boot/dts/marvell/armada-cp110-master.dtsi      |   2 +-
 arch/h8300/include/asm/thread_info.h               |   4 -
 arch/h8300/kernel/signal.c                         |   2 +-
 arch/mips/include/asm/kvm_host.h                   |   7 +-
 arch/mips/kernel/relocate.c                        |   2 +-
 arch/mips/kvm/emulate.c                            |  32 +++---
 arch/parisc/kernel/syscall.S                       |  11 +-
 arch/powerpc/include/asm/cpuidle.h                 |   2 +-
 arch/powerpc/include/asm/tlb.h                     |  12 ++
 arch/powerpc/kernel/idle_book3s.S                  |  35 +++++-
 arch/powerpc/mm/tlb-radix.c                        |   8 +-
 arch/s390/kvm/sthyi.c                              |   4 +-
 arch/x86/kernel/cpu/microcode/amd.c                |   2 +-
 arch/x86/kernel/setup.c                            |   7 +-
 arch/x86/kvm/emulate.c                             |   2 +-
 arch/x86/kvm/x86.c                                 |   4 +-
 drivers/android/binder.c                           |  35 ++++--
 drivers/char/virtio_console.c                      |  22 +++-
 drivers/cpufreq/intel_pstate.c                     |  29 ++++-
 drivers/dax/pmem.c                                 |   2 +-
 drivers/firewire/net.c                             |  59 ++++++----
 drivers/gpio/gpiolib-acpi.c                        |   7 +-
 drivers/gpio/gpiolib.c                             |  99 ++++++++++++++---
 drivers/gpu/drm/drm_atomic.c                       |   9 +-
 drivers/gpu/drm/drm_dp_mst_topology.c              |   6 +-
 drivers/gpu/drm/drm_fb_helper.c                    |  68 +++++++-----
 drivers/gpu/drm/i915/intel_bios.c                  | 122 +++++++++++++--------
 drivers/gpu/drm/i915/intel_display.c               |   2 +-
 drivers/gpu/drm/i915/intel_dp.c                    |  71 ++++++------
 drivers/gpu/drm/i915/intel_fbc.c                   |   4 +-
 drivers/gpu/drm/i915/intel_pm.c                    |  24 ++--
 drivers/gpu/drm/imx/ipuv3-plane.c                  |   7 +-
 drivers/gpu/drm/nouveau/nouveau_acpi.c             |   3 +-
 drivers/gpu/drm/radeon/ni.c                        |   4 +-
 drivers/gpu/drm/radeon/radeon_dp_auxch.c           |   2 +-
 drivers/gpu/drm/radeon/si_dpm.c                    |  53 +++++++--
 drivers/hid/hid-ids.h                              |   1 +
 drivers/hid/usbhid/hid-quirks.c                    |   1 +
 drivers/hv/hv_util.c                               |  10 +-
 drivers/i2c/busses/i2c-rk3x.c                      |   2 +
 drivers/i2c/busses/i2c-xgene-slimpro.c             |   2 +-
 drivers/i2c/i2c-core.c                             |  13 ++-
 drivers/iio/chemical/atlas-ph-sensor.c             |   7 +-
 drivers/input/serio/i8042-x86ia64io.h              |   7 ++
 drivers/md/dm-raid.c                               |  15 ++-
 drivers/md/dm-raid1.c                              |   1 +
 drivers/md/dm-rq.c                                 |   7 +-
 drivers/md/dm-table.c                              |  24 ++--
 drivers/md/dm.c                                    |   4 +-
 drivers/md/md.c                                    |   4 +-
 drivers/md/raid1.c                                 |   7 +-
 drivers/md/raid10.c                                |   7 +-
 drivers/media/platform/vsp1/vsp1_video.c           |   7 ++
 drivers/misc/cxl/api.c                             |   2 +
 drivers/misc/cxl/file.c                            |  22 ++--
 drivers/misc/genwqe/card_utils.c                   |  12 +-
 drivers/misc/mei/hw-txe.c                          |   6 +-
 drivers/mmc/host/dw_mmc-pltfm.c                    |   5 +-
 drivers/mtd/ubi/fastmap.c                          |  17 +--
 drivers/net/wireless/ath/ath10k/core.h             |   1 +
 drivers/net/wireless/ath/ath10k/debug.c            |  75 +++++++------
 drivers/net/wireless/ath/ath9k/ar9003_calib.c      |  25 +----
 drivers/net/wireless/ath/ath9k/hw.h                |   1 -
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h   |   4 +-
 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c |   4 +
 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c  |  11 +-
 drivers/pwm/core.c                                 |   2 +
 drivers/pwm/sysfs.c                                |  18 +++
 drivers/scsi/arcmsr/arcmsr_hba.c                   |   9 --
 drivers/scsi/scsi_debug.c                          |   1 +
 drivers/spi/spi-fsl-espi.c                         |   2 +-
 drivers/spi/spi.c                                  |   5 +-
 drivers/staging/wilc1000/host_interface.c          |   1 -
 drivers/thermal/intel_powerclamp.c                 |  14 +--
 drivers/tty/vt/vt.c                                |   7 +-
 drivers/usb/chipidea/host.c                        |   2 +
 drivers/usb/dwc3/gadget.c                          |   4 +-
 drivers/usb/gadget/function/u_ether.c              |   5 +-
 drivers/usb/gadget/udc/atmel_usba_udc.c            |   2 +-
 drivers/usb/host/ohci-hcd.c                        |   2 +-
 drivers/usb/host/xhci-hub.c                        |  41 ++++++-
 drivers/usb/host/xhci-pci.c                        |  10 +-
 drivers/usb/host/xhci.h                            |   3 +
 drivers/usb/musb/omap2430.c                        |   7 +-
 drivers/usb/renesas_usbhs/rcar3.c                  |   8 +-
 drivers/usb/serial/cp210x.c                        |   4 +-
 drivers/usb/serial/ftdi_sio.c                      |   3 +-
 drivers/usb/serial/ftdi_sio_ids.h                  |   5 +-
 drivers/usb/serial/usb-serial.c                    |   3 +-
 drivers/video/fbdev/omap2/omapfb/dss/dsi.c         |   4 +-
 drivers/video/fbdev/pxafb.c                        |   2 +-
 drivers/virtio/virtio_pci_legacy.c                 |  16 ++-
 drivers/virtio/virtio_ring.c                       |  14 ++-
 fs/btrfs/inode.c                                   |   9 +-
 fs/btrfs/tree-log.c                                |  20 +---
 fs/nfsd/nfs4state.c                                |  10 +-
 fs/overlayfs/copy_up.c                             |   2 +
 fs/overlayfs/inode.c                               |   3 -
 fs/overlayfs/super.c                               |  15 +++
 fs/ubifs/dir.c                                     |  16 ++-
 fs/xfs/libxfs/xfs_dquot_buf.c                      |   3 +-
 include/linux/pwm.h                                |   5 +
 include/uapi/linux/Kbuild                          |   1 +
 kernel/time/timer.c                                |  74 ++++++++-----
 mm/list_lru.c                                      |   2 +
 mm/memcontrol.c                                    |   9 ++
 mm/slab.c                                          |   2 +-
 mm/vmscan.c                                        |   2 +
 net/mac80211/rx.c                                  |  24 ++--
 net/netfilter/xt_NFLOG.c                           |   1 +
 security/keys/Kconfig                              |   2 +-
 security/keys/big_key.c                            |  59 +++++-----
 security/keys/proc.c                               |   2 +-
 sound/core/seq/seq_timer.c                         |   4 +-
 sound/pci/hda/hda_intel.c                          |   7 +-
 sound/pci/hda/patch_realtek.c                      |  30 ++++-
 sound/usb/quirks-table.h                           |  17 +++
 122 files changed, 1097 insertions(+), 542 deletions(-)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 001/138] i2c: rk3x: Give the tuning value 0 during rk3x_i2c_v0_calc_timings
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 002/138] i2c: xgene: Avoid dma_buffer overrun Greg Kroah-Hartman
                     ` (120 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, David Wu, Andy Yan, Douglas Anderson,
	Wolfram Sang

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Wu <david.wu@rock-chips.com>

commit 399c168ab5ab5e12ed55b6c91d61c24eb84c9164 upstream.

We found a bug that i2c transfer sometimes failed on 3066a board with
stabel-4.8, the con register would be updated by uninitialized tuning
value, it made the i2c transfer failed.

So give the tuning value to be zero during rk3x_i2c_v0_calc_timings.

Signed-off-by: David Wu <david.wu@rock-chips.com>
Tested-by: Andy Yan <andy.yan@rock-chips.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/i2c/busses/i2c-rk3x.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/i2c/busses/i2c-rk3x.c
+++ b/drivers/i2c/busses/i2c-rk3x.c
@@ -694,6 +694,8 @@ static int rk3x_i2c_v0_calc_timings(unsi
 	t_calc->div_low--;
 	t_calc->div_high--;
 
+	/* Give the tuning value 0, that would not update con register */
+	t_calc->tuning = 0;
 	/* Maximum divider supported by hw is 0xffff */
 	if (t_calc->div_low > 0xffff) {
 		t_calc->div_low = 0xffff;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 002/138] i2c: xgene: Avoid dma_buffer overrun
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 001/138] i2c: rk3x: Give the tuning value 0 during rk3x_i2c_v0_calc_timings Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 003/138] i2c: core: fix NULL pointer dereference under race condition Greg Kroah-Hartman
                     ` (119 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Phil Endecott, Hoan Tran, Wolfram Sang

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Hoan Tran <hotran@apm.com>

commit 603616017c35f4d0fbdbcace72adf9bf949c4a65 upstream.

SMBus block command uses the first byte of buffer for the data length.
The dma_buffer should be increased by 1 to avoid the overrun issue.

Reported-by: Phil Endecott <phil_gjouf_endecott@chezphil.org>
Signed-off-by: Hoan Tran <hotran@apm.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/i2c/busses/i2c-xgene-slimpro.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/i2c/busses/i2c-xgene-slimpro.c
+++ b/drivers/i2c/busses/i2c-xgene-slimpro.c
@@ -105,7 +105,7 @@ struct slimpro_i2c_dev {
 	struct mbox_chan *mbox_chan;
 	struct mbox_client mbox_client;
 	struct completion rd_complete;
-	u8 dma_buffer[I2C_SMBUS_BLOCK_MAX];
+	u8 dma_buffer[I2C_SMBUS_BLOCK_MAX + 1]; /* dma_buffer[0] is used for length */
 	u32 *resp_msg;
 };
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 003/138] i2c: core: fix NULL pointer dereference under race condition
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 001/138] i2c: rk3x: Give the tuning value 0 during rk3x_i2c_v0_calc_timings Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 002/138] i2c: xgene: Avoid dma_buffer overrun Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 005/138] spi: fsl-espi: avoid processing uninitalized data on error Greg Kroah-Hartman
                     ` (118 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Vladimir Zapolskiy, Wolfram Sang

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>

commit 147b36d5b70c083cc76770c47d60b347e8eaf231 upstream.

Race condition between registering an I2C device driver and
deregistering an I2C adapter device which is assumed to manage that
I2C device may lead to a NULL pointer dereference due to the
uninitialized list head of driver clients.

The root cause of the issue is that the I2C bus may know about the
registered device driver and thus it is matched by bus_for_each_drv(),
but the list of clients is not initialized and commonly it is NULL,
because I2C device drivers define struct i2c_driver as static and
clients field is expected to be initialized by I2C core:

  i2c_register_driver()             i2c_del_adapter()
    driver_register()                 ...
      bus_add_driver()                ...
        ...                           bus_for_each_drv(..., __process_removed_adapter)
      ...                               i2c_do_del_adapter()
    ...                                   list_for_each_entry_safe(..., &driver->clients, ...)
    INIT_LIST_HEAD(&driver->clients);

To solve the problem it is sufficient to do clients list head
initialization before calling driver_register().

The problem was found while using an I2C device driver with a sluggish
registration routine on a bus provided by a physically detachable I2C
master controller, but practically the oops may be reproduced under
the race between arbitraty I2C device driver registration and managing
I2C bus device removal e.g. by unbinding the latter over sysfs:

% echo 21a4000.i2c > /sys/bus/platform/drivers/imx-i2c/unbind
  Unable to handle kernel NULL pointer dereference at virtual address 00000000
  Internal error: Oops: 17 [#1] SMP ARM
  CPU: 2 PID: 533 Comm: sh Not tainted 4.9.0-rc3+ #61
  Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
  task: e5ada400 task.stack: e4936000
  PC is at i2c_do_del_adapter+0x20/0xcc
  LR is at __process_removed_adapter+0x14/0x1c
  Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
  Control: 10c5387d  Table: 35bd004a  DAC: 00000051
  Process sh (pid: 533, stack limit = 0xe4936210)
  Stack: (0xe4937d28 to 0xe4938000)
  Backtrace:
  [<c0667be0>] (i2c_do_del_adapter) from [<c0667cc0>] (__process_removed_adapter+0x14/0x1c)
  [<c0667cac>] (__process_removed_adapter) from [<c0516998>] (bus_for_each_drv+0x6c/0xa0)
  [<c051692c>] (bus_for_each_drv) from [<c06685ec>] (i2c_del_adapter+0xbc/0x284)
  [<c0668530>] (i2c_del_adapter) from [<bf0110ec>] (i2c_imx_remove+0x44/0x164 [i2c_imx])
  [<bf0110a8>] (i2c_imx_remove [i2c_imx]) from [<c051a838>] (platform_drv_remove+0x2c/0x44)
  [<c051a80c>] (platform_drv_remove) from [<c05183d8>] (__device_release_driver+0x90/0x12c)
  [<c0518348>] (__device_release_driver) from [<c051849c>] (device_release_driver+0x28/0x34)
  [<c0518474>] (device_release_driver) from [<c0517150>] (unbind_store+0x80/0x104)
  [<c05170d0>] (unbind_store) from [<c0516520>] (drv_attr_store+0x28/0x34)
  [<c05164f8>] (drv_attr_store) from [<c0298acc>] (sysfs_kf_write+0x50/0x54)
  [<c0298a7c>] (sysfs_kf_write) from [<c029801c>] (kernfs_fop_write+0x100/0x214)
  [<c0297f1c>] (kernfs_fop_write) from [<c0220130>] (__vfs_write+0x34/0x120)
  [<c02200fc>] (__vfs_write) from [<c0221088>] (vfs_write+0xa8/0x170)
  [<c0220fe0>] (vfs_write) from [<c0221e74>] (SyS_write+0x4c/0xa8)
  [<c0221e28>] (SyS_write) from [<c0108a20>] (ret_fast_syscall+0x0/0x1c)

Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/i2c/i2c-core.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -2073,6 +2073,7 @@ int i2c_register_driver(struct module *o
 	/* add the driver to the list of i2c drivers in the driver core */
 	driver->driver.owner = owner;
 	driver->driver.bus = &i2c_bus_type;
+	INIT_LIST_HEAD(&driver->clients);
 
 	/* When registration returns, the driver core
 	 * will have called probe() for all matching-but-unbound devices.
@@ -2083,7 +2084,6 @@ int i2c_register_driver(struct module *o
 
 	pr_debug("driver [%s] registered\n", driver->driver.name);
 
-	INIT_LIST_HEAD(&driver->clients);
 	/* Walk the adapters that are already present */
 	i2c_for_each_dev(driver, __process_new_driver);
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 005/138] spi: fsl-espi: avoid processing uninitalized data on error
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (2 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 003/138] i2c: core: fix NULL pointer dereference under race condition Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 006/138] spi: mark device nodes only in case of successful instantiation Greg Kroah-Hartman
                     ` (117 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mark Brown

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 5c0ba57744b1422d528f19430dd66d6803cea86f upstream.

When we get a spurious interrupt in fsl_espi_irq, we end up
processing four uninitalized bytes of data, as shown in this
warning message:

   drivers/spi/spi-fsl-espi.c: In function 'fsl_espi_irq':
   drivers/spi/spi-fsl-espi.c:462:4: warning: 'rx_data' may be used uninitialized in this function [-Wmaybe-uninitialized]

This adds another check so we skip the data in this case.

Fixes: 6319a68011b8 ("spi/fsl-espi: avoid infinite loops on fsl_espi_cpu_irq()")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/spi/spi-fsl-espi.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/spi/spi-fsl-espi.c
+++ b/drivers/spi/spi-fsl-espi.c
@@ -581,7 +581,7 @@ void fsl_espi_cpu_irq(struct mpc8xxx_spi
 
 		mspi->len -= rx_nr_bytes;
 
-		if (mspi->rx)
+		if (rx_nr_bytes && mspi->rx)
 			mspi->get_rx(rx_data, mspi);
 	}
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 006/138] spi: mark device nodes only in case of successful instantiation
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (3 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 005/138] spi: fsl-espi: avoid processing uninitalized data on error Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 007/138] h8300: fix syscall restarting Greg Kroah-Hartman
                     ` (116 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ralf Ramsauer, Geert Uytterhoeven,
	Pantelis Antoniou, Mark Brown

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ralf Ramsauer <ralf@ramses-pyramidenbau.de>

commit e0af98a7e025a7263ae7e50264f6f79ed29642a7 upstream.

Instantiated SPI device nodes are marked with OF_POPULATE. This was
introduced in bd6c164. On unloading, loaded device nodes will of course
be unmarked. The problem are nodes that fail during initialisation: If a
node fails, it won't be unloaded and hence not be unmarked.

If a SPI driver module is unloaded and reloaded, it will skip nodes that
failed before.

Skip device nodes that are already populated and mark them only in case
of success.

Note that the same issue exists for I2C.

Fixes: bd6c164 ("spi: Mark instantiated device nodes with OF_POPULATE")
Signed-off-by: Ralf Ramsauer <ralf@ramses-pyramidenbau.de>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/spi/spi.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1607,9 +1607,11 @@ static void of_register_spi_devices(stru
 		if (of_node_test_and_set_flag(nc, OF_POPULATED))
 			continue;
 		spi = of_register_spi_device(master, nc);
-		if (IS_ERR(spi))
+		if (IS_ERR(spi)) {
 			dev_warn(&master->dev, "Failed to create SPI device for %s\n",
 				nc->full_name);
+			of_node_clear_flag(nc, OF_POPULATED);
+		}
 	}
 }
 #else
@@ -3120,6 +3122,7 @@ static int of_spi_notify(struct notifier
 		if (IS_ERR(spi)) {
 			pr_err("%s: failed to create for '%s'\n",
 					__func__, rd->dn->full_name);
+			of_node_clear_flag(rd->dn, OF_POPULATED);
 			return notifier_from_errno(PTR_ERR(spi));
 		}
 		break;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 007/138] h8300: fix syscall restarting
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (4 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 006/138] spi: mark device nodes only in case of successful instantiation Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 008/138] gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get() Greg Kroah-Hartman
                     ` (115 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Mark Rutland, Andy Lutomirski,
	Yoshinori Sato, uclinux-h8-devel, Andrew Morton, Linus Torvalds

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mark Rutland <mark.rutland@arm.com>

commit 21753583056d48a5fad964d6f272e28168426845 upstream.

Back in commit f56141e3e2d9 ("all arches, signal: move restart_block to
struct task_struct"), all architectures and core code were changed to
use task_struct::restart_block.  However, when h8300 support was
subsequently restored in v4.2, it was not updated to account for this,
and maintains thread_info::restart_block, which is not kept in sync.

This patch drops the redundant restart_block from thread_info, and moves
h8300 to the common one in task_struct, ensuring that syscall restarting
always works as expected.

Fixes: f56141e3e2d9 ("all arches, signal: move restart_block to struct task_struct")
Link: http://lkml.kernel.org/r/1476714934-11635-1-git-send-email-mark.rutland@arm.com
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: uclinux-h8-devel@lists.sourceforge.jp
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/h8300/include/asm/thread_info.h |    4 ----
 arch/h8300/kernel/signal.c           |    2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)

--- a/arch/h8300/include/asm/thread_info.h
+++ b/arch/h8300/include/asm/thread_info.h
@@ -31,7 +31,6 @@ struct thread_info {
 	int		   cpu;			/* cpu we're on */
 	int		   preempt_count;	/* 0 => preemptable, <0 => BUG */
 	mm_segment_t		addr_limit;
-	struct restart_block restart_block;
 };
 
 /*
@@ -44,9 +43,6 @@ struct thread_info {
 	.cpu =		0,			\
 	.preempt_count = INIT_PREEMPT_COUNT,	\
 	.addr_limit	= KERNEL_DS,		\
-	.restart_block	= {			\
-		.fn = do_no_restart_syscall,	\
-	},					\
 }
 
 #define init_thread_info	(init_thread_union.thread_info)
--- a/arch/h8300/kernel/signal.c
+++ b/arch/h8300/kernel/signal.c
@@ -79,7 +79,7 @@ restore_sigcontext(struct sigcontext *us
 	unsigned int er0;
 
 	/* Always make any pending restarted system calls return -EINTR */
-	current_thread_info()->restart_block.fn = do_no_restart_syscall;
+	current->restart_block.fn = do_no_restart_syscall;
 
 	/* restore passed registers */
 #define COPY(r)  do { err |= get_user(regs->r, &usc->sc_##r); } while (0)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 008/138] gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get()
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (5 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 007/138] h8300: fix syscall restarting Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 009/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix line offset validation Greg Kroah-Hartman
                     ` (114 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, David Arcari, Benjamin Tissoires,
	Mika Westerberg, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Arcari <darcari@redhat.com>

commit 67bf5156edc4f58241fd7c119ae145c552adddd6 upstream.

acpi_dev_gpio_irq_get() currently ignores the error returned
by acpi_get_gpiod_by_index() and overwrites it with -ENOENT.

Problem is this error can be -EPROBE_DEFER, which just blows
up some drivers when the module ordering is not correct.

Signed-off-by: David Arcari <darcari@redhat.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib-acpi.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/drivers/gpio/gpiolib-acpi.c
+++ b/drivers/gpio/gpiolib-acpi.c
@@ -602,14 +602,17 @@ int acpi_dev_gpio_irq_get(struct acpi_de
 {
 	int idx, i;
 	unsigned int irq_flags;
+	int ret = -ENOENT;
 
 	for (i = 0, idx = 0; idx <= index; i++) {
 		struct acpi_gpio_info info;
 		struct gpio_desc *desc;
 
 		desc = acpi_get_gpiod_by_index(adev, NULL, i, &info);
-		if (IS_ERR(desc))
+		if (IS_ERR(desc)) {
+			ret = PTR_ERR(desc);
 			break;
+		}
 		if (info.gpioint && idx++ == index) {
 			int irq = gpiod_to_irq(desc);
 
@@ -628,7 +631,7 @@ int acpi_dev_gpio_irq_get(struct acpi_de
 		}
 
 	}
-	return -ENOENT;
+	return ret;
 }
 EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_get);
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 009/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix line offset validation
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (6 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 008/138] gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get() Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 010/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix information leak Greg Kroah-Hartman
                     ` (113 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit 1f1cc4566bd9dd8d3cf19965a4b6392143618536 upstream.

The current line offset validation is off by one. Depending on the data
stored behind the descs array this can either cause undefined behavior or
disclose arbitrary, potentially sensitive, memory to the issuing userspace
application.

Make sure that offset is within the bounds of the desc array.

Fixes: 521a2ad6f862 ("gpio: add userspace ABI for GPIO line information")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -837,7 +837,7 @@ static long gpio_ioctl(struct file *filp
 
 		if (copy_from_user(&lineinfo, ip, sizeof(lineinfo)))
 			return -EFAULT;
-		if (lineinfo.line_offset > gdev->ngpio)
+		if (lineinfo.line_offset >= gdev->ngpio)
 			return -EINVAL;
 
 		desc = &gdev->descs[lineinfo.line_offset];

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 010/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix information leak
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (7 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 009/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix line offset validation Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 011/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Validate line offset Greg Kroah-Hartman
                     ` (112 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit 0f4bbb233743bdfd51d47688b0bc2561f310488b upstream.

The GPIO_GET_CHIPINFO_IOCTL handler allocates a gpiochip_info struct on the
stack and then passes it to copy_to_user(). But depending on the length of
the GPIO chip name and label the struct is only partially initialized.

This exposes the previous, potentially sensitive, stack content to the
issuing userspace application. To avoid this make sure that the struct is
fully initialized.

Fixes: 521a2ad6f862 ("gpio: add userspace ABI for GPIO line information")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -821,6 +821,8 @@ static long gpio_ioctl(struct file *filp
 	if (cmd == GPIO_GET_CHIPINFO_IOCTL) {
 		struct gpiochip_info chipinfo;
 
+		memset(&chipinfo, 0, sizeof(chipinfo));
+
 		strncpy(chipinfo.name, dev_name(&gdev->dev),
 			sizeof(chipinfo.name));
 		chipinfo.name[sizeof(chipinfo.name)-1] = '\0';

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 011/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Validate line offset
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (8 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 010/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix information leak Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 012/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak Greg Kroah-Hartman
                     ` (111 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit e405f9fcb63602d35f7a419ededa3f952a395a72 upstream.

The line offset that is used as an index into the descs array is provided
by userspace and might go beyond the bounds of the array. If that happens
undefined behavior will occur.

Make sure that the offset is within the bounds of the desc array and reject
any requests that specify a value outside of it.

Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -442,6 +442,11 @@ static int linehandle_create(struct gpio
 		u32 lflags = handlereq.flags;
 		struct gpio_desc *desc;
 
+		if (offset >= gdev->ngpio) {
+			ret = -EINVAL;
+			goto out_free_descs;
+		}
+
 		desc = &gdev->descs[offset];
 		ret = gpiod_request(desc, lh->label);
 		if (ret)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 012/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (9 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 011/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Validate line offset Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 013/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Validate line offset Greg Kroah-Hartman
                     ` (110 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit 3eded5d83bf4e36ad78775c7ceb44a45480b0abd upstream.

The GPIOHANDLE_GET_LINE_VALUES_IOCTL handler allocates a gpiohandle_data
struct on the stack and then passes it to copy_to_user(). But depending on
the number of requested line handles the struct is only partially
initialized.

This exposes the previous, potentially sensitive, stack content to the
issuing userspace application. To avoid this make sure that the struct is
fully initialized.

Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -342,6 +342,8 @@ static long linehandle_ioctl(struct file
 	if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) {
 		int val;
 
+		memset(&ghd, 0, sizeof(ghd));
+
 		/* TODO: check if descriptors are really input */
 		for (i = 0; i < lh->numdescs; i++) {
 			val = gpiod_get_value_cansleep(lh->descs[i]);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 013/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Validate line offset
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (10 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 012/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 014/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Reject invalid line flags Greg Kroah-Hartman
                     ` (109 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit b8b0e3d303654b3bb7b31b0266c513fd6f4132ce upstream.

The line offset that is used as an index into the descs array is provided
by userspace and might go beyond the bounds of the array. If that happens
undefined behavior will occur.

Make sure that the offset is within the bounds of the desc array and reject
any requests that specify a value outside of it.

Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -731,6 +731,11 @@ static int lineevent_create(struct gpio_
 	lflags = eventreq.handleflags;
 	eflags = eventreq.eventflags;
 
+	if (offset >= gdev->ngpio) {
+		ret = -EINVAL;
+		goto out_free_label;
+	}
+
 	/* This is just wrong: we don't look for events on output lines */
 	if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {
 		ret = -EINVAL;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 014/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Reject invalid line flags
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (11 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 013/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Validate line offset Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 015/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Reject invalid line and event flags Greg Kroah-Hartman
                     ` (108 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit e3e847c7f15a27c80f526b2a7a8d4dd7ce0960a0 upstream.

The GPIO_GET_LINEHANDLE_IOCTL currently ignores unknown or undefined
linehandle flags. From a backwards and forwards compatibility viewpoint it
is highly desirable to reject unknown flags though.

On one hand an application that is using newer flags and is running on
an older kernel has no way to detect if the new flags were handled
correctly if they are silently discarded.

On the other hand an application that (accidentally) passes undefined flags
will run fine on an older kernel, but may break on a newer kernel when
these flags get defined.

Ensure that requests that have undefined flags set are rejected with an
error, rather than silently discarding the undefined flags.

Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -331,6 +331,13 @@ struct linehandle_state {
 	u32 numdescs;
 };
 
+#define GPIOHANDLE_REQUEST_VALID_FLAGS \
+	(GPIOHANDLE_REQUEST_INPUT | \
+	GPIOHANDLE_REQUEST_OUTPUT | \
+	GPIOHANDLE_REQUEST_ACTIVE_LOW | \
+	GPIOHANDLE_REQUEST_OPEN_DRAIN | \
+	GPIOHANDLE_REQUEST_OPEN_SOURCE)
+
 static long linehandle_ioctl(struct file *filep, unsigned int cmd,
 			     unsigned long arg)
 {
@@ -448,6 +455,12 @@ static int linehandle_create(struct gpio
 			ret = -EINVAL;
 			goto out_free_descs;
 		}
+
+		/* Return an error if a unknown flag is set */
+		if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) {
+			ret = -EINVAL;
+			goto out_free_descs;
+		}
 
 		desc = &gdev->descs[offset];
 		ret = gpiod_request(desc, lh->label);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 015/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Reject invalid line and event flags
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (12 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 014/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Reject invalid line flags Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:44   ` [PATCH 4.8 016/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix another information leak Greg Kroah-Hartman
                     ` (107 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit ac7dbb991ee5afc0beacce3a252dcaaa249a7786 upstream.

The GPIO_GET_LINEEVENT_IOCTL currently ignores unknown or undefined
linehandle and lineevent flags. From a backwards and forwards compatibility
viewpoint it is highly desirable to reject unknown flags though.

On one hand an application that is using newer flags and is running on
an older kernel has no way to detect if the new flags were handled
correctly if they are silently discarded.

On the other hand an application that (accidentally) passes undefined flags
will run fine on an older kernel, but may break on a newer kernel when
these flags get defined.

Ensure that requests that have undefined flags set are rejected with an
error, rather than silently discarding the undefined flags.

Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |   11 +++++++++++
 1 file changed, 11 insertions(+)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -554,6 +554,10 @@ struct lineevent_state {
 	struct mutex read_lock;
 };
 
+#define GPIOEVENT_REQUEST_VALID_FLAGS \
+	(GPIOEVENT_REQUEST_RISING_EDGE | \
+	GPIOEVENT_REQUEST_FALLING_EDGE)
+
 static unsigned int lineevent_poll(struct file *filep,
 				   struct poll_table_struct *wait)
 {
@@ -748,6 +752,13 @@ static int lineevent_create(struct gpio_
 		ret = -EINVAL;
 		goto out_free_label;
 	}
+
+	/* Return an error if a unknown flag is set */
+	if ((lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) ||
+	    (eflags & ~GPIOEVENT_REQUEST_VALID_FLAGS)) {
+		ret = -EINVAL;
+		goto out_free_label;
+	}
 
 	/* This is just wrong: we don't look for events on output lines */
 	if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 016/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix another information leak
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (13 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 015/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Reject invalid line and event flags Greg Kroah-Hartman
@ 2016-11-09 10:44   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 017/138] gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak Greg Kroah-Hartman
                     ` (106 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:44 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit d82aa4a8f2e8df9673ddb099262355da4c9b99b1 upstream.

The GPIOHANDLE_GET_LINE_VALUES_IOCTL handler allocates a gpiohandle_data
struct on the stack and then passes it to copy_to_user(). But only the
first element of the values array in the struct is set, which leaves the
struct partially initialized.

This exposes the previous, potentially sensitive, stack content to the
issuing userspace application. To avoid this make sure that the struct is
fully initialized.

Cc: stable@vger.kernel.org
Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -645,6 +645,8 @@ static long lineevent_ioctl(struct file
 	if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) {
 		int val;
 
+		memset(&ghd, 0, sizeof(ghd));
+
 		val = gpiod_get_value_cansleep(le->desc);
 		if (val < 0)
 			return val;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 017/138] gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (14 preceding siblings ...)
  2016-11-09 10:44   ` [PATCH 4.8 016/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix another information leak Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 018/138] libxfs: clean up _calc_dquots_per_chunk Greg Kroah-Hartman
                     ` (105 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lars-Peter Clausen, Linus Walleij

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Lars-Peter Clausen <lars@metafoo.de>

commit 953b956a2e6d35298e684f251bad98ea6c96f982 upstream.

When allocating a new line handle or event a file is allocated that it is
associated to. The file is attached to a file descriptor of the current
process and the file descriptor is returned to userspace using
copy_to_user(). If this copy operation fails the line handle or event
allocation is aborted, all acquired resources are freed and an error is
returned.

But the file struct is not freed and left attached to the userspace
application and even though the file descriptor number was not copied it is
trivial to guess. If a userspace application performs a IOCTL on such a
left over file descriptor it will trigger a use-after-free and if the file
descriptor is closed (latest when the application exits) a double-free is
triggered.

anon_inode_getfd() performs 3 tasks, allocate a file struct, allocate a
file descriptor for the current process and install the file struct in the
file descriptor. As soon as the file struct is installed in the file
descriptor it is accessible by userspace (even if the IOCTL itself hasn't
completed yet), this means uninstalling the fd on the error path is not an
option, since userspace might already got a reference to the file.

Instead anon_inode_getfd() needs to be broken into its individual steps.
The allocation of the file struct and file descriptor is done first, then
the copy_to_user() is executed and only if it succeeds the file is
installed.

Since the file struct is reference counted it can not be just freed, but
its reference needs to be dropped, which will also call the release()
callback, which will free the state attached to the file. So in this case
the normal error cleanup path should not be taken.

Fixes: d932cd49182f ("gpio: free handles in fringe cases")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpiolib.c |   57 ++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 45 insertions(+), 12 deletions(-)

--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -21,6 +21,7 @@
 #include <linux/uaccess.h>
 #include <linux/compat.h>
 #include <linux/anon_inodes.h>
+#include <linux/file.h>
 #include <linux/kfifo.h>
 #include <linux/poll.h>
 #include <linux/timekeeping.h>
@@ -421,6 +422,7 @@ static int linehandle_create(struct gpio
 {
 	struct gpiohandle_request handlereq;
 	struct linehandle_state *lh;
+	struct file *file;
 	int fd, i, ret;
 
 	if (copy_from_user(&handlereq, ip, sizeof(handlereq)))
@@ -497,26 +499,41 @@ static int linehandle_create(struct gpio
 	i--;
 	lh->numdescs = handlereq.lines;
 
-	fd = anon_inode_getfd("gpio-linehandle",
-			      &linehandle_fileops,
-			      lh,
-			      O_RDONLY | O_CLOEXEC);
+	fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC);
 	if (fd < 0) {
 		ret = fd;
 		goto out_free_descs;
 	}
 
+	file = anon_inode_getfile("gpio-linehandle",
+				  &linehandle_fileops,
+				  lh,
+				  O_RDONLY | O_CLOEXEC);
+	if (IS_ERR(file)) {
+		ret = PTR_ERR(file);
+		goto out_put_unused_fd;
+	}
+
 	handlereq.fd = fd;
 	if (copy_to_user(ip, &handlereq, sizeof(handlereq))) {
-		ret = -EFAULT;
-		goto out_free_descs;
+		/*
+		 * fput() will trigger the release() callback, so do not go onto
+		 * the regular error cleanup path here.
+		 */
+		fput(file);
+		put_unused_fd(fd);
+		return -EFAULT;
 	}
 
+	fd_install(fd, file);
+
 	dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n",
 		lh->numdescs);
 
 	return 0;
 
+out_put_unused_fd:
+	put_unused_fd(fd);
 out_free_descs:
 	for (; i >= 0; i--)
 		gpiod_free(lh->descs[i]);
@@ -719,6 +736,7 @@ static int lineevent_create(struct gpio_
 	struct gpioevent_request eventreq;
 	struct lineevent_state *le;
 	struct gpio_desc *desc;
+	struct file *file;
 	u32 offset;
 	u32 lflags;
 	u32 eflags;
@@ -813,23 +831,38 @@ static int lineevent_create(struct gpio_
 	if (ret)
 		goto out_free_desc;
 
-	fd = anon_inode_getfd("gpio-event",
-			      &lineevent_fileops,
-			      le,
-			      O_RDONLY | O_CLOEXEC);
+	fd = get_unused_fd_flags(O_RDONLY | O_CLOEXEC);
 	if (fd < 0) {
 		ret = fd;
 		goto out_free_irq;
 	}
 
+	file = anon_inode_getfile("gpio-event",
+				  &lineevent_fileops,
+				  le,
+				  O_RDONLY | O_CLOEXEC);
+	if (IS_ERR(file)) {
+		ret = PTR_ERR(file);
+		goto out_put_unused_fd;
+	}
+
 	eventreq.fd = fd;
 	if (copy_to_user(ip, &eventreq, sizeof(eventreq))) {
-		ret = -EFAULT;
-		goto out_free_irq;
+		/*
+		 * fput() will trigger the release() callback, so do not go onto
+		 * the regular error cleanup path here.
+		 */
+		fput(file);
+		put_unused_fd(fd);
+		return -EFAULT;
 	}
 
+	fd_install(fd, file);
+
 	return 0;
 
+out_put_unused_fd:
+	put_unused_fd(fd);
 out_free_irq:
 	free_irq(le->irq, le);
 out_free_desc:

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 018/138] libxfs: clean up _calc_dquots_per_chunk
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (15 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 017/138] gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 019/138] mm/list_lru.c: avoid error-path NULL pointer deref Greg Kroah-Hartman
                     ` (104 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Darrick J. Wong, Eric Sandeen, Dave Chinner

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Darrick J. Wong <darrick.wong@oracle.com>

commit 58d789678546d46d7bbd809dd7dab417c0f23655 upstream.

The function xfs_calc_dquots_per_chunk takes a parameter in units
of basic blocks.  The kernel seems to get the units wrong, but
userspace got 'fixed' by commenting out the unnecessary conversion.
Fix both.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/xfs/libxfs/xfs_dquot_buf.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/fs/xfs/libxfs/xfs_dquot_buf.c
+++ b/fs/xfs/libxfs/xfs_dquot_buf.c
@@ -191,8 +191,7 @@ xfs_dquot_buf_verify_crc(
 	if (mp->m_quotainfo)
 		ndquots = mp->m_quotainfo->qi_dqperchunk;
 	else
-		ndquots = xfs_calc_dquots_per_chunk(
-					XFS_BB_TO_FSB(mp, bp->b_length));
+		ndquots = xfs_calc_dquots_per_chunk(bp->b_length);
 
 	for (i = 0; i < ndquots; i++, d++) {
 		if (!xfs_verify_cksum((char *)d, sizeof(struct xfs_dqblk),

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 019/138] mm/list_lru.c: avoid error-path NULL pointer deref
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (16 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 018/138] libxfs: clean up _calc_dquots_per_chunk Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 020/138] mm/slab: fix kmemcg cache creation delayed issue Greg Kroah-Hartman
                     ` (103 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Alexander Polakov, Vladimir Davydov,
	Al Viro, Andrew Morton, Linus Torvalds

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alexander Polakov <apolyakov@beget.ru>

commit 1bc11d70b5db7c6bb1414b283d7f09b1fe1ac0d0 upstream.

As described in https://bugzilla.kernel.org/show_bug.cgi?id=177821:

After some analysis it seems to be that the problem is in alloc_super().
In case list_lru_init_memcg() fails it goes into destroy_super(), which
calls list_lru_destroy().

And in list_lru_init() we see that in case memcg_init_list_lru() fails,
lru->node is freed, but not set NULL, which then leads list_lru_destroy()
to believe it is initialized and call memcg_destroy_list_lru().
memcg_destroy_list_lru() in turn can access lru->node[i].memcg_lrus,
which is NULL.

[akpm@linux-foundation.org: add comment]
Signed-off-by: Alexander Polakov <apolyakov@beget.ru>
Acked-by: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 mm/list_lru.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/mm/list_lru.c
+++ b/mm/list_lru.c
@@ -554,6 +554,8 @@ int __list_lru_init(struct list_lru *lru
 	err = memcg_init_list_lru(lru, memcg_aware);
 	if (err) {
 		kfree(lru->node);
+		/* Do this so a list_lru_destroy() doesn't crash: */
+		lru->node = NULL;
 		goto out;
 	}
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 020/138] mm/slab: fix kmemcg cache creation delayed issue
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (17 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 019/138] mm/list_lru.c: avoid error-path NULL pointer deref Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 021/138] mm: memcontrol: do not recurse in direct reclaim Greg Kroah-Hartman
                     ` (102 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Doug Smythies, Joonsoo Kim,
	Christoph Lameter, Pekka Enberg, David Rientjes, Andrew Morton,
	Linus Torvalds

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Joonsoo Kim <iamjoonsoo.kim@lge.com>

commit 86d9f48534e800e4d62cdc1b5aaf539f4c1d47d6 upstream.

There is a bug report that SLAB makes extreme load average due to over
2000 kworker thread.

  https://bugzilla.kernel.org/show_bug.cgi?id=172981

This issue is caused by kmemcg feature that try to create new set of
kmem_caches for each memcg.  Recently, kmem_cache creation is slowed by
synchronize_sched() and futher kmem_cache creation is also delayed since
kmem_cache creation is synchronized by a global slab_mutex lock.  So,
the number of kworker that try to create kmem_cache increases quietly.

synchronize_sched() is for lockless access to node's shared array but
it's not needed when a new kmem_cache is created.  So, this patch rules
out that case.

Fixes: 801faf0db894 ("mm/slab: lockless decision to grow cache")
Link: http://lkml.kernel.org/r/1475734855-4837-1-git-send-email-iamjoonsoo.kim@lge.com
Reported-by: Doug Smythies <dsmythies@telus.net>
Tested-by: Doug Smythies <dsmythies@telus.net>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 mm/slab.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/mm/slab.c
+++ b/mm/slab.c
@@ -964,7 +964,7 @@ static int setup_kmem_cache_node(struct
 	 * guaranteed to be valid until irq is re-enabled, because it will be
 	 * freed after synchronize_sched().
 	 */
-	if (force_change)
+	if (old_shared && force_change)
 		synchronize_sched();
 
 fail:

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 021/138] mm: memcontrol: do not recurse in direct reclaim
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (18 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 020/138] mm/slab: fix kmemcg cache creation delayed issue Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 022/138] thermal/powerclamp: correct cpu support check Greg Kroah-Hartman
                     ` (101 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Johannes Weiner, Michal Hocko,
	Vladimir Davydov, Tejun Heo, Andrew Morton, Linus Torvalds

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johannes Weiner <hannes@cmpxchg.org>

commit 89a2848381b5fcd9c4d9c0cd97680e3b28730e31 upstream.

On 4.0, we saw a stack corruption from a page fault entering direct
memory cgroup reclaim, calling into btrfs_releasepage(), which then
tried to allocate an extent and recursed back into a kmem charge ad
nauseam:

  [...]
  btrfs_releasepage+0x2c/0x30
  try_to_release_page+0x32/0x50
  shrink_page_list+0x6da/0x7a0
  shrink_inactive_list+0x1e5/0x510
  shrink_lruvec+0x605/0x7f0
  shrink_zone+0xee/0x320
  do_try_to_free_pages+0x174/0x440
  try_to_free_mem_cgroup_pages+0xa7/0x130
  try_charge+0x17b/0x830
  memcg_charge_kmem+0x40/0x80
  new_slab+0x2d9/0x5a0
  __slab_alloc+0x2fd/0x44f
  kmem_cache_alloc+0x193/0x1e0
  alloc_extent_state+0x21/0xc0
  __clear_extent_bit+0x2b5/0x400
  try_release_extent_mapping+0x1a3/0x220
  __btrfs_releasepage+0x31/0x70
  btrfs_releasepage+0x2c/0x30
  try_to_release_page+0x32/0x50
  shrink_page_list+0x6da/0x7a0
  shrink_inactive_list+0x1e5/0x510
  shrink_lruvec+0x605/0x7f0
  shrink_zone+0xee/0x320
  do_try_to_free_pages+0x174/0x440
  try_to_free_mem_cgroup_pages+0xa7/0x130
  try_charge+0x17b/0x830
  mem_cgroup_try_charge+0x65/0x1c0
  handle_mm_fault+0x117f/0x1510
  __do_page_fault+0x177/0x420
  do_page_fault+0xc/0x10
  page_fault+0x22/0x30

On later kernels, kmem charging is opt-in rather than opt-out, and that
particular kmem allocation in btrfs_releasepage() is no longer being
charged and won't recurse and overrun the stack anymore.

But it's not impossible for an accounted allocation to happen from the
memcg direct reclaim context, and we needed to reproduce this crash many
times before we even got a useful stack trace out of it.

Like other direct reclaimers, mark tasks in memcg reclaim PF_MEMALLOC to
avoid recursing into any other form of direct reclaim.  Then let
recursive charges from PF_MEMALLOC contexts bypass the cgroup limit.

Link: http://lkml.kernel.org/r/20161025141050.GA13019@cmpxchg.org
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 mm/memcontrol.c |    9 +++++++++
 mm/vmscan.c     |    2 ++
 2 files changed, 11 insertions(+)

--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -1947,6 +1947,15 @@ retry:
 		     current->flags & PF_EXITING))
 		goto force;
 
+	/*
+	 * Prevent unbounded recursion when reclaim operations need to
+	 * allocate memory. This might exceed the limits temporarily,
+	 * but we prefer facilitating memory reclaim and getting back
+	 * under the limit over triggering OOM kills in these cases.
+	 */
+	if (unlikely(current->flags & PF_MEMALLOC))
+		goto force;
+
 	if (unlikely(task_in_memcg_oom(current)))
 		goto nomem;
 
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -3048,7 +3048,9 @@ unsigned long try_to_free_mem_cgroup_pag
 					    sc.gfp_mask,
 					    sc.reclaim_idx);
 
+	current->flags |= PF_MEMALLOC;
 	nr_reclaimed = do_try_to_free_pages(zonelist, &sc);
+	current->flags &= ~PF_MEMALLOC;
 
 	trace_mm_vmscan_memcg_reclaim_end(nr_reclaimed);
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 022/138] thermal/powerclamp: correct cpu support check
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (19 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 021/138] mm: memcontrol: do not recurse in direct reclaim Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 15:05     ` Jacob Pan
  2016-11-09 10:45   ` [PATCH 4.8 023/138] KEYS: Fix short sprintf buffer in /proc/keys show function Greg Kroah-Hartman
                     ` (100 subsequent siblings)
  121 siblings, 1 reply; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Eric Ernst, Jacob Pan, Zhang Rui

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Ernst <eric.ernst@linux.intel.com>

commit 3105f234e0aba43e44e277c20f9b32ee8add43d4 upstream.

Initial logic for checking CPU match resulted in OR of CPU features
rather than the intended AND.

Updated to use boot_cpu_has macro rather than x86_match_cpu.

In addition, MWAIT is the only required CPU feature for idle
injection to work.  Drop other feature requirements since they are
only needed for optimal efficiency.

Signed-off-by: Eric Ernst <eric.ernst@linux.intel.com>
Acked-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/thermal/intel_powerclamp.c |   14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

--- a/drivers/thermal/intel_powerclamp.c
+++ b/drivers/thermal/intel_powerclamp.c
@@ -669,20 +669,10 @@ static struct thermal_cooling_device_ops
 	.set_cur_state = powerclamp_set_cur_state,
 };
 
-static const struct x86_cpu_id intel_powerclamp_ids[] __initconst = {
-	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_MWAIT },
-	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_ARAT },
-	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_NONSTOP_TSC },
-	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY, X86_FEATURE_CONSTANT_TSC},
-	{}
-};
-MODULE_DEVICE_TABLE(x86cpu, intel_powerclamp_ids);
-
 static int __init powerclamp_probe(void)
 {
-	if (!x86_match_cpu(intel_powerclamp_ids)) {
-		pr_err("Intel powerclamp does not run on family %d model %d\n",
-				boot_cpu_data.x86, boot_cpu_data.x86_model);
+	if (!boot_cpu_has(X86_FEATURE_MWAIT)) {
+		pr_err("CPU does not support MWAIT");
 		return -ENODEV;
 	}
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 023/138] KEYS: Fix short sprintf buffer in /proc/keys show function
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (20 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 022/138] thermal/powerclamp: correct cpu support check Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 024/138] KEYS: Sort out big_key initialisation Greg Kroah-Hartman
                     ` (99 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ondrej Kozina, David Howells, James Morris

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Howells <dhowells@redhat.com>

commit 03dab869b7b239c4e013ec82aea22e181e441cfc upstream.

This fixes CVE-2016-7042.

Fix a short sprintf buffer in proc_keys_show().  If the gcc stack protector
is turned on, this can cause a panic due to stack corruption.

The problem is that xbuf[] is not big enough to hold a 64-bit timeout
rendered as weeks:

	(gdb) p 0xffffffffffffffffULL/(60*60*24*7)
	$2 = 30500568904943

That's 14 chars plus NUL, not 11 chars plus NUL.

Expand the buffer to 16 chars.

I think the unpatched code apparently works if the stack-protector is not
enabled because on a 32-bit machine the buffer won't be overflowed and on a
64-bit machine there's a 64-bit aligned pointer at one side and an int that
isn't checked again on the other side.

The panic incurred looks something like:

Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: ffffffff81352ebe
CPU: 0 PID: 1692 Comm: reproducer Not tainted 4.7.2-201.fc24.x86_64 #1
Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
 0000000000000086 00000000fbbd2679 ffff8800a044bc00 ffffffff813d941f
 ffffffff81a28d58 ffff8800a044bc98 ffff8800a044bc88 ffffffff811b2cb6
 ffff880000000010 ffff8800a044bc98 ffff8800a044bc30 00000000fbbd2679
Call Trace:
 [<ffffffff813d941f>] dump_stack+0x63/0x84
 [<ffffffff811b2cb6>] panic+0xde/0x22a
 [<ffffffff81352ebe>] ? proc_keys_show+0x3ce/0x3d0
 [<ffffffff8109f7f9>] __stack_chk_fail+0x19/0x30
 [<ffffffff81352ebe>] proc_keys_show+0x3ce/0x3d0
 [<ffffffff81350410>] ? key_validate+0x50/0x50
 [<ffffffff8134db30>] ? key_default_cmp+0x20/0x20
 [<ffffffff8126b31c>] seq_read+0x2cc/0x390
 [<ffffffff812b6b12>] proc_reg_read+0x42/0x70
 [<ffffffff81244fc7>] __vfs_read+0x37/0x150
 [<ffffffff81357020>] ? security_file_permission+0xa0/0xc0
 [<ffffffff81246156>] vfs_read+0x96/0x130
 [<ffffffff81247635>] SyS_read+0x55/0xc0
 [<ffffffff817eb872>] entry_SYSCALL_64_fastpath+0x1a/0xa4

Reported-by: Ondrej Kozina <okozina@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Tested-by: Ondrej Kozina <okozina@redhat.com>
Signed-off-by: James Morris <james.l.morris@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 security/keys/proc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/security/keys/proc.c
+++ b/security/keys/proc.c
@@ -181,7 +181,7 @@ static int proc_keys_show(struct seq_fil
 	struct timespec now;
 	unsigned long timo;
 	key_ref_t key_ref, skey_ref;
-	char xbuf[12];
+	char xbuf[16];
 	int rc;
 
 	struct keyring_search_context ctx = {

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 024/138] KEYS: Sort out big_key initialisation
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (21 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 023/138] KEYS: Fix short sprintf buffer in /proc/keys show function Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 025/138] security/keys: make BIG_KEYS dependent on stdrng Greg Kroah-Hartman
                     ` (98 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, David Howells, Peter Hlavaty,
	Kirill Marinushkin, Artem Savkov, James Morris

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Howells <dhowells@redhat.com>

commit 7df3e59c3d1df4f87fe874c7956ef7a3d2f4d5fb upstream.

big_key has two separate initialisation functions, one that registers the
key type and one that registers the crypto.  If the key type fails to
register, there's no problem if the crypto registers successfully because
there's no way to reach the crypto except through the key type.

However, if the key type registers successfully but the crypto does not,
big_key_rng and big_key_blkcipher may end up set to NULL - but the code
neither checks for this nor unregisters the big key key type.

Furthermore, since the key type is registered before the crypto, it is
theoretically possible for the kernel to try adding a big_key before the
crypto is set up, leading to the same effect.

Fix this by merging big_key_crypto_init() and big_key_init() and calling
the resulting function late.  If they're going to be encrypted, we
shouldn't be creating big_keys before we have the facilities to do the
encryption available.  The key type registration is also moved after the
crypto initialisation.

The fix also includes message printing on failure.

If the big_key type isn't correctly set up, simply doing:

	dd if=/dev/zero bs=4096 count=1 | keyctl padd big_key a @s

ought to cause an oops.

Fixes: 13100a72f40f5748a04017e0ab3df4cf27c809ef ('Security: Keys: Big keys stored encrypted')
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Peter Hlavaty <zer0mem@yahoo.com>
cc: Kirill Marinushkin <k.marinushkin@gmail.com>
cc: Artem Savkov <asavkov@redhat.com>
Signed-off-by: James Morris <james.l.morris@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 security/keys/big_key.c |   59 ++++++++++++++++++++++++++----------------------
 1 file changed, 32 insertions(+), 27 deletions(-)

--- a/security/keys/big_key.c
+++ b/security/keys/big_key.c
@@ -9,6 +9,7 @@
  * 2 of the Licence, or (at your option) any later version.
  */
 
+#define pr_fmt(fmt) "big_key: "fmt
 #include <linux/init.h>
 #include <linux/seq_file.h>
 #include <linux/file.h>
@@ -341,44 +342,48 @@ error:
  */
 static int __init big_key_init(void)
 {
-	return register_key_type(&key_type_big_key);
-}
-
-/*
- * Initialize big_key crypto and RNG algorithms
- */
-static int __init big_key_crypto_init(void)
-{
-	int ret = -EINVAL;
+	struct crypto_skcipher *cipher;
+	struct crypto_rng *rng;
+	int ret;
 
-	/* init RNG */
-	big_key_rng = crypto_alloc_rng(big_key_rng_name, 0, 0);
-	if (IS_ERR(big_key_rng)) {
-		big_key_rng = NULL;
-		return -EFAULT;
+	rng = crypto_alloc_rng(big_key_rng_name, 0, 0);
+	if (IS_ERR(rng)) {
+		pr_err("Can't alloc rng: %ld\n", PTR_ERR(rng));
+		return PTR_ERR(rng);
 	}
 
+	big_key_rng = rng;
+
 	/* seed RNG */
-	ret = crypto_rng_reset(big_key_rng, NULL, crypto_rng_seedsize(big_key_rng));
-	if (ret)
-		goto error;
+	ret = crypto_rng_reset(rng, NULL, crypto_rng_seedsize(rng));
+	if (ret) {
+		pr_err("Can't reset rng: %d\n", ret);
+		goto error_rng;
+	}
 
 	/* init block cipher */
-	big_key_skcipher = crypto_alloc_skcipher(big_key_alg_name,
-						 0, CRYPTO_ALG_ASYNC);
-	if (IS_ERR(big_key_skcipher)) {
-		big_key_skcipher = NULL;
-		ret = -EFAULT;
-		goto error;
+	cipher = crypto_alloc_skcipher(big_key_alg_name, 0, CRYPTO_ALG_ASYNC);
+	if (IS_ERR(cipher)) {
+		ret = PTR_ERR(cipher);
+		pr_err("Can't alloc crypto: %d\n", ret);
+		goto error_rng;
+	}
+
+	big_key_skcipher = cipher;
+
+	ret = register_key_type(&key_type_big_key);
+	if (ret < 0) {
+		pr_err("Can't register type: %d\n", ret);
+		goto error_cipher;
 	}
 
 	return 0;
 
-error:
+error_cipher:
+	crypto_free_skcipher(big_key_skcipher);
+error_rng:
 	crypto_free_rng(big_key_rng);
-	big_key_rng = NULL;
 	return ret;
 }
 
-device_initcall(big_key_init);
-late_initcall(big_key_crypto_init);
+late_initcall(big_key_init);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 025/138] security/keys: make BIG_KEYS dependent on stdrng.
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (22 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 024/138] KEYS: Sort out big_key initialisation Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 026/138] device-dax: fix percpu_ref_exit ordering Greg Kroah-Hartman
                     ` (97 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Artem Savkov, David Howells,
	Stephan Mueller, Kirill Marinushkin, James Morris

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Artem Savkov <asavkov@redhat.com>

commit 31e6ec4519c0fe0ee4a2f6ba3ab278e9506b9500 upstream.

Since BIG_KEYS can't be compiled as module it requires one of the "stdrng"
providers to be compiled into kernel. Otherwise big_key_crypto_init() fails
on crypto_alloc_rng step and next dereference of big_key_skcipher (e.g. in
big_key_preparse()) results in a NULL pointer dereference.

Fixes: 13100a72f40f5748a04017e0ab3df4cf27c809ef ('Security: Keys: Big keys stored encrypted')
Signed-off-by: Artem Savkov <asavkov@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Stephan Mueller <smueller@chronox.de>
cc: Kirill Marinushkin <k.marinushkin@gmail.com>
Signed-off-by: James Morris <james.l.morris@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 security/keys/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/security/keys/Kconfig
+++ b/security/keys/Kconfig
@@ -41,7 +41,7 @@ config BIG_KEYS
 	bool "Large payload keys"
 	depends on KEYS
 	depends on TMPFS
-	select CRYPTO
+	depends on (CRYPTO_ANSI_CPRNG = y || CRYPTO_DRBG = y)
 	select CRYPTO_AES
 	select CRYPTO_ECB
 	select CRYPTO_RNG

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 026/138] device-dax: fix percpu_ref_exit ordering
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (23 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 025/138] security/keys: make BIG_KEYS dependent on stdrng Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 027/138] ALSA: usb-audio: Add quirk for Syntek STK1160 Greg Kroah-Hartman
                     ` (96 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Dan Williams

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

commit 52e73eb2872c9af6f382b2b22954ca8214397a4e upstream.

We need to wait until the percpu_ref is released before exit. Otherwise,
we sometimes lose the race and trigger this new warning that was added
in v4.9 (commit a67823c1ed10 "percpu-refcount: init ->confirm_switch
member properly"):

 WARNING: CPU: 0 PID: 3629 at lib/percpu-refcount.c:107 percpu_ref_exit+0x51/0x60
 [..]
 Call Trace:
  [<ffffffff814bf093>] dump_stack+0x85/0xc2
  [<ffffffff810b15db>] __warn+0xcb/0xf0
  [<ffffffff810b170d>] warn_slowpath_null+0x1d/0x20
  [<ffffffff814d70c1>] percpu_ref_exit+0x51/0x60
  [<ffffffffa005706a>] dax_pmem_percpu_exit+0x1a/0x50 [dax_pmem]
  [<ffffffff81615f1f>] devm_action_release+0xf/0x20

Fixes: ab68f2622136 ("/dev/dax, pmem: direct access to persistent memory")
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/dax/pmem.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/dax/pmem.c
+++ b/drivers/dax/pmem.c
@@ -44,7 +44,6 @@ static void dax_pmem_percpu_exit(void *d
 
 	dev_dbg(dax_pmem->dev, "%s\n", __func__);
 	percpu_ref_exit(ref);
-	wait_for_completion(&dax_pmem->cmp);
 }
 
 static void dax_pmem_percpu_kill(void *data)
@@ -54,6 +53,7 @@ static void dax_pmem_percpu_kill(void *d
 
 	dev_dbg(dax_pmem->dev, "%s\n", __func__);
 	percpu_ref_kill(ref);
+	wait_for_completion(&dax_pmem->cmp);
 }
 
 static int dax_pmem_probe(struct device *dev)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 027/138] ALSA: usb-audio: Add quirk for Syntek STK1160
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (24 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 026/138] device-dax: fix percpu_ref_exit ordering Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 028/138] ALSA: seq: Fix time account regression Greg Kroah-Hartman
                     ` (95 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Marcel Hasler, Takashi Iwai

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Marcel Hasler <mahasler@gmail.com>

commit bdc3478f90cd4d2928197f36629d5cf93b64dbe9 upstream.

The stk1160 chip needs QUIRK_AUDIO_ALIGN_TRANSFER. This patch resolves
the issue reported on the mailing list
(http://marc.info/?l=linux-sound&m=139223599126215&w=2) and also fixes
bug 180071 (https://bugzilla.kernel.org/show_bug.cgi?id=180071).

Signed-off-by: Marcel Hasler <mahasler@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/usb/quirks-table.h |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -2907,6 +2907,23 @@ AU0828_DEVICE(0x2040, 0x7260, "Hauppauge
 AU0828_DEVICE(0x2040, 0x7213, "Hauppauge", "HVR-950Q"),
 AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
 
+/* Syntek STK1160 */
+{
+	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
+		       USB_DEVICE_ID_MATCH_INT_CLASS |
+		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
+	.idVendor = 0x05e1,
+	.idProduct = 0x0408,
+	.bInterfaceClass = USB_CLASS_AUDIO,
+	.bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL,
+	.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
+		.vendor_name = "Syntek",
+		.product_name = "STK1160",
+		.ifnum = QUIRK_ANY_INTERFACE,
+		.type = QUIRK_AUDIO_ALIGN_TRANSFER
+	}
+},
+
 /* Digidesign Mbox */
 {
 	/* Thanks to Clemens Ladisch <clemens@ladisch.de> */

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 028/138] ALSA: seq: Fix time account regression
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (25 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 027/138] ALSA: usb-audio: Add quirk for Syntek STK1160 Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 029/138] ALSA: hda - allow 40 bit DMA mask for NVidia devices Greg Kroah-Hartman
                     ` (94 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Yves Guillemot, Takashi Iwai

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Takashi Iwai <tiwai@suse.de>

commit 9b50898ad96c793a8f7cde9d8f281596d752a7dd upstream.

The recent rewrite of the sequencer time accounting using timespec64
in the commit [3915bf294652: ALSA: seq_timer: use monotonic times
internally] introduced a bad regression.  Namely, the time reported
back doesn't increase but goes back and forth.

The culprit was obvious: the delta is stored to the result (cur_time =
delta), instead of adding the delta (cur_time += delta)!

Let's fix it.

Fixes: 3915bf294652 ('ALSA: seq_timer: use monotonic times internally')
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=177571
Reported-by: Yves Guillemot <yc.guillemot@wanadoo.fr>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/core/seq/seq_timer.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/sound/core/seq/seq_timer.c
+++ b/sound/core/seq/seq_timer.c
@@ -448,8 +448,8 @@ snd_seq_real_time_t snd_seq_timer_get_cu
 
 		ktime_get_ts64(&tm);
 		tm = timespec64_sub(tm, tmr->last_update);
-		cur_time.tv_nsec = tm.tv_nsec;
-		cur_time.tv_sec = tm.tv_sec;
+		cur_time.tv_nsec += tm.tv_nsec;
+		cur_time.tv_sec += tm.tv_sec;
 		snd_seq_sanity_real_time(&cur_time);
 	}
 	spin_unlock_irqrestore(&tmr->lock, flags);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 029/138] ALSA: hda - allow 40 bit DMA mask for NVidia devices
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (26 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 028/138] ALSA: seq: Fix time account regression Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 030/138] ALSA: hda - Adding a new group of pin cfg into ALC295 pin quirk table Greg Kroah-Hartman
                     ` (93 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Ard Biesheuvel, Takashi Iwai

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ard Biesheuvel <ard.biesheuvel@linaro.org>

commit 3ab7511eafdd5c4f40d2832f09554478dfbea170 upstream.

Commit 49d9e77e72cf ("ALSA: hda - Fix system panic when DMA > 40 bits
for Nvidia audio controllers") simply disabled any DMA exceeding 32
bits for NVidia devices, even though they are capable of performing
DMA up to 40 bits. On some architectures (such as arm64), system memory
is not guaranteed to be 32-bit addressable by PCI devices, and so this
change prevents NVidia devices from working on platforms such as AMD
Seattle.

Since the original commit already mentioned that up to 40 bits of DMA
is supported, and given that the code has been updated in the meantime
to support a 40 bit DMA mask on other devices, revert commit 49d9e77e72cf
and explicitly set the DMA mask to 40 bits for NVidia devices.

Fixes: 49d9e77e72cf ('ALSA: hda - Fix system panic when DMA > 40 bits...')
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/pci/hda/hda_intel.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -340,8 +340,7 @@ enum {
 
 /* quirks for Nvidia */
 #define AZX_DCAPS_PRESET_NVIDIA \
-	(AZX_DCAPS_NO_MSI | /*AZX_DCAPS_ALIGN_BUFSIZE |*/ \
-	 AZX_DCAPS_NO_64BIT | AZX_DCAPS_CORBRP_SELF_CLEAR |\
+	(AZX_DCAPS_NO_MSI | AZX_DCAPS_CORBRP_SELF_CLEAR |\
 	 AZX_DCAPS_SNOOP_TYPE(NVIDIA))
 
 #define AZX_DCAPS_PRESET_CTHDA \
@@ -1699,6 +1698,10 @@ static int azx_first_init(struct azx *ch
 		}
 	}
 
+	/* NVidia hardware normally only supports up to 40 bits of DMA */
+	if (chip->pci->vendor == PCI_VENDOR_ID_NVIDIA)
+		dma_bits = 40;
+
 	/* disable 64bit DMA address on some devices */
 	if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
 		dev_dbg(card->dev, "Disabling 64bit DMA\n");

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 030/138] ALSA: hda - Adding a new group of pin cfg into ALC295 pin quirk table
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (27 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 029/138] ALSA: hda - allow 40 bit DMA mask for NVidia devices Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 031/138] ALSA: hda - Fix surround output pins for ASRock B150M mobo Greg Kroah-Hartman
                     ` (92 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Hui Wang, Takashi Iwai

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Hui Wang <hui.wang@canonical.com>

commit f771d5bb71d4df9573d12386400540516672208b upstream.

We have a new Dell laptop model which uses ALC295, the pin definition
is different from the existing ones in the pin quirk table, to fix the
headset mic detection and mic mute led's problem, we need to add the
new pin defintion into the pin quirk table.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/pci/hda/patch_realtek.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5809,8 +5809,6 @@ static const struct hda_model_fixup alc2
 #define ALC295_STANDARD_PINS \
 	{0x12, 0xb7a60130}, \
 	{0x14, 0x90170110}, \
-	{0x17, 0x21014020}, \
-	{0x18, 0x21a19030}, \
 	{0x21, 0x04211020}
 
 #define ALC298_STANDARD_PINS \
@@ -6037,7 +6035,13 @@ static const struct snd_hda_pin_quirk al
 		ALC292_STANDARD_PINS,
 		{0x13, 0x90a60140}),
 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
-		ALC295_STANDARD_PINS),
+		ALC295_STANDARD_PINS,
+		{0x17, 0x21014020},
+		{0x18, 0x21a19030}),
+	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
+		ALC295_STANDARD_PINS,
+		{0x17, 0x21014040},
+		{0x18, 0x21a19050}),
 	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
 		ALC298_STANDARD_PINS,
 		{0x17, 0x90170110}),

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 031/138] ALSA: hda - Fix surround output pins for ASRock B150M mobo
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (28 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 030/138] ALSA: hda - Adding a new group of pin cfg into ALC295 pin quirk table Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 032/138] ALSA: hda - Fix headset mic detection problem for two Dell laptops Greg Kroah-Hartman
                     ` (91 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Takashi Iwai

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Takashi Iwai <tiwai@suse.de>

commit 1a3f099101b85cc93d864eb030d97e7725c72ea7 upstream.

ASRock B150M Pro4/D3 mobo with ALC892 codec doesn't seem to provide
proper pins for the surround outputs, hence we need to specify the
pincfgs manually with a couple of other corrections.

Reported-and-tested-by: Benjamin Valentin <benpicco@googlemail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/pci/hda/patch_realtek.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -6615,6 +6615,7 @@ enum {
 	ALC891_FIXUP_HEADSET_MODE,
 	ALC891_FIXUP_DELL_MIC_NO_PRESENCE,
 	ALC662_FIXUP_ACER_VERITON,
+	ALC892_FIXUP_ASROCK_MOBO,
 };
 
 static const struct hda_fixup alc662_fixups[] = {
@@ -6891,6 +6892,16 @@ static const struct hda_fixup alc662_fix
 			{ }
 		}
 	},
+	[ALC892_FIXUP_ASROCK_MOBO] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = (const struct hda_pintbl[]) {
+			{ 0x15, 0x40f000f0 }, /* disabled */
+			{ 0x16, 0x40f000f0 }, /* disabled */
+			{ 0x18, 0x01014011 }, /* LO */
+			{ 0x1a, 0x01014012 }, /* LO */
+			{ }
+		}
+	},
 };
 
 static const struct snd_pci_quirk alc662_fixup_tbl[] = {
@@ -6928,6 +6939,7 @@ static const struct snd_pci_quirk alc662
 	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
 	SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
 	SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD),
+	SND_PCI_QUIRK(0x1849, 0x5892, "ASRock B150M", ALC892_FIXUP_ASROCK_MOBO),
 	SND_PCI_QUIRK(0x19da, 0xa130, "Zotac Z68", ALC662_FIXUP_ZOTAC_Z68),
 	SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON),
 	SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 032/138] ALSA: hda - Fix headset mic detection problem for two Dell laptops
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (29 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 031/138] ALSA: hda - Fix surround output pins for ASRock B150M mobo Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 035/138] cxl: Fix leaking pid refs in some error paths Greg Kroah-Hartman
                     ` (90 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Hui Wang, Takashi Iwai

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Hui Wang <hui.wang@canonical.com>

commit 6aecd8715802d23dc6a0859b50c62d2b0a99de3a upstream.

They uses the codec ALC255, and have the different pin cfg definition
from the ones in the existing pin quirk table. Now adding them into
the table to fix the problem.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/pci/hda/patch_realtek.c |    8 ++++++++
 1 file changed, 8 insertions(+)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5855,11 +5855,19 @@ static const struct snd_hda_pin_quirk al
 		{0x1b, 0x02011020},
 		{0x21, 0x0221101f}),
 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
+		{0x14, 0x90170110},
+		{0x1b, 0x01011020},
+		{0x21, 0x0221101f}),
+	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
 		{0x14, 0x90170130},
 		{0x1b, 0x01014020},
 		{0x21, 0x0221103f}),
 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
 		{0x14, 0x90170130},
+		{0x1b, 0x01011020},
+		{0x21, 0x0221103f}),
+	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
+		{0x14, 0x90170130},
 		{0x1b, 0x02011020},
 		{0x21, 0x0221103f}),
 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 035/138] cxl: Fix leaking pid refs in some error paths
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (30 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 032/138] ALSA: hda - Fix headset mic detection problem for two Dell laptops Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 036/138] btrfs: fix races on root_log_ctx lists Greg Kroah-Hartman
                     ` (89 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Andrew Donnellan, Frederic Barrat,
	Vaibhav Jain, Michael Ellerman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>

commit a05b82d5149dfeef05254a11c3636a89a854520a upstream.

In some error paths in functions cxl_start_context and
afu_ioctl_start_work pid references to the current & group-leader tasks
can leak after they are taken. This patch fixes these error paths to
release these pid references before exiting the error path.

Fixes: 7b8ad495d592 ("cxl: Fix DSI misses when the context owning task exits")
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Reported-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/misc/cxl/api.c  |    2 ++
 drivers/misc/cxl/file.c |   22 +++++++++++++---------
 2 files changed, 15 insertions(+), 9 deletions(-)

--- a/drivers/misc/cxl/api.c
+++ b/drivers/misc/cxl/api.c
@@ -247,7 +247,9 @@ int cxl_start_context(struct cxl_context
 	cxl_ctx_get();
 
 	if ((rc = cxl_ops->attach_process(ctx, kernel, wed, 0))) {
+		put_pid(ctx->glpid);
 		put_pid(ctx->pid);
+		ctx->glpid = ctx->pid = NULL;
 		cxl_adapter_context_put(ctx->afu->adapter);
 		cxl_ctx_put();
 		goto out;
--- a/drivers/misc/cxl/file.c
+++ b/drivers/misc/cxl/file.c
@@ -194,6 +194,16 @@ static long afu_ioctl_start_work(struct
 	ctx->mmio_err_ff = !!(work.flags & CXL_START_WORK_ERR_FF);
 
 	/*
+	 * Increment the mapped context count for adapter. This also checks
+	 * if adapter_context_lock is taken.
+	 */
+	rc = cxl_adapter_context_get(ctx->afu->adapter);
+	if (rc) {
+		afu_release_irqs(ctx, ctx);
+		goto out;
+	}
+
+	/*
 	 * We grab the PID here and not in the file open to allow for the case
 	 * where a process (master, some daemon, etc) has opened the chardev on
 	 * behalf of another process, so the AFU's mm gets bound to the process
@@ -205,15 +215,6 @@ static long afu_ioctl_start_work(struct
 	ctx->pid = get_task_pid(current, PIDTYPE_PID);
 	ctx->glpid = get_task_pid(current->group_leader, PIDTYPE_PID);
 
-	/*
-	 * Increment the mapped context count for adapter. This also checks
-	 * if adapter_context_lock is taken.
-	 */
-	rc = cxl_adapter_context_get(ctx->afu->adapter);
-	if (rc) {
-		afu_release_irqs(ctx, ctx);
-		goto out;
-	}
 
 	trace_cxl_attach(ctx, work.work_element_descriptor, work.num_interrupts, amr);
 
@@ -221,6 +222,9 @@ static long afu_ioctl_start_work(struct
 							amr))) {
 		afu_release_irqs(ctx, ctx);
 		cxl_adapter_context_put(ctx->afu->adapter);
+		put_pid(ctx->glpid);
+		put_pid(ctx->pid);
+		ctx->glpid = ctx->pid = NULL;
 		goto out;
 	}
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 036/138] btrfs: fix races on root_log_ctx lists
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (31 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 035/138] cxl: Fix leaking pid refs in some error paths Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 037/138] powerpc: Convert cmp to cmpd in idle enter sequence Greg Kroah-Hartman
                     ` (88 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Dave Jones, Chris Mason

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Chris Mason <clm@fb.com>

commit 570dd45042a7c8a7aba1ee029c5dd0f5ccf41b9b upstream.

btrfs_remove_all_log_ctxs takes a shortcut where it avoids walking the
list because it knows all of the waiters are patiently waiting for the
commit to finish.

But, there's a small race where btrfs_sync_log can remove itself from
the list if it finds a log commit is already done.  Also, it uses
list_del_init() to remove itself from the list, but there's no way to
know if btrfs_remove_all_log_ctxs has already run, so we don't know for
sure if it is safe to call list_del_init().

This gets rid of all the shortcuts for btrfs_remove_all_log_ctxs(), and
just calls it with the proper locking.

This is part two of the corruption fixed by cbd60aa7cd1.  I should have
done this in the first place, but convinced myself the optimizations were
safe.  A 12 hour run of dbench 2048 will eventually trigger a list debug
WARN_ON for the list_del_init() in btrfs_sync_log().

Fixes: d1433debe7f4346cf9fc0dafc71c3137d2a97bc4
Reported-by: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: Chris Mason <clm@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/btrfs/tree-log.c |   20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -2713,14 +2713,12 @@ static inline void btrfs_remove_all_log_
 					     int index, int error)
 {
 	struct btrfs_log_ctx *ctx;
+	struct btrfs_log_ctx *safe;
 
-	if (!error) {
-		INIT_LIST_HEAD(&root->log_ctxs[index]);
-		return;
-	}
-
-	list_for_each_entry(ctx, &root->log_ctxs[index], list)
+	list_for_each_entry_safe(ctx, safe, &root->log_ctxs[index], list) {
+		list_del_init(&ctx->list);
 		ctx->log_ret = error;
+	}
 
 	INIT_LIST_HEAD(&root->log_ctxs[index]);
 }
@@ -2961,13 +2959,9 @@ int btrfs_sync_log(struct btrfs_trans_ha
 	mutex_unlock(&root->log_mutex);
 
 out_wake_log_root:
-	/*
-	 * We needn't get log_mutex here because we are sure all
-	 * the other tasks are blocked.
-	 */
+	mutex_lock(&log_root_tree->log_mutex);
 	btrfs_remove_all_log_ctxs(log_root_tree, index2, ret);
 
-	mutex_lock(&log_root_tree->log_mutex);
 	log_root_tree->log_transid_committed++;
 	atomic_set(&log_root_tree->log_commit[index2], 0);
 	mutex_unlock(&log_root_tree->log_mutex);
@@ -2978,10 +2972,8 @@ out_wake_log_root:
 	if (waitqueue_active(&log_root_tree->log_commit_wait[index2]))
 		wake_up(&log_root_tree->log_commit_wait[index2]);
 out:
-	/* See above. */
-	btrfs_remove_all_log_ctxs(root, index1, ret);
-
 	mutex_lock(&root->log_mutex);
+	btrfs_remove_all_log_ctxs(root, index1, ret);
 	root->log_transid_committed++;
 	atomic_set(&root->log_commit[index1], 0);
 	mutex_unlock(&root->log_mutex);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 037/138] powerpc: Convert cmp to cmpd in idle enter sequence
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (32 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 036/138] btrfs: fix races on root_log_ctx lists Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 038/138] powerpc/mm/radix: Use tlbiel only if we ever ran on the current cpu Greg Kroah-Hartman
                     ` (87 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Vaidyanathan Srinivasan,
	Segher Boessenkool, Michael Ellerman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Segher Boessenkool <segher@kernel.crashing.org>

commit 80f23935cadb1c654e81951f5a8b7ceae0acc1b4 upstream.

PowerPC's "cmp" instruction has four operands. Normally people write
"cmpw" or "cmpd" for the second cmp operand 0 or 1. But, frequently
people forget, and write "cmp" with just three operands.

With older binutils this is silently accepted as if this was "cmpw",
while often "cmpd" is wanted. With newer binutils GAS will complain
about this for 64-bit code. For 32-bit code it still silently assumes
"cmpw" is what is meant.

In this instance the code comes directly from ISA v2.07, including the
cmp, but cmpd is correct. Backport to stable so that new toolchains can
build old kernels.

Fixes: 948cf67c4726 ("powerpc: Add NAP mode support on Power7 in HV mode")
Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Signed-off-by: Segher Boessenkool <segher@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/powerpc/include/asm/cpuidle.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/powerpc/include/asm/cpuidle.h
+++ b/arch/powerpc/include/asm/cpuidle.h
@@ -26,7 +26,7 @@ extern u64 pnv_first_deep_stop_state;
 	std	r0,0(r1);					\
 	ptesync;						\
 	ld	r0,0(r1);					\
-1:	cmp	cr0,r0,r0;					\
+1:	cmpd	cr0,r0,r0;					\
 	bne	1b;						\
 	IDLE_INST;						\
 	b	.

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 038/138] powerpc/mm/radix: Use tlbiel only if we ever ran on the current cpu
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (33 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 037/138] powerpc: Convert cmp to cmpd in idle enter sequence Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 039/138] powerpc/64: Re-fix race condition between going idle and entering guest Greg Kroah-Hartman
                     ` (86 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Aneesh Kumar K.V, Michael Ellerman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>

commit bd77c4498616e27d5725b5959d880ce2272fefa9 upstream.

Before this patch, we used tlbiel, if we ever ran only on this core.
That was mostly derived from the nohash usage of the same. But is
incorrect, the ISA 3.0 clarifies tlbiel such that:

"All TLB entries that have all of the following properties are made
invalid on the thread executing the tlbiel instruction"

ie. tlbiel only invalidates TLB entries on the current thread. So if the
mm has been used on any other thread (aka. cpu) then we must broadcast
the invalidate.

This bug could lead to invalid TLB entries if a program runs on multiple
threads of a core.

Hence use tlbiel, if we only ever ran on only the current cpu.

Fixes: 1a472c9dba6b ("powerpc/mm/radix: Add tlbflush routines")
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/powerpc/include/asm/tlb.h |   12 ++++++++++++
 arch/powerpc/mm/tlb-radix.c    |    8 ++++----
 2 files changed, 16 insertions(+), 4 deletions(-)

--- a/arch/powerpc/include/asm/tlb.h
+++ b/arch/powerpc/include/asm/tlb.h
@@ -52,11 +52,23 @@ static inline int mm_is_core_local(struc
 	return cpumask_subset(mm_cpumask(mm),
 			      topology_sibling_cpumask(smp_processor_id()));
 }
+
+static inline int mm_is_thread_local(struct mm_struct *mm)
+{
+	return cpumask_equal(mm_cpumask(mm),
+			      cpumask_of(smp_processor_id()));
+}
+
 #else
 static inline int mm_is_core_local(struct mm_struct *mm)
 {
 	return 1;
 }
+
+static inline int mm_is_thread_local(struct mm_struct *mm)
+{
+	return 1;
+}
 #endif
 
 #endif /* __KERNEL__ */
--- a/arch/powerpc/mm/tlb-radix.c
+++ b/arch/powerpc/mm/tlb-radix.c
@@ -175,7 +175,7 @@ void radix__flush_tlb_mm(struct mm_struc
 	if (unlikely(pid == MMU_NO_CONTEXT))
 		goto no_context;
 
-	if (!mm_is_core_local(mm)) {
+	if (!mm_is_thread_local(mm)) {
 		int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
 
 		if (lock_tlbie)
@@ -201,7 +201,7 @@ void radix__flush_tlb_pwc(struct mmu_gat
 	if (unlikely(pid == MMU_NO_CONTEXT))
 		goto no_context;
 
-	if (!mm_is_core_local(mm)) {
+	if (!mm_is_thread_local(mm)) {
 		int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
 
 		if (lock_tlbie)
@@ -226,7 +226,7 @@ void radix__flush_tlb_page_psize(struct
 	pid = mm ? mm->context.id : 0;
 	if (unlikely(pid == MMU_NO_CONTEXT))
 		goto bail;
-	if (!mm_is_core_local(mm)) {
+	if (!mm_is_thread_local(mm)) {
 		int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
 
 		if (lock_tlbie)
@@ -321,7 +321,7 @@ void radix__flush_tlb_range_psize(struct
 {
 	unsigned long pid;
 	unsigned long addr;
-	int local = mm_is_core_local(mm);
+	int local = mm_is_thread_local(mm);
 	unsigned long ap = mmu_get_ap(psize);
 	int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
 	unsigned long page_size = 1UL << mmu_psize_defs[psize].shift;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 039/138] powerpc/64: Re-fix race condition between going idle and entering guest
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (34 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 038/138] powerpc/mm/radix: Use tlbiel only if we ever ran on the current cpu Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 040/138] powerpc/64: Fix race condition in setting lock bit in idle/wakeup code Greg Kroah-Hartman
                     ` (85 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Paul Mackerras, Shreyas B. Prabhu,
	Michael Ellerman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paul Mackerras <paulus@ozlabs.org>

commit 56c46222af0d09149fadec2a3ce9d4889de01cc6 upstream.

Commit 8117ac6a6c2f ("powerpc/powernv: Switch off MMU before entering
nap/sleep/rvwinkle mode", 2014-12-10) fixed a race condition where one
thread entering a KVM guest could switch the MMU context to the guest
while another thread was still in host kernel context with the MMU on.
That commit moved the point where a thread entering a power-saving
mode set its kvm_hstate.hwthread_state field in its PACA to
KVM_HWTHREAD_IN_IDLE from a point where the MMU was on to after the
MMU had been switched off.  That commit also added a comment
explaining that we have to switch to real mode before setting
hwthread_state to avoid this race.

Nevertheless, commit 4eae2c9ae54a ("powerpc/powernv: Make
pnv_powersave_common more generic", 2016-07-08) subsequently moved
the setting of hwthread_state back to a point where the MMU is on,
thus reintroducing the race, despite the comment saying that this
should not be done being included in full in the context lines of
the patch that did it.

This fixes the race again and adds a bigger and shoutier comment
explaining the potential race condition.

Fixes: 4eae2c9ae54a ("powerpc/powernv: Make pnv_powersave_common more generic")
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Reviewed-by: Shreyas B. Prabhu <shreyasbp@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/powerpc/kernel/idle_book3s.S |   32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -163,12 +163,6 @@ _GLOBAL(pnv_powersave_common)
 	std	r9,_MSR(r1)
 	std	r1,PACAR1(r13)
 
-#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
-	/* Tell KVM we're entering idle */
-	li	r4,KVM_HWTHREAD_IN_IDLE
-	stb	r4,HSTATE_HWTHREAD_STATE(r13)
-#endif
-
 	/*
 	 * Go to real mode to do the nap, as required by the architecture.
 	 * Also, we need to be in real mode before setting hwthread_state,
@@ -185,6 +179,26 @@ _GLOBAL(pnv_powersave_common)
 
 	.globl pnv_enter_arch207_idle_mode
 pnv_enter_arch207_idle_mode:
+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
+	/* Tell KVM we're entering idle */
+	li	r4,KVM_HWTHREAD_IN_IDLE
+	/******************************************************/
+	/*  N O T E   W E L L    ! ! !    N O T E   W E L L   */
+	/* The following store to HSTATE_HWTHREAD_STATE(r13)  */
+	/* MUST occur in real mode, i.e. with the MMU off,    */
+	/* and the MMU must stay off until we clear this flag */
+	/* and test HSTATE_HWTHREAD_REQ(r13) in the system    */
+	/* reset interrupt vector in exceptions-64s.S.        */
+	/* The reason is that another thread can switch the   */
+	/* MMU to a guest context whenever this flag is set   */
+	/* to KVM_HWTHREAD_IN_IDLE, and if the MMU was on,    */
+	/* that would potentially cause this thread to start  */
+	/* executing instructions from guest memory in        */
+	/* hypervisor mode, leading to a host crash or data   */
+	/* corruption, or worse.                              */
+	/******************************************************/
+	stb	r4,HSTATE_HWTHREAD_STATE(r13)
+#endif
 	stb	r3,PACA_THREAD_IDLE_STATE(r13)
 	cmpwi	cr3,r3,PNV_THREAD_SLEEP
 	bge	cr3,2f
@@ -250,6 +264,12 @@ enter_winkle:
  * r3 - requested stop state
  */
 power_enter_stop:
+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
+	/* Tell KVM we're entering idle */
+	li	r4,KVM_HWTHREAD_IN_IDLE
+	/* DO THIS IN REAL MODE!  See comment above. */
+	stb	r4,HSTATE_HWTHREAD_STATE(r13)
+#endif
 /*
  * Check if the requested state is a deep idle state.
  */

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 040/138] powerpc/64: Fix race condition in setting lock bit in idle/wakeup code
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (35 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 039/138] powerpc/64: Re-fix race condition between going idle and entering guest Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 041/138] x86/microcode/AMD: Fix more fallout from CONFIG_RANDOMIZE_MEMORY=y Greg Kroah-Hartman
                     ` (84 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Paul Mackerras, Michael Ellerman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paul Mackerras <paulus@ozlabs.org>

commit 09b7e37b18eecc1e347f4b1a3bc863f32801f634 upstream.

This fixes a race condition where one thread that is entering or
leaving a power-saving state can inadvertently ignore the lock bit
that was set by another thread, and potentially also clear it.
The core_idle_lock_held function is called when the lock bit is
seen to be set.  It polls the lock bit until it is clear, then
does a lwarx to load the word containing the lock bit and thread
idle bits so it can be updated.  However, it is possible that the
value loaded with the lwarx has the lock bit set, even though an
immediately preceding lwz loaded a value with the lock bit clear.
If this happens then we go ahead and update the word despite the
lock bit being set, and when called from pnv_enter_arch207_idle_mode,
we will subsequently clear the lock bit.

No identifiable misbehaviour has been attributed to this race.

This fixes it by checking the lock bit in the value loaded by the
lwarx.  If it is set then we just go back and keep on polling.

Fixes: b32aadc1a8ed ("powerpc/powernv: Fix race in updating core_idle_state")
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/powerpc/kernel/idle_book3s.S |    3 +++
 1 file changed, 3 insertions(+)

--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -90,6 +90,7 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_ARCH_3
  * Threads will spin in HMT_LOW until the lock bit is cleared.
  * r14 - pointer to core_idle_state
  * r15 - used to load contents of core_idle_state
+ * r9  - used as a temporary variable
  */
 
 core_idle_lock_held:
@@ -99,6 +100,8 @@ core_idle_lock_held:
 	bne	3b
 	HMT_MEDIUM
 	lwarx	r15,0,r14
+	andi.	r9,r15,PNV_CORE_IDLE_LOCK_BIT
+	bne	core_idle_lock_held
 	blr
 
 /*

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 041/138] x86/microcode/AMD: Fix more fallout from CONFIG_RANDOMIZE_MEMORY=y
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (36 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 040/138] powerpc/64: Fix race condition in setting lock bit in idle/wakeup code Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 042/138] timers: Prevent base clock rewind when forwarding clock Greg Kroah-Hartman
                     ` (83 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Bob Peterson, Borislav Petkov,
	Andreas Gruenbacher, Andy Lutomirski, Andy Lutomirski,
	Borislav Petkov, Brian Gerst, Denys Vlasenko, H. Peter Anvin,
	Josh Poimboeuf, Linus Torvalds, Mel Gorman, Peter Zijlstra,
	Steven Whitehouse, Thomas Gleixner, linux-mm, Ingo Molnar

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

commit 1c27f646b18fb56308dff82784ca61951bad0b48 upstream.

We needed the physical address of the container in order to compute the
offset within the relocated ramdisk. And we did this by doing __pa() on
the virtual address.

However, __pa() does checks whether the physical address is within
PAGE_OFFSET and __START_KERNEL_map - see __phys_addr() - which fail
if we have CONFIG_RANDOMIZE_MEMORY enabled: we feed a virtual address
which *doesn't* have the randomization offset into a function which uses
PAGE_OFFSET which *does* have that offset.

This makes this check fire:

	VIRTUAL_BUG_ON((x > y) || !phys_addr_valid(x));
			^^^^^^

due to the randomization offset.

The fix is as simple as using __pa_nodebug() because we do that
randomization offset accounting later in that function ourselves.

Reported-by: Bob Peterson <rpeterso@redhat.com>
Tested-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Andreas Gruenbacher <agruenba@redhat.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Whitehouse <swhiteho@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mm <linux-mm@kvack.org>
Link: http://lkml.kernel.org/r/20161027123623.j2jri5bandimboff@pd.tnic
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kernel/cpu/microcode/amd.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -429,7 +429,7 @@ int __init save_microcode_in_initrd_amd(
 	 * We need the physical address of the container for both bitness since
 	 * boot_params.hdr.ramdisk_image is a physical address.
 	 */
-	cont    = __pa(container);
+	cont    = __pa_nodebug(container);
 	cont_va = container;
 #endif
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 042/138] timers: Prevent base clock rewind when forwarding clock
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (37 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 041/138] x86/microcode/AMD: Fix more fallout from CONFIG_RANDOMIZE_MEMORY=y Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 043/138] timers: Prevent base clock corruption when forwarding Greg Kroah-Hartman
                     ` (82 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ashton Holmes, Michael Thayer,
	Thomas Gleixner, Michal Necasek, Peter Zijlstra, knut.osmundsen,
	stern, rt

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Gleixner <tglx@linutronix.de>

commit 041ad7bc758db259bb960ef795197dd14aab19a6 upstream.

Ashton and Michael reported, that kernel versions 4.8 and later suffer from
USB timeouts which are caused by the timer wheel rework.

This is caused by a bug in the base clock forwarding mechanism, which leads
to timers expiring early. The scenario which leads to this is:

run_timers()
  while (jiffies >= base->clk) {
    collect_expired_timers();
    base->clk++;
    expire_timers();
  }

So base->clk = jiffies + 1. Now the cpu goes idle:

idle()
  get_next_timer_interrupt()
    nextevt = __next_time_interrupt();
    if (time_after(nextevt, base->clk))
       	base->clk = jiffies;

jiffies has not advanced since run_timers(), so this assignment effectively
decrements base->clk by one.

base->clk is the index into the timer wheel arrays. So let's assume the
following state after the base->clk increment in run_timers():

 jiffies = 0
 base->clk = 1

A timer gets enqueued with an expiry delta of 63 ticks (which is the case
with the USB timeout and HZ=250) so the resulting bucket index is:

  base->clk + delta = 1 + 63 = 64

The timer goes into the first wheel level. The array size is 64 so it ends
up in bucket 0, which is correct as it takes 63 ticks to advance base->clk
to index into bucket 0 again.

If the cpu goes idle before jiffies advance, then the bug in the forwarding
mechanism sets base->clk back to 0, so the next invocation of run_timers()
at the next tick will index into bucket 0 and therefore expire the timer 62
ticks too early.

Instead of blindly setting base->clk to jiffies we must make the forwarding
conditional on jiffies > base->clk, but we cannot use jiffies for this as
we might run into the following issue:

  if (time_after(jiffies, base->clk) {
    if (time_after(nextevt, base->clk))
       base->clk = jiffies;

jiffies can increment between the check and the assigment far enough to
advance beyond nextevt. So we need to use a stable value for checking.

get_next_timer_interrupt() has the basej argument which is the jiffies
value snapshot taken in the calling code. So we can just that.

Thanks to Ashton for bisecting and providing trace data!

Fixes: a683f390b93f ("timers: Forward the wheel clock whenever possible")
Reported-by: Ashton Holmes <scoopta@gmail.com>
Reported-by: Michael Thayer <michael.thayer@oracle.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Michal Necasek <michal.necasek@oracle.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: knut.osmundsen@oracle.com
Cc: stern@rowland.harvard.edu
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20161022110552.175308322@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/time/timer.c |   14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -1510,12 +1510,16 @@ u64 get_next_timer_interrupt(unsigned lo
 	is_max_delta = (nextevt == base->clk + NEXT_TIMER_MAX_DELTA);
 	base->next_expiry = nextevt;
 	/*
-	 * We have a fresh next event. Check whether we can forward the base:
+	 * We have a fresh next event. Check whether we can forward the
+	 * base. We can only do that when @basej is past base->clk
+	 * otherwise we might rewind base->clk.
 	 */
-	if (time_after(nextevt, jiffies))
-		base->clk = jiffies;
-	else if (time_after(nextevt, base->clk))
-		base->clk = nextevt;
+	if (time_after(basej, base->clk)) {
+		if (time_after(nextevt, basej))
+			base->clk = basej;
+		else if (time_after(nextevt, base->clk))
+			base->clk = nextevt;
+	}
 
 	if (time_before_eq(nextevt, basej)) {
 		expires = basem;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 043/138] timers: Prevent base clock corruption when forwarding
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (38 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 042/138] timers: Prevent base clock rewind when forwarding clock Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 044/138] timers: Plug locking race vs. timer migration Greg Kroah-Hartman
                     ` (81 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ashton Holmes, Michael Thayer,
	Thomas Gleixner, Michal Necasek, Peter Zijlstra, knut.osmundsen,
	stern, rt

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Gleixner <tglx@linutronix.de>

commit 6bad6bccf2d717f652d37e63cf261eaa23466009 upstream.

When a timer is enqueued we try to forward the timer base clock. This
mechanism has two issues:

1) Forwarding a remote base unlocked

The forwarding function is called from get_target_base() with the current
timer base lock held. But if the new target base is a different base than
the current base (can happen with NOHZ, sigh!) then the forwarding is done
on an unlocked base. This can lead to corruption of base->clk.

Solution is simple: Invoke the forwarding after the target base is locked.

2) Possible corruption due to jiffies advancing

This is similar to the issue in get_net_timer_interrupt() which was fixed
in the previous patch. jiffies can advance between check and assignement
and therefore advancing base->clk beyond the next expiry value.

So we need to read jiffies into a local variable once and do the checks and
assignment with the local copy.

Fixes: a683f390b93f("timers: Forward the wheel clock whenever possible")
Reported-by: Ashton Holmes <scoopta@gmail.com>
Reported-by: Michael Thayer <michael.thayer@oracle.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Michal Necasek <michal.necasek@oracle.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: knut.osmundsen@oracle.com
Cc: stern@rowland.harvard.edu
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20161022110552.253640125@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/time/timer.c |   23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -878,7 +878,7 @@ static inline struct timer_base *get_tim
 
 #ifdef CONFIG_NO_HZ_COMMON
 static inline struct timer_base *
-__get_target_base(struct timer_base *base, unsigned tflags)
+get_target_base(struct timer_base *base, unsigned tflags)
 {
 #ifdef CONFIG_SMP
 	if ((tflags & TIMER_PINNED) || !base->migration_enabled)
@@ -891,25 +891,27 @@ __get_target_base(struct timer_base *bas
 
 static inline void forward_timer_base(struct timer_base *base)
 {
+	unsigned long jnow = READ_ONCE(jiffies);
+
 	/*
 	 * We only forward the base when it's idle and we have a delta between
 	 * base clock and jiffies.
 	 */
-	if (!base->is_idle || (long) (jiffies - base->clk) < 2)
+	if (!base->is_idle || (long) (jnow - base->clk) < 2)
 		return;
 
 	/*
 	 * If the next expiry value is > jiffies, then we fast forward to
 	 * jiffies otherwise we forward to the next expiry value.
 	 */
-	if (time_after(base->next_expiry, jiffies))
-		base->clk = jiffies;
+	if (time_after(base->next_expiry, jnow))
+		base->clk = jnow;
 	else
 		base->clk = base->next_expiry;
 }
 #else
 static inline struct timer_base *
-__get_target_base(struct timer_base *base, unsigned tflags)
+get_target_base(struct timer_base *base, unsigned tflags)
 {
 	return get_timer_this_cpu_base(tflags);
 }
@@ -917,14 +919,6 @@ __get_target_base(struct timer_base *bas
 static inline void forward_timer_base(struct timer_base *base) { }
 #endif
 
-static inline struct timer_base *
-get_target_base(struct timer_base *base, unsigned tflags)
-{
-	struct timer_base *target = __get_target_base(base, tflags);
-
-	forward_timer_base(target);
-	return target;
-}
 
 /*
  * We are using hashed locking: Holding per_cpu(timer_bases[x]).lock means
@@ -1025,6 +1019,9 @@ __mod_timer(struct timer_list *timer, un
 		}
 	}
 
+	/* Try to forward a stale timer base clock */
+	forward_timer_base(base);
+
 	timer->expires = expires;
 	/*
 	 * If 'idx' was calculated above and the base time did not advance

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 044/138] timers: Plug locking race vs. timer migration
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (39 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 043/138] timers: Prevent base clock corruption when forwarding Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 045/138] timers: Lock base for same bucket optimization Greg Kroah-Hartman
                     ` (80 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Linus Torvalds, Thomas Gleixner,
	Andrew Morton, Peter Zijlstra

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Gleixner <tglx@linutronix.de>

commit b831275a3553c32091222ac619cfddd73a5553fb upstream.

Linus noticed that lock_timer_base() lacks a READ_ONCE() for accessing the
timer flags. As a consequence the compiler is allowed to reload the flags
between the initial check for TIMER_MIGRATION and the following timer base
computation and the spin lock of the base.

While this has not been observed (yet), we need to make sure that it never
happens.

Fixes: 0eeda71bc30d ("timer: Replace timer base by a cpu index")
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1610241711220.4983@nanos
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/time/timer.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -937,7 +937,14 @@ static struct timer_base *lock_timer_bas
 {
 	for (;;) {
 		struct timer_base *base;
-		u32 tf = timer->flags;
+		u32 tf;
+
+		/*
+		 * We need to use READ_ONCE() here, otherwise the compiler
+		 * might re-read @tf between the check for TIMER_MIGRATING
+		 * and spin_lock().
+		 */
+		tf = READ_ONCE(timer->flags);
 
 		if (!(tf & TIMER_MIGRATING)) {
 			base = get_timer_base(tf);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 045/138] timers: Lock base for same bucket optimization
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (40 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 044/138] timers: Plug locking race vs. timer migration Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 046/138] ubifs: Abort readdir upon error Greg Kroah-Hartman
                     ` (79 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Linus Torvalds, Thomas Gleixner,
	Andrew Morton, Peter Zijlstra

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Gleixner <tglx@linutronix.de>

commit 4da9152a4308dcbf611cde399c695c359fc9145f upstream.

Linus stumbled over the unlocked modification of the timer expiry value in
mod_timer() which is an optimization for timers which stay in the same
bucket - due to the bucket granularity - despite their expiry time getting
updated.

The optimization itself still makes sense even if we take the lock, because
in case that the bucket stays the same, we avoid the pointless
queue/enqueue dance.

Make the check and the modification of timer->expires protected by the base
lock and shuffle the remaining code around so we can keep the lock held
when we actually have to requeue the timer to a different bucket.

Fixes: f00c0afdfa62 ("timers: Implement optimization for same expiry time in mod_timer()")
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1610241711220.4983@nanos
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/time/timer.c |   28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -965,6 +965,8 @@ __mod_timer(struct timer_list *timer, un
 	unsigned long clk = 0, flags;
 	int ret = 0;
 
+	BUG_ON(!timer->function);
+
 	/*
 	 * This is a common optimization triggered by the networking code - if
 	 * the timer is re-modified to have the same timeout or ends up in the
@@ -973,13 +975,16 @@ __mod_timer(struct timer_list *timer, un
 	if (timer_pending(timer)) {
 		if (timer->expires == expires)
 			return 1;
+
 		/*
-		 * Take the current timer_jiffies of base, but without holding
-		 * the lock!
+		 * We lock timer base and calculate the bucket index right
+		 * here. If the timer ends up in the same bucket, then we
+		 * just update the expiry time and avoid the whole
+		 * dequeue/enqueue dance.
 		 */
-		base = get_timer_base(timer->flags);
-		clk = base->clk;
+		base = lock_timer_base(timer, &flags);
 
+		clk = base->clk;
 		idx = calc_wheel_index(expires, clk);
 
 		/*
@@ -989,14 +994,14 @@ __mod_timer(struct timer_list *timer, un
 		 */
 		if (idx == timer_get_idx(timer)) {
 			timer->expires = expires;
-			return 1;
+			ret = 1;
+			goto out_unlock;
 		}
+	} else {
+		base = lock_timer_base(timer, &flags);
 	}
 
 	timer_stats_timer_set_start_info(timer);
-	BUG_ON(!timer->function);
-
-	base = lock_timer_base(timer, &flags);
 
 	ret = detach_if_pending(timer, base, false);
 	if (!ret && pending_only)
@@ -1032,9 +1037,10 @@ __mod_timer(struct timer_list *timer, un
 	timer->expires = expires;
 	/*
 	 * If 'idx' was calculated above and the base time did not advance
-	 * between calculating 'idx' and taking the lock, only enqueue_timer()
-	 * and trigger_dyntick_cpu() is required. Otherwise we need to
-	 * (re)calculate the wheel index via internal_add_timer().
+	 * between calculating 'idx' and possibly switching the base, only
+	 * enqueue_timer() and trigger_dyntick_cpu() is required. Otherwise
+	 * we need to (re)calculate the wheel index via
+	 * internal_add_timer().
 	 */
 	if (idx != UINT_MAX && clk == base->clk) {
 		enqueue_timer(base, timer, idx);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 046/138] ubifs: Abort readdir upon error
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (41 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 045/138] timers: Lock base for same bucket optimization Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 047/138] ubifs: Fix regression in ubifs_readdir() Greg Kroah-Hartman
                     ` (78 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Richard Weinberger

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Richard Weinberger <richard@nod.at>

commit c83ed4c9dbb358b9e7707486e167e940d48bfeed upstream.

If UBIFS is facing an error while walking a directory, it reports this
error and ubifs_readdir() returns the error code. But the VFS readdir
logic does not make the getdents system call fail in all cases. When the
readdir cursor indicates that more entries are present, the system call
will just return and the libc wrapper will try again since it also
knows that more entries are present.
This causes the libc wrapper to busy loop for ever when a directory is
corrupted on UBIFS.
A common approach do deal with corrupted directory entries is
skipping them by setting the cursor to the next entry. On UBIFS this
approach is not possible since we cannot compute the next directory
entry cursor position without reading the current entry. So all we can
do is setting the cursor to the "no more entries" position and make
getdents exit.

Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/ubifs/dir.c |    8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -350,7 +350,7 @@ static unsigned int vfs_dent_type(uint8_
  */
 static int ubifs_readdir(struct file *file, struct dir_context *ctx)
 {
-	int err;
+	int err = 0;
 	struct qstr nm;
 	union ubifs_key key;
 	struct ubifs_dent_node *dent;
@@ -452,14 +452,12 @@ out:
 	kfree(file->private_data);
 	file->private_data = NULL;
 
-	if (err != -ENOENT) {
+	if (err != -ENOENT)
 		ubifs_err(c, "cannot find next direntry, error %d", err);
-		return err;
-	}
 
 	/* 2 is a special value indicating that there are no more direntries */
 	ctx->pos = 2;
-	return 0;
+	return err;
 }
 
 /* Free saved readdir() state when the directory is closed */

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 047/138] ubifs: Fix regression in ubifs_readdir()
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (42 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 046/138] ubifs: Abort readdir upon error Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 048/138] mei: txe: dont clean an unprocessed interrupt cause Greg Kroah-Hartman
                     ` (77 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Peter Rosin, Ralph Sennhauser,
	Richard Weinberger

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Richard Weinberger <richard@nod.at>

commit a00052a296e54205cf238c75bd98d17d5d02a6db upstream.

Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
overlayfs support because the fix exposed an internal error
code to VFS.

Reported-by: Peter Rosin <peda@axentia.se>
Tested-by: Peter Rosin <peda@axentia.se>
Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Tested-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/ubifs/dir.c |    8 ++++++++
 1 file changed, 8 insertions(+)

--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -454,6 +454,14 @@ out:
 
 	if (err != -ENOENT)
 		ubifs_err(c, "cannot find next direntry, error %d", err);
+	else
+		/*
+		 * -ENOENT is a non-fatal error in this context, the TNC uses
+		 * it to indicate that the cursor moved past the current directory
+		 * and readdir() has to stop.
+		 */
+		err = 0;
+
 
 	/* 2 is a special value indicating that there are no more direntries */
 	ctx->pos = 2;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 048/138] mei: txe: dont clean an unprocessed interrupt cause.
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (43 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 047/138] ubifs: Fix regression in ubifs_readdir() Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 049/138] usb: gadget: udc: atmel: fix endpoint name Greg Kroah-Hartman
                     ` (76 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Alexander Usyskin, Tomas Winkler

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alexander Usyskin <alexander.usyskin@intel.com>

commit 43605e293eb13c07acb546c14f407a271837af17 upstream.

SEC registers are not accessible when the TXE device is in low power
state, hence the SEC interrupt cannot be processed if device is not
awake.

In some rare cases entrance to low power state (aliveness off) and input
ready bits can be signaled at the same time, resulting in communication
stall as input ready won't be signaled again after waking up. To resolve
this IPC_HHIER_SEC bit in HHISR_REG should not be cleaned if the
interrupt is not processed.

Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/misc/mei/hw-txe.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/drivers/misc/mei/hw-txe.c
+++ b/drivers/misc/mei/hw-txe.c
@@ -978,11 +978,13 @@ static bool mei_txe_check_and_ack_intrs(
 	hisr = mei_txe_br_reg_read(hw, HISR_REG);
 
 	aliveness = mei_txe_aliveness_get(dev);
-	if (hhisr & IPC_HHIER_SEC && aliveness)
+	if (hhisr & IPC_HHIER_SEC && aliveness) {
 		ipc_isr = mei_txe_sec_reg_read_silent(hw,
 				SEC_IPC_HOST_INT_STATUS_REG);
-	else
+	} else {
 		ipc_isr = 0;
+		hhisr &= ~IPC_HHIER_SEC;
+	}
 
 	generated = generated ||
 		(hisr & HISR_INT_STS_MSK) ||

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 049/138] usb: gadget: udc: atmel: fix endpoint name
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (44 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 048/138] mei: txe: dont clean an unprocessed interrupt cause Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 051/138] USB: serial: fix potential NULL-dereference at probe Greg Kroah-Hartman
                     ` (75 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Richard Genoud, Nicolas Ferre,
	Alexandre Belloni, Felipe Balbi

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alexandre Belloni <alexandre.belloni@free-electrons.com>

commit bbe097f092b0d13e9736bd2794d0ab24547d0e5d upstream.

Since commit c32b5bcfa3c4 ("ARM: dts: at91: Fix USB endpoint nodes"),
atmel_usba_udc fails with:

------------[ cut here ]------------
WARNING: CPU: 0 PID: 0 at include/linux/usb/gadget.h:405
ecm_do_notify+0x188/0x1a0
Modules linked in:
CPU: 0 PID: 0 Comm: swapper Not tainted 4.7.0+ #15
Hardware name: Atmel SAMA5
[<c010ccfc>] (unwind_backtrace) from [<c010a7ec>] (show_stack+0x10/0x14)
[<c010a7ec>] (show_stack) from [<c0115c10>] (__warn+0xe4/0xfc)
[<c0115c10>] (__warn) from [<c0115cd8>] (warn_slowpath_null+0x20/0x28)
[<c0115cd8>] (warn_slowpath_null) from [<c04377ac>] (ecm_do_notify+0x188/0x1a0)
[<c04377ac>] (ecm_do_notify) from [<c04379a4>] (ecm_set_alt+0x74/0x1ac)
[<c04379a4>] (ecm_set_alt) from [<c042f74c>] (composite_setup+0xfc0/0x19f8)
[<c042f74c>] (composite_setup) from [<c04356e8>] (usba_udc_irq+0x8f4/0xd9c)
[<c04356e8>] (usba_udc_irq) from [<c013ec9c>] (handle_irq_event_percpu+0x9c/0x158)
[<c013ec9c>] (handle_irq_event_percpu) from [<c013ed80>] (handle_irq_event+0x28/0x3c)
[<c013ed80>] (handle_irq_event) from [<c01416d4>] (handle_fasteoi_irq+0xa0/0x168)
[<c01416d4>] (handle_fasteoi_irq) from [<c013e3f8>] (generic_handle_irq+0x24/0x34)
[<c013e3f8>] (generic_handle_irq) from [<c013e640>] (__handle_domain_irq+0x54/0xa8)
[<c013e640>] (__handle_domain_irq) from [<c010b214>] (__irq_svc+0x54/0x70)
[<c010b214>] (__irq_svc) from [<c0107eb0>] (arch_cpu_idle+0x38/0x3c)
[<c0107eb0>] (arch_cpu_idle) from [<c0137300>] (cpu_startup_entry+0x9c/0xdc)
[<c0137300>] (cpu_startup_entry) from [<c0900c40>] (start_kernel+0x354/0x360)
[<c0900c40>] (start_kernel) from [<20008078>] (0x20008078)
---[ end trace e7cf9dcebf4815a6 ]---

Fixes: c32b5bcfa3c4 ("ARM: dts: at91: Fix USB endpoint nodes")
Reported-by: Richard Genoud <richard.genoud@gmail.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/gadget/udc/atmel_usba_udc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -1978,7 +1978,7 @@ static struct usba_ep * atmel_udc_of_ini
 			dev_err(&pdev->dev, "of_probe: name error(%d)\n", ret);
 			goto err;
 		}
-		ep->ep.name = name;
+		ep->ep.name = kasprintf(GFP_KERNEL, "ep%d", ep->index);
 
 		ep->ep_regs = udc->regs + USBA_EPT_BASE(i);
 		ep->dma_regs = udc->regs + USBA_DMA_BASE(i);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 051/138] USB: serial: fix potential NULL-dereference at probe
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (45 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 049/138] usb: gadget: udc: atmel: fix endpoint name Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 052/138] USB: serial: cp210x: fix tiocmget error handling Greg Kroah-Hartman
                     ` (74 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Johan Hovold

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan@kernel.org>

commit 126d26f66d9890a69158812a6caa248c05359daa upstream.

Make sure we have at least one port before attempting to register a
console.

Currently, at least one driver binds to a "dummy" interface and requests
zero ports for it. Should such an interface also lack endpoints, we get
a NULL-deref during probe.

Fixes: e5b1e2062e05 ("USB: serial: make minor allocation dynamic")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/serial/usb-serial.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -1078,7 +1078,8 @@ static int usb_serial_probe(struct usb_i
 
 	serial->disconnected = 0;
 
-	usb_serial_console_init(serial->port[0]->minor);
+	if (num_ports > 0)
+		usb_serial_console_init(serial->port[0]->minor);
 exit:
 	module_put(type->driver.owner);
 	return 0;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 052/138] USB: serial: cp210x: fix tiocmget error handling
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (46 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 051/138] USB: serial: fix potential NULL-dereference at probe Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 053/138] USB: serial: ftdi_sio: add support for Infineon TriBoard TC2X7 Greg Kroah-Hartman
                     ` (73 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Johan Hovold

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan@kernel.org>

commit de24e0a108bc48062e1c7acaa97014bce32a919f upstream.

The current tiocmget implementation would fail to report errors up the
stack and instead leaked a few bits from the stack as a mask of
modem-status flags.

Fixes: 39a66b8d22a3 ("[PATCH] USB: CP2101 Add support for flow control")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/serial/cp210x.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -1077,7 +1077,9 @@ static int cp210x_tiocmget(struct tty_st
 	u8 control;
 	int result;
 
-	cp210x_read_u8_reg(port, CP210X_GET_MDMSTS, &control);
+	result = cp210x_read_u8_reg(port, CP210X_GET_MDMSTS, &control);
+	if (result)
+		return result;
 
 	result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0)
 		|((control & CONTROL_RTS) ? TIOCM_RTS : 0)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 053/138] USB: serial: ftdi_sio: add support for Infineon TriBoard TC2X7
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (47 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 052/138] USB: serial: cp210x: fix tiocmget error handling Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 054/138] xhci: use default USB_RESUME_TIMEOUT when resuming ports Greg Kroah-Hartman
                     ` (72 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Stefan Tauner, Johan Hovold

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Stefan Tauner <stefan.tauner@technikum-wien.at>

commit ca006f785fbfd7a5c901900bd3fe2b26e946a1ee upstream.

This adds support to ftdi_sio for the Infineon TriBoard TC2X7
engineering board for first-generation Aurix SoCs with Tricore CPUs.
Mere addition of the device IDs does the job.

Signed-off-by: Stefan Tauner <stefan.tauner@technikum-wien.at>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/serial/ftdi_sio.c     |    3 ++-
 drivers/usb/serial/ftdi_sio_ids.h |    5 +++--
 2 files changed, 5 insertions(+), 3 deletions(-)

--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -986,7 +986,8 @@ static const struct usb_device_id id_tab
 	/* ekey Devices */
 	{ USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) },
 	/* Infineon Devices */
-	{ USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC1798_PID, 1) },
+	{ USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_TC2X7_PID, 1) },
 	/* GE Healthcare devices */
 	{ USB_DEVICE(GE_HEALTHCARE_VID, GE_HEALTHCARE_NEMO_TRACKER_PID) },
 	/* Active Research (Actisense) devices */
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -626,8 +626,9 @@
 /*
  * Infineon Technologies
  */
-#define INFINEON_VID		0x058b
-#define INFINEON_TRIBOARD_PID	0x0028 /* DAS JTAG TriBoard TC1798 V1.0 */
+#define INFINEON_VID		        0x058b
+#define INFINEON_TRIBOARD_TC1798_PID	0x0028 /* DAS JTAG TriBoard TC1798 V1.0 */
+#define INFINEON_TRIBOARD_TC2X7_PID	0x0043 /* DAS JTAG TriBoard TC2X7 V1.0 */
 
 /*
  * Acton Research Corp.

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 054/138] xhci: use default USB_RESUME_TIMEOUT when resuming ports.
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (48 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 053/138] USB: serial: ftdi_sio: add support for Infineon TriBoard TC2X7 Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 055/138] usb: renesas_usbhs: add wait after initialization for R-Car Gen3 Greg Kroah-Hartman
                     ` (71 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Mathias Nyman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mathias Nyman <mathias.nyman@linux.intel.com>

commit 7d3b016a6f5a0fa610dfd02b05654c08fa4ae514 upstream.

USB2 host inititated resume, and system suspend bus resume
need to use the same USB_RESUME_TIMEOUT as elsewhere.

This resolves a device disconnect issue at system resume seen
on Intel Braswell and Apollolake, but is in no way limited to
those platforms.

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/host/xhci-hub.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -1166,7 +1166,7 @@ int xhci_hub_control(struct usb_hcd *hcd
 				xhci_set_link_state(xhci, port_array, wIndex,
 							XDEV_RESUME);
 				spin_unlock_irqrestore(&xhci->lock, flags);
-				msleep(20);
+				msleep(USB_RESUME_TIMEOUT);
 				spin_lock_irqsave(&xhci->lock, flags);
 				xhci_set_link_state(xhci, port_array, wIndex,
 							XDEV_U0);
@@ -1410,7 +1410,7 @@ int xhci_bus_resume(struct usb_hcd *hcd)
 
 	if (need_usb2_u3_exit) {
 		spin_unlock_irqrestore(&xhci->lock, flags);
-		msleep(20);
+		msleep(USB_RESUME_TIMEOUT);
 		spin_lock_irqsave(&xhci->lock, flags);
 	}
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 055/138] usb: renesas_usbhs: add wait after initialization for R-Car Gen3
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (49 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 054/138] xhci: use default USB_RESUME_TIMEOUT when resuming ports Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 056/138] usb: increase ohci watchdog delay to 275 msec Greg Kroah-Hartman
                     ` (70 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, balbi, Yoshihiro Shimoda

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

commit b76032396d7958f006bccf5fb2535beb5526837c upstream.

Since the controller on R-Car Gen3 doesn't have any status registers
to detect initialization (LPSTS.SUSPM = 1) and the initialization needs
up to 45 usec, this patch adds wait after the initialization. Otherwise,
writing other registers (e.g. INTENB0) will fail.

Fixes: de18757e272d ("usb: renesas_usbhs: add R-Car Gen3 power control")
Cc: <balbi@kernel.org>
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/renesas_usbhs/rcar3.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

--- a/drivers/usb/renesas_usbhs/rcar3.c
+++ b/drivers/usb/renesas_usbhs/rcar3.c
@@ -9,6 +9,7 @@
  *
  */
 
+#include <linux/delay.h>
 #include <linux/io.h>
 #include "common.h"
 #include "rcar3.h"
@@ -35,10 +36,13 @@ static int usbhs_rcar3_power_ctrl(struct
 
 	usbhs_write32(priv, UGCTRL2, UGCTRL2_RESERVED_3 | UGCTRL2_USB0SEL_OTG);
 
-	if (enable)
+	if (enable) {
 		usbhs_bset(priv, LPSTS, LPSTS_SUSPM, LPSTS_SUSPM);
-	else
+		/* The controller on R-Car Gen3 needs to wait up to 45 usec */
+		udelay(45);
+	} else {
 		usbhs_bset(priv, LPSTS, LPSTS_SUSPM, 0);
+	}
 
 	return 0;
 }

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 056/138] usb: increase ohci watchdog delay to 275 msec
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (50 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 055/138] usb: renesas_usbhs: add wait after initialization for R-Car Gen3 Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 057/138] GenWQE: Fix bad page access during abort of resource allocation Greg Kroah-Hartman
                     ` (69 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Bryan Paluch, Alan Stern

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Bryan Paluch <bryanpaluch@gmail.com>

commit ed6d6f8f42d7302f6f9b6245f34927ec20d26c12 upstream.

Increase ohci watchout delay to 275 ms. Previous delay was 250 ms
with 20 ms of slack, after removing slack time some ohci controllers don't
respond in time. Logs from systems with controllers that have the
issue would show "HcDoneHead not written back; disabled"

Signed-off-by: Bryan Paluch <bryanpaluch@gmail.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/host/ohci-hcd.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -72,7 +72,7 @@
 static const char	hcd_name [] = "ohci_hcd";
 
 #define	STATECHANGE_DELAY	msecs_to_jiffies(300)
-#define	IO_WATCHDOG_DELAY	msecs_to_jiffies(250)
+#define	IO_WATCHDOG_DELAY	msecs_to_jiffies(275)
 
 #include "ohci.h"
 #include "pci-quirks.h"

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 057/138] GenWQE: Fix bad page access during abort of resource allocation
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (51 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 056/138] usb: increase ohci watchdog delay to 275 msec Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 058/138] x86/smpboot: Init apic mapping before usage Greg Kroah-Hartman
                     ` (68 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Gerald Schaefer, Frank Haverkamp

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Gerald Schaefer <gerald.schaefer@de.ibm.com>

commit a7a7aeefbca2982586ba2c9fd7739b96416a6d1d upstream.

When interrupting an application which was allocating DMAable
memory, it was possible, that the DMA memory was deallocated
twice, leading to the error symptoms below.

Thanks to Gerald, who analyzed the problem and provided this
patch.

I agree with his analysis of the problem: ddcb_cmd_fixups() ->
genwqe_alloc_sync_sgl() (fails in f/lpage, but sgl->sgl != NULL
and f/lpage maybe also != NULL) -> ddcb_cmd_cleanup() ->
genwqe_free_sync_sgl() (double free, because sgl->sgl != NULL and
f/lpage maybe also != NULL)

In this scenario we would have exactly the kind of double free that
would explain the WARNING / Bad page state, and as expected it is
caused by broken error handling (cleanup).

Using the Ubuntu git source, tag Ubuntu-4.4.0-33.52, he was able to reproduce
the "Bad page state" issue, and with the patch on top he could not reproduce
it any more.

------------[ cut here ]------------
WARNING: at /build/linux-o03cxz/linux-4.4.0/arch/s390/include/asm/pci_dma.h:141
Modules linked in: qeth_l2 ghash_s390 prng aes_s390 des_s390 des_generic sha512_s390 sha256_s390 sha1_s390 sha_common genwqe_card qeth crc_itu_t qdio ccwgroup vmur dm_multipath dasd_eckd_mod dasd_mod
CPU: 2 PID: 3293 Comm: genwqe_gunzip Not tainted 4.4.0-33-generic #52-Ubuntu
task: 0000000032c7e270 ti: 00000000324e4000 task.ti: 00000000324e4000
Krnl PSW : 0404c00180000000 0000000000156346 (dma_update_cpu_trans+0x9e/0xa8)
           R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 EA:3
Krnl GPRS: 00000000324e7bcd 0000000000c3c34a 0000000027628298 000000003215b400
           0000000000000400 0000000000001fff 0000000000000400 0000000116853000
           07000000324e7b1e 0000000000000001 0000000000000001 0000000000000001
           0000000000001000 0000000116854000 0000000000156402 00000000324e7a38
Krnl Code: 000000000015633a: 95001000           cli     0(%r1),0
           000000000015633e: a774ffc3           brc     7,1562c4
          #0000000000156342: a7f40001           brc     15,156344
          >0000000000156346: 92011000           mvi     0(%r1),1
           000000000015634a: a7f4ffbd           brc     15,1562c4
           000000000015634e: 0707               bcr     0,%r7
           0000000000156350: c00400000000       brcl    0,156350
           0000000000156356: eb7ff0500024       stmg    %r7,%r15,80(%r15)
Call Trace:
([<00000000001563e0>] dma_update_trans+0x90/0x228)
 [<00000000001565dc>] s390_dma_unmap_pages+0x64/0x160
 [<00000000001567c2>] s390_dma_free+0x62/0x98
 [<000003ff801310ce>] __genwqe_free_consistent+0x56/0x70 [genwqe_card]
 [<000003ff801316d0>] genwqe_free_sync_sgl+0xf8/0x160 [genwqe_card]
 [<000003ff8012bd6e>] ddcb_cmd_cleanup+0x86/0xa8 [genwqe_card]
 [<000003ff8012c1c0>] do_execute_ddcb+0x110/0x348 [genwqe_card]
 [<000003ff8012c914>] genwqe_ioctl+0x51c/0xc20 [genwqe_card]
 [<000000000032513a>] do_vfs_ioctl+0x3b2/0x518
 [<0000000000325344>] SyS_ioctl+0xa4/0xb8
 [<00000000007b86c6>] system_call+0xd6/0x264
 [<000003ff9e8e520a>] 0x3ff9e8e520a
Last Breaking-Event-Address:
 [<0000000000156342>] dma_update_cpu_trans+0x9a/0xa8
---[ end trace 35996336235145c8 ]---
BUG: Bad page state in process jbd2/dasdb1-8  pfn:3215b
page:000003d100c856c0 count:-1 mapcount:0 mapping:          (null) index:0x0
flags: 0x3fffc0000000000()
page dumped because: nonzero _count

Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Frank Haverkamp <haver@linux.vnet.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/misc/genwqe/card_utils.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

--- a/drivers/misc/genwqe/card_utils.c
+++ b/drivers/misc/genwqe/card_utils.c
@@ -352,17 +352,27 @@ int genwqe_alloc_sync_sgl(struct genwqe_
 		if (copy_from_user(sgl->lpage, user_addr + user_size -
 				   sgl->lpage_size, sgl->lpage_size)) {
 			rc = -EFAULT;
-			goto err_out1;
+			goto err_out2;
 		}
 	}
 	return 0;
 
+ err_out2:
+	__genwqe_free_consistent(cd, PAGE_SIZE, sgl->lpage,
+				 sgl->lpage_dma_addr);
+	sgl->lpage = NULL;
+	sgl->lpage_dma_addr = 0;
  err_out1:
 	__genwqe_free_consistent(cd, PAGE_SIZE, sgl->fpage,
 				 sgl->fpage_dma_addr);
+	sgl->fpage = NULL;
+	sgl->fpage_dma_addr = 0;
  err_out:
 	__genwqe_free_consistent(cd, sgl->sgl_size, sgl->sgl,
 				 sgl->sgl_dma_addr);
+	sgl->sgl = NULL;
+	sgl->sgl_dma_addr = 0;
+	sgl->sgl_size = 0;
 	return -ENOMEM;
 }
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 058/138] x86/smpboot: Init apic mapping before usage
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (52 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 057/138] GenWQE: Fix bad page access during abort of resource allocation Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 059/138] vt: clear selection before resizing Greg Kroah-Hartman
                     ` (67 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, prarit, ville.syrjala,
	michael.thayer, knut.osmundsen, frank.mehnert, Borislav Petkov,
	Thomas Gleixner

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Gleixner <tglx@linutronix.de>

commit 1e90a13d0c3dc94512af1ccb2b6563e8297838fa upstream.

The recent changes, which forced the registration of the boot cpu on UP
systems, which do not have ACPI tables, have been fixed for systems w/o
local APIC, but left a wreckage for systems which have neither ACPI nor
mptables, but the CPU has an APIC, e.g. virtualbox.

The boot process crashes in prefill_possible_map() as it wants to register
the boot cpu, which needs to access the local apic, but the local APIC is
not yet mapped.

There is no reason why init_apic_mapping() can't be invoked before
prefill_possible_map(). So instead of playing another silly early mapping
game, as the ACPI/mptables code does, we just move init_apic_mapping()
before the call to prefill_possible_map().

In hindsight, I should have noticed that combination earlier.

Sorry for the churn (also in stable)!

Fixes: ff8560512b8d ("x86/boot/smp: Don't try to poke disabled/non-existent APIC")
Reported-and-debugged-by: Michal Necasek <michal.necasek@oracle.com>
Reported-and-tested-by: Wolfgang Bauer <wbauer@tmo.at>
Cc: prarit@redhat.com
Cc: ville.syrjala@linux.intel.com
Cc: michael.thayer@oracle.com
Cc: knut.osmundsen@oracle.com
Cc: frank.mehnert@oracle.com
Cc: Borislav Petkov <bp@alien8.de>
Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1610282114380.5053@nanos
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kernel/setup.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1222,11 +1222,16 @@ void __init setup_arch(char **cmdline_p)
 	if (smp_found_config)
 		get_smp_config();
 
+	/*
+	 * Systems w/o ACPI and mptables might not have it mapped the local
+	 * APIC yet, but prefill_possible_map() might need to access it.
+	 */
+	init_apic_mappings();
+
 	prefill_possible_map();
 
 	init_cpu_to_node();
 
-	init_apic_mappings();
 	io_apic_init_mappings();
 
 	kvm_guest_init();

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 059/138] vt: clear selection before resizing
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (53 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 058/138] x86/smpboot: Init apic mapping before usage Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 060/138] hv: do not lose pending heartbeat vmbus packets Greg Kroah-Hartman
                     ` (66 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Scot Doyle

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Scot Doyle <lkml14@scotdoyle.com>

commit 009e39ae44f4191188aeb6dfbf661b771dbbe515 upstream.

When resizing a vt its selection may exceed the new size, resulting in
an invalid memory access [1]. Clear the selection before resizing.

[1] http://lkml.kernel.org/r/CACT4Y+acDTwy4umEvf5ROBGiRJNrxHN4Cn5szCXE5Jw-d1B=Xw@mail.gmail.com

Reported-and-tested-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/tty/vt/vt.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -874,6 +874,9 @@ static int vc_do_resize(struct tty_struc
 	if (!newscreen)
 		return -ENOMEM;
 
+	if (vc == sel_cons)
+		clear_selection();
+
 	old_rows = vc->vc_rows;
 	old_row_size = vc->vc_size_row;
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 060/138] hv: do not lose pending heartbeat vmbus packets
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (54 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 059/138] vt: clear selection before resizing Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 061/138] xhci: add restart quirk for Intel Wildcatpoint PCH Greg Kroah-Hartman
                     ` (65 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Long Li, K. Y. Srinivasan

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Long Li <longli@microsoft.com>

commit 407a3aee6ee2d2cb46d9ba3fc380bc29f35d020c upstream.

The host keeps sending heartbeat packets independent of the
guest responding to them.  Even though we respond to the heartbeat messages at
interrupt level, we can have situations where there maybe multiple heartbeat
messages pending that have not been responded to. For instance this occurs when the
VM is paused and the host continues to send the heartbeat messages.
Address this issue by draining and responding to all
the heartbeat messages that maybe pending.

Signed-off-by: Long Li <longli@microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/hv/hv_util.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

--- a/drivers/hv/hv_util.c
+++ b/drivers/hv/hv_util.c
@@ -283,10 +283,14 @@ static void heartbeat_onchannelcallback(
 	u8 *hbeat_txf_buf = util_heartbeat.recv_buffer;
 	struct icmsg_negotiate *negop = NULL;
 
-	vmbus_recvpacket(channel, hbeat_txf_buf,
-			 PAGE_SIZE, &recvlen, &requestid);
+	while (1) {
+
+		vmbus_recvpacket(channel, hbeat_txf_buf,
+				 PAGE_SIZE, &recvlen, &requestid);
+
+		if (!recvlen)
+			break;
 
-	if (recvlen > 0) {
 		icmsghdrp = (struct icmsg_hdr *)&hbeat_txf_buf[
 				sizeof(struct vmbuspipe_hdr)];
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 061/138] xhci: add restart quirk for Intel Wildcatpoint PCH
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (55 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 060/138] hv: do not lose pending heartbeat vmbus packets Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 062/138] xhci: workaround for hosts missing CAS bit Greg Kroah-Hartman
                     ` (64 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Hasan Mahmood, Mathias Nyman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mathias Nyman <mathias.nyman@linux.intel.com>

commit 4c39135aa412d2f1381e43802523da110ca7855c upstream.

xHC in Wildcatpoint-LP PCH is similar to LynxPoint-LP and need the
same quirks to prevent machines from spurious restart while
shutting them down.

Reported-by: Hasan Mahmood <hasan.mahm@gmail.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/host/xhci-pci.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -45,6 +45,7 @@
 
 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI	0x8c31
 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI	0x9c31
+#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_XHCI	0x9cb1
 #define PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI		0x22b5
 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI		0xa12f
 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI	0x9d2f
@@ -153,7 +154,8 @@ static void xhci_pci_quirks(struct devic
 		xhci->quirks |= XHCI_SPURIOUS_REBOOT;
 	}
 	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
-		pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) {
+		(pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI ||
+		 pdev->device == PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_XHCI)) {
 		xhci->quirks |= XHCI_SPURIOUS_REBOOT;
 		xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
 	}

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 062/138] xhci: workaround for hosts missing CAS bit
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (56 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 061/138] xhci: add restart quirk for Intel Wildcatpoint PCH Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 063/138] tty: limit terminal size to 4M chars Greg Kroah-Hartman
                     ` (63 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Mathias Nyman

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mathias Nyman <mathias.nyman@linux.intel.com>

commit 346e99736c3ce328fd42d678343b70243aca5f36 upstream.

If a device is unplugged and replugged during Sx system suspend
some  Intel xHC hosts will overwrite the CAS (Cold attach status) flag
and no device connection is noticed in resume.

A device in this state can be identified in resume if its link state
is in polling or compliance mode, and the current connect status is 0.
A device in this state needs to be warm reset.

Intel 100/c230 series PCH specification update Doc #332692-006 Errata #8

Observed on Cherryview and Apollolake as they go into compliance mode
if LFPS times out during polling, and re-plugged devices are not
discovered at resume.

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/host/xhci-hub.c |   37 +++++++++++++++++++++++++++++++++++++
 drivers/usb/host/xhci-pci.c |    6 ++++++
 drivers/usb/host/xhci.h     |    3 +++
 3 files changed, 46 insertions(+)

--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -1355,6 +1355,35 @@ int xhci_bus_suspend(struct usb_hcd *hcd
 	return 0;
 }
 
+/*
+ * Workaround for missing Cold Attach Status (CAS) if device re-plugged in S3.
+ * warm reset a USB3 device stuck in polling or compliance mode after resume.
+ * See Intel 100/c230 series PCH specification update Doc #332692-006 Errata #8
+ */
+static bool xhci_port_missing_cas_quirk(int port_index,
+					     __le32 __iomem **port_array)
+{
+	u32 portsc;
+
+	portsc = readl(port_array[port_index]);
+
+	/* if any of these are set we are not stuck */
+	if (portsc & (PORT_CONNECT | PORT_CAS))
+		return false;
+
+	if (((portsc & PORT_PLS_MASK) != XDEV_POLLING) &&
+	    ((portsc & PORT_PLS_MASK) != XDEV_COMP_MODE))
+		return false;
+
+	/* clear wakeup/change bits, and do a warm port reset */
+	portsc &= ~(PORT_RWC_BITS | PORT_CEC | PORT_WAKE_BITS);
+	portsc |= PORT_WR;
+	writel(portsc, port_array[port_index]);
+	/* flush write */
+	readl(port_array[port_index]);
+	return true;
+}
+
 int xhci_bus_resume(struct usb_hcd *hcd)
 {
 	struct xhci_hcd	*xhci = hcd_to_xhci(hcd);
@@ -1392,6 +1421,14 @@ int xhci_bus_resume(struct usb_hcd *hcd)
 		u32 temp;
 
 		temp = readl(port_array[port_index]);
+
+		/* warm reset CAS limited ports stuck in polling/compliance */
+		if ((xhci->quirks & XHCI_MISSING_CAS) &&
+		    (hcd->speed >= HCD_USB3) &&
+		    xhci_port_missing_cas_quirk(port_index, port_array)) {
+			xhci_dbg(xhci, "reset stuck port %d\n", port_index);
+			continue;
+		}
 		if (DEV_SUPERSPEED_ANY(temp))
 			temp &= ~(PORT_RWC_BITS | PORT_CEC | PORT_WAKE_BITS);
 		else
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -51,6 +51,7 @@
 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI	0x9d2f
 #define PCI_DEVICE_ID_INTEL_BROXTON_M_XHCI		0x0aa8
 #define PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI		0x1aa8
+#define PCI_DEVICE_ID_INTEL_APL_XHCI			0x5aa8
 
 static const char hcd_name[] = "xhci_hcd";
 
@@ -171,6 +172,11 @@ static void xhci_pci_quirks(struct devic
 		 pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI) {
 		xhci->quirks |= XHCI_SSIC_PORT_UNUSED;
 	}
+	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
+	    (pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI ||
+	     pdev->device == PCI_DEVICE_ID_INTEL_APL_XHCI))
+		xhci->quirks |= XHCI_MISSING_CAS;
+
 	if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
 			pdev->device == PCI_DEVICE_ID_EJ168) {
 		xhci->quirks |= XHCI_RESET_ON_RESUME;
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -314,6 +314,8 @@ struct xhci_op_regs {
 #define XDEV_U2		(0x2 << 5)
 #define XDEV_U3		(0x3 << 5)
 #define XDEV_INACTIVE	(0x6 << 5)
+#define XDEV_POLLING	(0x7 << 5)
+#define XDEV_COMP_MODE  (0xa << 5)
 #define XDEV_RESUME	(0xf << 5)
 /* true: port has power (see HCC_PPC) */
 #define PORT_POWER	(1 << 9)
@@ -1653,6 +1655,7 @@ struct xhci_hcd {
 #define XHCI_MTK_HOST		(1 << 21)
 #define XHCI_SSIC_PORT_UNUSED	(1 << 22)
 #define XHCI_NO_64BIT_SUPPORT	(1 << 23)
+#define XHCI_MISSING_CAS	(1 << 24)
 	unsigned int		num_active_eps;
 	unsigned int		limit_active_eps;
 	/* There are two roothubs to keep track of bus suspend info for */

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 063/138] tty: limit terminal size to 4M chars
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (57 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 062/138] xhci: workaround for hosts missing CAS bit Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 064/138] arm64: dts: marvell: fix clocksource for CP110 master SPI0 Greg Kroah-Hartman
                     ` (62 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dmitry Vyukov, David Rientjes,
	One Thousand Gnomes, Jiri Slaby, Peter Hurley, syzkaller

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dmitry Vyukov <dvyukov@google.com>

commit 32b2921e6a7461fe63b71217067a6cf4bddb132f upstream.

Size of kmalloc() in vc_do_resize() is controlled by user.
Too large kmalloc() size triggers WARNING message on console.
Put a reasonable upper bound on terminal size to prevent WARNINGs.

Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
CC: David Rientjes <rientjes@google.com>
Cc: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: Peter Hurley <peter@hurleysoftware.com>
Cc: linux-kernel@vger.kernel.org
Cc: syzkaller@googlegroups.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/tty/vt/vt.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -870,6 +870,8 @@ static int vc_do_resize(struct tty_struc
 	if (new_cols == vc->vc_cols && new_rows == vc->vc_rows)
 		return 0;
 
+	if (new_screen_size > (4 << 20))
+		return -EINVAL;
 	newscreen = kmalloc(new_screen_size, GFP_USER);
 	if (!newscreen)
 		return -ENOMEM;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 064/138] arm64: dts: marvell: fix clocksource for CP110 master SPI0
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (58 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 063/138] tty: limit terminal size to 4M chars Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 065/138] iio:chemical:atlas-ph-sensor: Fix use of 32 bit int to hold 16 bit big endian value Greg Kroah-Hartman
                     ` (61 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Marcin Wojtas, Gregory CLEMENT

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Marcin Wojtas <mw@semihalf.com>

commit 51227bf52008bd4c4c50da4b749bbc6e7bbbca52 upstream.

I2C and SPI interfaces share common clock trees within the CP110 HW block.
It occurred that SPI0 interface has wrong clock assignment in the device
tree, which is fixed in this commit to a proper value.

Fixes: 728dacc7f4dd ("arm64: dts: marvell: initial DT description of ...")
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
@@ -131,7 +131,7 @@
 				#address-cells = <0x1>;
 				#size-cells = <0x0>;
 				cell-index = <1>;
-				clocks = <&cpm_syscon0 0 3>;
+				clocks = <&cpm_syscon0 1 21>;
 				status = "disabled";
 			};
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 065/138] iio:chemical:atlas-ph-sensor: Fix use of 32 bit int to hold 16 bit big endian value
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (59 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 064/138] arm64: dts: marvell: fix clocksource for CP110 master SPI0 Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 066/138] Staging: wilc1000: Fix kernel Oops on opening the device Greg Kroah-Hartman
                     ` (60 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Sandhya Bankar, Jonathan Cameron

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sandhya Bankar <bankarsandhya512@gmail.com>

commit d1fe85ec7702917f2f1515b4c421d5d4792201a0 upstream.

This will result in a random value being reported on big endian architectures.
(thanks to Lars-Peter Clausen for pointing out the effects of this bug)

Only effects a value printed to the log, but as this reports the settings of
the probe in question it may be of direct interest to users.

Also, fixes the following sparse endianness warnings:

drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16
drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16
drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16
drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16
drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16
drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16
drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16
drivers/iio/chemical/atlas-ph-sensor.c:215:9: warning: cast to restricted __be16

Signed-off-by: Sandhya Bankar <bankarsandhya512@gmail.com>
Fixes: e8dd92bfbff25 ("iio: chemical: atlas-ph-sensor: add EC feature")
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/iio/chemical/atlas-ph-sensor.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

--- a/drivers/iio/chemical/atlas-ph-sensor.c
+++ b/drivers/iio/chemical/atlas-ph-sensor.c
@@ -207,13 +207,14 @@ static int atlas_check_ec_calibration(st
 	struct device *dev = &data->client->dev;
 	int ret;
 	unsigned int val;
+	__be16	rval;
 
-	ret = regmap_bulk_read(data->regmap, ATLAS_REG_EC_PROBE, &val, 2);
+	ret = regmap_bulk_read(data->regmap, ATLAS_REG_EC_PROBE, &rval, 2);
 	if (ret)
 		return ret;
 
-	dev_info(dev, "probe set to K = %d.%.2d", be16_to_cpu(val) / 100,
-						 be16_to_cpu(val) % 100);
+	val = be16_to_cpu(rval);
+	dev_info(dev, "probe set to K = %d.%.2d", val / 100, val % 100);
 
 	ret = regmap_read(data->regmap, ATLAS_REG_EC_CALIB_STATUS, &val);
 	if (ret)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 066/138] Staging: wilc1000: Fix kernel Oops on opening the device
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (60 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 065/138] iio:chemical:atlas-ph-sensor: Fix use of 32 bit int to hold 16 bit big endian value Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 067/138] dm: free io_barrier after blk_cleanup_queue call Greg Kroah-Hartman
                     ` (59 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Nicolas Ferre, Aditya Shankar

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Aditya Shankar <Aditya.Shankar@microchip.com>

commit 1d4f1d53e1e2d5e38f4d3ca3bf60f8be5025540f upstream.

Commit 2518ac59eb27 ("staging: wilc1000: Replace kthread with workqueue
for host interface") adds an unconditional destroy_workqueue() on the
wilc's "hif_workqueue" soon after its creation thereby rendering
it unusable. It then further attempts to queue work onto this
non-existing hif_worqueue and results in:

Unable to handle kernel NULL pointer dereference at virtual address 00000010
pgd = de478000
[00000010] *pgd=3eec0831, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1] ARM
Modules linked in: wilc1000_sdio(C) wilc1000(C)
CPU: 0 PID: 825 Comm: ifconfig Tainted: G         C      4.8.0-rc8+ #37
Hardware name: Atmel SAMA5
task: df56f800 task.stack: deeb0000
PC is at __queue_work+0x90/0x284
LR is at __queue_work+0x58/0x284
pc : [<c0126bb0>]    lr : [<c0126b78>]    psr: 600f0093
sp : deeb1aa0  ip : def22d78  fp : deea6000
r10: 00000000  r9 : c0a08150  r8 : c0a2f058
r7 : 00000001  r6 : dee9b600  r5 : def22d74  r4 : 00000000
r3 : 00000000  r2 : def22d74  r1 : 07ffffff  r0 : 00000000
Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment none
...
[<c0127060>] (__queue_work) from [<c0127298>] (queue_work_on+0x34/0x40)
[<c0127298>] (queue_work_on) from [<bf0076b4>] (wilc_enqueue_cmd+0x54/0x64 [wilc1000])
[<bf0076b4>] (wilc_enqueue_cmd [wilc1000]) from [<bf0082b4>] (wilc_set_wfi_drv_handler+0x48/0x70 [wilc1000])
[<bf0082b4>] (wilc_set_wfi_drv_handler [wilc1000]) from [<bf00509c>] (wilc_mac_open+0x214/0x250 [wilc1000])
[<bf00509c>] (wilc_mac_open [wilc1000]) from [<c04fde98>] (__dev_open+0xb8/0x11c)
[<c04fde98>] (__dev_open) from [<c04fe128>] (__dev_change_flags+0x94/0x158)
[<c04fe128>] (__dev_change_flags) from [<c04fe204>] (dev_change_flags+0x18/0x48)
[<c04fe204>] (dev_change_flags) from [<c0557d5c>] (devinet_ioctl+0x6b4/0x788)
[<c0557d5c>] (devinet_ioctl) from [<c04e40a0>] (sock_ioctl+0x154/0x2cc)
[<c04e40a0>] (sock_ioctl) from [<c01b16e0>] (do_vfs_ioctl+0x9c/0x878)
[<c01b16e0>] (do_vfs_ioctl) from [<c01b1ef0>] (SyS_ioctl+0x34/0x5c)
[<c01b1ef0>] (SyS_ioctl) from [<c0107520>] (ret_fast_syscall+0x0/0x3c)
Code: e5932004 e1520006 01a04003 0affffff (e5943010)
---[ end trace b612328adaa6bf20 ]---

This fix removes the unnecessary call to destroy_workqueue() while opening
the device to avoid the above kernel panic. The deinit routine already
does a good job of terminating the workqueue when no longer needed.

Reported-by: Nicolas Ferre <Nicolas.Ferre@microchip.com>
Fixes: 2518ac59eb27 ("staging: wilc1000: Replace kthread with workqueue for host interface")
Signed-off-by: Aditya Shankar <Aditya.Shankar@microchip.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/wilc1000/host_interface.c |    1 -
 1 file changed, 1 deletion(-)

--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -3391,7 +3391,6 @@ int wilc_init(struct net_device *dev, st
 
 	clients_count++;
 
-	destroy_workqueue(hif_workqueue);
 _fail_:
 	return result;
 }

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 067/138] dm: free io_barrier after blk_cleanup_queue call
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (61 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 066/138] Staging: wilc1000: Fix kernel Oops on opening the device Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 069/138] KVM: s390: Fix STHYI buffer alignment for diag224 Greg Kroah-Hartman
                     ` (58 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Tahsin Erdogan, Mike Snitzer

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tahsin Erdogan <tahsin@google.com>

commit d09960b0032174eb493c4c13be5b9c9ef36dc9a7 upstream.

dm_old_request_fn() has paths that access md->io_barrier.  The party
destroying io_barrier should ensure that no future execution of
dm_old_request_fn() is possible.  Move io_barrier destruction to below
blk_cleanup_queue() to ensure this and avoid a NULL pointer crash during
request-based DM device shutdown.

Signed-off-by: Tahsin Erdogan <tahsin@google.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/dm.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1423,8 +1423,6 @@ static void cleanup_mapped_device(struct
 	if (md->bs)
 		bioset_free(md->bs);
 
-	cleanup_srcu_struct(&md->io_barrier);
-
 	if (md->disk) {
 		spin_lock(&_minor_lock);
 		md->disk->private_data = NULL;
@@ -1436,6 +1434,8 @@ static void cleanup_mapped_device(struct
 	if (md->queue)
 		blk_cleanup_queue(md->queue);
 
+	cleanup_srcu_struct(&md->io_barrier);
+
 	if (md->bdev) {
 		bdput(md->bdev);
 		md->bdev = NULL;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 069/138] KVM: s390: Fix STHYI buffer alignment for diag224
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (62 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 067/138] dm: free io_barrier after blk_cleanup_queue call Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 073/138] ARM: dts: fix the SD card on the Snowball Greg Kroah-Hartman
                     ` (57 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Michael Holzheu, Janosch Frank,
	Cornelia Huck, Christian Borntraeger

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Janosch Frank <frankja@linux.vnet.ibm.com>

commit 45c7ee43a5184ddbff652ee0d2e826f86f1b616b upstream.

Diag224 requires a page-aligned 4k buffer to store the name table
into. kmalloc does not guarantee page alignment, hence we replace it
with __get_free_page for the buffer allocation.

Reported-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/s390/kvm/sthyi.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/s390/kvm/sthyi.c
+++ b/arch/s390/kvm/sthyi.c
@@ -315,7 +315,7 @@ static void fill_diag(struct sthyi_sctns
 	if (r < 0)
 		goto out;
 
-	diag224_buf = kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
+	diag224_buf = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
 	if (!diag224_buf || diag224(diag224_buf))
 		goto out;
 
@@ -378,7 +378,7 @@ static void fill_diag(struct sthyi_sctns
 	sctns->par.infpval1 |= PAR_WGHT_VLD;
 
 out:
-	kfree(diag224_buf);
+	free_page((unsigned long)diag224_buf);
 	vfree(diag204_buf);
 }
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 073/138] ARM: dts: fix the SD card on the Snowball
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (63 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 069/138] KVM: s390: Fix STHYI buffer alignment for diag224 Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 074/138] nfsd: Fix general protection fault in release_lock_stateid() Greg Kroah-Hartman
                     ` (56 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Daniel Lezcano, Ulf Hansson,
	Linus Walleij, Olof Johansson

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Linus Walleij <linus.walleij@linaro.org>

commit 1b283eea6228880b765bc40fe4e555416437ce58 upstream.

This fixes a very annoying regression on the Snowball SD card
that has been around for a while. It turns out that the device
tree does not configure the direction pins properly, nor sets
up the pins for the voltage converter properly at boot. Unless
all things are correctly set up, the feedback clock will not
work, and makes the driver spew messages in the console (but
it works, very slowly):

root@Ux500:/ mount /dev/mmcblk0p2 /mnt/
[    9.953460] mmci-pl18x 80126000.sdi0_per1: error during DMA transfer!
[    9.960296] mmcblk0: error -110 sending status command, retrying
[    9.966461] mmcblk0: error -110 sending status command, retrying
[    9.972534] mmcblk0: error -110 sending status command, aborting

Fix this by rectifying the device tree to correspond to that of
the Ux500 HREF boards plus the DAT31DIR setting that is unique for
the Snowball, and things start working smoothly. Add in the SDR12
and SDR25 modes which this host can do without any problems.

I don't know if this has ever been correct, sadly. It works after
this patch.

Reported-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/arm/boot/dts/ste-snowball.dts |   15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

--- a/arch/arm/boot/dts/ste-snowball.dts
+++ b/arch/arm/boot/dts/ste-snowball.dts
@@ -239,14 +239,25 @@
 			arm,primecell-periphid = <0x10480180>;
 			max-frequency = <100000000>;
 			bus-width = <4>;
+			cap-sd-highspeed;
 			cap-mmc-highspeed;
+			sd-uhs-sdr12;
+			sd-uhs-sdr25;
+			/* All direction control is used */
+			st,sig-dir-cmd;
+			st,sig-dir-dat0;
+			st,sig-dir-dat2;
+			st,sig-dir-dat31;
+			st,sig-pin-fbclk;
+			full-pwr-cycle;
 			vmmc-supply = <&ab8500_ldo_aux3_reg>;
 			vqmmc-supply = <&vmmci>;
 			pinctrl-names = "default", "sleep";
 			pinctrl-0 = <&sdi0_default_mode>;
 			pinctrl-1 = <&sdi0_sleep_mode>;
 
-			cd-gpios  = <&gpio6 26 GPIO_ACTIVE_LOW>; // 218
+			/* GPIO218 MMC_CD */
+			cd-gpios  = <&gpio6 26 GPIO_ACTIVE_LOW>;
 
 			status = "okay";
 		};
@@ -549,7 +560,7 @@
 					/* VMMCI level-shifter enable */
 					snowball_cfg3 {
 						pins = "GPIO217_AH12";
-						ste,config = <&gpio_out_lo>;
+						ste,config = <&gpio_out_hi>;
 					};
 					/* VMMCI level-shifter voltage select */
 					snowball_cfg4 {

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 074/138] nfsd: Fix general protection fault in release_lock_stateid()
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (64 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 073/138] ARM: dts: fix the SD card on the Snowball Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 075/138] MIPS: KASLR: Fix handling of NULL FDT Greg Kroah-Hartman
                     ` (55 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Chuck Lever, Jeff Layton, J. Bruce Fields

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Chuck Lever <chuck.lever@oracle.com>

commit f46c445b79906a9da55c13e0a6f6b6a006b892fe upstream.

When I push NFSv4.1 / RDMA hard, (xfstests generic/089, for example),
I get this crash on the server:

Oct 28 22:04:30 klimt kernel: general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC
Oct 28 22:04:30 klimt kernel: Modules linked in: cts rpcsec_gss_krb5 iTCO_wdt iTCO_vendor_support sb_edac edac_core x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm btrfs irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel lrw gf128mul glue_helper ablk_helper cryptd xor pcspkr raid6_pq i2c_i801 i2c_smbus lpc_ich mfd_core sg mei_me mei ioatdma shpchp wmi ipmi_si ipmi_msghandler rpcrdma ib_ipoib rdma_ucm acpi_power_meter acpi_pad ib_ucm ib_uverbs ib_umad rdma_cm ib_cm iw_cm nfsd auth_rpcgss nfs_acl lockd grace sunrpc ip_tables xfs libcrc32c mlx4_ib mlx4_en ib_core sr_mod cdrom sd_mod ast drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops ttm drm crc32c_intel igb ahci libahci ptp mlx4_core pps_core dca libata i2c_algo_bit i2c_core dm_mirror dm_region_hash dm_log dm_mod
Oct 28 22:04:30 klimt kernel: CPU: 7 PID: 1558 Comm: nfsd Not tainted 4.9.0-rc2-00005-g82cd754 #8
Oct 28 22:04:30 klimt kernel: Hardware name: Supermicro Super Server/X10SRL-F, BIOS 1.0c 09/09/2015
Oct 28 22:04:30 klimt kernel: task: ffff880835c3a100 task.stack: ffff8808420d8000
Oct 28 22:04:30 klimt kernel: RIP: 0010:[<ffffffffa05a759f>]  [<ffffffffa05a759f>] release_lock_stateid+0x1f/0x60 [nfsd]
Oct 28 22:04:30 klimt kernel: RSP: 0018:ffff8808420dbce0  EFLAGS: 00010246
Oct 28 22:04:30 klimt kernel: RAX: ffff88084e6660f0 RBX: ffff88084e667020 RCX: 0000000000000000
Oct 28 22:04:30 klimt kernel: RDX: 0000000000000007 RSI: 0000000000000000 RDI: ffff88084e667020
Oct 28 22:04:30 klimt kernel: RBP: ffff8808420dbcf8 R08: 0000000000000001 R09: 0000000000000000
Oct 28 22:04:30 klimt kernel: R10: ffff880835c3a100 R11: ffff880835c3aca8 R12: 6b6b6b6b6b6b6b6b
Oct 28 22:04:30 klimt kernel: R13: ffff88084e6670d8 R14: ffff880835f546f0 R15: ffff880835f1c548
Oct 28 22:04:30 klimt kernel: FS:  0000000000000000(0000) GS:ffff88087bdc0000(0000) knlGS:0000000000000000
Oct 28 22:04:30 klimt kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Oct 28 22:04:30 klimt kernel: CR2: 00007ff020389000 CR3: 0000000001c06000 CR4: 00000000001406e0
Oct 28 22:04:30 klimt kernel: Stack:
Oct 28 22:04:30 klimt kernel: ffff88084e667020 0000000000000000 ffff88084e6670d8 ffff8808420dbd20
Oct 28 22:04:30 klimt kernel: ffffffffa05ac80d ffff880835f54548 ffff88084e640008 ffff880835f545b0
Oct 28 22:04:30 klimt kernel: ffff8808420dbd70 ffffffffa059803d ffff880835f1c768 0000000000000870
Oct 28 22:04:30 klimt kernel: Call Trace:
Oct 28 22:04:30 klimt kernel: [<ffffffffa05ac80d>] nfsd4_free_stateid+0xfd/0x1b0 [nfsd]
Oct 28 22:04:30 klimt kernel: [<ffffffffa059803d>] nfsd4_proc_compound+0x40d/0x690 [nfsd]
Oct 28 22:04:30 klimt kernel: [<ffffffffa0583114>] nfsd_dispatch+0xd4/0x1d0 [nfsd]
Oct 28 22:04:30 klimt kernel: [<ffffffffa047bbf9>] svc_process_common+0x3d9/0x700 [sunrpc]
Oct 28 22:04:30 klimt kernel: [<ffffffffa047ca64>] svc_process+0xf4/0x330 [sunrpc]
Oct 28 22:04:30 klimt kernel: [<ffffffffa05827ca>] nfsd+0xfa/0x160 [nfsd]
Oct 28 22:04:30 klimt kernel: [<ffffffffa05826d0>] ? nfsd_destroy+0x170/0x170 [nfsd]
Oct 28 22:04:30 klimt kernel: [<ffffffff810b367b>] kthread+0x10b/0x120
Oct 28 22:04:30 klimt kernel: [<ffffffff810b3570>] ? kthread_stop+0x280/0x280
Oct 28 22:04:30 klimt kernel: [<ffffffff8174e8ba>] ret_from_fork+0x2a/0x40
Oct 28 22:04:30 klimt kernel: Code: c3 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 e5 41 55 41 54 53 48 8b 87 b0 00 00 00 48 89 fb 4c 8b a0 98 00 00 00 <49> 8b 44 24 20 48 8d b8 80 03 00 00 e8 10 66 1a e1 48 89 df e8
Oct 28 22:04:30 klimt kernel: RIP  [<ffffffffa05a759f>] release_lock_stateid+0x1f/0x60 [nfsd]
Oct 28 22:04:30 klimt kernel: RSP <ffff8808420dbce0>
Oct 28 22:04:30 klimt kernel: ---[ end trace cf5d0b371973e167 ]---

Jeff Layton says:
> Hm...now that I look though, this is a little suspicious:
>
>    struct nfs4_openowner *oo = openowner(stp->st_openstp->st_stateowner);
>
> I wonder if it's possible for the openstateid to have already been
> destroyed at this point.
>
> We might be better off doing something like this to get the client pointer:
>
>    stp->st_stid.sc_client;
>
> ...which should be more direct and less dependent on other stateids
> staying valid.

With the suggested change, I am no longer able to reproduce the above oops.

v2: Fix unhash_lock_stateid() as well

Fix-suggested-by: Jeff Layton <jlayton@redhat.com>
Fixes: 42691398be08 ('nfsd: Fix race between FREE_STATEID and LOCK')
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/nfsd/nfs4state.c |   10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1147,9 +1147,7 @@ static void put_ol_stateid_locked(struct
 
 static bool unhash_lock_stateid(struct nfs4_ol_stateid *stp)
 {
-	struct nfs4_openowner *oo = openowner(stp->st_openstp->st_stateowner);
-
-	lockdep_assert_held(&oo->oo_owner.so_client->cl_lock);
+	lockdep_assert_held(&stp->st_stid.sc_client->cl_lock);
 
 	list_del_init(&stp->st_locks);
 	nfs4_unhash_stid(&stp->st_stid);
@@ -1158,12 +1156,12 @@ static bool unhash_lock_stateid(struct n
 
 static void release_lock_stateid(struct nfs4_ol_stateid *stp)
 {
-	struct nfs4_openowner *oo = openowner(stp->st_openstp->st_stateowner);
+	struct nfs4_client *clp = stp->st_stid.sc_client;
 	bool unhashed;
 
-	spin_lock(&oo->oo_owner.so_client->cl_lock);
+	spin_lock(&clp->cl_lock);
 	unhashed = unhash_lock_stateid(stp);
-	spin_unlock(&oo->oo_owner.so_client->cl_lock);
+	spin_unlock(&clp->cl_lock);
 	if (unhashed)
 		nfs4_put_stid(&stp->st_stid);
 }

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 075/138] MIPS: KASLR: Fix handling of NULL FDT
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (65 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 074/138] nfsd: Fix general protection fault in release_lock_stateid() Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:45   ` [PATCH 4.8 076/138] ovl: fix get_acl() on tmpfs Greg Kroah-Hartman
                     ` (54 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Matt Redfearn, linux-mips, Ralf Baechle

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit 4736697963385e6257ee8e260e97347e858cd962 upstream.

If platform code returns a NULL pointer to the FDT, initial_boot_params
will not get set to a valid pointer and attempting to find the /chosen
node in it will cause a NULL pointer dereference and the kernel to crash
immediately on startup - with no output to the console.

Fix this by checking that initial_boot_params is valid before using it.

Fixes: 405bc8fd12f5 ("MIPS: Kernel: Implement KASLR using CONFIG_RELOCATABLE")
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/14414/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/mips/kernel/relocate.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/mips/kernel/relocate.c
+++ b/arch/mips/kernel/relocate.c
@@ -200,7 +200,7 @@ static inline __init unsigned long get_r
 
 #if defined(CONFIG_USE_OF)
 	/* Get any additional entropy passed in device tree */
-	{
+	if (initial_boot_params) {
 		int node, len;
 		u64 *prop;
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 076/138] ovl: fix get_acl() on tmpfs
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (66 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 075/138] MIPS: KASLR: Fix handling of NULL FDT Greg Kroah-Hartman
@ 2016-11-09 10:45   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 077/138] ovl: update S_ISGID when setting posix ACLs Greg Kroah-Hartman
                     ` (53 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Amir Goldstein, Miklos Szeredi

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Miklos Szeredi <mszeredi@redhat.com>

commit b93d4a0eb308d4400b84c8b24c1b80e09a9497d0 upstream.

tmpfs doesn't have ->get_acl() because it only uses cached acls.

This fixes the acl tests in pjdfstest when tmpfs is used as the upper layer
of the overlay.

Reported-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: 39a25b2b3762 ("ovl: define ->get_acl() for overlay inodes")
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/overlayfs/inode.c |    3 ---
 1 file changed, 3 deletions(-)

--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -294,9 +294,6 @@ struct posix_acl *ovl_get_acl(struct ino
 	if (!IS_ENABLED(CONFIG_FS_POSIX_ACL) || !IS_POSIXACL(realinode))
 		return NULL;
 
-	if (!realinode->i_op->get_acl)
-		return NULL;
-
 	old_cred = ovl_override_creds(inode->i_sb);
 	acl = get_acl(realinode, type);
 	revert_creds(old_cred);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 077/138] ovl: update S_ISGID when setting posix ACLs
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (67 preceding siblings ...)
  2016-11-09 10:45   ` [PATCH 4.8 076/138] ovl: fix get_acl() on tmpfs Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 078/138] ovl: fsync after copy-up Greg Kroah-Hartman
                     ` (52 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Amir Goldstein, Miklos Szeredi

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Miklos Szeredi <mszeredi@redhat.com>

commit fd3220d37b1f6f0cab6142d98b0e6c4082e63299 upstream.

This change fixes xfstest generic/375, which failed to clear the
setgid bit in the following test case on overlayfs:

  touch $testfile
  chown 100:100 $testfile
  chmod 2755 $testfile
  _runas -u 100 -g 101 -- setfacl -m u::rwx,g::rwx,o::rwx $testfile

Reported-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Tested-by: Amir Goldstein <amir73il@gmail.com>
Fixes: d837a49bd57f ("ovl: fix POSIX ACL setting")
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/overlayfs/super.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)

--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -1026,6 +1026,21 @@ ovl_posix_acl_xattr_set(const struct xat
 
 	posix_acl_release(acl);
 
+	/*
+	 * Check if sgid bit needs to be cleared (actual setacl operation will
+	 * be done with mounter's capabilities and so that won't do it for us).
+	 */
+	if (unlikely(inode->i_mode & S_ISGID) &&
+	    handler->flags == ACL_TYPE_ACCESS &&
+	    !in_group_p(inode->i_gid) &&
+	    !capable_wrt_inode_uidgid(inode, CAP_FSETID)) {
+		struct iattr iattr = { .ia_valid = ATTR_KILL_SGID };
+
+		err = ovl_setattr(dentry, &iattr);
+		if (err)
+			return err;
+	}
+
 	err = ovl_xattr_set(dentry, handler->name, value, size, flags);
 	if (!err)
 		ovl_copyattr(ovl_inode_real(inode, NULL), inode);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 078/138] ovl: fsync after copy-up
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (68 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 077/138] ovl: update S_ISGID when setting posix ACLs Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 079/138] parisc: Ensure consistent state when switching to kernel stack at syscall entry Greg Kroah-Hartman
                     ` (51 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Miklos Szeredi

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Miklos Szeredi <mszeredi@redhat.com>

commit 641089c1549d8d3df0b047b5de7e9a111362cdce upstream.

Make sure the copied up file hits the disk before renaming to the final
destination.  If this is not done then the copy-up may corrupt the data in
the file in case of a crash.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/overlayfs/copy_up.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -171,6 +171,8 @@ static int ovl_copy_up_data(struct path
 		len -= bytes;
 	}
 
+	if (!error)
+		error = vfs_fsync(new_file, 0);
 	fput(new_file);
 out_fput:
 	fput(old_file);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 079/138] parisc: Ensure consistent state when switching to kernel stack at syscall entry
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (69 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 078/138] ovl: fsync after copy-up Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 080/138] virtio_ring: Make interrupt suppression spec compliant Greg Kroah-Hartman
                     ` (50 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, John David Anglin, Helge Deller

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: John David Anglin <dave.anglin@bell.net>

commit 6ed518328d0189e0fdf1bb7c73290d546143ea66 upstream.

We have one critical section in the syscall entry path in which we switch from
the userspace stack to kernel stack. In the event of an external interrupt, the
interrupt code distinguishes between those two states by analyzing the value of
sr7. If sr7 is zero, it uses the kernel stack. Therefore it's important, that
the value of sr7 is in sync with the currently enabled stack.

This patch now disables interrupts while executing the critical section.  This
prevents the interrupt handler to possibly see an inconsistent state which in
the worst case can lead to crashes.

Interestingly, in the syscall exit path interrupts were already disabled in the
critical section which switches back to the userspace stack.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/parisc/kernel/syscall.S |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

--- a/arch/parisc/kernel/syscall.S
+++ b/arch/parisc/kernel/syscall.S
@@ -106,8 +106,6 @@ linux_gateway_entry:
 	mtsp	%r0,%sr4			/* get kernel space into sr4 */
 	mtsp	%r0,%sr5			/* get kernel space into sr5 */
 	mtsp	%r0,%sr6			/* get kernel space into sr6 */
-	mfsp    %sr7,%r1                        /* save user sr7 */
-	mtsp    %r1,%sr3                        /* and store it in sr3 */
 
 #ifdef CONFIG_64BIT
 	/* for now we can *always* set the W bit on entry to the syscall
@@ -133,6 +131,14 @@ linux_gateway_entry:
 	depdi	0, 31, 32, %r21
 1:	
 #endif
+
+	/* We use a rsm/ssm pair to prevent sr3 from being clobbered
+	 * by external interrupts.
+	 */
+	mfsp    %sr7,%r1                        /* save user sr7 */
+	rsm	PSW_SM_I, %r0			/* disable interrupts */
+	mtsp    %r1,%sr3                        /* and store it in sr3 */
+
 	mfctl   %cr30,%r1
 	xor     %r1,%r30,%r30                   /* ye olde xor trick */
 	xor     %r1,%r30,%r1
@@ -147,6 +153,7 @@ linux_gateway_entry:
 	 */
 
 	mtsp	%r0,%sr7			/* get kernel space into sr7 */
+	ssm	PSW_SM_I, %r0			/* enable interrupts */
 	STREGM	%r1,FRAME_SIZE(%r30)		/* save r1 (usp) here for now */
 	mfctl	%cr30,%r1			/* get task ptr in %r1 */
 	LDREG	TI_TASK(%r1),%r1

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 080/138] virtio_ring: Make interrupt suppression spec compliant
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (70 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 079/138] parisc: Ensure consistent state when switching to kernel stack at syscall entry Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 081/138] virtio_pci: Limit DMA mask to 44 bits for legacy virtio devices Greg Kroah-Hartman
                     ` (49 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Michael S. Tsirkin, Ladi Prosek

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ladi Prosek <lprosek@redhat.com>

commit 0ea1e4a6d9b62cf29e210d2b4ba9fd43917522e3 upstream.

According to the spec, if the VIRTIO_RING_F_EVENT_IDX feature bit is
negotiated the driver MUST set flags to 0. Not dirtying the available
ring in virtqueue_disable_cb also has a minor positive performance
impact, improving L1 dcache load missed by ~0.5% in vring_bench.

Writes to the used event field (vring_used_event) are still unconditional.

Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/virtio/virtio_ring.c |   14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -732,7 +732,8 @@ void virtqueue_disable_cb(struct virtque
 
 	if (!(vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT)) {
 		vq->avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT;
-		vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow);
+		if (!vq->event)
+			vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow);
 	}
 
 }
@@ -764,7 +765,8 @@ unsigned virtqueue_enable_cb_prepare(str
 	 * entry. Always do both to keep code simple. */
 	if (vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) {
 		vq->avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT;
-		vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow);
+		if (!vq->event)
+			vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow);
 	}
 	vring_used_event(&vq->vring) = cpu_to_virtio16(_vq->vdev, last_used_idx = vq->last_used_idx);
 	END_USE(vq);
@@ -832,10 +834,11 @@ bool virtqueue_enable_cb_delayed(struct
 	 * more to do. */
 	/* Depending on the VIRTIO_RING_F_USED_EVENT_IDX feature, we need to
 	 * either clear the flags bit or point the event index at the next
-	 * entry. Always do both to keep code simple. */
+	 * entry. Always update the event index to keep code simple. */
 	if (vq->avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT) {
 		vq->avail_flags_shadow &= ~VRING_AVAIL_F_NO_INTERRUPT;
-		vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow);
+		if (!vq->event)
+			vq->vring.avail->flags = cpu_to_virtio16(_vq->vdev, vq->avail_flags_shadow);
 	}
 	/* TODO: tune this threshold */
 	bufs = (u16)(vq->avail_idx_shadow - vq->last_used_idx) * 3 / 4;
@@ -953,7 +956,8 @@ struct virtqueue *__vring_new_virtqueue(
 	/* No callback?  Tell other side not to bother us. */
 	if (!callback) {
 		vq->avail_flags_shadow |= VRING_AVAIL_F_NO_INTERRUPT;
-		vq->vring.avail->flags = cpu_to_virtio16(vdev, vq->avail_flags_shadow);
+		if (!vq->event)
+			vq->vring.avail->flags = cpu_to_virtio16(vdev, vq->avail_flags_shadow);
 	}
 
 	/* Put everything in free lists. */

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 081/138] virtio_pci: Limit DMA mask to 44 bits for legacy virtio devices
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (71 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 080/138] virtio_ring: Make interrupt suppression spec compliant Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 082/138] virtio: console: Unlock vqs while freeing buffers Greg Kroah-Hartman
                     ` (48 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Andy Lutomirski, Michael S. Tsirkin,
	Benjamin Serebrin, Will Deacon

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Will Deacon <will.deacon@arm.com>

commit a0be1db4304f51c99af6b6e515549794182a94df upstream.

Legacy virtio defines the virtqueue base using a 32-bit PFN field, with
a read-only register indicating a fixed page size of 4k.

This can cause problems for DMA allocators that allocate top down from
the DMA mask, which is set to 64 bits. In this case, the addresses are
silently truncated to 44-bit, leading to IOMMU faults, failure to read
from the queue or data corruption.

This patch restricts the coherent DMA mask for legacy PCI virtio devices
to 44 bits, which matches the specification.

Cc: Andy Lutomirski <luto@kernel.org>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Benjamin Serebrin <serebrin@google.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/virtio/virtio_pci_legacy.c |   16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

--- a/drivers/virtio/virtio_pci_legacy.c
+++ b/drivers/virtio/virtio_pci_legacy.c
@@ -212,10 +212,18 @@ int virtio_pci_legacy_probe(struct virti
 		return -ENODEV;
 	}
 
-	rc = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(64));
-	if (rc)
-		rc = dma_set_mask_and_coherent(&pci_dev->dev,
-						DMA_BIT_MASK(32));
+	rc = dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(64));
+	if (rc) {
+		rc = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(32));
+	} else {
+		/*
+		 * The virtio ring base address is expressed as a 32-bit PFN,
+		 * with a page size of 1 << VIRTIO_PCI_QUEUE_ADDR_SHIFT.
+		 */
+		dma_set_coherent_mask(&pci_dev->dev,
+				DMA_BIT_MASK(32 + VIRTIO_PCI_QUEUE_ADDR_SHIFT));
+	}
+
 	if (rc)
 		dev_warn(&pci_dev->dev, "Failed to enable 64-bit or 32-bit DMA.  Trying to continue, but this might not work.\n");
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 082/138] virtio: console: Unlock vqs while freeing buffers
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (72 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 081/138] virtio_pci: Limit DMA mask to 44 bits for legacy virtio devices Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 083/138] dm mirror: fix read error on recovery after default leg failure Greg Kroah-Hartman
                     ` (47 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Matt Redfearn, Michael S. Tsirkin

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit 34563769e438d2881f62cf4d9badc4e589ac0ec0 upstream.

Commit c6017e793b93 ("virtio: console: add locks around buffer removal
in port unplug path") added locking around the freeing of buffers in the
vq. However, when free_buf() is called with can_sleep = true and rproc
is enabled, it calls dma_free_coherent() directly, requiring interrupts
to be enabled. Currently a WARNING is triggered due to the spin locking
around free_buf, with a call stack like this:

WARNING: CPU: 3 PID: 121 at ./include/linux/dma-mapping.h:433
free_buf+0x1a8/0x288
Call Trace:
[<8040c538>] show_stack+0x74/0xc0
[<80757240>] dump_stack+0xd0/0x110
[<80430d98>] __warn+0xfc/0x130
[<80430ee0>] warn_slowpath_null+0x2c/0x3c
[<807e7c6c>] free_buf+0x1a8/0x288
[<807ea590>] remove_port_data+0x50/0xac
[<807ea6a0>] unplug_port+0xb4/0x1bc
[<807ea858>] virtcons_remove+0xb0/0xfc
[<807b6734>] virtio_dev_remove+0x58/0xc0
[<807f918c>] __device_release_driver+0xac/0x134
[<807f924c>] device_release_driver+0x38/0x50
[<807f7edc>] bus_remove_device+0xfc/0x130
[<807f4b74>] device_del+0x17c/0x21c
[<807f4c38>] device_unregister+0x24/0x38
[<807b6b50>] unregister_virtio_device+0x28/0x44

Fix this by restructuring the loops to allow the locks to only be taken
where it is necessary to protect the vqs, and release it while the
buffer is being freed.

Fixes: c6017e793b93 ("virtio: console: add locks around buffer removal in port unplug path")
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/char/virtio_console.c |   22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -1540,19 +1540,29 @@ static void remove_port_data(struct port
 	spin_lock_irq(&port->inbuf_lock);
 	/* Remove unused data this port might have received. */
 	discard_port_data(port);
+	spin_unlock_irq(&port->inbuf_lock);
 
 	/* Remove buffers we queued up for the Host to send us data in. */
-	while ((buf = virtqueue_detach_unused_buf(port->in_vq)))
-		free_buf(buf, true);
-	spin_unlock_irq(&port->inbuf_lock);
+	do {
+		spin_lock_irq(&port->inbuf_lock);
+		buf = virtqueue_detach_unused_buf(port->in_vq);
+		spin_unlock_irq(&port->inbuf_lock);
+		if (buf)
+			free_buf(buf, true);
+	} while (buf);
 
 	spin_lock_irq(&port->outvq_lock);
 	reclaim_consumed_buffers(port);
+	spin_unlock_irq(&port->outvq_lock);
 
 	/* Free pending buffers from the out-queue. */
-	while ((buf = virtqueue_detach_unused_buf(port->out_vq)))
-		free_buf(buf, true);
-	spin_unlock_irq(&port->outvq_lock);
+	do {
+		spin_lock_irq(&port->outvq_lock);
+		buf = virtqueue_detach_unused_buf(port->out_vq);
+		spin_unlock_irq(&port->outvq_lock);
+		if (buf)
+			free_buf(buf, true);
+	} while (buf);
 }
 
 /*

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 083/138] dm mirror: fix read error on recovery after default leg failure
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (73 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 082/138] virtio: console: Unlock vqs while freeing buffers Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 084/138] dm table: fix missing dm_put_target_type() in dm_table_add_target() Greg Kroah-Hartman
                     ` (46 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Heinz Mauelshagen, Mike Snitzer

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Heinz Mauelshagen <heinzm@redhat.com>

commit dcb2ff56417362c31f6b430c3c531a84581e8721 upstream.

If a default leg has failed, any read will cause a new operational
default leg to be selected and the read is resubmitted.  But until now
the read will return failure even though it was successful due to
resubmission.  The reason for this is bio->bi_error was not being
cleared before resubmitting the bio.

Fix by clearing bio->bi_error before resubmission.

Fixes: 4246a0b63bd8 ("block: add a bi_error field to struct bio")
Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/dm-raid1.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/md/dm-raid1.c
+++ b/drivers/md/dm-raid1.c
@@ -1292,6 +1292,7 @@ static int mirror_end_io(struct dm_targe
 
 			dm_bio_restore(bd, bio);
 			bio_record->details.bi_bdev = NULL;
+			bio->bi_error = 0;
 
 			queue_bio(ms, bio, rw);
 			return DM_ENDIO_INCOMPLETE;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 084/138] dm table: fix missing dm_put_target_type() in dm_table_add_target()
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (74 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 083/138] dm mirror: fix read error on recovery after default leg failure Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 085/138] dm rq: clear kworker_task if kthread_run() returned an error Greg Kroah-Hartman
                     ` (45 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, tang.junhui, Mike Snitzer

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: tang.junhui <tang.junhui@zte.com.cn>

commit dafa724bf582181d9a7d54f5cb4ca0bf8ef29269 upstream.

dm_get_target_type() was previously called so any error returned from
dm_table_add_target() must first call dm_put_target_type().  Otherwise
the DM target module's reference count will leak and the associated
kernel module will be unable to be removed.

Also, leverage the fact that r is already -EINVAL and remove an extra
newline.

Fixes: 36a0456 ("dm table: add immutable feature")
Fixes: cc6cbe1 ("dm table: add always writeable feature")
Fixes: 3791e2f ("dm table: add singleton feature")
Signed-off-by: tang.junhui <tang.junhui@zte.com.cn>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/dm-table.c |   24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -695,37 +695,32 @@ int dm_table_add_target(struct dm_table
 
 	tgt->type = dm_get_target_type(type);
 	if (!tgt->type) {
-		DMERR("%s: %s: unknown target type", dm_device_name(t->md),
-		      type);
+		DMERR("%s: %s: unknown target type", dm_device_name(t->md), type);
 		return -EINVAL;
 	}
 
 	if (dm_target_needs_singleton(tgt->type)) {
 		if (t->num_targets) {
-			DMERR("%s: target type %s must appear alone in table",
-			      dm_device_name(t->md), type);
-			return -EINVAL;
+			tgt->error = "singleton target type must appear alone in table";
+			goto bad;
 		}
 		t->singleton = true;
 	}
 
 	if (dm_target_always_writeable(tgt->type) && !(t->mode & FMODE_WRITE)) {
-		DMERR("%s: target type %s may not be included in read-only tables",
-		      dm_device_name(t->md), type);
-		return -EINVAL;
+		tgt->error = "target type may not be included in a read-only table";
+		goto bad;
 	}
 
 	if (t->immutable_target_type) {
 		if (t->immutable_target_type != tgt->type) {
-			DMERR("%s: immutable target type %s cannot be mixed with other target types",
-			      dm_device_name(t->md), t->immutable_target_type->name);
-			return -EINVAL;
+			tgt->error = "immutable target type cannot be mixed with other target types";
+			goto bad;
 		}
 	} else if (dm_target_is_immutable(tgt->type)) {
 		if (t->num_targets) {
-			DMERR("%s: immutable target type %s cannot be mixed with other target types",
-			      dm_device_name(t->md), tgt->type->name);
-			return -EINVAL;
+			tgt->error = "immutable target type cannot be mixed with other target types";
+			goto bad;
 		}
 		t->immutable_target_type = tgt->type;
 	}
@@ -740,7 +735,6 @@ int dm_table_add_target(struct dm_table
 	 */
 	if (!adjoin(t, tgt)) {
 		tgt->error = "Gap in table";
-		r = -EINVAL;
 		goto bad;
 	}
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 085/138] dm rq: clear kworker_task if kthread_run() returned an error
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (75 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 084/138] dm table: fix missing dm_put_target_type() in dm_table_add_target() Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 086/138] dm raid: fix compat_features validation Greg Kroah-Hartman
                     ` (44 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Tahsin Erdogan, Mike Snitzer

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mike Snitzer <snitzer@redhat.com>

commit 937fa62e8a00d0b4bc2c0a40567d7c88ab2b2e8d upstream.

cleanup_mapped_device() calls kthread_stop() if kworker_task is
non-NULL.  Currently the assigned value could be a valid task struct or
an error code (e.g -ENOMEM).  Reset md->kworker_task to NULL if
kthread_run() returned an erorr.

Fixes: 7193a9defc ("dm rq: check kthread_run return for .request_fn request-based DM")
Reported-by: Tahsin Erdogan <tahsin@google.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/dm-rq.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/drivers/md/dm-rq.c
+++ b/drivers/md/dm-rq.c
@@ -835,8 +835,11 @@ int dm_old_init_request_queue(struct map
 	init_kthread_worker(&md->kworker);
 	md->kworker_task = kthread_run(kthread_worker_fn, &md->kworker,
 				       "kdmwork-%s", dm_device_name(md));
-	if (IS_ERR(md->kworker_task))
-		return PTR_ERR(md->kworker_task);
+	if (IS_ERR(md->kworker_task)) {
+		int error = PTR_ERR(md->kworker_task);
+		md->kworker_task = NULL;
+		return error;
+	}
 
 	elv_register_queue(md->queue);
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 086/138] dm raid: fix compat_features validation
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (76 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 085/138] dm rq: clear kworker_task if kthread_run() returned an error Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 087/138] dm raid: fix activation of existing raid4/10 devices Greg Kroah-Hartman
                     ` (43 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Andy Whitcroft, Heinz Mauelshagen,
	Mike Snitzer

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Andy Whitcroft <apw@canonical.com>

commit 5c33677c87cbe44ae04df69c4a29c1750a9ec4e5 upstream.

In ecbfb9f118bce4 ("dm raid: add raid level takeover support") a new
compatible feature flag was added.  Validation for these compat_features
was added but this only passes for new raid mappings with this feature
flag.  This causes previously created raid mappings to be failed at
import.

Check compat_features for the only valid combination.

Fixes: ecbfb9f118bce4 ("dm raid: add raid level takeover support")
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/dm-raid.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -2258,7 +2258,8 @@ static int super_validate(struct raid_se
 	if (!mddev->events && super_init_validation(rs, rdev))
 		return -EINVAL;
 
-	if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) {
+	if (le32_to_cpu(sb->compat_features) &&
+	    le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) {
 		rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags";
 		return -EINVAL;
 	}

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 087/138] dm raid: fix activation of existing raid4/10 devices
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (77 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 086/138] dm raid: fix compat_features validation Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 088/138] rtl8xxxu: Fix memory leak in handling rxdesc16 packets Greg Kroah-Hartman
                     ` (42 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Heinz Mauelshagen, Mike Snitzer

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Heinz Mauelshagen <heinzm@redhat.com>

commit b052b07c39d593c9954a84d5bbe1563999483f38 upstream.

dm-raid 1.9.0 fails to activate existing RAID4/10 devices that have the
old superblock format (which does not have takeover/reshaping support
that was added via commit 33e53f06850f).

Fix validation path for old superblocks by reverting to the old raid4
layout and basing checks on mddev->new_{level,layout,...} members in
super_init_validation().

Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 Documentation/device-mapper/dm-raid.txt |    1 +
 drivers/md/dm-raid.c                    |   12 +++++++-----
 2 files changed, 8 insertions(+), 5 deletions(-)

--- a/Documentation/device-mapper/dm-raid.txt
+++ b/Documentation/device-mapper/dm-raid.txt
@@ -309,3 +309,4 @@ Version History
 	with a reshape in progress.
 1.9.0   Add support for RAID level takeover/reshape/region size
 	and set size reduction.
+1.9.1   Fix activation of existing RAID 4/10 mapped devices
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -266,7 +266,7 @@ static struct raid_type {
 	{"raid10_offset", "raid10 offset (striped mirrors)",	    0, 2, 10, ALGORITHM_RAID10_OFFSET},
 	{"raid10_near",	  "raid10 near (striped mirrors)",	    0, 2, 10, ALGORITHM_RAID10_NEAR},
 	{"raid10",	  "raid10 (striped mirrors)",		    0, 2, 10, ALGORITHM_RAID10_DEFAULT},
-	{"raid4",	  "raid4 (dedicated last parity disk)",	    1, 2, 4,  ALGORITHM_PARITY_N}, /* raid4 layout = raid5_n */
+	{"raid4",	  "raid4 (dedicated first parity disk)",    1, 2, 5,  ALGORITHM_PARITY_0}, /* raid4 layout = raid5_0 */
 	{"raid5_n",	  "raid5 (dedicated last parity disk)",	    1, 2, 5,  ALGORITHM_PARITY_N},
 	{"raid5_ls",	  "raid5 (left symmetric)",		    1, 2, 5,  ALGORITHM_LEFT_SYMMETRIC},
 	{"raid5_rs",	  "raid5 (right symmetric)",		    1, 2, 5,  ALGORITHM_RIGHT_SYMMETRIC},
@@ -2087,11 +2087,11 @@ static int super_init_validation(struct
 		/*
 		 * No takeover/reshaping, because we don't have the extended v1.9.0 metadata
 		 */
-		if (le32_to_cpu(sb->level) != mddev->level) {
+		if (le32_to_cpu(sb->level) != mddev->new_level) {
 			DMERR("Reshaping/takeover raid sets not yet supported. (raid level/stripes/size change)");
 			return -EINVAL;
 		}
-		if (le32_to_cpu(sb->layout) != mddev->layout) {
+		if (le32_to_cpu(sb->layout) != mddev->new_layout) {
 			DMERR("Reshaping raid sets not yet supported. (raid layout change)");
 			DMERR("	 0x%X vs 0x%X", le32_to_cpu(sb->layout), mddev->layout);
 			DMERR("	 Old layout: %s w/ %d copies",
@@ -2102,7 +2102,7 @@ static int super_init_validation(struct
 			      raid10_md_layout_to_copies(mddev->layout));
 			return -EINVAL;
 		}
-		if (le32_to_cpu(sb->stripe_sectors) != mddev->chunk_sectors) {
+		if (le32_to_cpu(sb->stripe_sectors) != mddev->new_chunk_sectors) {
 			DMERR("Reshaping raid sets not yet supported. (stripe sectors change)");
 			return -EINVAL;
 		}
@@ -2115,6 +2115,8 @@ static int super_init_validation(struct
 			return -EINVAL;
 		}
 
+		DMINFO("Discovered old metadata format; upgrading to extended metadata format");
+
 		/* Table line is checked vs. authoritative superblock */
 		rs_set_new(rs);
 	}
@@ -3647,7 +3649,7 @@ static void raid_resume(struct dm_target
 
 static struct target_type raid_target = {
 	.name = "raid",
-	.version = {1, 9, 0},
+	.version = {1, 9, 1},
 	.module = THIS_MODULE,
 	.ctr = raid_ctr,
 	.dtr = raid_dtr,

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 088/138] rtl8xxxu: Fix memory leak in handling rxdesc16 packets
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (78 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 087/138] dm raid: fix activation of existing raid4/10 devices Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 089/138] rtl8xxxu: Fix big-endian problem reporting mactime Greg Kroah-Hartman
                     ` (41 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jes Sorensen, Kalle Valo

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jes Sorensen <Jes.Sorensen@redhat.com>

commit 1e54134ccad00f76ddf00f3e77db3dc8fdefbb47 upstream.

A device running without RX package aggregation could return more data
in the USB packet than the actual network packet. In this case we
could would clone the skb but then determine that that there was no
packet to handle and exit without freeing the cloned skb first.

This has so far only been observed with 8188eu devices, but could
affect others.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
@@ -5201,7 +5201,12 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8x
 		pkt_offset = roundup(pkt_len + drvinfo_sz + desc_shift +
 				     sizeof(struct rtl8xxxu_rxdesc16), 128);
 
-		if (pkt_cnt > 1)
+		/*
+		 * Only clone the skb if there's enough data at the end to
+		 * at least cover the rx descriptor
+		 */
+		if (pkt_cnt > 1 &&
+		    urb_len > (pkt_offset + sizeof(struct rtl8xxxu_rxdesc16)))
 			next_skb = skb_clone(skb, GFP_ATOMIC);
 
 		rx_status = IEEE80211_SKB_RXCB(skb);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 089/138] rtl8xxxu: Fix big-endian problem reporting mactime
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (79 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 088/138] rtl8xxxu: Fix memory leak in handling rxdesc16 packets Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 090/138] rtl8xxxu: Fix rtl8723bu driver reload issue Greg Kroah-Hartman
                     ` (40 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jes Sorensen, Kalle Valo

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jes Sorensen <Jes.Sorensen@redhat.com>

commit 8a55698f2f29d227825173420d7b99b9277ca88c upstream.

The full RX descriptor is converted so converting tsfl again would
return it to it's original endian value.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h      |    4 ++--
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
@@ -231,7 +231,7 @@ struct rtl8xxxu_rxdesc16 {
 	u32 pattern1match:1;
 	u32 pattern0match:1;
 #endif
-	__le32 tsfl;
+	u32 tsfl;
 #if 0
 	u32 bassn:12;
 	u32 bavld:1;
@@ -361,7 +361,7 @@ struct rtl8xxxu_rxdesc24 {
 	u32 ldcp:1;
 	u32 splcp:1;
 #endif
-	__le32 tsfl;
+	u32 tsfl;
 };
 
 struct rtl8xxxu_txdesc32 {
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
@@ -5224,7 +5224,7 @@ int rtl8xxxu_parse_rxdesc16(struct rtl8x
 			rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats,
 						   rx_desc->rxmcs);
 
-		rx_status->mactime = le32_to_cpu(rx_desc->tsfl);
+		rx_status->mactime = rx_desc->tsfl;
 		rx_status->flag |= RX_FLAG_MACTIME_START;
 
 		if (!rx_desc->swdec)
@@ -5294,7 +5294,7 @@ int rtl8xxxu_parse_rxdesc24(struct rtl8x
 		rtl8xxxu_rx_parse_phystats(priv, rx_status, phy_stats,
 					   rx_desc->rxmcs);
 
-	rx_status->mactime = le32_to_cpu(rx_desc->tsfl);
+	rx_status->mactime = rx_desc->tsfl;
 	rx_status->flag |= RX_FLAG_MACTIME_START;
 
 	if (!rx_desc->swdec)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 090/138] rtl8xxxu: Fix rtl8723bu driver reload issue
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (80 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 089/138] rtl8xxxu: Fix big-endian problem reporting mactime Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 091/138] Input: i8042 - add XMG C504 to keyboard reset table Greg Kroah-Hartman
                     ` (39 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jes Sorensen, Kalle Valo

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jes Sorensen <Jes.Sorensen@redhat.com>

commit ab05e5ec81c76f3a852919c22984c885edd2414a upstream.

The generic disable_rf() function clears bits 22 and 23 in
REG_RX_WAIT_CCA, however we did not re-enable them again in
rtl8723b_enable_rf()

This resolves the problem for me with 8723bu devices not working again
after reloading the driver.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c |    4 ++++
 1 file changed, 4 insertions(+)

--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
@@ -1498,6 +1498,10 @@ static void rtl8723b_enable_rf(struct rt
 	u32 val32;
 	u8 val8;
 
+	val32 = rtl8xxxu_read32(priv, REG_RX_WAIT_CCA);
+	val32 |= (BIT(22) | BIT(23));
+	rtl8xxxu_write32(priv, REG_RX_WAIT_CCA, val32);
+
 	/*
 	 * No indication anywhere as to what 0x0790 does. The 2 antenna
 	 * vendor code preserves bits 6-7 here.

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 091/138] Input: i8042 - add XMG C504 to keyboard reset table
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (81 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 090/138] rtl8xxxu: Fix rtl8723bu driver reload issue Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 092/138] firewire: net: guard against rx buffer overflows Greg Kroah-Hartman
                     ` (38 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Patrick Scheuring, Dmitry Torokhov

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Patrick Scheuring <patrick.scheuring.dev@gmail.com>

commit da25311c7ca8b0254a686fc0d597075b9aa3b683 upstream.

The Schenker XMG C504 is a rebranded Gigabyte P35 v2 laptop.
Therefore it also needs a keyboard reset to detect the Elantech touchpad.
Otherwise the touchpad appears to be dead.

With this patch the touchpad is detected:

$ dmesg | grep -E "(i8042|Elantech|elantech)"

[    2.675399] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12
[    2.680372] i8042: Attempting to reset device connected to KBD port
[    2.789037] serio: i8042 KBD port at 0x60,0x64 irq 1
[    2.791586] serio: i8042 AUX port at 0x60,0x64 irq 12
[    2.813840] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
[    3.811431] psmouse serio1: elantech: assuming hardware version 4 (with firmware version 0x361f0e)
[    3.825424] psmouse serio1: elantech: Synaptics capabilities query result 0x00, 0x15, 0x0f.
[    3.839424] psmouse serio1: elantech: Elan sample query result 03, 58, 74
[    3.911349] input: ETPS/2 Elantech Touchpad as /devices/platform/i8042/serio1/input/input6

Signed-off-by: Patrick Scheuring <patrick.scheuring.dev@gmail.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/input/serio/i8042-x86ia64io.h |    7 +++++++
 1 file changed, 7 insertions(+)

--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -877,6 +877,13 @@ static const struct dmi_system_id __init
 			DMI_MATCH(DMI_PRODUCT_NAME, "P34"),
 		},
 	},
+	{
+		/* Schenker XMG C504 - Elantech touchpad */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "XMG"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "C504"),
+		},
+	},
 	{ }
 };
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 092/138] firewire: net: guard against rx buffer overflows
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (82 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 091/138] Input: i8042 - add XMG C504 to keyboard reset table Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 093/138] firewire: net: fix fragmented datagram_size off-by-one Greg Kroah-Hartman
                     ` (37 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Eyal Itkin, Stefan Richter

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Stefan Richter <stefanr@s5r6.in-berlin.de>

commit 667121ace9dbafb368618dbabcf07901c962ddac upstream.

The IP-over-1394 driver firewire-net lacked input validation when
handling incoming fragmented datagrams.  A maliciously formed fragment
with a respectively large datagram_offset would cause a memcpy past the
datagram buffer.

So, drop any packets carrying a fragment with offset + length larger
than datagram_size.

In addition, ensure that
  - GASP header, unfragmented encapsulation header, or fragment
    encapsulation header actually exists before we access it,
  - the encapsulated datagram or fragment is of nonzero size.

Reported-by: Eyal Itkin <eyal.itkin@gmail.com>
Reviewed-by: Eyal Itkin <eyal.itkin@gmail.com>
Fixes: CVE 2016-8633
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/firewire/net.c |   51 +++++++++++++++++++++++++++++++++----------------
 1 file changed, 35 insertions(+), 16 deletions(-)

--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -578,6 +578,9 @@ static int fwnet_incoming_packet(struct
 	int retval;
 	u16 ether_type;
 
+	if (len <= RFC2374_UNFRAG_HDR_SIZE)
+		return 0;
+
 	hdr.w0 = be32_to_cpu(buf[0]);
 	lf = fwnet_get_hdr_lf(&hdr);
 	if (lf == RFC2374_HDR_UNFRAG) {
@@ -602,7 +605,12 @@ static int fwnet_incoming_packet(struct
 		return fwnet_finish_incoming_packet(net, skb, source_node_id,
 						    is_broadcast, ether_type);
 	}
+
 	/* A datagram fragment has been received, now the fun begins. */
+
+	if (len <= RFC2374_FRAG_HDR_SIZE)
+		return 0;
+
 	hdr.w1 = ntohl(buf[1]);
 	buf += 2;
 	len -= RFC2374_FRAG_HDR_SIZE;
@@ -616,6 +624,9 @@ static int fwnet_incoming_packet(struct
 	datagram_label = fwnet_get_hdr_dgl(&hdr);
 	dg_size = fwnet_get_hdr_dg_size(&hdr); /* ??? + 1 */
 
+	if (fg_off + len > dg_size)
+		return 0;
+
 	spin_lock_irqsave(&dev->lock, flags);
 
 	peer = fwnet_peer_find_by_node_id(dev, source_node_id, generation);
@@ -722,6 +733,22 @@ static void fwnet_receive_packet(struct
 	fw_send_response(card, r, rcode);
 }
 
+static int gasp_source_id(__be32 *p)
+{
+	return be32_to_cpu(p[0]) >> 16;
+}
+
+static u32 gasp_specifier_id(__be32 *p)
+{
+	return (be32_to_cpu(p[0]) & 0xffff) << 8 |
+	       (be32_to_cpu(p[1]) & 0xff000000) >> 24;
+}
+
+static u32 gasp_version(__be32 *p)
+{
+	return be32_to_cpu(p[1]) & 0xffffff;
+}
+
 static void fwnet_receive_broadcast(struct fw_iso_context *context,
 		u32 cycle, size_t header_length, void *header, void *data)
 {
@@ -731,9 +758,6 @@ static void fwnet_receive_broadcast(stru
 	__be32 *buf_ptr;
 	int retval;
 	u32 length;
-	u16 source_node_id;
-	u32 specifier_id;
-	u32 ver;
 	unsigned long offset;
 	unsigned long flags;
 
@@ -750,22 +774,17 @@ static void fwnet_receive_broadcast(stru
 
 	spin_unlock_irqrestore(&dev->lock, flags);
 
-	specifier_id =    (be32_to_cpu(buf_ptr[0]) & 0xffff) << 8
-			| (be32_to_cpu(buf_ptr[1]) & 0xff000000) >> 24;
-	ver = be32_to_cpu(buf_ptr[1]) & 0xffffff;
-	source_node_id = be32_to_cpu(buf_ptr[0]) >> 16;
-
-	if (specifier_id == IANA_SPECIFIER_ID &&
-	    (ver == RFC2734_SW_VERSION
+	if (length > IEEE1394_GASP_HDR_SIZE &&
+	    gasp_specifier_id(buf_ptr) == IANA_SPECIFIER_ID &&
+	    (gasp_version(buf_ptr) == RFC2734_SW_VERSION
 #if IS_ENABLED(CONFIG_IPV6)
-	     || ver == RFC3146_SW_VERSION
+	     || gasp_version(buf_ptr) == RFC3146_SW_VERSION
 #endif
-	    )) {
-		buf_ptr += 2;
-		length -= IEEE1394_GASP_HDR_SIZE;
-		fwnet_incoming_packet(dev, buf_ptr, length, source_node_id,
+	    ))
+		fwnet_incoming_packet(dev, buf_ptr + 2,
+				      length - IEEE1394_GASP_HDR_SIZE,
+				      gasp_source_id(buf_ptr),
 				      context->card->generation, true);
-	}
 
 	packet.payload_length = dev->rcv_buffer_size;
 	packet.interrupt = 1;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 093/138] firewire: net: fix fragmented datagram_size off-by-one
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (83 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 092/138] firewire: net: guard against rx buffer overflows Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 094/138] mac80211: discard multicast and 4-addr A-MSDUs Greg Kroah-Hartman
                     ` (36 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Stefan Richter

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Stefan Richter <stefanr@s5r6.in-berlin.de>

commit e9300a4b7bbae83af1f7703938c94cf6dc6d308f upstream.

RFC 2734 defines the datagram_size field in fragment encapsulation
headers thus:

    datagram_size:  The encoded size of the entire IP datagram.  The
    value of datagram_size [...] SHALL be one less than the value of
    Total Length in the datagram's IP header (see STD 5, RFC 791).

Accordingly, the eth1394 driver of Linux 2.6.36 and older set and got
this field with a -/+1 offset:

    ether1394_tx() /* transmit */
        ether1394_encapsulate_prep()
            hdr->ff.dg_size = dg_size - 1;

    ether1394_data_handler() /* receive */
        if (hdr->common.lf == ETH1394_HDR_LF_FF)
            dg_size = hdr->ff.dg_size + 1;
        else
            dg_size = hdr->sf.dg_size + 1;

Likewise, I observe OS X 10.4 and Windows XP Pro SP3 to transmit 1500
byte sized datagrams in fragments with datagram_size=1499 if link
fragmentation is required.

Only firewire-net sets and gets datagram_size without this offset.  The
result is lacking interoperability of firewire-net with OS X, Windows
XP, and presumably Linux' eth1394.  (I did not test with the latter.)
For example, FTP data transfers to a Linux firewire-net box with max_rec
smaller than the 1500 bytes MTU
  - from OS X fail entirely,
  - from Win XP start out with a bunch of fragmented datagrams which
    time out, then continue with unfragmented datagrams because Win XP
    temporarily reduces the MTU to 576 bytes.

So let's fix firewire-net's datagram_size accessors.

Note that firewire-net thereby loses interoperability with unpatched
firewire-net, but only if link fragmentation is employed.  (This happens
with large broadcast datagrams, and with large datagrams on several
FireWire CardBus cards with smaller max_rec than equivalent PCI cards,
and it can be worked around by setting a small enough MTU.)

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/firewire/net.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -73,13 +73,13 @@ struct rfc2734_header {
 
 #define fwnet_get_hdr_lf(h)		(((h)->w0 & 0xc0000000) >> 30)
 #define fwnet_get_hdr_ether_type(h)	(((h)->w0 & 0x0000ffff))
-#define fwnet_get_hdr_dg_size(h)	(((h)->w0 & 0x0fff0000) >> 16)
+#define fwnet_get_hdr_dg_size(h)	((((h)->w0 & 0x0fff0000) >> 16) + 1)
 #define fwnet_get_hdr_fg_off(h)		(((h)->w0 & 0x00000fff))
 #define fwnet_get_hdr_dgl(h)		(((h)->w1 & 0xffff0000) >> 16)
 
-#define fwnet_set_hdr_lf(lf)		((lf)  << 30)
+#define fwnet_set_hdr_lf(lf)		((lf) << 30)
 #define fwnet_set_hdr_ether_type(et)	(et)
-#define fwnet_set_hdr_dg_size(dgs)	((dgs) << 16)
+#define fwnet_set_hdr_dg_size(dgs)	(((dgs) - 1) << 16)
 #define fwnet_set_hdr_fg_off(fgo)	(fgo)
 
 #define fwnet_set_hdr_dgl(dgl)		((dgl) << 16)
@@ -622,7 +622,7 @@ static int fwnet_incoming_packet(struct
 		fg_off = fwnet_get_hdr_fg_off(&hdr);
 	}
 	datagram_label = fwnet_get_hdr_dgl(&hdr);
-	dg_size = fwnet_get_hdr_dg_size(&hdr); /* ??? + 1 */
+	dg_size = fwnet_get_hdr_dg_size(&hdr);
 
 	if (fg_off + len > dg_size)
 		return 0;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 094/138] mac80211: discard multicast and 4-addr A-MSDUs
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (84 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 093/138] firewire: net: fix fragmented datagram_size off-by-one Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 095/138] Revert "ath9k_hw: implement temperature compensation support for AR9003+" Greg Kroah-Hartman
                     ` (35 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Johannes Berg

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johannes Berg <johannes.berg@intel.com>

commit ea720935cf6686f72def9d322298bf7e9bd53377 upstream.

In mac80211, multicast A-MSDUs are accepted in many cases that
they shouldn't be accepted in:
 * drop A-MSDUs with a multicast A1 (RA), as required by the
   spec in 9.11 (802.11-2012 version)
 * drop A-MSDUs with a 4-addr header, since the fourth address
   can't actually be useful for them; unless 4-address frame
   format is actually requested, even though the fourth address
   is still not useful in this case, but ignored

Accepting the first case, in particular, is very problematic
since it allows anyone else with possession of a GTK to send
unicast frames encapsulated in a multicast A-MSDU, even when
the AP has client isolation enabled.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/mac80211/rx.c |   24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -2253,16 +2253,22 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
 	if (!(status->rx_flags & IEEE80211_RX_AMSDU))
 		return RX_CONTINUE;
 
-	if (ieee80211_has_a4(hdr->frame_control) &&
-	    rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
-	    !rx->sdata->u.vlan.sta)
-		return RX_DROP_UNUSABLE;
+	if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
+		switch (rx->sdata->vif.type) {
+		case NL80211_IFTYPE_AP_VLAN:
+			if (!rx->sdata->u.vlan.sta)
+				return RX_DROP_UNUSABLE;
+			break;
+		case NL80211_IFTYPE_STATION:
+			if (!rx->sdata->u.mgd.use_4addr)
+				return RX_DROP_UNUSABLE;
+			break;
+		default:
+			return RX_DROP_UNUSABLE;
+		}
+	}
 
-	if (is_multicast_ether_addr(hdr->addr1) &&
-	    ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
-	      rx->sdata->u.vlan.sta) ||
-	     (rx->sdata->vif.type == NL80211_IFTYPE_STATION &&
-	      rx->sdata->u.mgd.use_4addr)))
+	if (is_multicast_ether_addr(hdr->addr1))
 		return RX_DROP_UNUSABLE;
 
 	skb->dev = dev;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 095/138] Revert "ath9k_hw: implement temperature compensation support for AR9003+"
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (85 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 094/138] mac80211: discard multicast and 4-addr A-MSDUs Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 096/138] ath10k: cache calibration data when the core is stopped Greg Kroah-Hartman
                     ` (34 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Felix Fietkau, Kalle Valo

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Felix Fietkau <nbd@nbd.name>

commit 304e5ac118cc351eb047b6c433a89e13ea7259cf upstream.

This reverts commit 171f6402e4aa ("ath9k_hw: implement temperature compensation
support for AR9003+"). Some users report that this commit causes a regression
in performance under some conditions.

Fixes: 171f6402e4aa ("ath9k_hw: implement temperature compensation support for AR9003+")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
[kvalo@qca.qualcomm.com: improve commit log]
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/ath/ath9k/ar9003_calib.c |   25 +++----------------------
 drivers/net/wireless/ath/ath9k/hw.h           |    1 -
 2 files changed, 3 insertions(+), 23 deletions(-)

--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -33,7 +33,6 @@ struct coeff {
 
 enum ar9003_cal_types {
 	IQ_MISMATCH_CAL = BIT(0),
-	TEMP_COMP_CAL = BIT(1),
 };
 
 static void ar9003_hw_setup_calibration(struct ath_hw *ah,
@@ -59,12 +58,6 @@ static void ar9003_hw_setup_calibration(
 		/* Kick-off cal */
 		REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL);
 		break;
-	case TEMP_COMP_CAL:
-		ath_dbg(common, CALIBRATE,
-			"starting Temperature Compensation Calibration\n");
-		REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_LOCAL);
-		REG_SET_BIT(ah, AR_CH0_THERM, AR_CH0_THERM_START);
-		break;
 	default:
 		ath_err(common, "Invalid calibration type\n");
 		break;
@@ -93,8 +86,7 @@ static bool ar9003_hw_per_calibration(st
 		/*
 		* Accumulate cal measures for active chains
 		*/
-		if (cur_caldata->calCollect)
-			cur_caldata->calCollect(ah);
+		cur_caldata->calCollect(ah);
 		ah->cal_samples++;
 
 		if (ah->cal_samples >= cur_caldata->calNumSamples) {
@@ -107,8 +99,7 @@ static bool ar9003_hw_per_calibration(st
 			/*
 			* Process accumulated data
 			*/
-			if (cur_caldata->calPostProc)
-				cur_caldata->calPostProc(ah, numChains);
+			cur_caldata->calPostProc(ah, numChains);
 
 			/* Calibration has finished. */
 			caldata->CalValid |= cur_caldata->calType;
@@ -323,16 +314,9 @@ static const struct ath9k_percal_data iq
 	ar9003_hw_iqcalibrate
 };
 
-static const struct ath9k_percal_data temp_cal_single_sample = {
-	TEMP_COMP_CAL,
-	MIN_CAL_SAMPLES,
-	PER_MAX_LOG_COUNT,
-};
-
 static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
 {
 	ah->iq_caldata.calData = &iq_cal_single_sample;
-	ah->temp_caldata.calData = &temp_cal_single_sample;
 
 	if (AR_SREV_9300_20_OR_LATER(ah)) {
 		ah->enabled_cals |= TX_IQ_CAL;
@@ -340,7 +324,7 @@ static void ar9003_hw_init_cal_settings(
 			ah->enabled_cals |= TX_IQ_ON_AGC_CAL;
 	}
 
-	ah->supp_cals = IQ_MISMATCH_CAL | TEMP_COMP_CAL;
+	ah->supp_cals = IQ_MISMATCH_CAL;
 }
 
 #define OFF_UPPER_LT 24
@@ -1399,9 +1383,6 @@ static void ar9003_hw_init_cal_common(st
 	INIT_CAL(&ah->iq_caldata);
 	INSERT_CAL(ah, &ah->iq_caldata);
 
-	INIT_CAL(&ah->temp_caldata);
-	INSERT_CAL(ah, &ah->temp_caldata);
-
 	/* Initialize current pointer to first element in list */
 	ah->cal_list_curr = ah->cal_list;
 
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -830,7 +830,6 @@ struct ath_hw {
 	/* Calibration */
 	u32 supp_cals;
 	struct ath9k_cal_list iq_caldata;
-	struct ath9k_cal_list temp_caldata;
 	struct ath9k_cal_list adcgain_caldata;
 	struct ath9k_cal_list adcdc_caldata;
 	struct ath9k_cal_list *cal_list;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 096/138] ath10k: cache calibration data when the core is stopped
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (86 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 095/138] Revert "ath9k_hw: implement temperature compensation support for AR9003+" Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 097/138] scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded Greg Kroah-Hartman
                     ` (33 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Nikolay Martynov, Marty Faltesek, Kalle Valo

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Marty Faltesek <mfaltesek@google.com>

commit f67b107d4ceddcf7aa65b706aaaf50d68edb52a6 upstream.

Commit 0b8e3c4ca29f ("ath10k: move cal data len to hw_params") broke retrieving
the calibration data from cal_data debugfs file. The length of file was always
zero. The reason is:

    static ssize_t ath10k_debug_cal_data_read(struct file *file,
                                          char __user *user_buf,
                                          size_t count, loff_t *ppos)
    {
        struct ath10k *ar = file->private_data;
        void *buf = file->private_data;

This is obviously bogus, private_data cannot contain both struct ath10k and the
buffer. Fix it by caching calibration data to ar->debug.cal_data. This also
allows it to be accessed when the device is not active (interface is down).

The cal_data buffer is fixed size because during the first firmware probe we
don't yet know what will be the lenght of the calibration data. It was simplest
just to use a fixed length. There's a WARN_ON() in
ath10k_debug_cal_data_fetch() if the buffer is too small.

Tested with qca988x and firmware 10.2.4.70.56.

Reported-by: Nikolay Martynov <mar.kolya@gmail.com>
Fixes: 0b8e3c4ca29f ("ath10k: move cal data len to hw_params")
Signed-off-by: Marty Faltesek <mfaltesek@google.com>
[kvalo@qca.qualcomm.com: improve commit log and minor other changes]
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/ath/ath10k/core.h  |    1 
 drivers/net/wireless/ath/ath10k/debug.c |   75 ++++++++++++++++----------------
 2 files changed, 40 insertions(+), 36 deletions(-)

--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -445,6 +445,7 @@ struct ath10k_debug {
 	u32 pktlog_filter;
 	u32 reg_addr;
 	u32 nf_cal_period;
+	void *cal_data;
 
 	struct ath10k_fw_crash_data *fw_crash_data;
 };
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -30,6 +30,8 @@
 /* ms */
 #define ATH10K_DEBUG_HTT_STATS_INTERVAL 1000
 
+#define ATH10K_DEBUG_CAL_DATA_LEN 12064
+
 #define ATH10K_FW_CRASH_DUMP_VERSION 1
 
 /**
@@ -1450,56 +1452,51 @@ static const struct file_operations fops
 	.llseek = default_llseek,
 };
 
-static int ath10k_debug_cal_data_open(struct inode *inode, struct file *file)
+static int ath10k_debug_cal_data_fetch(struct ath10k *ar)
 {
-	struct ath10k *ar = inode->i_private;
-	void *buf;
 	u32 hi_addr;
 	__le32 addr;
 	int ret;
 
-	mutex_lock(&ar->conf_mutex);
-
-	if (ar->state != ATH10K_STATE_ON &&
-	    ar->state != ATH10K_STATE_UTF) {
-		ret = -ENETDOWN;
-		goto err;
-	}
+	lockdep_assert_held(&ar->conf_mutex);
 
-	buf = vmalloc(ar->hw_params.cal_data_len);
-	if (!buf) {
-		ret = -ENOMEM;
-		goto err;
-	}
+	if (WARN_ON(ar->hw_params.cal_data_len > ATH10K_DEBUG_CAL_DATA_LEN))
+		return -EINVAL;
 
 	hi_addr = host_interest_item_address(HI_ITEM(hi_board_data));
 
 	ret = ath10k_hif_diag_read(ar, hi_addr, &addr, sizeof(addr));
 	if (ret) {
-		ath10k_warn(ar, "failed to read hi_board_data address: %d\n", ret);
-		goto err_vfree;
+		ath10k_warn(ar, "failed to read hi_board_data address: %d\n",
+			    ret);
+		return ret;
 	}
 
-	ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), buf,
+	ret = ath10k_hif_diag_read(ar, le32_to_cpu(addr), ar->debug.cal_data,
 				   ar->hw_params.cal_data_len);
 	if (ret) {
 		ath10k_warn(ar, "failed to read calibration data: %d\n", ret);
-		goto err_vfree;
+		return ret;
 	}
 
-	file->private_data = buf;
+	return 0;
+}
 
-	mutex_unlock(&ar->conf_mutex);
+static int ath10k_debug_cal_data_open(struct inode *inode, struct file *file)
+{
+	struct ath10k *ar = inode->i_private;
 
-	return 0;
+	mutex_lock(&ar->conf_mutex);
 
-err_vfree:
-	vfree(buf);
+	if (ar->state == ATH10K_STATE_ON ||
+	    ar->state == ATH10K_STATE_UTF) {
+		ath10k_debug_cal_data_fetch(ar);
+	}
 
-err:
+	file->private_data = ar;
 	mutex_unlock(&ar->conf_mutex);
 
-	return ret;
+	return 0;
 }
 
 static ssize_t ath10k_debug_cal_data_read(struct file *file,
@@ -1507,18 +1504,16 @@ static ssize_t ath10k_debug_cal_data_rea
 					  size_t count, loff_t *ppos)
 {
 	struct ath10k *ar = file->private_data;
-	void *buf = file->private_data;
 
-	return simple_read_from_buffer(user_buf, count, ppos,
-				       buf, ar->hw_params.cal_data_len);
-}
+	mutex_lock(&ar->conf_mutex);
 
-static int ath10k_debug_cal_data_release(struct inode *inode,
-					 struct file *file)
-{
-	vfree(file->private_data);
+	count = simple_read_from_buffer(user_buf, count, ppos,
+					ar->debug.cal_data,
+					ar->hw_params.cal_data_len);
 
-	return 0;
+	mutex_unlock(&ar->conf_mutex);
+
+	return count;
 }
 
 static ssize_t ath10k_write_ani_enable(struct file *file,
@@ -1579,7 +1574,6 @@ static const struct file_operations fops
 static const struct file_operations fops_cal_data = {
 	.open = ath10k_debug_cal_data_open,
 	.read = ath10k_debug_cal_data_read,
-	.release = ath10k_debug_cal_data_release,
 	.owner = THIS_MODULE,
 	.llseek = default_llseek,
 };
@@ -1931,6 +1925,8 @@ void ath10k_debug_stop(struct ath10k *ar
 {
 	lockdep_assert_held(&ar->conf_mutex);
 
+	ath10k_debug_cal_data_fetch(ar);
+
 	/* Must not use _sync to avoid deadlock, we do that in
 	 * ath10k_debug_destroy(). The check for htt_stats_mask is to avoid
 	 * warning from del_timer(). */
@@ -2343,6 +2339,10 @@ int ath10k_debug_create(struct ath10k *a
 	if (!ar->debug.fw_crash_data)
 		return -ENOMEM;
 
+	ar->debug.cal_data = vzalloc(ATH10K_DEBUG_CAL_DATA_LEN);
+	if (!ar->debug.cal_data)
+		return -ENOMEM;
+
 	INIT_LIST_HEAD(&ar->debug.fw_stats.pdevs);
 	INIT_LIST_HEAD(&ar->debug.fw_stats.vdevs);
 	INIT_LIST_HEAD(&ar->debug.fw_stats.peers);
@@ -2356,6 +2356,9 @@ void ath10k_debug_destroy(struct ath10k
 	vfree(ar->debug.fw_crash_data);
 	ar->debug.fw_crash_data = NULL;
 
+	vfree(ar->debug.cal_data);
+	ar->debug.cal_data = NULL;
+
 	ath10k_debug_fw_stats_reset(ar);
 
 	kfree(ar->debug.tpc_stats);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 097/138] scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (87 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 096/138] ath10k: cache calibration data when the core is stopped Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 098/138] scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware Greg Kroah-Hartman
                     ` (32 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ewan D. Milne, Laurence Oberman,
	Martin K. Petersen

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ewan D. Milne <emilne@redhat.com>

commit 4d2b496f19f3c2cfaca1e8fa0710688b5ff3811d upstream.

map_storep was not being vfree()'d in the module_exit call.

Signed-off-by: Ewan D. Milne <emilne@redhat.com>
Reviewed-by: Laurence Oberman <loberman@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/scsi_debug.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -5134,6 +5134,7 @@ static void __exit scsi_debug_exit(void)
 	bus_unregister(&pseudo_lld_bus);
 	root_device_unregister(pseudo_primary);
 
+	vfree(map_storep);
 	vfree(dif_storep);
 	vfree(fake_storep);
 	kfree(sdebug_q_arr);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 098/138] scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (88 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 097/138] scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 099/138] mmc: dw_mmc-pltfm: fix the potential NULL pointer dereference Greg Kroah-Hartman
                     ` (31 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ching Huang, Tomas Henzl, Martin K. Petersen

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ching Huang <ching2048@areca.com.tw>

commit 2bf7dc8443e113844d078fd6541b7f4aa544f92f upstream.

The arcmsr driver failed to pass SYNCHRONIZE CACHE to controller
firmware. Depending on how drive caches are handled internally by
controller firmware this could potentially lead to data integrity
problems.

Ensure that cache flushes are passed to the controller.

[mkp: applied by hand and removed unused vars]

Signed-off-by: Ching Huang <ching2048@areca.com.tw>
Reported-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/arcmsr/arcmsr_hba.c |    9 ---------
 1 file changed, 9 deletions(-)

--- a/drivers/scsi/arcmsr/arcmsr_hba.c
+++ b/drivers/scsi/arcmsr/arcmsr_hba.c
@@ -2636,18 +2636,9 @@ static int arcmsr_queue_command_lck(stru
 	struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata;
 	struct CommandControlBlock *ccb;
 	int target = cmd->device->id;
-	int lun = cmd->device->lun;
-	uint8_t scsicmd = cmd->cmnd[0];
 	cmd->scsi_done = done;
 	cmd->host_scribble = NULL;
 	cmd->result = 0;
-	if ((scsicmd == SYNCHRONIZE_CACHE) ||(scsicmd == SEND_DIAGNOSTIC)){
-		if(acb->devstate[target][lun] == ARECA_RAID_GONE) {
-    			cmd->result = (DID_NO_CONNECT << 16);
-		}
-		cmd->scsi_done(cmd);
-		return 0;
-	}
 	if (target == 16) {
 		/* virtual device for iop message transfer */
 		arcmsr_handle_virtual_command(acb, cmd);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 099/138] mmc: dw_mmc-pltfm: fix the potential NULL pointer dereference
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (89 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 098/138] scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 100/138] RAID1: ignore discard error Greg Kroah-Hartman
                     ` (30 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jaehoon Chung, Shawn Lin, Ulf Hansson

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jaehoon Chung <jh80.chung@samsung.com>

commit 45c7a4908a307a023e237a64a3eadcafc4836493 upstream.

platform_get_resource can be returned the NULL pointer.
Then regs->start should be referred to NULL Pointer.
devm_ioremap_resource() checks whether res is NULL or not.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mmc/host/dw_mmc-pltfm.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/drivers/mmc/host/dw_mmc-pltfm.c
+++ b/drivers/mmc/host/dw_mmc-pltfm.c
@@ -46,12 +46,13 @@ int dw_mci_pltfm_register(struct platfor
 	host->pdata = pdev->dev.platform_data;
 
 	regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	/* Get registers' physical base address */
-	host->phy_regs = regs->start;
 	host->regs = devm_ioremap_resource(&pdev->dev, regs);
 	if (IS_ERR(host->regs))
 		return PTR_ERR(host->regs);
 
+	/* Get registers' physical base address */
+	host->phy_regs = regs->start;
+
 	platform_set_drvdata(pdev, host);
 	return dw_mci_probe(host);
 }

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 100/138] RAID1: ignore discard error
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (90 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 099/138] mmc: dw_mmc-pltfm: fix the potential NULL pointer dereference Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 101/138] RAID10: " Greg Kroah-Hartman
                     ` (29 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Shaohua Li

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Shaohua Li <shli@fb.com>

commit e3f948cd3283e4fbe5907f1f3967c839912f480e upstream.

If a write error occurs, raid1 will try to rewrite the bio in small
chunk size. If the rewrite fails, raid1 will record the error in bad
block. narrow_write_error will always use WRITE for the bio, but
actually it could be a discard. Since discard bio hasn't payload, write
the bio will cause different issues. But discard error isn't fatal, we
can safely ignore it. This is what this patch does.

This issue should exist since discard is added, but only exposed with
recent arbitrary bio size feature.

Reported-and-tested-by: Sitsofe Wheeler <sitsofe@gmail.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/raid1.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -407,11 +407,14 @@ static void raid1_end_write_request(stru
 	struct bio *to_put = NULL;
 	int mirror = find_bio_disk(r1_bio, bio);
 	struct md_rdev *rdev = conf->mirrors[mirror].rdev;
+	bool discard_error;
+
+	discard_error = bio->bi_error && bio_op(bio) == REQ_OP_DISCARD;
 
 	/*
 	 * 'one mirror IO has finished' event handler:
 	 */
-	if (bio->bi_error) {
+	if (bio->bi_error && !discard_error) {
 		set_bit(WriteErrorSeen,	&rdev->flags);
 		if (!test_and_set_bit(WantReplacement, &rdev->flags))
 			set_bit(MD_RECOVERY_NEEDED, &
@@ -448,7 +451,7 @@ static void raid1_end_write_request(stru
 
 		/* Maybe we can clear some bad blocks. */
 		if (is_badblock(rdev, r1_bio->sector, r1_bio->sectors,
-				&first_bad, &bad_sectors)) {
+				&first_bad, &bad_sectors) && !discard_error) {
 			r1_bio->bios[mirror] = IO_MADE_GOOD;
 			set_bit(R1BIO_MadeGood, &r1_bio->state);
 		}

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 101/138] RAID10: ignore discard error
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (91 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 100/138] RAID1: ignore discard error Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 102/138] md: be careful not lot leak internal curr_resync value into metadata. -- (all) Greg Kroah-Hartman
                     ` (28 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Sitsofe Wheeler, Shaohua Li

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Shaohua Li <shli@fb.com>

commit 579ed34f7b751b8add233cba4cf755258dbdd60a upstream.

This is the counterpart of raid10 fix. If a write error occurs, raid10
will try to rewrite the bio in small chunk size. If the rewrite fails,
raid10 will record the error in bad block. narrow_write_error will
always use WRITE for the bio, but actually it could be a discard. Since
discard bio hasn't payload, write the bio will cause different issues.
But discard error isn't fatal, we can safely ignore it. This is what
this patch does.

This issue should exist since discard is added, but only exposed with
recent arbitrary bio size feature.

Cc: Sitsofe Wheeler <sitsofe@gmail.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/raid10.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -447,6 +447,9 @@ static void raid10_end_write_request(str
 	struct r10conf *conf = r10_bio->mddev->private;
 	int slot, repl;
 	struct md_rdev *rdev = NULL;
+	bool discard_error;
+
+	discard_error = bio->bi_error && bio_op(bio) == REQ_OP_DISCARD;
 
 	dev = find_bio_disk(conf, r10_bio, bio, &slot, &repl);
 
@@ -460,7 +463,7 @@ static void raid10_end_write_request(str
 	/*
 	 * this branch is our 'one mirror IO has finished' event handler:
 	 */
-	if (bio->bi_error) {
+	if (bio->bi_error && !discard_error) {
 		if (repl)
 			/* Never record new bad blocks to replacement,
 			 * just fail it.
@@ -503,7 +506,7 @@ static void raid10_end_write_request(str
 		if (is_badblock(rdev,
 				r10_bio->devs[slot].addr,
 				r10_bio->sectors,
-				&first_bad, &bad_sectors)) {
+				&first_bad, &bad_sectors) && !discard_error) {
 			bio_put(bio);
 			if (repl)
 				r10_bio->devs[slot].repl_bio = IO_MADE_GOOD;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 102/138] md: be careful not lot leak internal curr_resync value into metadata. -- (all)
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (92 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 101/138] RAID10: " Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 104/138] drm/imx: ipuv3-plane: Switch EBA buffer only when we dont need modeset Greg Kroah-Hartman
                     ` (27 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Viswesh, NeilBrown, Shaohua Li

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: NeilBrown <neilb@suse.com>

commit 1217e1d1999ed6c9c1e1b1acae0a74ab70464ae2 upstream.

mddev->curr_resync usually records where the current resync is up to,
but during the starting phase it has some "magic" values.

 1 - means that the array is trying to start a resync, but has yielded
     to another array which shares physical devices, and also needs to
     start a resync
 2 - means the array is trying to start resync, but has found another
     array which shares physical devices and has already started resync.

 3 - means that resync has commensed, but it is possible that nothing
     has actually been resynced yet.

It is important that this value not be visible to user-space and
particularly that it doesn't get written to the metadata, as the
resync or recovery checkpoint.  In part, this is because it may be
slightly higher than the correct value, though this is very rare.
In part, because it is not a multiple of 4K, and some devices only
support 4K aligned accesses.

There are two places where this value is propagates into either
->curr_resync_completed or ->recovery_cp or ->recovery_offset.
These currently avoid the propagation of values 1 and 3, but will
allow 3 to leak through.

Change them to only propagate the value if it is > 3.

As this can cause an array to fail, the patch is suitable for -stable.

Reported-by: Viswesh <viswesh.vichu@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/md.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -8120,14 +8120,14 @@ void md_do_sync(struct md_thread *thread
 
 	if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
 	    !test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
-	    mddev->curr_resync > 2) {
+	    mddev->curr_resync > 3) {
 		mddev->curr_resync_completed = mddev->curr_resync;
 		sysfs_notify(&mddev->kobj, NULL, "sync_completed");
 	}
 	mddev->pers->sync_request(mddev, max_sectors, &skipped);
 
 	if (!test_bit(MD_RECOVERY_CHECK, &mddev->recovery) &&
-	    mddev->curr_resync > 2) {
+	    mddev->curr_resync > 3) {
 		if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
 			if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
 				if (mddev->curr_resync >= mddev->recovery_cp) {

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 104/138] drm/imx: ipuv3-plane: Switch EBA buffer only when we dont need modeset
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (93 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 102/138] md: be careful not lot leak internal curr_resync value into metadata. -- (all) Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 105/138] drm/imx: ipuv3-plane: Access old u/vbo properly in ->atomic_check for YU12/YV12 Greg Kroah-Hartman
                     ` (26 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Liu Ying, Philipp Zabel

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Liu Ying <gnuiyl@gmail.com>

commit 43daa01323da37a3692cabe1579ef5c2c4372e06 upstream.

We added active plane reconfiguration support by forcing a full modeset
operation.  So, looking at old_plane_state->fb to determine whether we need to
switch EBA buffer(for hardware double buffering) in ipu_plane_atomic_set_base()
or not is no more correct.  Instead, we should do that only when we don't need
modeset, otherwise, we initialize the two EBA buffers with the buffer address.

Fixes: c6c1f9bc798b ("drm/imx: Add active plane reconfiguration support")
Signed-off-by: Liu Ying <gnuiyl@gmail.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/imx/ipuv3-plane.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/gpu/drm/imx/ipuv3-plane.c
+++ b/drivers/gpu/drm/imx/ipuv3-plane.c
@@ -108,6 +108,7 @@ static void ipu_plane_atomic_set_base(st
 {
 	struct drm_plane *plane = &ipu_plane->base;
 	struct drm_plane_state *state = plane->state;
+	struct drm_crtc_state *crtc_state = state->crtc->state;
 	struct drm_framebuffer *fb = state->fb;
 	unsigned long eba, ubo, vbo;
 	int active;
@@ -149,7 +150,7 @@ static void ipu_plane_atomic_set_base(st
 		break;
 	}
 
-	if (old_state->fb) {
+	if (!drm_atomic_crtc_needs_modeset(crtc_state)) {
 		active = ipu_idmac_get_current_buffer(ipu_plane->ipu_ch);
 		ipu_cpmem_set_buffer(ipu_plane->ipu_ch, !active, eba);
 		ipu_idmac_select_buffer(ipu_plane->ipu_ch, !active);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 105/138] drm/imx: ipuv3-plane: Access old u/vbo properly in ->atomic_check for YU12/YV12
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (94 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 104/138] drm/imx: ipuv3-plane: Switch EBA buffer only when we dont need modeset Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 106/138] drm/radeon/si_dpm: Limit clocks on HD86xx part Greg Kroah-Hartman
                     ` (25 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Liu Ying, Philipp Zabel

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Liu Ying <gnuiyl@gmail.com>

commit e73aca5184ad9fc948ba22b4d35dce11db35bb25 upstream.

Before accessing the u/v offset(aka, u/vbo for IPUv3) of the old plane state's
relevant fb, we should make sure the fb is in YU12 or YV12 pixel format(which
are the two YUV pixel formats we support only), otherwise, we are likely to
trigger BUG_ON() in drm_plane_state_to_u/vbo() since the fb's pixel format is
probably not YU12 or YV12.

Link: https://bugs.freedesktop.org/show_bug.cgi?id=98150
Fixes: c6c1f9bc798b ("drm/imx: Add active plane reconfiguration support")
Signed-off-by: Liu Ying <gnuiyl@gmail.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/imx/ipuv3-plane.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/gpu/drm/imx/ipuv3-plane.c
+++ b/drivers/gpu/drm/imx/ipuv3-plane.c
@@ -360,7 +360,9 @@ static int ipu_plane_atomic_check(struct
 		if ((ubo > 0xfffff8) || (vbo > 0xfffff8))
 			return -EINVAL;
 
-		if (old_fb) {
+		if (old_fb &&
+		    (old_fb->pixel_format == DRM_FORMAT_YUV420 ||
+		     old_fb->pixel_format == DRM_FORMAT_YVU420)) {
 			old_ubo = drm_plane_state_to_ubo(old_state);
 			old_vbo = drm_plane_state_to_vbo(old_state);
 			if (ubo != old_ubo || vbo != old_vbo)

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 106/138] drm/radeon/si_dpm: Limit clocks on HD86xx part
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (95 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 105/138] drm/imx: ipuv3-plane: Access old u/vbo properly in ->atomic_check for YU12/YV12 Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 107/138] drm/radeon/si_dpm: workaround for SI kickers Greg Kroah-Hartman
                     ` (24 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Tom St Denis, Alex Deucher

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tom St Denis <tom.stdenis@amd.com>

commit fb9a5b0c1c9893db2e0d18544fd49e19d784a87d upstream.

Limit clocks on a specific HD86xx part to avoid
crashes (while awaiting an appropriate PP fix).

Signed-off-by: Tom St Denis <tom.stdenis@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/radeon/si_dpm.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -3021,6 +3021,12 @@ static void si_apply_state_adjust_rules(
 		max_sclk = 75000;
 		max_mclk = 80000;
 	}
+	/* limit clocks on HD8600 series */
+	if (rdev->pdev->device == 0x6660 &&
+	    rdev->pdev->revision == 0x83) {
+		max_sclk = 75000;
+		max_mclk = 80000;
+	}
 
 	if (rps->vce_active) {
 		rps->evclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].evclk;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 107/138] drm/radeon/si_dpm: workaround for SI kickers
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (96 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 106/138] drm/radeon/si_dpm: Limit clocks on HD86xx part Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 109/138] drm/nouveau/acpi: fix check for power resources support Greg Kroah-Hartman
                     ` (23 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Alex Deucher

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alex Deucher <alexander.deucher@amd.com>

commit 7dc86ef5ac91642dfc3eb93ee0f0458e702a343e upstream.

Consolidate existing quirks. Fixes stability issues
on some kickers.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/radeon/si_dpm.c |   59 +++++++++++++++++++++++++++++-----------
 1 file changed, 43 insertions(+), 16 deletions(-)

--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -2999,6 +2999,49 @@ static void si_apply_state_adjust_rules(
 	int i;
 	struct si_dpm_quirk *p = si_dpm_quirk_list;
 
+	/* limit all SI kickers */
+	if (rdev->family == CHIP_PITCAIRN) {
+		if ((rdev->pdev->revision == 0x81) ||
+		    (rdev->pdev->device == 0x6810) ||
+		    (rdev->pdev->device == 0x6811) ||
+		    (rdev->pdev->device == 0x6816) ||
+		    (rdev->pdev->device == 0x6817) ||
+		    (rdev->pdev->device == 0x6806))
+			max_mclk = 120000;
+	} else if (rdev->family == CHIP_VERDE) {
+		if ((rdev->pdev->revision == 0x81) ||
+		    (rdev->pdev->revision == 0x83) ||
+		    (rdev->pdev->revision == 0x87) ||
+		    (rdev->pdev->device == 0x6820) ||
+		    (rdev->pdev->device == 0x6821) ||
+		    (rdev->pdev->device == 0x6822) ||
+		    (rdev->pdev->device == 0x6823) ||
+		    (rdev->pdev->device == 0x682A) ||
+		    (rdev->pdev->device == 0x682B)) {
+			max_sclk = 75000;
+			max_mclk = 80000;
+		}
+	} else if (rdev->family == CHIP_OLAND) {
+		if ((rdev->pdev->revision == 0xC7) ||
+		    (rdev->pdev->revision == 0x80) ||
+		    (rdev->pdev->revision == 0x81) ||
+		    (rdev->pdev->revision == 0x83) ||
+		    (rdev->pdev->device == 0x6604) ||
+		    (rdev->pdev->device == 0x6605)) {
+			max_sclk = 75000;
+			max_mclk = 80000;
+		}
+	} else if (rdev->family == CHIP_HAINAN) {
+		if ((rdev->pdev->revision == 0x81) ||
+		    (rdev->pdev->revision == 0x83) ||
+		    (rdev->pdev->revision == 0xC3) ||
+		    (rdev->pdev->device == 0x6664) ||
+		    (rdev->pdev->device == 0x6665) ||
+		    (rdev->pdev->device == 0x6667)) {
+			max_sclk = 75000;
+			max_mclk = 80000;
+		}
+	}
 	/* Apply dpm quirks */
 	while (p && p->chip_device != 0) {
 		if (rdev->pdev->vendor == p->chip_vendor &&
@@ -3011,22 +3054,6 @@ static void si_apply_state_adjust_rules(
 		}
 		++p;
 	}
-	/* limit mclk on all R7 370 parts for stability */
-	if (rdev->pdev->device == 0x6811 &&
-	    rdev->pdev->revision == 0x81)
-		max_mclk = 120000;
-	/* limit sclk/mclk on Jet parts for stability */
-	if (rdev->pdev->device == 0x6665 &&
-	    rdev->pdev->revision == 0xc3) {
-		max_sclk = 75000;
-		max_mclk = 80000;
-	}
-	/* limit clocks on HD8600 series */
-	if (rdev->pdev->device == 0x6660 &&
-	    rdev->pdev->revision == 0x83) {
-		max_sclk = 75000;
-		max_mclk = 80000;
-	}
 
 	if (rps->vce_active) {
 		rps->evclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].evclk;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 109/138] drm/nouveau/acpi: fix check for power resources support
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (97 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 107/138] drm/radeon/si_dpm: workaround for SI kickers Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 113/138] drm/i915/gen9: fix DDB partitioning for multi-screen cases Greg Kroah-Hartman
                     ` (22 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Mika Westerberg, Peter Wu, Dave Airlie

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Wu <peter@lekensteyn.nl>

commit b0a6af8b34c9ad20894aa46f85f4bf59d444f286 upstream.

Check whether the kernel really supports power resources for a device,
otherwise the power might not be removed when the device is runtime
suspended (DSM should still work in these cases where PR does not).

This is a workaround for a problem where ACPICA and Windows 10 differ in
behavior. ACPICA does not correctly enumerate power resources within a
conditional block (due to delayed execution of such blocks) and as a
result power_resources is set to false even if _PR3 exists.

Fixes: 692a17dcc292 ("drm/nouveau/acpi: fix lockup with PCIe runtime PM")
Link: https://bugs.freedesktop.org/show_bug.cgi?id=98398
Reported-and-tested-by: Rick Kerkhof <rick.2889@gmail.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/nouveau/nouveau_acpi.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/gpu/drm/nouveau/nouveau_acpi.c
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
@@ -240,7 +240,8 @@ static bool nouveau_pr3_present(struct p
 	if (!parent_adev)
 		return false;
 
-	return acpi_has_method(parent_adev->handle, "_PR3");
+	return parent_adev->power.flags.power_resources &&
+		acpi_has_method(parent_adev->handle, "_PR3");
 }
 
 static void nouveau_dsm_pci_probe(struct pci_dev *pdev, acpi_handle *dhandle_out,

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 113/138] drm/i915/gen9: fix DDB partitioning for multi-screen cases
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (98 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 109/138] drm/nouveau/acpi: fix check for power resources support Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 114/138] drm/i915/gen9: fix watermarks when using the pipe scaler Greg Kroah-Hartman
                     ` (21 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Paulo Zanoni, Lyude, Jani Nikula

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paulo Zanoni <paulo.r.zanoni@intel.com>

commit 01c72d6c17dc524f04d4dbe361d214e423b35457 upstream.

With the previous code we were only recomputing the DDB partitioning
for the CRTCs included in the atomic commit, so any other active CRTCs
would end up having their DDB registers zeroed. In this patch we make
sure that the computed state starts as a copy of the current
partitioning, and then we only zero the DDBs that we're actually
going to recompute.

How to reproduce the bug:
  1 - Enable the primary plane on pipe A
  2 - Enable the primary plane on pipe B
  3 - Enable the cursor or sprite plane on pipe A

Step 3 will zero the DDB partitioning for pipe B since it's not
included in the commit that enabled the cursor or sprite for pipe A.

I expect this to fix many FIFO underrun problems on gen9+.

v2:
  - Mention the cursor on the steps to reproduce the problem (Paulo).
  - Add Testcase tag provided by Maarten (Maarten).

Testcase: kms_cursor_legacy.cursorA-vs-flipB-atomic-transitions
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96226
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96828
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97450
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97596
Bugzilla: https://www.phoronix.com/scan.php?page=news_item&px=Intel-Skylake-Multi-Screen-Woes
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Lyude <cpaul@redhat.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1475602652-17326-1-git-send-email-paulo.r.zanoni@intel.com
(cherry picked from commit 5a920b85f2c6e3fd7d9dd9bb3f3345e9085e2360)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/i915/intel_pm.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3363,13 +3363,15 @@ skl_allocate_pipe_ddb(struct intel_crtc_
 	int num_active;
 	int id, i;
 
+	/* Clear the partitioning for disabled planes. */
+	memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe]));
+	memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe]));
+
 	if (WARN_ON(!state))
 		return 0;
 
 	if (!cstate->base.active) {
 		ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0;
-		memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe]));
-		memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe]));
 		return 0;
 	}
 
@@ -4051,6 +4053,12 @@ skl_compute_ddb(struct drm_atomic_state
 		intel_state->wm_results.dirty_pipes = ~0;
 	}
 
+	/*
+	 * We're not recomputing for the pipes not included in the commit, so
+	 * make sure we start with the current state.
+	 */
+	memcpy(ddb, &dev_priv->wm.skl_hw.ddb, sizeof(*ddb));
+
 	for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) {
 		struct intel_crtc_state *cstate;
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 114/138] drm/i915/gen9: fix watermarks when using the pipe scaler
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (99 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 113/138] drm/i915/gen9: fix DDB partitioning for multi-screen cases Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 120/138] drm: i915: Wait for fences on new fb, not old Greg Kroah-Hartman
                     ` (20 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Paulo Zanoni, Matt Roper, Jani Nikula

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paulo Zanoni <paulo.r.zanoni@intel.com>

commit 5e33791e1f27c3207e7b44071e7c94a487d1eb39 upstream.

Luckily, the necessary adjustments for when we're using the scaler are
exactly the same as the ones needed on ILK+, so just reuse the
function we already have.

v2: Invert the patch order so stable backports get easier.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1475872138-16194-1-git-send-email-paulo.r.zanoni@intel.com
(cherry picked from commit cfd7e3a20251b9ac95651d64556f87f86128a966)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/i915/intel_pm.c |   12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3471,12 +3471,6 @@ skl_allocate_pipe_ddb(struct intel_crtc_
 	return 0;
 }
 
-static uint32_t skl_pipe_pixel_rate(const struct intel_crtc_state *config)
-{
-	/* TODO: Take into account the scalers once we support them */
-	return config->base.adjusted_mode.crtc_clock;
-}
-
 /*
  * The max latency should be 257 (max the punit can code is 255 and we add 2us
  * for the read latency) and cpp should always be <= 8, so that
@@ -3527,7 +3521,7 @@ static uint32_t skl_adjusted_plane_pixel
 	 * Adjusted plane pixel rate is just the pipe's adjusted pixel rate
 	 * with additional adjustments for plane-specific scaling.
 	 */
-	adjusted_pixel_rate = skl_pipe_pixel_rate(cstate);
+	adjusted_pixel_rate = ilk_pipe_pixel_rate(cstate);
 	downscale_amount = skl_plane_downscale_amount(pstate);
 
 	pixel_rate = adjusted_pixel_rate * downscale_amount >> 16;
@@ -3739,11 +3733,11 @@ skl_compute_linetime_wm(struct intel_crt
 	if (!cstate->base.active)
 		return 0;
 
-	if (WARN_ON(skl_pipe_pixel_rate(cstate) == 0))
+	if (WARN_ON(ilk_pipe_pixel_rate(cstate) == 0))
 		return 0;
 
 	return DIV_ROUND_UP(8 * cstate->base.adjusted_mode.crtc_htotal * 1000,
-			    skl_pipe_pixel_rate(cstate));
+			    ilk_pipe_pixel_rate(cstate));
 }
 
 static void skl_compute_transition_wm(struct intel_crtc_state *cstate,

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 120/138] drm: i915: Wait for fences on new fb, not old
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (100 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 114/138] drm/i915/gen9: fix watermarks when using the pipe scaler Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 121/138] i2c: mark device nodes only in case of successful instantiation Greg Kroah-Hartman
                     ` (19 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Daniel Stone, Daniel Vetter,
	Maarten Lankhorst, Daniel Vetter, Jani Nikula

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Daniel Stone <daniels@collabora.com>

commit 1fb3672eaf6ec95fb34c22734feffd6041531c5b upstream.

The previous code would wait for fences on the framebuffer from the old
plane state to complete, rather than the new, so you would see tearing
everywhere. Fix this to wait on the new state before we make it active.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Fixes: 94f050246b42 ("drm/i915: nonblocking commit")
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20161021144454.6288-1-daniels@collabora.com
(cherry picked from commit 2d2c5ad83f772d7d7b0bb8348ecea42e88f89ab0)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/i915/intel_display.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13834,7 +13834,7 @@ static void intel_atomic_commit_tail(str
 
 	for_each_plane_in_state(state, plane, plane_state, i) {
 		struct intel_plane_state *intel_plane_state =
-			to_intel_plane_state(plane_state);
+			to_intel_plane_state(plane->state);
 
 		if (!intel_plane_state->wait_req)
 			continue;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 121/138] i2c: mark device nodes only in case of successful instantiation
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (101 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 120/138] drm: i915: Wait for fences on new fb, not old Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 122/138] netfilter: xt_NFLOG: fix unexpected truncated packet Greg Kroah-Hartman
                     ` (18 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ralf Ramsauer, Geert Uytterhoeven,
	Pantelis Antoniou, Wolfram Sang

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ralf Ramsauer <ralf@ramses-pyramidenbau.de>

commit 6a676fb69dcbf3310b9e462c1db66c8e7f6ead38 upstream.

Instantiated I2C device nodes are marked with OF_POPULATE. This was
introduced in 4f001fd30145a6. On unloading, loaded device nodes will of
course be unmarked. The problem are nodes that fail during
initialisation: If a node fails, it won't be unloaded and hence not be
unmarked.

If a I2C driver module is unloaded and reloaded, it will skip nodes that
failed before.

Skip device nodes that are already populated and mark them only in case
of success.

Fixes: 4f001fd30145a6 ("i2c: Mark instantiated device nodes with OF_POPULATE")
Signed-off-by: Ralf Ramsauer <ralf@ramses-pyramidenbau.de>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
[wsa: use 14-digit commit sha]
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>


---
 drivers/i2c/i2c-core.c |   11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1592,6 +1592,7 @@ static struct i2c_client *of_i2c_registe
 static void of_i2c_register_devices(struct i2c_adapter *adap)
 {
 	struct device_node *node;
+	struct i2c_client *client;
 
 	/* Only register child devices if the adapter has a node pointer set */
 	if (!adap->dev.of_node)
@@ -1602,7 +1603,14 @@ static void of_i2c_register_devices(stru
 	for_each_available_child_of_node(adap->dev.of_node, node) {
 		if (of_node_test_and_set_flag(node, OF_POPULATED))
 			continue;
-		of_i2c_register_device(adap, node);
+
+		client = of_i2c_register_device(adap, node);
+		if (IS_ERR(client)) {
+			dev_warn(&adap->dev,
+				 "Failed to create I2C device for %s\n",
+				 node->full_name);
+			of_node_clear_flag(node, OF_POPULATED);
+		}
 	}
 }
 
@@ -2201,6 +2209,7 @@ static int of_i2c_notify(struct notifier
 		if (IS_ERR(client)) {
 			dev_err(&adap->dev, "failed to create client for '%s'\n",
 				 rd->dn->full_name);
+			of_node_clear_flag(rd->dn, OF_POPULATED);
 			return notifier_from_errno(PTR_ERR(client));
 		}
 		break;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 122/138] netfilter: xt_NFLOG: fix unexpected truncated packet
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (102 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 121/138] i2c: mark device nodes only in case of successful instantiation Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 123/138] UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header Greg Kroah-Hartman
                     ` (17 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Justin Piszcz, Chris Caputo,
	Liping Zhang, Pablo Neira Ayuso

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Liping Zhang <liping.zhang@spreadtrum.com>

commit 6d19375b58763fefc2f215fb45117d3353ced888 upstream.

Justin and Chris spotted that iptables NFLOG target was broken when they
upgraded the kernel to 4.8: "ulogd-2.0.5- IPs are no longer logged" or
"results in segfaults in ulogd-2.0.5".

Because "struct nf_loginfo li;" is a local variable, and flags will be
filled with garbage value, not inited to zero. So if it contains 0x1,
packets will not be logged to the userspace anymore.

Fixes: 7643507fe8b5 ("netfilter: xt_NFLOG: nflog-range does not truncate packets")
Reported-by: Justin Piszcz <jpiszcz@lucidpixels.com>
Reported-by: Chris Caputo <ccaputo@alt.net>
Tested-by: Chris Caputo <ccaputo@alt.net>
Signed-off-by: Liping Zhang <liping.zhang@spreadtrum.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/netfilter/xt_NFLOG.c |    1 +
 1 file changed, 1 insertion(+)

--- a/net/netfilter/xt_NFLOG.c
+++ b/net/netfilter/xt_NFLOG.c
@@ -32,6 +32,7 @@ nflog_tg(struct sk_buff *skb, const stru
 	li.u.ulog.copy_len   = info->len;
 	li.u.ulog.group	     = info->group;
 	li.u.ulog.qthreshold = info->threshold;
+	li.u.ulog.flags	     = 0;
 
 	if (info->flags & XT_NFLOG_F_COPY_LEN)
 		li.u.ulog.flags |= NF_LOG_F_COPY_LEN;

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 123/138] UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (103 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 122/138] netfilter: xt_NFLOG: fix unexpected truncated packet Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 125/138] video: fbdev: pxafb: potential NULL dereference on error Greg Kroah-Hartman
                     ` (16 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Boris Brezillon, Richard Weinberger

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Boris Brezillon <boris.brezillon@free-electrons.com>

commit ecbfa8eabae9cd73522d1d3d15869703c263d859 upstream.

scan_pool() does not mark the PEB for scrubing when bitflips are
detected in the EC header of a free PEB (VID header region left to
0xff).
Make sure we scrub the PEB in this case.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Fixes: dbb7d2a88d2a ("UBI: Add fastmap core")
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mtd/ubi/fastmap.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

--- a/drivers/mtd/ubi/fastmap.c
+++ b/drivers/mtd/ubi/fastmap.c
@@ -515,10 +515,11 @@ static int scan_pool(struct ubi_device *
 			unsigned long long ec = be64_to_cpu(ech->ec);
 			unmap_peb(ai, pnum);
 			dbg_bld("Adding PEB to free: %i", pnum);
+
 			if (err == UBI_IO_FF_BITFLIPS)
-				add_aeb(ai, free, pnum, ec, 1);
-			else
-				add_aeb(ai, free, pnum, ec, 0);
+				scrub = 1;
+
+			add_aeb(ai, free, pnum, ec, scrub);
 			continue;
 		} else if (err == 0 || err == UBI_IO_BITFLIPS) {
 			dbg_bld("Found non empty PEB:%i in pool", pnum);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 125/138] video: fbdev: pxafb: potential NULL dereference on error
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (104 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 123/138] UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 126/138] omapfb: fix return value check in dsi_bind() Greg Kroah-Hartman
                     ` (15 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dan Carpenter, Robert Jarzmik,
	Tomi Valkeinen

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Carpenter <dan.carpenter@oracle.com>

commit e0299908d606a99e7ffb467bc3c11dfe54133af3 upstream.

If we "goto out;" then it calls display_timings_release(timings);
Since "timings" is NULL, that's going to oops.  Just return directly.

Fixes: 420a488278e8 ('video: fbdev: pxafb: initial devicetree conversion')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/pxafb.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/video/fbdev/pxafb.c
+++ b/drivers/video/fbdev/pxafb.c
@@ -2125,7 +2125,7 @@ static int of_get_pxafb_display(struct d
 
 	timings = of_get_display_timings(disp);
 	if (!timings)
-		goto out;
+		return -EINVAL;
 
 	ret = -ENOMEM;
 	info->modes = kmalloc_array(timings->num_timings,

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 126/138] omapfb: fix return value check in dsi_bind()
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (105 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 125/138] video: fbdev: pxafb: potential NULL dereference on error Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 127/138] pwm: Unexport children before chip removal Greg Kroah-Hartman
                     ` (14 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Wei Yongjun, Peter Ujfalusi, Tomi Valkeinen

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Wei Yongjun <weiyongjun1@huawei.com>

commit 43da7575cdecaf5af2d6b3f3a9e4e6c9144be428 upstream.

Fix the retrn value check which testing the wrong variable
in dsi_bind().

Fixes: f76ee892a99e ("omapfb: copy omapdss & displays for omapfb")
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
Reviewed-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/omap2/omapfb/dss/dsi.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/dsi.c
@@ -5348,7 +5348,7 @@ static int dsi_bind(struct device *dev,
 
 	dsi->phy_base = devm_ioremap(&dsidev->dev, res->start,
 		resource_size(res));
-	if (!dsi->proto_base) {
+	if (!dsi->phy_base) {
 		DSSERR("can't ioremap DSI PHY\n");
 		return -ENOMEM;
 	}
@@ -5368,7 +5368,7 @@ static int dsi_bind(struct device *dev,
 
 	dsi->pll_base = devm_ioremap(&dsidev->dev, res->start,
 		resource_size(res));
-	if (!dsi->proto_base) {
+	if (!dsi->pll_base) {
 		DSSERR("can't ioremap DSI PLL\n");
 		return -ENOMEM;
 	}

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 127/138] pwm: Unexport children before chip removal
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (106 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 126/138] omapfb: fix return value check in dsi_bind() Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 128/138] usb: dwc3: Fix size used in dma_free_coherent() Greg Kroah-Hartman
                     ` (13 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, David Hsu, Thierry Reding

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Hsu <davidhsu@google.com>

commit 0733424c9ba9f42242409d1ece780777272f7ea1 upstream.

Exported pwm channels aren't removed before the pwmchip and are
leaked. This results in invalid sysfs files. This fix removes
all exported pwm channels before chip removal.

Signed-off-by: David Hsu <davidhsu@google.com>
Fixes: 76abbdde2d95 ("pwm: Add sysfs interface")
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/pwm/core.c  |    2 ++
 drivers/pwm/sysfs.c |   18 ++++++++++++++++++
 include/linux/pwm.h |    5 +++++
 3 files changed, 25 insertions(+)

--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -339,6 +339,8 @@ int pwmchip_remove(struct pwm_chip *chip
 	unsigned int i;
 	int ret = 0;
 
+	pwmchip_sysfs_unexport_children(chip);
+
 	mutex_lock(&pwm_lock);
 
 	for (i = 0; i < chip->npwm; i++) {
--- a/drivers/pwm/sysfs.c
+++ b/drivers/pwm/sysfs.c
@@ -409,6 +409,24 @@ void pwmchip_sysfs_unexport(struct pwm_c
 	}
 }
 
+void pwmchip_sysfs_unexport_children(struct pwm_chip *chip)
+{
+	struct device *parent;
+	unsigned int i;
+
+	parent = class_find_device(&pwm_class, NULL, chip,
+				   pwmchip_sysfs_match);
+	if (!parent)
+		return;
+
+	for (i = 0; i < chip->npwm; i++) {
+		struct pwm_device *pwm = &chip->pwms[i];
+
+		if (test_bit(PWMF_EXPORTED, &pwm->flags))
+			pwm_unexport_child(parent, pwm);
+	}
+}
+
 static int __init pwm_sysfs_init(void)
 {
 	return class_register(&pwm_class);
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -641,6 +641,7 @@ static inline void pwm_remove_table(stru
 #ifdef CONFIG_PWM_SYSFS
 void pwmchip_sysfs_export(struct pwm_chip *chip);
 void pwmchip_sysfs_unexport(struct pwm_chip *chip);
+void pwmchip_sysfs_unexport_children(struct pwm_chip *chip);
 #else
 static inline void pwmchip_sysfs_export(struct pwm_chip *chip)
 {
@@ -649,6 +650,10 @@ static inline void pwmchip_sysfs_export(
 static inline void pwmchip_sysfs_unexport(struct pwm_chip *chip)
 {
 }
+
+static inline void pwmchip_sysfs_unexport_children(struct pwm_chip *chip)
+{
+}
 #endif /* CONFIG_PWM_SYSFS */
 
 #endif /* __LINUX_PWM_H */

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 128/138] usb: dwc3: Fix size used in dma_free_coherent()
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (107 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 127/138] pwm: Unexport children before chip removal Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 129/138] usb: chipidea: host: fix NULL ptr dereference during shutdown Greg Kroah-Hartman
                     ` (12 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Christophe JAILLET, Felipe Balbi

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

commit 51fbc7c06c8900370c6da5fc4a4685add8fa4fb0 upstream.

In commit 2abd9d5fa60f9 ("usb: dwc3: ep0: Add chained TRB support"), the
size of the memory allocated with 'dma_alloc_coherent()' has been modified
but the corresponding calls to 'dma_free_coherent()' have not been updated
accordingly.

This has been spotted with coccinelle, using the following script:
////////////////////
@r@
expression x0, x1, y0, y1, z0, z1, t0, t1, ret;
@@

*   ret = dma_alloc_coherent(x0, y0, z0, t0);
    ...
*   dma_free_coherent(x1, y1, ret, t1);

@script:python@
y0 << r.y0;
y1 << r.y1;

@@
if y1.find(y0) == -1:
 print "WARNING: sizes look different:  '%s'   vs   '%s'" % (y0, y1)
////////////////////

Fixes: 2abd9d5fa60f9 ("usb: dwc3: ep0: Add chained TRB support")

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/dwc3/gadget.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -3055,7 +3055,7 @@ err3:
 	kfree(dwc->setup_buf);
 
 err2:
-	dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb),
+	dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb) * 2,
 			dwc->ep0_trb, dwc->ep0_trb_addr);
 
 err1:
@@ -3080,7 +3080,7 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
 	kfree(dwc->setup_buf);
 	kfree(dwc->zlp_buf);
 
-	dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb),
+	dma_free_coherent(dwc->dev, sizeof(*dwc->ep0_trb) * 2,
 			dwc->ep0_trb, dwc->ep0_trb_addr);
 
 	dma_free_coherent(dwc->dev, sizeof(*dwc->ctrl_req),

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 129/138] usb: chipidea: host: fix NULL ptr dereference during shutdown
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (108 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 128/138] usb: dwc3: Fix size used in dma_free_coherent() Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 130/138] usb: musb: Fix hardirq-safe hardirq-unsafe lock order error Greg Kroah-Hartman
                     ` (11 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Alan Stern, Stefan Wahren, Peter Chen

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Stefan Wahren <stefan.wahren@i2se.com>

commit 991d5add50a5bb6ab8f12f2129f5c7487f6baaf6 upstream.

After commit b09b5224fe86 ("usb: chipidea: implement platform shutdown
callback") and commit 43a404577a93 ("usb: chipidea: host: set host to
be null after hcd is freed") a NULL pointer dereference is caused
on i.MX23 during shutdown. So ensure that role is set to CI_ROLE_END and
we finish interrupt handling before the hcd is deallocated. This avoids
the NULL pointer dereference.

Suggested-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Fixes: b09b5224fe86 ("usb: chipidea: implement platform shutdown callback")
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/chipidea/host.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/usb/chipidea/host.c
+++ b/drivers/usb/chipidea/host.c
@@ -185,6 +185,8 @@ static void host_stop(struct ci_hdrc *ci
 
 	if (hcd) {
 		usb_remove_hcd(hcd);
+		ci->role = CI_ROLE_END;
+		synchronize_irq(ci->irq);
 		usb_put_hcd(hcd);
 		if (ci->platdata->reg_vbus && !ci_otg_is_fsm_mode(ci) &&
 			(ci->platdata->flags & CI_HDRC_TURN_VBUS_EARLY_ON))

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 130/138] usb: musb: Fix hardirq-safe hardirq-unsafe lock order error
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (109 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 129/138] usb: chipidea: host: fix NULL ptr dereference during shutdown Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 131/138] [media] v4l: vsp1: Prevent pipelines from running when not streaming Greg Kroah-Hartman
                     ` (10 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Laurent Pinchart, Tony Lindgren, Bin Liu

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tony Lindgren <tony@atomide.com>

commit d8e5f0eca1e88215e45aca27115ea747e6164da1 upstream.

If we configure musb with 2430 glue as a peripheral, and then rmmod
omap2430 module, we'll get the following error:

[ INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected ]
...
rmmod/413 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
 (&phy->mutex){+.+.+.}, at: [<c04b9fd0>] phy_power_off+0x1c/0xb8
[  204.678710]
               and this task is already holding:
 (&(&musb->lock)->rlock){-.-...}, at: [<bf3a482c>]
 musb_gadget_stop+0x24/0xec [musb_hdrc]
which would create a new lock dependency:
 (&(&musb->lock)->rlock){-.-...} -> (&phy->mutex){+.+.+.}
...

This is because some glue layers expect musb_platform_enable/disable
to be called with spinlock held, and 2430 glue layer has USB PHY on
the I2C bus using a mutex.

We could fix the glue layers to take the spinlock, but we still have
a problem of musb_plaform_enable/disable being called in an unbalanced
manner. So that would still lead into USB PHY enable/disable related
problems for omap2430 glue layer.

While it makes sense to only enable USB PHY when needed from PM point
of view, in this case we just can't do it yet without breaking things.
So let's just revert phy_enable/disable related changes instead and
reconsider this after we have fixed musb_platform_enable/disable to
be balanced.

Fixes: a83e17d0f73b ("usb: musb: Improve PM runtime and phy handling for 2430 glue layer")
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Bin Liu <b-liu@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/musb/omap2430.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -337,6 +337,7 @@ static int omap2430_musb_init(struct mus
 	}
 	musb->isr = omap2430_musb_interrupt;
 	phy_init(musb->phy);
+	phy_power_on(musb->phy);
 
 	l = musb_readl(musb->mregs, OTG_INTERFSEL);
 
@@ -373,8 +374,6 @@ static void omap2430_musb_enable(struct
 	struct musb_hdrc_platform_data *pdata = dev_get_platdata(dev);
 	struct omap_musb_board_data *data = pdata->board_data;
 
-	if (!WARN_ON(!musb->phy))
-		phy_power_on(musb->phy);
 
 	omap2430_set_power(musb, true, glue->cable_connected);
 
@@ -413,9 +412,6 @@ static void omap2430_musb_disable(struct
 	struct device *dev = musb->controller;
 	struct omap2430_glue *glue = dev_get_drvdata(dev->parent);
 
-	if (!WARN_ON(!musb->phy))
-		phy_power_off(musb->phy);
-
 	if (glue->status != MUSB_UNKNOWN)
 		omap_control_usb_set_mode(glue->control_otghs,
 			USB_MODE_DISCONNECT);
@@ -429,6 +425,7 @@ static int omap2430_musb_exit(struct mus
 	struct omap2430_glue *glue = dev_get_drvdata(dev->parent);
 
 	omap2430_low_level_exit(musb);
+	phy_power_off(musb->phy);
 	phy_exit(musb->phy);
 	musb->phy = NULL;
 	cancel_work_sync(&glue->omap_musb_mailbox_work);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 131/138] [media] v4l: vsp1: Prevent pipelines from running when not streaming
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (110 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 130/138] usb: musb: Fix hardirq-safe hardirq-unsafe lock order error Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 133/138] ARM: fix oops when using older ARMv4T CPUs Greg Kroah-Hartman
                     ` (9 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Kieran Bingham, Laurent Pinchart,
	Mauro Carvalho Chehab

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

commit e4e70a147a48618a36ae1b81c641516cb9d45993 upstream.

Pipelines can only be run if all their video nodes are streaming. Commit
b4dfb9b35a19 ("[media] v4l: vsp1: Stop the pipeline upon the first
STREAMOFF") fixed the pipeline stop sequence, but introduced a race
condition that makes it possible to run a pipeline after stopping the
stream on a video node by queuing a buffer on the other side of the
pipeline.

Fix this by clearing the buffers ready flag when stopping the stream,
which will prevent the QBUF handler from running the pipeline.

Fixes: b4dfb9b35a19 ("[media] v4l: vsp1: Stop the pipeline upon the first STREAMOFF")

Reported-by: Kieran Bingham <kieran@bingham.xyz>
Tested-by: Kieran Bingham <kieran@bingham.xyz>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/platform/vsp1/vsp1_video.c |    7 +++++++
 1 file changed, 7 insertions(+)

--- a/drivers/media/platform/vsp1/vsp1_video.c
+++ b/drivers/media/platform/vsp1/vsp1_video.c
@@ -675,6 +675,13 @@ static void vsp1_video_stop_streaming(st
 	unsigned long flags;
 	int ret;
 
+	/* Clear the buffers ready flag to make sure the device won't be started
+	 * by a QBUF on the video node on the other side of the pipeline.
+	 */
+	spin_lock_irqsave(&video->irqlock, flags);
+	pipe->buffers_ready &= ~(1 << video->pipe_index);
+	spin_unlock_irqrestore(&video->irqlock, flags);
+
 	mutex_lock(&pipe->lock);
 	if (--pipe->stream_count == pipe->num_inputs) {
 		/* Stop the pipeline. */

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 133/138] ARM: fix oops when using older ARMv4T CPUs
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (111 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 131/138] [media] v4l: vsp1: Prevent pipelines from running when not streaming Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 134/138] kvm: x86: Check memopp before dereference (CVE-2016-8630) Greg Kroah-Hartman
                     ` (8 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Alexander Shiyan, Russell King

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Russell King <rmk+kernel@armlinux.org.uk>

commit 04946fb60fb157faafa01658dff3131d49f49ccb upstream.

Alexander Shiyan reports that CLPS711x fails at boot time in the data
exception handler due to a NULL pointer dereference.  This is caused by
the late-v4t abort handler overwriting R9 (which becomes zero).  Fix
this by making the abort handler save and restore R9.

Unable to handle kernel NULL pointer dereference at virtual address 00000008
pgd = c3b58000
[00000008] *pgd=800000000, *pte=00000000, *ppte=feff4140
Internal error: Oops: 63c11817 [#1] PREEMPT ARM
CPU: 0 PID: 448 Comm: ash Not tainted 4.8.1+ #1
Hardware name: Cirrus Logic CLPS711X (Device Tree Support)
task: c39e03a0 ti: c3b4e000 task.ti: c3b4e000
PC is at __dabt_svc+0x4c/0x60
LR is at do_page_fault+0x144/0x2ac
pc : [<c000d3ac>]    lr : [<c000fcec>]    psr: 60000093
sp : c3b4fe6c  ip : 00000001  fp : b6f1bf88
r10: c387a5a0  r9 : 00000000  r8 : e4e0e001
r7 : bee3ef83  r6 : 00100000  r5 : 80000013  r4 : c022fcf8
r3 : 00000000  r2 : 00000008  r1 : bf000000  r0 : 00000000
Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 0000217f  Table: c3b58055  DAC: 00000055
Process ash (pid: 448, stack limit = 0xc3b4e190)
Stack: (0xc3b4fe6c to 0xc3b50000)
fe60:                            bee3ef83 c05168d1 ffffffff 00000000 c3adfe80
fe80: c3a03300 00000000 c3b4fed0 c3a03400 bee3ef83 c387a5a0 b6f1bf88 00000001
fea0: c3b4febc 00000076 c022fcf8 80000013 ffffffff 0000003f bf000000 bee3ef83
fec0: 00000004 00000000 c3adfe80 c00e432c 00000812 00000005 00000001 00000006
fee0: b6f1b000 00000000 00010000 0003c944 0004d000 0004d439 00010000 b6f1b000
ff00: 00000005 00000000 00015ecc c3b4fed0 0000000a 00000000 00000000 c00a1dc0
ff20: befff000 c3a03300 c3b4e000 c0507cd8 c0508024 fffffff8 c3a03300 00000000
ff40: c0516a58 c00a35bc c39e03a0 000001c0 bea84ce8 0004e008 c3b3a000 c00a3ac0
ff60: c3b40374 c3b3a000 bea84d11 00000000 c0500188 bea84d11 bea84ce8 00000001
ff80: 0000000b c000a304 c3b4e000 00000000 bea84ce4 c00a3cd0 00000000 bea84d11
ffa0: bea84ce8 c000a160 bea84d11 bea84ce8 bea84d11 bea84ce8 0004e008 0004d450
ffc0: bea84d11 bea84ce8 00000001 0000000b b6f45ee4 00000000 b6f5ff70 bea84ce4
ffe0: b6f2f130 bea84cb0 b6f2f194 b6ef29f4 a0000010 bea84d11 02c7cffa 02c7cffd
[<c000d3ac>] (__dabt_svc) from [<c022fcf8>] (__copy_to_user_std+0xf8/0x330)
[<c022fcf8>] (__copy_to_user_std) from [<c00e432c>]
+(load_elf_binary+0x920/0x107c)
[<c00e432c>] (load_elf_binary) from [<c00a35bc>]
+(search_binary_handler+0x80/0x16c)
[<c00a35bc>] (search_binary_handler) from [<c00a3ac0>]
+(do_execveat_common+0x418/0x600)
[<c00a3ac0>] (do_execveat_common) from [<c00a3cd0>] (do_execve+0x28/0x30)
[<c00a3cd0>] (do_execve) from [<c000a160>] (ret_fast_syscall+0x0/0x30)
Code: e1a0200d eb00136b e321f093 e59d104c (e5891008)
---[ end trace 4b4f8086ebef98c5 ]---

Fixes: e6978e4bf181 ("ARM: save and reset the address limit when entering an exception")
Reported-by: Alexander Shiyan <shc_work@mail.ru>
Tested-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/arm/mm/abort-lv4t.S |   34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

--- a/arch/arm/mm/abort-lv4t.S
+++ b/arch/arm/mm/abort-lv4t.S
@@ -7,7 +7,7 @@
  *	   : r4 = aborted context pc
  *	   : r5 = aborted context psr
  *
- * Returns : r4-r5, r10-r11, r13 preserved
+ * Returns : r4-r5, r9-r11, r13 preserved
  *
  * Purpose : obtain information about current aborted instruction.
  * Note: we read user space.  This means we might cause a data
@@ -48,7 +48,10 @@ ENTRY(v4t_late_abort)
 /* c */	b	do_DataAbort			@ ldc	rd, [rn], #m	@ Same as ldr	rd, [rn], #m
 /* d */	b	do_DataAbort			@ ldc	rd, [rn, #m]
 /* e */	b	.data_unknown
-/* f */
+/* f */	b	.data_unknown
+
+.data_unknown_r9:
+	ldr	r9, [sp], #4
 .data_unknown:	@ Part of jumptable
 	mov	r0, r4
 	mov	r1, r8
@@ -57,6 +60,7 @@ ENTRY(v4t_late_abort)
 .data_arm_ldmstm:
 	tst	r8, #1 << 21			@ check writeback bit
 	beq	do_DataAbort			@ no writeback -> no fixup
+	str	r9, [sp, #-4]!
 	mov	r7, #0x11
 	orr	r7, r7, #0x1100
 	and	r6, r8, r7
@@ -75,12 +79,14 @@ ENTRY(v4t_late_abort)
 	subne	r7, r7, r6, lsl #2		@ Undo increment
 	addeq	r7, r7, r6, lsl #2		@ Undo decrement
 	str	r7, [r2, r9, lsr #14]		@ Put register 'Rn'
+	ldr	r9, [sp], #4
 	b	do_DataAbort
 
 .data_arm_lateldrhpre:
 	tst	r8, #1 << 21			@ Check writeback bit
 	beq	do_DataAbort			@ No writeback -> no fixup
 .data_arm_lateldrhpost:
+	str	r9, [sp, #-4]!
 	and	r9, r8, #0x00f			@ get Rm / low nibble of immediate value
 	tst	r8, #1 << 22			@ if (immediate offset)
 	andne	r6, r8, #0xf00			@ { immediate high nibble
@@ -93,6 +99,7 @@ ENTRY(v4t_late_abort)
 	subne	r7, r7, r6			@ Undo incrmenet
 	addeq	r7, r7, r6			@ Undo decrement
 	str	r7, [r2, r9, lsr #14]		@ Put register 'Rn'
+	ldr	r9, [sp], #4
 	b	do_DataAbort
 
 .data_arm_lateldrpreconst:
@@ -101,12 +108,14 @@ ENTRY(v4t_late_abort)
 .data_arm_lateldrpostconst:
 	movs	r6, r8, lsl #20			@ Get offset
 	beq	do_DataAbort			@ zero -> no fixup
+	str	r9, [sp, #-4]!
 	and	r9, r8, #15 << 16		@ Extract 'n' from instruction
 	ldr	r7, [r2, r9, lsr #14]		@ Get register 'Rn'
 	tst	r8, #1 << 23			@ Check U bit
 	subne	r7, r7, r6, lsr #20		@ Undo increment
 	addeq	r7, r7, r6, lsr #20		@ Undo decrement
 	str	r7, [r2, r9, lsr #14]		@ Put register 'Rn'
+	ldr	r9, [sp], #4
 	b	do_DataAbort
 
 .data_arm_lateldrprereg:
@@ -115,6 +124,7 @@ ENTRY(v4t_late_abort)
 .data_arm_lateldrpostreg:
 	and	r7, r8, #15			@ Extract 'm' from instruction
 	ldr	r6, [r2, r7, lsl #2]		@ Get register 'Rm'
+	str	r9, [sp, #-4]!
 	mov	r9, r8, lsr #7			@ get shift count
 	ands	r9, r9, #31
 	and	r7, r8, #0x70			@ get shift type
@@ -126,33 +136,33 @@ ENTRY(v4t_late_abort)
 	b	.data_arm_apply_r6_and_rn
 	b	.data_arm_apply_r6_and_rn	@ 1: LSL #0
 	nop
-	b	.data_unknown			@ 2: MUL?
+	b	.data_unknown_r9		@ 2: MUL?
 	nop
-	b	.data_unknown			@ 3: MUL?
+	b	.data_unknown_r9		@ 3: MUL?
 	nop
 	mov	r6, r6, lsr r9			@ 4: LSR #!0
 	b	.data_arm_apply_r6_and_rn
 	mov	r6, r6, lsr #32			@ 5: LSR #32
 	b	.data_arm_apply_r6_and_rn
-	b	.data_unknown			@ 6: MUL?
+	b	.data_unknown_r9		@ 6: MUL?
 	nop
-	b	.data_unknown			@ 7: MUL?
+	b	.data_unknown_r9		@ 7: MUL?
 	nop
 	mov	r6, r6, asr r9			@ 8: ASR #!0
 	b	.data_arm_apply_r6_and_rn
 	mov	r6, r6, asr #32			@ 9: ASR #32
 	b	.data_arm_apply_r6_and_rn
-	b	.data_unknown			@ A: MUL?
+	b	.data_unknown_r9		@ A: MUL?
 	nop
-	b	.data_unknown			@ B: MUL?
+	b	.data_unknown_r9		@ B: MUL?
 	nop
 	mov	r6, r6, ror r9			@ C: ROR #!0
 	b	.data_arm_apply_r6_and_rn
 	mov	r6, r6, rrx			@ D: RRX
 	b	.data_arm_apply_r6_and_rn
-	b	.data_unknown			@ E: MUL?
+	b	.data_unknown_r9		@ E: MUL?
 	nop
-	b	.data_unknown			@ F: MUL?
+	b	.data_unknown_r9		@ F: MUL?
 
 .data_thumb_abort:
 	ldrh	r8, [r4]			@ read instruction
@@ -190,6 +200,7 @@ ENTRY(v4t_late_abort)
 .data_thumb_pushpop:
 	tst	r8, #1 << 10
 	beq	.data_unknown
+	str	r9, [sp, #-4]!
 	and	r6, r8, #0x55			@ hweight8(r8) + R bit
 	and	r9, r8, #0xaa
 	add	r6, r6, r9, lsr #1
@@ -204,9 +215,11 @@ ENTRY(v4t_late_abort)
 	addeq	r7, r7, r6, lsl #2		@ increment SP if PUSH
 	subne	r7, r7, r6, lsl #2		@ decrement SP if POP
 	str	r7, [r2, #13 << 2]
+	ldr	r9, [sp], #4
 	b	do_DataAbort
 
 .data_thumb_ldmstm:
+	str	r9, [sp, #-4]!
 	and	r6, r8, #0x55			@ hweight8(r8)
 	and	r9, r8, #0xaa
 	add	r6, r6, r9, lsr #1
@@ -219,4 +232,5 @@ ENTRY(v4t_late_abort)
 	and	r6, r6, #15			@ number of regs to transfer
 	sub	r7, r7, r6, lsl #2		@ always decrement
 	str	r7, [r2, r9, lsr #6]
+	ldr	r9, [sp], #4
 	b	do_DataAbort

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 134/138] kvm: x86: Check memopp before dereference (CVE-2016-8630)
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (112 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 133/138] ARM: fix oops when using older ARMv4T CPUs Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 135/138] btrfs: qgroup: Prevent qgroup->reserved from going subzero Greg Kroah-Hartman
                     ` (7 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Owen Hofmann, Paolo Bonzini

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Owen Hofmann <osh@google.com>

commit d9092f52d7e61dd1557f2db2400ddb430e85937e upstream.

Commit 41061cdb98 ("KVM: emulate: do not initialize memopp") removes a
check for non-NULL under incorrect assumptions. An undefined instruction
with a ModR/M byte with Mod=0 and R/M-5 (e.g. 0xc7 0x15) will attempt
to dereference a null pointer here.

Fixes: 41061cdb98a0bec464278b4db8e894a3121671f5
Message-Id: <1477592752-126650-2-git-send-email-osh@google.com>
Signed-off-by: Owen Hofmann <osh@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kvm/emulate.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -5045,7 +5045,7 @@ done_prefixes:
 	/* Decode and fetch the destination operand: register or memory. */
 	rc = decode_operand(ctxt, &ctxt->dst, (ctxt->d >> DstShift) & OpMask);
 
-	if (ctxt->rip_relative)
+	if (ctxt->rip_relative && likely(ctxt->memopp))
 		ctxt->memopp->addr.mem.ea = address_mask(ctxt,
 					ctxt->memopp->addr.mem.ea + ctxt->_eip);
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 135/138] btrfs: qgroup: Prevent qgroup->reserved from going subzero
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (113 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 134/138] kvm: x86: Check memopp before dereference (CVE-2016-8630) Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:46   ` [PATCH 4.8 136/138] ubi: fastmap: Fix add_vol() return value test in ubi_attach_fastmap() Greg Kroah-Hartman
                     ` (6 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Goldwyn Rodrigues, Qu Wenruo, David Sterba

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Goldwyn Rodrigues <rgoldwyn@suse.com>

commit 0b34c261e235a5c74dcf78bd305845bd15fe2b42 upstream.

While free'ing qgroup->reserved resources, we much check if
the page has not been invalidated by a truncate operation
by checking if the page is still dirty before reducing the
qgroup resources. Resources in such a case are free'd when
the entire extent is released by delayed_ref.

This fixes a double accounting while releasing resources
in case of truncating a file, reproduced by the following testcase.

SCRATCH_DEV=/dev/vdb
SCRATCH_MNT=/mnt
mkfs.btrfs -f $SCRATCH_DEV
mount -t btrfs $SCRATCH_DEV $SCRATCH_MNT
cd $SCRATCH_MNT
btrfs quota enable $SCRATCH_MNT
btrfs subvolume create a
btrfs qgroup limit 500m a $SCRATCH_MNT
sync
for c in {1..15}; do
dd if=/dev/zero  bs=1M count=40 of=$SCRATCH_MNT/a/file;
done

sleep 10
sync
sleep 5

touch $SCRATCH_MNT/a/newfile

echo "Removing file"
rm $SCRATCH_MNT/a/file

Fixes: b9d0b38928 ("btrfs: Add handler for invalidate page")
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/btrfs/inode.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -8915,9 +8915,14 @@ again:
 	 *    So even we call qgroup_free_data(), it won't decrease reserved
 	 *    space.
 	 * 2) Not written to disk
-	 *    This means the reserved space should be freed here.
+	 *    This means the reserved space should be freed here. However,
+	 *    if a truncate invalidates the page (by clearing PageDirty)
+	 *    and the page is accounted for while allocating extent
+	 *    in btrfs_check_data_free_space() we let delayed_ref to
+	 *    free the entire extent.
 	 */
-	btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE);
+	if (PageDirty(page))
+		btrfs_qgroup_free_data(inode, page_start, PAGE_SIZE);
 	if (!inode_evicting) {
 		clear_extent_bit(tree, page_start, page_end,
 				 EXTENT_LOCKED | EXTENT_DIRTY |

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 136/138] ubi: fastmap: Fix add_vol() return value test in ubi_attach_fastmap()
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (114 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 135/138] btrfs: qgroup: Prevent qgroup->reserved from going subzero Greg Kroah-Hartman
@ 2016-11-09 10:46   ` Greg Kroah-Hartman
  2016-11-09 10:47   ` [PATCH 4.8 137/138] cpufreq: intel_pstate: Set P-state upfront in performance mode Greg Kroah-Hartman
                     ` (5 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:46 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dan Carpenter, Boris Brezillon,
	Sheng Yong, Richard Weinberger

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Boris Brezillon <boris.brezillon@free-electrons.com>

commit 40b6e61ac72e99672e47cdb99c8d7d226004169b upstream.

Commit e96a8a3bb671 ("UBI: Fastmap: Do not add vol if it already
exists") introduced a bug by changing the possible error codes returned
by add_vol():
- this function no longer returns NULL in case of allocation failure
  but return ERR_PTR(-ENOMEM)
- when a duplicate entry in the volume RB tree is found it returns
  ERR_PTR(-EEXIST) instead of ERR_PTR(-EINVAL)

Fix the tests done on add_vol() return val to match this new behavior.

Fixes: e96a8a3bb671 ("UBI: Fastmap: Do not add vol if it already exists")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Sheng Yong <shengyong1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mtd/ubi/fastmap.c |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

--- a/drivers/mtd/ubi/fastmap.c
+++ b/drivers/mtd/ubi/fastmap.c
@@ -751,11 +751,11 @@ static int ubi_attach_fastmap(struct ubi
 			     fmvhdr->vol_type,
 			     be32_to_cpu(fmvhdr->last_eb_bytes));
 
-		if (!av)
-			goto fail_bad;
-		if (PTR_ERR(av) == -EINVAL) {
-			ubi_err(ubi, "volume (ID %i) already exists",
-				fmvhdr->vol_id);
+		if (IS_ERR(av)) {
+			if (PTR_ERR(av) == -EEXIST)
+				ubi_err(ubi, "volume (ID %i) already exists",
+					fmvhdr->vol_id);
+
 			goto fail_bad;
 		}
 

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 137/138] cpufreq: intel_pstate: Set P-state upfront in performance mode
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (115 preceding siblings ...)
  2016-11-09 10:46   ` [PATCH 4.8 136/138] ubi: fastmap: Fix add_vol() return value test in ubi_attach_fastmap() Greg Kroah-Hartman
@ 2016-11-09 10:47   ` Greg Kroah-Hartman
  2016-11-09 10:47   ` [PATCH 4.8 138/138] HID: usbhid: add ATEN CS962 to list of quirky devices Greg Kroah-Hartman
                     ` (4 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:47 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Rafael J. Wysocki, Srinivas Pandruvada

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

commit a6c6ead14183ea4ec8ce7551e1f3451024b9c4db upstream.

After commit a4675fbc4a7a (cpufreq: intel_pstate: Replace timers with
utilization update callbacks) the cpufreq governor callbacks may not
be invoked on NOHZ_FULL CPUs and, in particular, switching to the
"performance" policy via sysfs may not have any effect on them.  That
is a problem, because it usually is desirable to squeeze the last
bit of performance out of those CPUs, so work around it by setting
the maximum P-state (within the limits) in intel_pstate_set_policy()
upfront when the policy is CPUFREQ_POLICY_PERFORMANCE.

Fixes: a4675fbc4a7a (cpufreq: intel_pstate: Replace timers with utilization update callbacks)
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/cpufreq/intel_pstate.c |   29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -1133,10 +1133,8 @@ static void intel_pstate_get_min_max(str
 	*min = clamp_t(int, min_perf, cpu->pstate.min_pstate, max_perf);
 }
 
-static void intel_pstate_set_min_pstate(struct cpudata *cpu)
+static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
 {
-	int pstate = cpu->pstate.min_pstate;
-
 	trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
 	cpu->pstate.current_pstate = pstate;
 	/*
@@ -1148,6 +1146,20 @@ static void intel_pstate_set_min_pstate(
 		      pstate_funcs.get_val(cpu, pstate));
 }
 
+static void intel_pstate_set_min_pstate(struct cpudata *cpu)
+{
+	intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate);
+}
+
+static void intel_pstate_max_within_limits(struct cpudata *cpu)
+{
+	int min_pstate, max_pstate;
+
+	update_turbo_state();
+	intel_pstate_get_min_max(cpu, &min_pstate, &max_pstate);
+	intel_pstate_set_pstate(cpu, max_pstate);
+}
+
 static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
 {
 	cpu->pstate.min_pstate = pstate_funcs.get_min();
@@ -1465,7 +1477,7 @@ static int intel_pstate_set_policy(struc
 	pr_debug("set_policy cpuinfo.max %u policy->max %u\n",
 		 policy->cpuinfo.max_freq, policy->max);
 
-	cpu = all_cpu_data[0];
+	cpu = all_cpu_data[policy->cpu];
 	if (cpu->pstate.max_pstate_physical > cpu->pstate.max_pstate &&
 	    policy->max < policy->cpuinfo.max_freq &&
 	    policy->max > cpu->pstate.max_pstate * cpu->pstate.scaling) {
@@ -1509,6 +1521,15 @@ static int intel_pstate_set_policy(struc
 	limits->max_perf = round_up(limits->max_perf, FRAC_BITS);
 
  out:
+	if (policy->policy == CPUFREQ_POLICY_PERFORMANCE) {
+		/*
+		 * NOHZ_FULL CPUs need this as the governor callback may not
+		 * be invoked on them.
+		 */
+		intel_pstate_clear_update_util_hook(policy->cpu);
+		intel_pstate_max_within_limits(cpu);
+	}
+
 	intel_pstate_set_update_util_hook(policy->cpu);
 
 	intel_pstate_hwp_set_policy(policy);

^ permalink raw reply	[flat|nested] 129+ messages in thread

* [PATCH 4.8 138/138] HID: usbhid: add ATEN CS962 to list of quirky devices
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (116 preceding siblings ...)
  2016-11-09 10:47   ` [PATCH 4.8 137/138] cpufreq: intel_pstate: Set P-state upfront in performance mode Greg Kroah-Hartman
@ 2016-11-09 10:47   ` Greg Kroah-Hartman
  2016-11-09 18:22   ` [PATCH 4.8 000/138] 4.8.7-stable review Shuah Khan
                     ` (3 subsequent siblings)
  121 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-09 10:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Oliver Neukum, Jiri Kosina

4.8-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Oliver Neukum <oneukum@suse.com>

commit cf0ea4da4c7df11f7a508b2f37518e0f117f3791 upstream.

Like many similar devices it needs a quirk to work.
Issuing the request gets the device into an irrecoverable state.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/hid/hid-ids.h           |    1 +
 drivers/hid/usbhid/hid-quirks.c |    1 +
 2 files changed, 2 insertions(+)

--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -179,6 +179,7 @@
 #define USB_DEVICE_ID_ATEN_4PORTKVM	0x2205
 #define USB_DEVICE_ID_ATEN_4PORTKVMC	0x2208
 #define USB_DEVICE_ID_ATEN_CS682	0x2213
+#define USB_DEVICE_ID_ATEN_CS692	0x8021
 
 #define USB_VENDOR_ID_ATMEL		0x03eb
 #define USB_DEVICE_ID_ATMEL_MULTITOUCH	0x211c
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -63,6 +63,7 @@ static const struct hid_blacklist {
 	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET },
+	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS692, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET },

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 022/138] thermal/powerclamp: correct cpu support check
  2016-11-09 10:45   ` [PATCH 4.8 022/138] thermal/powerclamp: correct cpu support check Greg Kroah-Hartman
@ 2016-11-09 15:05     ` Jacob Pan
  0 siblings, 0 replies; 129+ messages in thread
From: Jacob Pan @ 2016-11-09 15:05 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, stable, Eric Ernst, Zhang Rui, jacob.jun.pan

On Wed,  9 Nov 2016 11:45:05 +0100
Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote:

> 4.8-stable review patch.  If anyone has any objections, please let me
> know.
> 
I just realized that this patch would prevent module auto loading since
we don't have device id table.

I will send out this patch in a minute. So we need to apply both this
patch and the one below.

drivers/thermal/intel_powerclamp.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/intel_powerclamp.c
b/drivers/thermal/intel_powerclamp.c
index f0bad48..c82b41f 100644
--- a/drivers/thermal/intel_powerclamp.c
+++ b/drivers/thermal/intel_powerclamp.c
@@ -694,9 +694,16 @@ static int powerclamp_set_cur_state(struct
thermal_cooling_device *cdev,
        .set_cur_state = powerclamp_set_cur_state,
 };

+static const struct x86_cpu_id __initconst intel_powerclamp_ids[] = {
+       { X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
X86_FEATURE_MWAIT },
+       {}
+};
+MODULE_DEVICE_TABLE(x86cpu, intel_powerclamp_ids);
+
 static int __init powerclamp_probe(void)
 {
-       if (!boot_cpu_has(X86_FEATURE_MWAIT)) {
+
+       if (!x86_match_cpu(intel_powerclamp_ids)) {
                pr_err("CPU does not support MWAIT");
                return -ENODEV;
        }



> ------------------
> 
> From: Eric Ernst <eric.ernst@linux.intel.com>
> 
> commit 3105f234e0aba43e44e277c20f9b32ee8add43d4 upstream.
> 
> Initial logic for checking CPU match resulted in OR of CPU features
> rather than the intended AND.
> 
> Updated to use boot_cpu_has macro rather than x86_match_cpu.
> 
> In addition, MWAIT is the only required CPU feature for idle
> injection to work.  Drop other feature requirements since they are
> only needed for optimal efficiency.
> 
> Signed-off-by: Eric Ernst <eric.ernst@linux.intel.com>
> Acked-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> ---
>  drivers/thermal/intel_powerclamp.c |   14 ++------------
>  1 file changed, 2 insertions(+), 12 deletions(-)
> 
> --- a/drivers/thermal/intel_powerclamp.c
> +++ b/drivers/thermal/intel_powerclamp.c
> @@ -669,20 +669,10 @@ static struct thermal_cooling_device_ops
>  	.set_cur_state = powerclamp_set_cur_state,
>  };
>  
> -static const struct x86_cpu_id intel_powerclamp_ids[] __initconst = {
> -	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_MWAIT },
> -	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_ARAT },
> -	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_NONSTOP_TSC },
> -	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_CONSTANT_TSC},
> -	{}
> -};
> -MODULE_DEVICE_TABLE(x86cpu, intel_powerclamp_ids);
> -
>  static int __init powerclamp_probe(void)
>  {
> -	if (!x86_match_cpu(intel_powerclamp_ids)) {
> -		pr_err("Intel powerclamp does not run on family %d
> model %d\n",
> -				boot_cpu_data.x86,
> boot_cpu_data.x86_model);
> +	if (!boot_cpu_has(X86_FEATURE_MWAIT)) {
> +		pr_err("CPU does not support MWAIT");
>  		return -ENODEV;
>  	}
>  
> 
> 

[Jacob Pan]

^ permalink raw reply related	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 000/138] 4.8.7-stable review
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (117 preceding siblings ...)
  2016-11-09 10:47   ` [PATCH 4.8 138/138] HID: usbhid: add ATEN CS962 to list of quirky devices Greg Kroah-Hartman
@ 2016-11-09 18:22   ` Shuah Khan
  2016-11-10  7:02     ` Greg Kroah-Hartman
  2016-11-09 19:36   ` Guenter Roeck
                     ` (2 subsequent siblings)
  121 siblings, 1 reply; 129+ messages in thread
From: Shuah Khan @ 2016-11-09 18:22 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: torvalds, akpm, linux, patches, ben.hutchings, stable, Shuah Khan

On 11/09/2016 03:44 AM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.8.7 release.
> There are 138 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Fri Nov 11 10:28:05 UTC 2016.
> Anything received after that time might be too late.
> 
> The whole patch series can be found in one patch at:
> 	kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.8.7-rc1.gz
> or in the git tree and branch at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.8.y
> and the diffstat can be found below.
> 
> thanks,
> 
> greg k-h
> 

Compiled and booted on my test system. No dmesg regressions.

thanks,
-- Shuah

-- 
Shuah Khan
Sr. Linux Kernel Developer
Open Source Innovation Group
Samsung Research America(Silicon Valley)
shuah.kh@samsung.com

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 000/138] 4.8.7-stable review
  2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
                     ` (118 preceding siblings ...)
  2016-11-09 18:22   ` [PATCH 4.8 000/138] 4.8.7-stable review Shuah Khan
@ 2016-11-09 19:36   ` Guenter Roeck
  2016-11-10  7:02     ` Greg Kroah-Hartman
       [not found]   ` <582465d1.12111c0a.f0f31.e519@mx.google.com>
       [not found]   ` <20161109102850.355591014@linuxfoundation.org>
  121 siblings, 1 reply; 129+ messages in thread
From: Guenter Roeck @ 2016-11-09 19:36 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, torvalds, akpm, shuah.kh, patches, ben.hutchings, stable

On Wed, Nov 09, 2016 at 11:44:43AM +0100, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.8.7 release.
> There are 138 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Fri Nov 11 10:28:05 UTC 2016.
> Anything received after that time might be too late.
> 

Build results:
	total: 149 pass: 149 fail: 0
Qemu test results:
        total: 114 pass: 114 fail: 0

[ and welcome nios2 to the list of qemu boot tests ... ]

Details are available at http://kerneltests.org/builders.

Guenter

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 000/138] 4.8.7-stable review
  2016-11-09 18:22   ` [PATCH 4.8 000/138] 4.8.7-stable review Shuah Khan
@ 2016-11-10  7:02     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-10  7:02 UTC (permalink / raw)
  To: Shuah Khan
  Cc: linux-kernel, torvalds, akpm, linux, patches, ben.hutchings, stable

On Wed, Nov 09, 2016 at 11:22:26AM -0700, Shuah Khan wrote:
> On 11/09/2016 03:44 AM, Greg Kroah-Hartman wrote:
> > This is the start of the stable review cycle for the 4.8.7 release.
> > There are 138 patches in this series, all will be posted as a response
> > to this one.  If anyone has any issues with these being applied, please
> > let me know.
> > 
> > Responses should be made by Fri Nov 11 10:28:05 UTC 2016.
> > Anything received after that time might be too late.
> > 
> > The whole patch series can be found in one patch at:
> > 	kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.8.7-rc1.gz
> > or in the git tree and branch at:
> >   git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.8.y
> > and the diffstat can be found below.
> > 
> > thanks,
> > 
> > greg k-h
> > 
> 
> Compiled and booted on my test system. No dmesg regressions.

Thanks for testing these and letting me know.

greg k-h

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 000/138] 4.8.7-stable review
  2016-11-09 19:36   ` Guenter Roeck
@ 2016-11-10  7:02     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-10  7:02 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: linux-kernel, torvalds, akpm, shuah.kh, patches, ben.hutchings, stable

On Wed, Nov 09, 2016 at 11:36:35AM -0800, Guenter Roeck wrote:
> On Wed, Nov 09, 2016 at 11:44:43AM +0100, Greg Kroah-Hartman wrote:
> > This is the start of the stable review cycle for the 4.8.7 release.
> > There are 138 patches in this series, all will be posted as a response
> > to this one.  If anyone has any issues with these being applied, please
> > let me know.
> > 
> > Responses should be made by Fri Nov 11 10:28:05 UTC 2016.
> > Anything received after that time might be too late.
> > 
> 
> Build results:
> 	total: 149 pass: 149 fail: 0
> Qemu test results:
>         total: 114 pass: 114 fail: 0
> 
> [ and welcome nios2 to the list of qemu boot tests ... ]
> 
> Details are available at http://kerneltests.org/builders.

Great!  Glad to see more tests added, thanks for running these and
letting me know.

greg k-h

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 000/138] 4.8.7-stable review
       [not found]   ` <582465d1.12111c0a.f0f31.e519@mx.google.com>
@ 2016-11-10 15:35     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-10 15:35 UTC (permalink / raw)
  To: kernelci.org bot
  Cc: linux-kernel, torvalds, akpm, linux, shuah.kh, patches,
	ben.hutchings, stable

On Thu, Nov 10, 2016 at 04:19:29AM -0800, kernelci.org bot wrote:
> stable-rc boot: 168 boots: 0 failed, 163 passed with 5 offline (v4.8.6-139-gde71548ee45d)

Yeah!

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 118/138] drm/i915: Clean up DDI DDC/AUX CH sanitation
       [not found]   ` <20161109102850.355591014@linuxfoundation.org>
@ 2016-11-10 20:16     ` Maarten Maathuis
  2016-11-10 23:02       ` Greg Kroah-Hartman
  2016-11-11 12:38       ` Ville Syrjälä
  0 siblings, 2 replies; 129+ messages in thread
From: Maarten Maathuis @ 2016-11-10 20:16 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Linux Kernel Mailing List, stable, Ville Syrjälä, Jani Nikula

Hi,

I'm merely curious why this patch isn't also included:
https://cgit.freedesktop.org/drm-intel/commit/?id=e4ab73a13291fc844c9e24d5c347bd95818544d2

When i checked it, it's also not in 4.9-rc git tree.
This patch affects HDMI, and the HDMI connector was "my problem".

@Ville: Is it intentional this one was left out?

Maarten.

On Wed, Nov 9, 2016 at 11:46 AM, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
> 4.8-stable review patch.  If anyone has any objections, please let me know.
>
> ------------------
>
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> commit 0ce140d45a8398b501934ac289aef0eb7f47c596 upstream.
>
> Now that we use the AUX and GMBUS assignment from VBT for all ports,
> let's clean up the sanitization of the port information a bit.
> Previosuly we only did this for port E, and only complained about a
> non-standard assignment for the other ports. But as we know that
> non-standard assignments are a fact of life, let's expand the
> sanitization to all the ports.
>
> v2: Include a commit message, fix up the comments a bit
> v3: Don't clobber other ports if the current port has no alternate aux ch/ddc pin
>
> Cc: Maarten Maathuis <madman2003@gmail.com>
> Tested-by: Maarten Maathuis <madman2003@gmail.com>
> References: https://bugs.freedesktop.org/show_bug.cgi?id=97877
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Link: http://patchwork.freedesktop.org/patch/msgid/1476208368-5710-4-git-send-email-ville.syrjala@linux.intel.com
> Reviewed-by: Jim Bride <jim.bride@linux.intel.com> (v2)
> (cherry picked from commit 9454fa871edf15c20a0371548b3ec0d6d944a498)
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>
> ---
>  drivers/gpu/drm/i915/intel_bios.c |  122 +++++++++++++++++++++++---------------
>  1 file changed, 77 insertions(+), 45 deletions(-)
>
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1031,6 +1031,77 @@ static u8 translate_iboost(u8 val)
>         return mapping[val];
>  }
>
> +static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
> +                            enum port port)
> +{
> +       const struct ddi_vbt_port_info *info =
> +               &dev_priv->vbt.ddi_port_info[port];
> +       enum port p;
> +
> +       if (!info->alternate_ddc_pin)
> +               return;
> +
> +       for_each_port_masked(p, (1 << port) - 1) {
> +               struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
> +
> +               if (info->alternate_ddc_pin != i->alternate_ddc_pin)
> +                       continue;
> +
> +               DRM_DEBUG_KMS("port %c trying to use the same DDC pin (0x%x) as port %c, "
> +                             "disabling port %c DVI/HDMI support\n",
> +                             port_name(p), i->alternate_ddc_pin,
> +                             port_name(port), port_name(p));
> +
> +               /*
> +                * If we have multiple ports supposedly sharing the
> +                * pin, then dvi/hdmi couldn't exist on the shared
> +                * port. Otherwise they share the same ddc bin and
> +                * system couldn't communicate with them separately.
> +                *
> +                * Due to parsing the ports in alphabetical order,
> +                * a higher port will always clobber a lower one.
> +                */
> +               i->supports_dvi = false;
> +               i->supports_hdmi = false;
> +               i->alternate_ddc_pin = 0;
> +       }
> +}
> +
> +static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
> +                           enum port port)
> +{
> +       const struct ddi_vbt_port_info *info =
> +               &dev_priv->vbt.ddi_port_info[port];
> +       enum port p;
> +
> +       if (!info->alternate_aux_channel)
> +               return;
> +
> +       for_each_port_masked(p, (1 << port) - 1) {
> +               struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
> +
> +               if (info->alternate_aux_channel != i->alternate_aux_channel)
> +                       continue;
> +
> +               DRM_DEBUG_KMS("port %c trying to use the same AUX CH (0x%x) as port %c, "
> +                             "disabling port %c DP support\n",
> +                             port_name(p), i->alternate_aux_channel,
> +                             port_name(port), port_name(p));
> +
> +               /*
> +                * If we have multiple ports supposedlt sharing the
> +                * aux channel, then DP couldn't exist on the shared
> +                * port. Otherwise they share the same aux channel
> +                * and system couldn't communicate with them separately.
> +                *
> +                * Due to parsing the ports in alphabetical order,
> +                * a higher port will always clobber a lower one.
> +                */
> +               i->supports_dp = false;
> +               i->alternate_aux_channel = 0;
> +       }
> +}
> +
>  static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
>                            const struct bdb_header *bdb)
>  {
> @@ -1105,54 +1176,15 @@ static void parse_ddi_port(struct drm_i9
>                 DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port));
>
>         if (is_dvi) {
> -               if (port == PORT_E) {
> -                       info->alternate_ddc_pin = ddc_pin;
> -                       /* if DDIE share ddc pin with other port, then
> -                        * dvi/hdmi couldn't exist on the shared port.
> -                        * Otherwise they share the same ddc bin and system
> -                        * couldn't communicate with them seperately. */
> -                       if (ddc_pin == DDC_PIN_B) {
> -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_dvi = 0;
> -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_hdmi = 0;
> -                       } else if (ddc_pin == DDC_PIN_C) {
> -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_dvi = 0;
> -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_hdmi = 0;
> -                       } else if (ddc_pin == DDC_PIN_D) {
> -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_dvi = 0;
> -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_hdmi = 0;
> -                       }
> -               } else if (ddc_pin == DDC_PIN_B && port != PORT_B)
> -                       DRM_DEBUG_KMS("Unexpected DDC pin for port B\n");
> -               else if (ddc_pin == DDC_PIN_C && port != PORT_C)
> -                       DRM_DEBUG_KMS("Unexpected DDC pin for port C\n");
> -               else if (ddc_pin == DDC_PIN_D && port != PORT_D)
> -                       DRM_DEBUG_KMS("Unexpected DDC pin for port D\n");
> +               info->alternate_ddc_pin = ddc_pin;
> +
> +               sanitize_ddc_pin(dev_priv, port);
>         }
>
>         if (is_dp) {
> -               if (port == PORT_E) {
> -                       info->alternate_aux_channel = aux_channel;
> -                       /* if DDIE share aux channel with other port, then
> -                        * DP couldn't exist on the shared port. Otherwise
> -                        * they share the same aux channel and system
> -                        * couldn't communicate with them seperately. */
> -                       if (aux_channel == DP_AUX_A)
> -                               dev_priv->vbt.ddi_port_info[PORT_A].supports_dp = 0;
> -                       else if (aux_channel == DP_AUX_B)
> -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_dp = 0;
> -                       else if (aux_channel == DP_AUX_C)
> -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_dp = 0;
> -                       else if (aux_channel == DP_AUX_D)
> -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_dp = 0;
> -               }
> -               else if (aux_channel == DP_AUX_A && port != PORT_A)
> -                       DRM_DEBUG_KMS("Unexpected AUX channel for port A\n");
> -               else if (aux_channel == DP_AUX_B && port != PORT_B)
> -                       DRM_DEBUG_KMS("Unexpected AUX channel for port B\n");
> -               else if (aux_channel == DP_AUX_C && port != PORT_C)
> -                       DRM_DEBUG_KMS("Unexpected AUX channel for port C\n");
> -               else if (aux_channel == DP_AUX_D && port != PORT_D)
> -                       DRM_DEBUG_KMS("Unexpected AUX channel for port D\n");
> +               info->alternate_aux_channel = aux_channel;
> +
> +               sanitize_aux_ch(dev_priv, port);
>         }
>
>         if (bdb->version >= 158) {
>
>



-- 
Far away from the primal instinct, the song seems to fade away, the
river get wider between your thoughts and the things we do and say.

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 118/138] drm/i915: Clean up DDI DDC/AUX CH sanitation
  2016-11-10 20:16     ` [PATCH 4.8 118/138] drm/i915: Clean up DDI DDC/AUX CH sanitation Maarten Maathuis
@ 2016-11-10 23:02       ` Greg Kroah-Hartman
  2016-11-11 12:38       ` Ville Syrjälä
  1 sibling, 0 replies; 129+ messages in thread
From: Greg Kroah-Hartman @ 2016-11-10 23:02 UTC (permalink / raw)
  To: Maarten Maathuis
  Cc: Linux Kernel Mailing List, stable, Ville Syrjälä, Jani Nikula

On Thu, Nov 10, 2016 at 09:16:49PM +0100, Maarten Maathuis wrote:
> Hi,
> 
> I'm merely curious why this patch isn't also included:
> https://cgit.freedesktop.org/drm-intel/commit/?id=e4ab73a13291fc844c9e24d5c347bd95818544d2
> 
> When i checked it, it's also not in 4.9-rc git tree.

That's why it's not in a stable release yet :)

greg k-h

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 118/138] drm/i915: Clean up DDI DDC/AUX CH sanitation
  2016-11-10 20:16     ` [PATCH 4.8 118/138] drm/i915: Clean up DDI DDC/AUX CH sanitation Maarten Maathuis
  2016-11-10 23:02       ` Greg Kroah-Hartman
@ 2016-11-11 12:38       ` Ville Syrjälä
  2016-11-11 12:59         ` Jani Nikula
  1 sibling, 1 reply; 129+ messages in thread
From: Ville Syrjälä @ 2016-11-11 12:38 UTC (permalink / raw)
  To: Maarten Maathuis
  Cc: Greg Kroah-Hartman, Linux Kernel Mailing List, stable, Jani Nikula

On Thu, Nov 10, 2016 at 09:16:49PM +0100, Maarten Maathuis wrote:
> Hi,
> 
> I'm merely curious why this patch isn't also included:
> https://cgit.freedesktop.org/drm-intel/commit/?id=e4ab73a13291fc844c9e24d5c347bd95818544d2
> 
> When i checked it, it's also not in 4.9-rc git tree.
> This patch affects HDMI, and the HDMI connector was "my problem".
> 
> @Ville: Is it intentional this one was left out?

Hmm. There was cc:stable+fixes:+bugzilla link on that one as well.
Not sure why it got left behind. Jani, any ideas what happened there?

> 
> Maarten.
> 
> On Wed, Nov 9, 2016 at 11:46 AM, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> > 4.8-stable review patch.  If anyone has any objections, please let me know.
> >
> > ------------------
> >
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > commit 0ce140d45a8398b501934ac289aef0eb7f47c596 upstream.
> >
> > Now that we use the AUX and GMBUS assignment from VBT for all ports,
> > let's clean up the sanitization of the port information a bit.
> > Previosuly we only did this for port E, and only complained about a
> > non-standard assignment for the other ports. But as we know that
> > non-standard assignments are a fact of life, let's expand the
> > sanitization to all the ports.
> >
> > v2: Include a commit message, fix up the comments a bit
> > v3: Don't clobber other ports if the current port has no alternate aux ch/ddc pin
> >
> > Cc: Maarten Maathuis <madman2003@gmail.com>
> > Tested-by: Maarten Maathuis <madman2003@gmail.com>
> > References: https://bugs.freedesktop.org/show_bug.cgi?id=97877
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Link: http://patchwork.freedesktop.org/patch/msgid/1476208368-5710-4-git-send-email-ville.syrjala@linux.intel.com
> > Reviewed-by: Jim Bride <jim.bride@linux.intel.com> (v2)
> > (cherry picked from commit 9454fa871edf15c20a0371548b3ec0d6d944a498)
> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >
> > ---
> >  drivers/gpu/drm/i915/intel_bios.c |  122 +++++++++++++++++++++++---------------
> >  1 file changed, 77 insertions(+), 45 deletions(-)
> >
> > --- a/drivers/gpu/drm/i915/intel_bios.c
> > +++ b/drivers/gpu/drm/i915/intel_bios.c
> > @@ -1031,6 +1031,77 @@ static u8 translate_iboost(u8 val)
> >         return mapping[val];
> >  }
> >
> > +static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
> > +                            enum port port)
> > +{
> > +       const struct ddi_vbt_port_info *info =
> > +               &dev_priv->vbt.ddi_port_info[port];
> > +       enum port p;
> > +
> > +       if (!info->alternate_ddc_pin)
> > +               return;
> > +
> > +       for_each_port_masked(p, (1 << port) - 1) {
> > +               struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
> > +
> > +               if (info->alternate_ddc_pin != i->alternate_ddc_pin)
> > +                       continue;
> > +
> > +               DRM_DEBUG_KMS("port %c trying to use the same DDC pin (0x%x) as port %c, "
> > +                             "disabling port %c DVI/HDMI support\n",
> > +                             port_name(p), i->alternate_ddc_pin,
> > +                             port_name(port), port_name(p));
> > +
> > +               /*
> > +                * If we have multiple ports supposedly sharing the
> > +                * pin, then dvi/hdmi couldn't exist on the shared
> > +                * port. Otherwise they share the same ddc bin and
> > +                * system couldn't communicate with them separately.
> > +                *
> > +                * Due to parsing the ports in alphabetical order,
> > +                * a higher port will always clobber a lower one.
> > +                */
> > +               i->supports_dvi = false;
> > +               i->supports_hdmi = false;
> > +               i->alternate_ddc_pin = 0;
> > +       }
> > +}
> > +
> > +static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
> > +                           enum port port)
> > +{
> > +       const struct ddi_vbt_port_info *info =
> > +               &dev_priv->vbt.ddi_port_info[port];
> > +       enum port p;
> > +
> > +       if (!info->alternate_aux_channel)
> > +               return;
> > +
> > +       for_each_port_masked(p, (1 << port) - 1) {
> > +               struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
> > +
> > +               if (info->alternate_aux_channel != i->alternate_aux_channel)
> > +                       continue;
> > +
> > +               DRM_DEBUG_KMS("port %c trying to use the same AUX CH (0x%x) as port %c, "
> > +                             "disabling port %c DP support\n",
> > +                             port_name(p), i->alternate_aux_channel,
> > +                             port_name(port), port_name(p));
> > +
> > +               /*
> > +                * If we have multiple ports supposedlt sharing the
> > +                * aux channel, then DP couldn't exist on the shared
> > +                * port. Otherwise they share the same aux channel
> > +                * and system couldn't communicate with them separately.
> > +                *
> > +                * Due to parsing the ports in alphabetical order,
> > +                * a higher port will always clobber a lower one.
> > +                */
> > +               i->supports_dp = false;
> > +               i->alternate_aux_channel = 0;
> > +       }
> > +}
> > +
> >  static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
> >                            const struct bdb_header *bdb)
> >  {
> > @@ -1105,54 +1176,15 @@ static void parse_ddi_port(struct drm_i9
> >                 DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port));
> >
> >         if (is_dvi) {
> > -               if (port == PORT_E) {
> > -                       info->alternate_ddc_pin = ddc_pin;
> > -                       /* if DDIE share ddc pin with other port, then
> > -                        * dvi/hdmi couldn't exist on the shared port.
> > -                        * Otherwise they share the same ddc bin and system
> > -                        * couldn't communicate with them seperately. */
> > -                       if (ddc_pin == DDC_PIN_B) {
> > -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_dvi = 0;
> > -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_hdmi = 0;
> > -                       } else if (ddc_pin == DDC_PIN_C) {
> > -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_dvi = 0;
> > -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_hdmi = 0;
> > -                       } else if (ddc_pin == DDC_PIN_D) {
> > -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_dvi = 0;
> > -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_hdmi = 0;
> > -                       }
> > -               } else if (ddc_pin == DDC_PIN_B && port != PORT_B)
> > -                       DRM_DEBUG_KMS("Unexpected DDC pin for port B\n");
> > -               else if (ddc_pin == DDC_PIN_C && port != PORT_C)
> > -                       DRM_DEBUG_KMS("Unexpected DDC pin for port C\n");
> > -               else if (ddc_pin == DDC_PIN_D && port != PORT_D)
> > -                       DRM_DEBUG_KMS("Unexpected DDC pin for port D\n");
> > +               info->alternate_ddc_pin = ddc_pin;
> > +
> > +               sanitize_ddc_pin(dev_priv, port);
> >         }
> >
> >         if (is_dp) {
> > -               if (port == PORT_E) {
> > -                       info->alternate_aux_channel = aux_channel;
> > -                       /* if DDIE share aux channel with other port, then
> > -                        * DP couldn't exist on the shared port. Otherwise
> > -                        * they share the same aux channel and system
> > -                        * couldn't communicate with them seperately. */
> > -                       if (aux_channel == DP_AUX_A)
> > -                               dev_priv->vbt.ddi_port_info[PORT_A].supports_dp = 0;
> > -                       else if (aux_channel == DP_AUX_B)
> > -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_dp = 0;
> > -                       else if (aux_channel == DP_AUX_C)
> > -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_dp = 0;
> > -                       else if (aux_channel == DP_AUX_D)
> > -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_dp = 0;
> > -               }
> > -               else if (aux_channel == DP_AUX_A && port != PORT_A)
> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port A\n");
> > -               else if (aux_channel == DP_AUX_B && port != PORT_B)
> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port B\n");
> > -               else if (aux_channel == DP_AUX_C && port != PORT_C)
> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port C\n");
> > -               else if (aux_channel == DP_AUX_D && port != PORT_D)
> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port D\n");
> > +               info->alternate_aux_channel = aux_channel;
> > +
> > +               sanitize_aux_ch(dev_priv, port);
> >         }
> >
> >         if (bdb->version >= 158) {
> >
> >
> 
> 
> 
> -- 
> Far away from the primal instinct, the song seems to fade away, the
> river get wider between your thoughts and the things we do and say.

-- 
Ville Syrjälä
Intel OTC

^ permalink raw reply	[flat|nested] 129+ messages in thread

* Re: [PATCH 4.8 118/138] drm/i915: Clean up DDI DDC/AUX CH sanitation
  2016-11-11 12:38       ` Ville Syrjälä
@ 2016-11-11 12:59         ` Jani Nikula
  0 siblings, 0 replies; 129+ messages in thread
From: Jani Nikula @ 2016-11-11 12:59 UTC (permalink / raw)
  To: Ville Syrjälä, Maarten Maathuis
  Cc: Greg Kroah-Hartman, Linux Kernel Mailing List, stable

On Fri, 11 Nov 2016, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Thu, Nov 10, 2016 at 09:16:49PM +0100, Maarten Maathuis wrote:
>> Hi,
>> 
>> I'm merely curious why this patch isn't also included:
>> https://cgit.freedesktop.org/drm-intel/commit/?id=e4ab73a13291fc844c9e24d5c347bd95818544d2
>> 
>> When i checked it, it's also not in 4.9-rc git tree.
>> This patch affects HDMI, and the HDMI connector was "my problem".
>> 
>> @Ville: Is it intentional this one was left out?
>
> Hmm. There was cc:stable+fixes:+bugzilla link on that one as well.
> Not sure why it got left behind. Jani, any ideas what happened there?

I'm not quite sure, but it's included in Dave's pull request to Linus
today, and should make it to v4.9-rc5.

BR,
Jani.



>
>> 
>> Maarten.
>> 
>> On Wed, Nov 9, 2016 at 11:46 AM, Greg Kroah-Hartman
>> <gregkh@linuxfoundation.org> wrote:
>> > 4.8-stable review patch.  If anyone has any objections, please let me know.
>> >
>> > ------------------
>> >
>> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> >
>> > commit 0ce140d45a8398b501934ac289aef0eb7f47c596 upstream.
>> >
>> > Now that we use the AUX and GMBUS assignment from VBT for all ports,
>> > let's clean up the sanitization of the port information a bit.
>> > Previosuly we only did this for port E, and only complained about a
>> > non-standard assignment for the other ports. But as we know that
>> > non-standard assignments are a fact of life, let's expand the
>> > sanitization to all the ports.
>> >
>> > v2: Include a commit message, fix up the comments a bit
>> > v3: Don't clobber other ports if the current port has no alternate aux ch/ddc pin
>> >
>> > Cc: Maarten Maathuis <madman2003@gmail.com>
>> > Tested-by: Maarten Maathuis <madman2003@gmail.com>
>> > References: https://bugs.freedesktop.org/show_bug.cgi?id=97877
>> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> > Link: http://patchwork.freedesktop.org/patch/msgid/1476208368-5710-4-git-send-email-ville.syrjala@linux.intel.com
>> > Reviewed-by: Jim Bride <jim.bride@linux.intel.com> (v2)
>> > (cherry picked from commit 9454fa871edf15c20a0371548b3ec0d6d944a498)
>> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> >
>> > ---
>> >  drivers/gpu/drm/i915/intel_bios.c |  122 +++++++++++++++++++++++---------------
>> >  1 file changed, 77 insertions(+), 45 deletions(-)
>> >
>> > --- a/drivers/gpu/drm/i915/intel_bios.c
>> > +++ b/drivers/gpu/drm/i915/intel_bios.c
>> > @@ -1031,6 +1031,77 @@ static u8 translate_iboost(u8 val)
>> >         return mapping[val];
>> >  }
>> >
>> > +static void sanitize_ddc_pin(struct drm_i915_private *dev_priv,
>> > +                            enum port port)
>> > +{
>> > +       const struct ddi_vbt_port_info *info =
>> > +               &dev_priv->vbt.ddi_port_info[port];
>> > +       enum port p;
>> > +
>> > +       if (!info->alternate_ddc_pin)
>> > +               return;
>> > +
>> > +       for_each_port_masked(p, (1 << port) - 1) {
>> > +               struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
>> > +
>> > +               if (info->alternate_ddc_pin != i->alternate_ddc_pin)
>> > +                       continue;
>> > +
>> > +               DRM_DEBUG_KMS("port %c trying to use the same DDC pin (0x%x) as port %c, "
>> > +                             "disabling port %c DVI/HDMI support\n",
>> > +                             port_name(p), i->alternate_ddc_pin,
>> > +                             port_name(port), port_name(p));
>> > +
>> > +               /*
>> > +                * If we have multiple ports supposedly sharing the
>> > +                * pin, then dvi/hdmi couldn't exist on the shared
>> > +                * port. Otherwise they share the same ddc bin and
>> > +                * system couldn't communicate with them separately.
>> > +                *
>> > +                * Due to parsing the ports in alphabetical order,
>> > +                * a higher port will always clobber a lower one.
>> > +                */
>> > +               i->supports_dvi = false;
>> > +               i->supports_hdmi = false;
>> > +               i->alternate_ddc_pin = 0;
>> > +       }
>> > +}
>> > +
>> > +static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
>> > +                           enum port port)
>> > +{
>> > +       const struct ddi_vbt_port_info *info =
>> > +               &dev_priv->vbt.ddi_port_info[port];
>> > +       enum port p;
>> > +
>> > +       if (!info->alternate_aux_channel)
>> > +               return;
>> > +
>> > +       for_each_port_masked(p, (1 << port) - 1) {
>> > +               struct ddi_vbt_port_info *i = &dev_priv->vbt.ddi_port_info[p];
>> > +
>> > +               if (info->alternate_aux_channel != i->alternate_aux_channel)
>> > +                       continue;
>> > +
>> > +               DRM_DEBUG_KMS("port %c trying to use the same AUX CH (0x%x) as port %c, "
>> > +                             "disabling port %c DP support\n",
>> > +                             port_name(p), i->alternate_aux_channel,
>> > +                             port_name(port), port_name(p));
>> > +
>> > +               /*
>> > +                * If we have multiple ports supposedlt sharing the
>> > +                * aux channel, then DP couldn't exist on the shared
>> > +                * port. Otherwise they share the same aux channel
>> > +                * and system couldn't communicate with them separately.
>> > +                *
>> > +                * Due to parsing the ports in alphabetical order,
>> > +                * a higher port will always clobber a lower one.
>> > +                */
>> > +               i->supports_dp = false;
>> > +               i->alternate_aux_channel = 0;
>> > +       }
>> > +}
>> > +
>> >  static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
>> >                            const struct bdb_header *bdb)
>> >  {
>> > @@ -1105,54 +1176,15 @@ static void parse_ddi_port(struct drm_i9
>> >                 DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port));
>> >
>> >         if (is_dvi) {
>> > -               if (port == PORT_E) {
>> > -                       info->alternate_ddc_pin = ddc_pin;
>> > -                       /* if DDIE share ddc pin with other port, then
>> > -                        * dvi/hdmi couldn't exist on the shared port.
>> > -                        * Otherwise they share the same ddc bin and system
>> > -                        * couldn't communicate with them seperately. */
>> > -                       if (ddc_pin == DDC_PIN_B) {
>> > -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_dvi = 0;
>> > -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_hdmi = 0;
>> > -                       } else if (ddc_pin == DDC_PIN_C) {
>> > -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_dvi = 0;
>> > -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_hdmi = 0;
>> > -                       } else if (ddc_pin == DDC_PIN_D) {
>> > -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_dvi = 0;
>> > -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_hdmi = 0;
>> > -                       }
>> > -               } else if (ddc_pin == DDC_PIN_B && port != PORT_B)
>> > -                       DRM_DEBUG_KMS("Unexpected DDC pin for port B\n");
>> > -               else if (ddc_pin == DDC_PIN_C && port != PORT_C)
>> > -                       DRM_DEBUG_KMS("Unexpected DDC pin for port C\n");
>> > -               else if (ddc_pin == DDC_PIN_D && port != PORT_D)
>> > -                       DRM_DEBUG_KMS("Unexpected DDC pin for port D\n");
>> > +               info->alternate_ddc_pin = ddc_pin;
>> > +
>> > +               sanitize_ddc_pin(dev_priv, port);
>> >         }
>> >
>> >         if (is_dp) {
>> > -               if (port == PORT_E) {
>> > -                       info->alternate_aux_channel = aux_channel;
>> > -                       /* if DDIE share aux channel with other port, then
>> > -                        * DP couldn't exist on the shared port. Otherwise
>> > -                        * they share the same aux channel and system
>> > -                        * couldn't communicate with them seperately. */
>> > -                       if (aux_channel == DP_AUX_A)
>> > -                               dev_priv->vbt.ddi_port_info[PORT_A].supports_dp = 0;
>> > -                       else if (aux_channel == DP_AUX_B)
>> > -                               dev_priv->vbt.ddi_port_info[PORT_B].supports_dp = 0;
>> > -                       else if (aux_channel == DP_AUX_C)
>> > -                               dev_priv->vbt.ddi_port_info[PORT_C].supports_dp = 0;
>> > -                       else if (aux_channel == DP_AUX_D)
>> > -                               dev_priv->vbt.ddi_port_info[PORT_D].supports_dp = 0;
>> > -               }
>> > -               else if (aux_channel == DP_AUX_A && port != PORT_A)
>> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port A\n");
>> > -               else if (aux_channel == DP_AUX_B && port != PORT_B)
>> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port B\n");
>> > -               else if (aux_channel == DP_AUX_C && port != PORT_C)
>> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port C\n");
>> > -               else if (aux_channel == DP_AUX_D && port != PORT_D)
>> > -                       DRM_DEBUG_KMS("Unexpected AUX channel for port D\n");
>> > +               info->alternate_aux_channel = aux_channel;
>> > +
>> > +               sanitize_aux_ch(dev_priv, port);
>> >         }
>> >
>> >         if (bdb->version >= 158) {
>> >
>> >
>> 
>> 
>> 
>> -- 
>> Far away from the primal instinct, the song seems to fade away, the
>> river get wider between your thoughts and the things we do and say.

-- 
Jani Nikula, Intel Open Source Technology Center

^ permalink raw reply	[flat|nested] 129+ messages in thread

end of thread, other threads:[~2016-11-11 12:59 UTC | newest]

Thread overview: 129+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20161109110606epcas2p30eede5f89fe25116e6ecbeed17c42e86@epcas2p3.samsung.com>
2016-11-09 10:44 ` [PATCH 4.8 000/138] 4.8.7-stable review Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 001/138] i2c: rk3x: Give the tuning value 0 during rk3x_i2c_v0_calc_timings Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 002/138] i2c: xgene: Avoid dma_buffer overrun Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 003/138] i2c: core: fix NULL pointer dereference under race condition Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 005/138] spi: fsl-espi: avoid processing uninitalized data on error Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 006/138] spi: mark device nodes only in case of successful instantiation Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 007/138] h8300: fix syscall restarting Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 008/138] gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get() Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 009/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix line offset validation Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 010/138] gpio: GPIO_GET_CHIPINFO_IOCTL: Fix information leak Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 011/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Validate line offset Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 012/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 013/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Validate line offset Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 014/138] gpio: GPIO_GET_LINEHANDLE_IOCTL: Reject invalid line flags Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 015/138] gpio: GPIO_GET_LINEEVENT_IOCTL: Reject invalid line and event flags Greg Kroah-Hartman
2016-11-09 10:44   ` [PATCH 4.8 016/138] gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix another information leak Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 017/138] gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 018/138] libxfs: clean up _calc_dquots_per_chunk Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 019/138] mm/list_lru.c: avoid error-path NULL pointer deref Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 020/138] mm/slab: fix kmemcg cache creation delayed issue Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 021/138] mm: memcontrol: do not recurse in direct reclaim Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 022/138] thermal/powerclamp: correct cpu support check Greg Kroah-Hartman
2016-11-09 15:05     ` Jacob Pan
2016-11-09 10:45   ` [PATCH 4.8 023/138] KEYS: Fix short sprintf buffer in /proc/keys show function Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 024/138] KEYS: Sort out big_key initialisation Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 025/138] security/keys: make BIG_KEYS dependent on stdrng Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 026/138] device-dax: fix percpu_ref_exit ordering Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 027/138] ALSA: usb-audio: Add quirk for Syntek STK1160 Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 028/138] ALSA: seq: Fix time account regression Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 029/138] ALSA: hda - allow 40 bit DMA mask for NVidia devices Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 030/138] ALSA: hda - Adding a new group of pin cfg into ALC295 pin quirk table Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 031/138] ALSA: hda - Fix surround output pins for ASRock B150M mobo Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 032/138] ALSA: hda - Fix headset mic detection problem for two Dell laptops Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 035/138] cxl: Fix leaking pid refs in some error paths Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 036/138] btrfs: fix races on root_log_ctx lists Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 037/138] powerpc: Convert cmp to cmpd in idle enter sequence Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 038/138] powerpc/mm/radix: Use tlbiel only if we ever ran on the current cpu Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 039/138] powerpc/64: Re-fix race condition between going idle and entering guest Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 040/138] powerpc/64: Fix race condition in setting lock bit in idle/wakeup code Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 041/138] x86/microcode/AMD: Fix more fallout from CONFIG_RANDOMIZE_MEMORY=y Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 042/138] timers: Prevent base clock rewind when forwarding clock Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 043/138] timers: Prevent base clock corruption when forwarding Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 044/138] timers: Plug locking race vs. timer migration Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 045/138] timers: Lock base for same bucket optimization Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 046/138] ubifs: Abort readdir upon error Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 047/138] ubifs: Fix regression in ubifs_readdir() Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 048/138] mei: txe: dont clean an unprocessed interrupt cause Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 049/138] usb: gadget: udc: atmel: fix endpoint name Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 051/138] USB: serial: fix potential NULL-dereference at probe Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 052/138] USB: serial: cp210x: fix tiocmget error handling Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 053/138] USB: serial: ftdi_sio: add support for Infineon TriBoard TC2X7 Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 054/138] xhci: use default USB_RESUME_TIMEOUT when resuming ports Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 055/138] usb: renesas_usbhs: add wait after initialization for R-Car Gen3 Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 056/138] usb: increase ohci watchdog delay to 275 msec Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 057/138] GenWQE: Fix bad page access during abort of resource allocation Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 058/138] x86/smpboot: Init apic mapping before usage Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 059/138] vt: clear selection before resizing Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 060/138] hv: do not lose pending heartbeat vmbus packets Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 061/138] xhci: add restart quirk for Intel Wildcatpoint PCH Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 062/138] xhci: workaround for hosts missing CAS bit Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 063/138] tty: limit terminal size to 4M chars Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 064/138] arm64: dts: marvell: fix clocksource for CP110 master SPI0 Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 065/138] iio:chemical:atlas-ph-sensor: Fix use of 32 bit int to hold 16 bit big endian value Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 066/138] Staging: wilc1000: Fix kernel Oops on opening the device Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 067/138] dm: free io_barrier after blk_cleanup_queue call Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 069/138] KVM: s390: Fix STHYI buffer alignment for diag224 Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 073/138] ARM: dts: fix the SD card on the Snowball Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 074/138] nfsd: Fix general protection fault in release_lock_stateid() Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 075/138] MIPS: KASLR: Fix handling of NULL FDT Greg Kroah-Hartman
2016-11-09 10:45   ` [PATCH 4.8 076/138] ovl: fix get_acl() on tmpfs Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 077/138] ovl: update S_ISGID when setting posix ACLs Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 078/138] ovl: fsync after copy-up Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 079/138] parisc: Ensure consistent state when switching to kernel stack at syscall entry Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 080/138] virtio_ring: Make interrupt suppression spec compliant Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 081/138] virtio_pci: Limit DMA mask to 44 bits for legacy virtio devices Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 082/138] virtio: console: Unlock vqs while freeing buffers Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 083/138] dm mirror: fix read error on recovery after default leg failure Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 084/138] dm table: fix missing dm_put_target_type() in dm_table_add_target() Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 085/138] dm rq: clear kworker_task if kthread_run() returned an error Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 086/138] dm raid: fix compat_features validation Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 087/138] dm raid: fix activation of existing raid4/10 devices Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 088/138] rtl8xxxu: Fix memory leak in handling rxdesc16 packets Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 089/138] rtl8xxxu: Fix big-endian problem reporting mactime Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 090/138] rtl8xxxu: Fix rtl8723bu driver reload issue Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 091/138] Input: i8042 - add XMG C504 to keyboard reset table Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 092/138] firewire: net: guard against rx buffer overflows Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 093/138] firewire: net: fix fragmented datagram_size off-by-one Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 094/138] mac80211: discard multicast and 4-addr A-MSDUs Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 095/138] Revert "ath9k_hw: implement temperature compensation support for AR9003+" Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 096/138] ath10k: cache calibration data when the core is stopped Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 097/138] scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 098/138] scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 099/138] mmc: dw_mmc-pltfm: fix the potential NULL pointer dereference Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 100/138] RAID1: ignore discard error Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 101/138] RAID10: " Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 102/138] md: be careful not lot leak internal curr_resync value into metadata. -- (all) Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 104/138] drm/imx: ipuv3-plane: Switch EBA buffer only when we dont need modeset Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 105/138] drm/imx: ipuv3-plane: Access old u/vbo properly in ->atomic_check for YU12/YV12 Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 106/138] drm/radeon/si_dpm: Limit clocks on HD86xx part Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 107/138] drm/radeon/si_dpm: workaround for SI kickers Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 109/138] drm/nouveau/acpi: fix check for power resources support Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 113/138] drm/i915/gen9: fix DDB partitioning for multi-screen cases Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 114/138] drm/i915/gen9: fix watermarks when using the pipe scaler Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 120/138] drm: i915: Wait for fences on new fb, not old Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 121/138] i2c: mark device nodes only in case of successful instantiation Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 122/138] netfilter: xt_NFLOG: fix unexpected truncated packet Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 123/138] UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 125/138] video: fbdev: pxafb: potential NULL dereference on error Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 126/138] omapfb: fix return value check in dsi_bind() Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 127/138] pwm: Unexport children before chip removal Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 128/138] usb: dwc3: Fix size used in dma_free_coherent() Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 129/138] usb: chipidea: host: fix NULL ptr dereference during shutdown Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 130/138] usb: musb: Fix hardirq-safe hardirq-unsafe lock order error Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 131/138] [media] v4l: vsp1: Prevent pipelines from running when not streaming Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 133/138] ARM: fix oops when using older ARMv4T CPUs Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 134/138] kvm: x86: Check memopp before dereference (CVE-2016-8630) Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 135/138] btrfs: qgroup: Prevent qgroup->reserved from going subzero Greg Kroah-Hartman
2016-11-09 10:46   ` [PATCH 4.8 136/138] ubi: fastmap: Fix add_vol() return value test in ubi_attach_fastmap() Greg Kroah-Hartman
2016-11-09 10:47   ` [PATCH 4.8 137/138] cpufreq: intel_pstate: Set P-state upfront in performance mode Greg Kroah-Hartman
2016-11-09 10:47   ` [PATCH 4.8 138/138] HID: usbhid: add ATEN CS962 to list of quirky devices Greg Kroah-Hartman
2016-11-09 18:22   ` [PATCH 4.8 000/138] 4.8.7-stable review Shuah Khan
2016-11-10  7:02     ` Greg Kroah-Hartman
2016-11-09 19:36   ` Guenter Roeck
2016-11-10  7:02     ` Greg Kroah-Hartman
     [not found]   ` <582465d1.12111c0a.f0f31.e519@mx.google.com>
2016-11-10 15:35     ` Greg Kroah-Hartman
     [not found]   ` <20161109102850.355591014@linuxfoundation.org>
2016-11-10 20:16     ` [PATCH 4.8 118/138] drm/i915: Clean up DDI DDC/AUX CH sanitation Maarten Maathuis
2016-11-10 23:02       ` Greg Kroah-Hartman
2016-11-11 12:38       ` Ville Syrjälä
2016-11-11 12:59         ` Jani Nikula

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).