02 Jun, 2016

40 commits

  • …ux-stable into ti-linux-4.4.y

    This is the 4.4.12 stable release

    * tag 'v4.4.12' of http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable: (87 commits)
    Linux 4.4.12
    kbuild: move -Wunused-const-variable to W=1 warning level
    Revert "scsi: fix soft lockup in scsi_remove_target() on module removal"
    scsi: Add intermediate STARGET_REMOVE state to scsi_target_state
    hpfs: implement the show_options method
    hpfs: fix remount failure when there are no options changed
    UBI: Fix static volume checks when Fastmap is used
    SIGNAL: Move generic copy_siginfo() to signal.h
    thunderbolt: Fix double free of drom buffer
    IB/srp: Fix a debug kernel crash
    ALSA: hda - Fix headset mic detection problem for one Dell machine
    ALSA: hda/realtek - Add support for ALC295/ALC3254
    ALSA: hda - Fix headphone noise on Dell XPS 13 9360
    ALSA: hda/realtek - New codecs support for ALC234/ALC274/ALC294
    mcb: Fixed bar number assignment for the gdd
    clk: bcm2835: add locking to pll*_on/off methods
    locking,qspinlock: Fix spin_is_locked() and spin_unlock_wait()
    serial: samsung: Reorder the sequence of clock control when call s3c24xx_serial_set_termios()
    serial: 8250_mid: recognize interrupt source in handler
    serial: 8250_mid: use proper bar for DNV platform
    ...

    Signed-off-by: LCPD Auto Merger <lcpd_integration@list.ti.com>

    LCPD Auto Merger
     
  • Greg Kroah-Hartman
     
  • commit c9c6837d39311b0cc14cdbe7c18e815ab44aefb1 upstream.

    gcc-6 started warning by default about variables that are not
    used anywhere and that are marked 'const', generating many
    false positives in an allmodconfig build, e.g.:

    arch/arm/mach-davinci/board-da830-evm.c:282:20: warning: 'da830_evm_emif25_pins' defined but not used [-Wunused-const-variable=]
    arch/arm/plat-omap/dmtimer.c:958:34: warning: 'omap_timer_match' defined but not used [-Wunused-const-variable=]
    drivers/bluetooth/hci_bcm.c:625:39: warning: 'acpi_bcm_default_gpios' defined but not used [-Wunused-const-variable=]
    drivers/char/hw_random/omap-rng.c:92:18: warning: 'reg_map_omap4' defined but not used [-Wunused-const-variable=]
    drivers/devfreq/exynos/exynos5_bus.c:381:32: warning: 'exynos5_busfreq_int_pm' defined but not used [-Wunused-const-variable=]
    drivers/dma/mv_xor.c:1139:34: warning: 'mv_xor_dt_ids' defined but not used [-Wunused-const-variable=]

    This is similar to the existing -Wunused-but-set-variable warning
    that was added in an earlier release and that we disable by default
    now and only enable when W=1 is set, so it makes sense to do
    the same here. Once we have eliminated the majority of the
    warnings for both, we can put them back into the default list.

    We probably want this in backport kernels as well, to allow building
    them with gcc-6 without introducing extra warnings.

    Signed-off-by: Arnd Bergmann
    Acked-by: Olof Johansson
    Acked-by: Lee Jones
    Signed-off-by: Michal Marek
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     
  • commit 305c2e71b3d733ec065cb716c76af7d554bd5571 upstream.

    Now that we've done a more comprehensive fix with the intermediate
    target state we can remove the previous hack introduced with commit
    90a88d6ef88e ("scsi: fix soft lockup in scsi_remove_target() on module
    removal").

    Signed-off-by: Johannes Thumshirn
    Reviewed-by: Ewan D. Milne
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Johannes Thumshirn
     
  • commit f05795d3d771f30a7bdc3a138bf714b06d42aa95 upstream.

    Add intermediate STARGET_REMOVE state to scsi_target_state to avoid
    running into the BUG_ON() in scsi_target_reap(). The STARGET_REMOVE
    state is only valid in the path from scsi_remove_target() to
    scsi_target_destroy() indicating this target is going to be removed.

    This re-fixes the problem introduced in commits bc3f02a795d3 ("[SCSI]
    scsi_remove_target: fix softlockup regression on hot remove") and
    40998193560d ("scsi: restart list search after unlock in
    scsi_remove_target") in a more comprehensive way.

    [mkp: Included James' fix for scsi_target_destroy()]

    Signed-off-by: Johannes Thumshirn
    Fixes: 40998193560dab6c3ce8d25f4fa58a23e252ef38
    Reported-by: Sergey Senozhatsky
    Tested-by: Sergey Senozhatsky
    Reviewed-by: Ewan D. Milne
    Reviewed-by: Hannes Reinecke
    Reviewed-by: James Bottomley
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Johannes Thumshirn
     
  • commit 037369b872940cd923835a0a589763180c4a36bc upstream.

    The HPFS filesystem used generic_show_options to produce string that is
    displayed in /proc/mounts. However, there is a problem that the options
    may disappear after remount. If we mount the filesystem with option1
    and then remount it with option2, /proc/mounts should show both option1
    and option2, however it only shows option2 because the whole option
    string is replaced with replace_mount_options in hpfs_remount_fs.

    To fix this bug, implement the hpfs_show_options function that prints
    options that are currently selected.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 44d51706b4685f965cd32acde3fe0fcc1e6198e8 upstream.

    Commit ce657611baf9 ("hpfs: kstrdup() out of memory handling") checks if
    the kstrdup function returns NULL due to out-of-memory condition.

    However, if we are remounting a filesystem with no change to
    filesystem-specific options, the parameter data is NULL. In this case,
    kstrdup returns NULL (because it was passed NULL parameter), although no
    out of memory condition exists. The mount syscall then fails with
    ENOMEM.

    This patch fixes the bug. We fail with ENOMEM only if data is non-NULL.

    The patch also changes the call to replace_mount_options - if we didn't
    pass any filesystem-specific options, we don't call
    replace_mount_options (thus we don't erase existing reported options).

    Fixes: ce657611baf9 ("hpfs: kstrdup() out of memory handling")
    Signed-off-by: Mikulas Patocka
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 1900149c835ab5b48bea31a823ea5e5a401fb560 upstream.

    Ezequiel reported that he's facing UBI going into read-only
    mode after power cut. It turned out that this behavior happens
    only when updating a static volume is interrupted and Fastmap is
    used.

    A possible trace can look like:
    ubi0 warning: ubi_io_read_vid_hdr [ubi]: no VID header found at PEB 2323, only 0xFF bytes
    ubi0 warning: ubi_eba_read_leb [ubi]: switch to read-only mode
    CPU: 0 PID: 833 Comm: ubiupdatevol Not tainted 4.6.0-rc2-ARCH #4
    Hardware name: SAMSUNG ELECTRONICS CO., LTD. 300E4C/300E5C/300E7C/NP300E5C-AD8AR, BIOS P04RAP 10/15/2012
    0000000000000286 00000000eba949bd ffff8800c45a7b38 ffffffff8140d841
    ffff8801964be000 ffff88018eaa4800 ffff8800c45a7bb8 ffffffffa003abf6
    ffffffff850e2ac0 8000000000000163 ffff8801850e2ac0 ffff8801850e2ac0
    Call Trace:
    [] dump_stack+0x63/0x82
    [] ubi_eba_read_leb+0x486/0x4a0 [ubi]
    [] ubi_check_volume+0x83/0xf0 [ubi]
    [] ubi_open_volume+0x177/0x350 [ubi]
    [] vol_cdev_open+0x58/0xb0 [ubi]
    [] chrdev_open+0xae/0x1d0
    [] do_dentry_open+0x1ff/0x300
    [] ? cdev_put+0x30/0x30
    [] vfs_open+0x56/0x60
    [] path_openat+0x4f4/0x1190
    [] do_filp_open+0x91/0x100
    [] ? __alloc_fd+0xc7/0x190
    [] do_sys_open+0x13f/0x210
    [] SyS_open+0x1e/0x20
    [] entry_SYSCALL_64_fastpath+0x1a/0xa4

    UBI checks static volumes for data consistency and reads the
    whole volume upon first open. If the volume is found erroneous
    users of UBI cannot read from it, but another volume update is
    possible to fix it. The check is performed by running
    ubi_eba_read_leb() on every allocated LEB of the volume.
    For static volumes ubi_eba_read_leb() computes the checksum of all
    data stored in a LEB. To verify the computed checksum it has to read
    the LEB's volume header which stores the original checksum.
    If the volume header is not found UBI treats this as fatal internal
    error and switches to RO mode. If the UBI device was attached via a
    full scan the assumption is correct, the volume header has to be
    present as it had to be there while scanning to get known as mapped.
    If the attach operation happened via Fastmap the assumption is no
    longer correct. When attaching via Fastmap UBI learns the mapping
    table from Fastmap's snapshot of the system state and not via a full
    scan. It can happen that a LEB got unmapped after a Fastmap was
    written to the flash. Then UBI can learn the LEB still as mapped and
    accessing it returns only 0xFF bytes. As UBI is not a FTL it is
    allowed to have mappings to empty PEBs, it assumes that the layer
    above takes care of LEB accounting and referencing.
    UBIFS does so using the LEB property tree (LPT).
    For static volumes UBI blindly assumes that all LEBs are present and
    therefore special actions have to be taken.

    The described situation can happen when updating a static volume is
    interrupted, either by a user or a power cut.
    The volume update code first unmaps all LEBs of a volume and then
    writes LEB by LEB. If the sequence of operations is interrupted UBI
    detects this either by the absence of LEBs, no volume header present
    at scan time, or corrupted payload, detected via checksum.
    In the Fastmap case the former method won't trigger as no scan
    happened and UBI automatically thinks all LEBs are present.
    Only by reading data from a LEB it detects that the volume header is
    missing and incorrectly treats this as fatal error.
    To deal with the situation ubi_eba_read_leb() from now on checks
    whether we attached via Fastmap and handles the absence of a
    volume header like a data corruption error.
    This way interrupted static volume updates will correctly get detected
    also when Fastmap is used.

    Reported-by: Ezequiel Garcia
    Tested-by: Ezequiel Garcia
    Signed-off-by: Richard Weinberger
    Signed-off-by: Greg Kroah-Hartman

    Richard Weinberger
     
  • commit ca9eb49aa9562eaadf3cea071ec7018ad6800425 upstream.

    The generic copy_siginfo() is currently defined in
    asm-generic/siginfo.h, after including uapi/asm-generic/siginfo.h which
    defines the generic struct siginfo. However this makes it awkward for an
    architecture to use it if it has to define its own struct siginfo (e.g.
    MIPS and potentially IA64), since it means that asm-generic/siginfo.h
    can only be included after defining the arch-specific siginfo, which may
    be problematic if the arch-specific definition needs definitions from
    uapi/asm-generic/siginfo.h.

    It is possible to work around this by first including
    uapi/asm-generic/siginfo.h to get the constants before defining the
    arch-specific siginfo, and include asm-generic/siginfo.h after. However
    uapi headers can't be included by other uapi headers, so that first
    include has to be in an ifdef __kernel__, with the non __kernel__ case
    including the non-UAPI header instead.

    Instead of that mess, move the generic copy_siginfo() definition into
    linux/signal.h, which allows an arch-specific uapi/asm/siginfo.h to
    include asm-generic/siginfo.h and define the arch-specific siginfo, and
    for the generic copy_siginfo() to see that arch-specific definition.

    Signed-off-by: James Hogan
    Cc: Arnd Bergmann
    Cc: Ralf Baechle
    Cc: Petr Malat
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc: Christopher Ferris
    Cc: linux-arch@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Cc: linux-ia64@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/12478/
    Signed-off-by: Ralf Baechle
    Signed-off-by: Greg Kroah-Hartman

    James Hogan
     
  • commit 2ffa9a5d76a75abbc1f95c17959fced666095bdd upstream.

    If tb_drom_read() fails, sw->drom is freed but not set to NULL. sw->drom
    is then freed again in the error path of tb_switch_alloc().

    The bug can be triggered by unplugging a thunderbolt device shortly after
    it is detected by the thunderbolt driver.

    Clear sw->drom if tb_drom_read() fails.

    [bhelgaas: add Fixes:, stable versions of interest]
    Fixes: 343fcb8c70d7 ("thunderbolt: Fix nontrivial endpoint devices.")
    Signed-off-by: Andreas Noever
    Signed-off-by: Bjorn Helgaas
    CC: Lukas Wunner
    Signed-off-by: Greg Kroah-Hartman

    Andreas Noever
     
  • commit 54f5c9c52d69afa55abf2b034df8d45f588466c3 upstream.

    Avoid that the following BUG() is triggered against a debug
    kernel:

    kernel BUG at include/linux/scatterlist.h:92!
    RIP: 0010:[] [] srp_map_idb+0x199/0x1a0 [ib_srp]
    Call Trace:
    [] srp_map_data+0x84a/0x890 [ib_srp]
    [] srp_queuecommand+0x1e4/0x610 [ib_srp]
    [] scsi_dispatch_cmd+0x9e/0x180
    [] scsi_request_fn+0x477/0x610
    [] __blk_run_queue+0x2e/0x40
    [] blk_delay_work+0x20/0x30
    [] process_one_work+0x197/0x480
    [] worker_thread+0x49/0x490
    [] kthread+0xea/0x100
    [] ret_from_fork+0x22/0x40

    Fixes: f7f7aab1a5c0 ("IB/srp: Convert to new registration API")
    Signed-off-by: Bart Van Assche
    Cc: Sagi Grimberg
    Cc: Christoph Hellwig
    Reviewed-by: Max Gurtovoy
    Reviewed-by: Sagi Grimberg
    Signed-off-by: Doug Ledford
    Signed-off-by: Greg Kroah-Hartman

    Bart Van Assche
     
  • commit 86c72d1ce91d804e4fa8d90b316a89597dd220f1 upstream.

    Add the pin configuration value of this machine into the pin_quirk
    table to make DELL1_MIC_NO_PRESENCE apply to this machine.

    Signed-off-by: Hui Wang
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Hui Wang
     
  • commit 7d727869c7b86da0874436ac5675dcdadaf3a0a1 upstream.

    Add support for ALC295/ALC3254.
    They are simply compatible with ALC225 chip.

    Signed-off-by: Kailang Yang
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Kailang Yang
     
  • commit 423cd785619ac6778252fbdb916505aa1c153959 upstream.

    The headphone has noise when playing sound or switching microphone sources.
    It uses the same codec on XPS 13 9350, but with different subsystem ID.
    Applying the fixup can solve the issue.
    Also, changing the model name to better differentiate models.

    v2: Reorder by device ID.

    Signed-off-by: Kai-Heng Feng
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Kai-Heng Feng
     
  • commit dcd4f0db6141d6bf2cb897309d5d6f53d1b1696f upstream.

    Support new codecs for ALC234/ALC274/ALC294.
    This three codecs was the same IC.
    But bonding is not the same.

    Signed-off-by: Kailang Yang
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Kailang Yang
     
  • commit f75564d343010b025301d9548f2304f48eb25f01 upstream.

    The bar number is found in reg2 within the gdd. Therefore
    we need to change the assigment from reg1 to reg2 which
    is the correct location.

    Signed-off-by: Andreas Werner
    Fixes: '3764e82e5' drivers: Introduce MEN Chameleon Bus
    Signed-off-by: Johannes Thumshirn
    Signed-off-by: Greg Kroah-Hartman

    Andreas Werner
     
  • commit ec36a5c6682fdd5328abf15c3c67281bed0241d7 upstream.

    Add missing locking to:
    * bcm2835_pll_divider_on
    * bcm2835_pll_divider_off
    to protect the read modify write cycle for the
    register access protecting both cm_reg and a2w_reg
    registers.

    Fixes: 41691b8862e2 ("clk: bcm2835: Add support for programming the
    audio domain clocks")

    Signed-off-by: Martin Sperl
    Signed-off-by: Eric Anholt
    Reviewed-by: Eric Anholt
    Signed-off-by: Greg Kroah-Hartman

    Martin Sperl
     
  • commit 54cf809b9512be95f53ed4a5e3b631d1ac42f0fa upstream.

    Similar to commits:

    51d7d5205d33 ("powerpc: Add smp_mb() to arch_spin_is_locked()")
    d86b8da04dfa ("arm64: spinlock: serialise spin_unlock_wait against concurrent lockers")

    qspinlock suffers from the fact that the _Q_LOCKED_VAL store is
    unordered inside the ACQUIRE of the lock.

    And while this is not a problem for the regular mutual exclusive
    critical section usage of spinlocks, it breaks creative locking like:

    spin_lock(A) spin_lock(B)
    spin_unlock_wait(B) if (!spin_is_locked(A))
    do_something() do_something()

    In that both CPUs can end up running do_something at the same time,
    because our _Q_LOCKED_VAL store can drop past the spin_unlock_wait()
    spin_is_locked() loads (even on x86!!).

    To avoid making the normal case slower, add smp_mb()s to the less used
    spin_unlock_wait() / spin_is_locked() side of things to avoid this
    problem.

    Reported-and-tested-by: Davidlohr Bueso
    Reported-by: Giovanni Gherdovich
    Signed-off-by: Peter Zijlstra (Intel)
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Peter Zijlstra
     
  • commit b8995f527aac143e83d3900ff39357651ea4e0f6 upstream.

    This patch fixes the broken serial log when changing the clock source
    of uart device. Before disabling the original clock source, this patch
    enables the new clock source to protect the clock off state for a split second.

    Signed-off-by: Chanwoo Choi
    Reviewed-by: Marek Szyprowski
    Signed-off-by: Greg Kroah-Hartman
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Krzysztof Kozlowski

    Chanwoo Choi
     
  • commit c42850f1ae7e70056f852e67bb9dddf927853b47 upstream.

    There is a special register that shows interrupt status by source. In
    particular case the source can be a combination of DMA Tx, DMA Rx, and UART.

    Read the register and call the handlers only for sources that request an
    interrupt.

    Fixes: 6ede6dcd87aa ("serial: 8250_mid: add support for DMA engine handling from UART MMIO")
    Reviewed-by: Heikki Krogerus
    Signed-off-by: Andy Shevchenko
    Signed-off-by: Greg Kroah-Hartman

    Andy Shevchenko
     
  • commit 107e15fc1f8d6ef69eac5f175971252f76e82f0d upstream.

    Unlike Intel Medfield and Tangier platforms DNV uses PCI BAR0 for IO compatible
    resources and BAR1 for MMIO. We need latter in a way to support DMA. Introduce
    an additional field in the internal structure and pass PCI BAR based on device
    ID.

    Reported-by: "Lai, Poey Seng"
    Fixes: 6ede6dcd87aa ("serial: 8250_mid: add support for DMA engine handling from UART MMIO")
    Reviewed-by: Heikki Krogerus
    Signed-off-by: Andy Shevchenko
    Signed-off-by: Greg Kroah-Hartman

    Andy Shevchenko
     
  • commit 6f210c18c1c0f016772c8cd51ae12a02bfb9e7ef upstream.

    Since commit 21947ba654a6 ("serial: 8250_pci: replace switch-case by
    formula"), the 8250 driver crashes in the byt_set_termios() function
    with a divide error. This is caused by the fact that a baud rate of 0 (B0)
    is not handled properly. Fix it by falling back to B9600 in this case.

    Signed-off-by: David Müller
    Fixes: 21947ba654a6 ("serial: 8250_pci: replace switch-case by formula")
    Suggested-by: Andy Shevchenko
    Reviewed-by: Andy Shevchenko
    Signed-off-by: Greg Kroah-Hartman

    David Müller
     
  • commit 0f40fbbcc34e093255a2b2d70b6b0fb48c3f39aa upstream.

    OpenSSH expects the (non-blocking) read() of pty master to return
    EAGAIN only if it has received all of the slave-side output after
    it has received SIGCHLD. This used to work on pre-3.12 kernels.

    This fix effectively forces non-blocking read() and poll() to
    block for parallel i/o to complete for all ttys. It also unwinds
    these changes:

    1) f8747d4a466ab2cafe56112c51b3379f9fdb7a12
    tty: Fix pty master read() after slave closes

    2) 52bce7f8d4fc633c9a9d0646eef58ba6ae9a3b73
    pty, n_tty: Simplify input processing on final close

    3) 1a48632ffed61352a7810ce089dc5a8bcd505a60
    pty: Fix input race when closing

    Inspired by analysis and patch from Marc Aurele La France

    Reported-by: Volth
    Reported-by: Marc Aurele La France
    BugLink: https://bugzilla.mindrot.org/show_bug.cgi?id=52
    BugLink: https://bugzilla.mindrot.org/show_bug.cgi?id=2492
    Signed-off-by: Brian Bloniarz
    Reviewed-by: Peter Hurley
    Signed-off-by: Greg Kroah-Hartman

    Brian Bloniarz
     
  • commit 5be605ac9af979265d7b64c160ad9928088a78be upstream.

    Commit 1cf6e8fc8341 ("tty/serial: at91: fix RTS line management when
    hardware handshake is enabled") actually allowed to enable hardware
    handshaking.
    Before, the CRTSCTS flags was silently ignored.

    As the DMA controller can't drive RTS (as explain in the commit message).
    Ensure that hardware flow control stays disabled when DMA is used and FIFOs
    are not available.

    Signed-off-by: Alexandre Belloni
    Acked-by: Nicolas Ferre
    Fixes: 1cf6e8fc8341 ("tty/serial: at91: fix RTS line management when hardware handshake is enabled")
    Signed-off-by: Greg Kroah-Hartman

    Alexandre Belloni
     
  • commit d175feca89a1c162f60f4e3560ca7bc9437c65eb upstream.

    Dmitry reported, that the current cleanup code in n_gsm can trigger a
    warning:
    WARNING: CPU: 2 PID: 24238 at drivers/tty/n_gsm.c:2048 gsm_cleanup_mux+0x166/0x6b0()
    ...
    Call Trace:
    ...
    [] warn_slowpath_null+0x29/0x30 kernel/panic.c:490
    [] gsm_cleanup_mux+0x166/0x6b0 drivers/tty/n_gsm.c:2048
    [] gsmld_open+0x5b7/0x7a0 drivers/tty/n_gsm.c:2386
    [] tty_ldisc_open.isra.2+0x78/0xd0 drivers/tty/tty_ldisc.c:447
    [] tty_set_ldisc+0x1ca/0xa70 drivers/tty/tty_ldisc.c:567
    [< inline >] tiocsetd drivers/tty/tty_io.c:2650
    [] tty_ioctl+0xb2a/0x2140 drivers/tty/tty_io.c:2883
    ...

    But this is a legal path when open fails to find a space in the
    gsm_mux array and tries to clean up. So make it a standard test
    instead of a warning.

    Reported-by: "Dmitry Vyukov"
    Cc: Alan Cox
    Link: http://lkml.kernel.org/r/CACT4Y+bHQbAB68VFi7Romcs-Z9ZW3kQRvcq+BvHH1oa5NcAdLA@mail.gmail.com
    Fixes: 5a640967 ("tty/n_gsm.c: fix a memory leak in gsmld_open()")
    Signed-off-by: Jiri Slaby
    Signed-off-by: Greg Kroah-Hartman

    Jiri Slaby
     
  • commit 6798df4c5fe0a7e6d2065cf79649a794e5ba7114 upstream.

    When csw->con_startup() fails in do_register_con_driver, we return no
    error (i.e. 0). This was changed back in 2006 by commit 3e795de763.
    Before that we used to return -ENODEV.

    So fix the return value to be -ENODEV in that case again.

    Fixes: 3e795de763 ("VT binding: Add binding/unbinding support for the VT console")
    Signed-off-by: Jiri Slaby
    Reported-by: "Dan Carpenter"
    Signed-off-by: Greg Kroah-Hartman

    Jiri Slaby
     
  • commit 702f926067d2a4b28c10a3c41a1172dd62d9e735 upstream.

    b4ff8389ed14 is incomplete: relies on nr_legacy_irqs() to get the number
    of legacy interrupts when actually nr_legacy_irqs() returns 0 after
    probe_8259A(). Use NR_IRQS_LEGACY instead.

    Signed-off-by: Stefano Stabellini
    Signed-off-by: Greg Kroah-Hartman

    Stefano Stabellini
     
  • commit 316314cae15fb0e3869b76b468f59a0c83ac3d4e upstream.

    This ensures that the guest doesn't see XSAVE extensions
    (e.g. xgetbv1 or xsavec) that the host lacks.

    Cc: stable@vger.kernel.org
    Reviewed-by: Radim Krčmář
    [4.5 does have CPUID_D_1_EAX, but earlier kernels don't, so use
    the numeric value. This is consistent with other occurrences
    of cpuid_mask in arch/x86/kvm/cpuid.c - Paolo]
    Signed-off-by: Paolo Bonzini
    Signed-off-by: Greg Kroah-Hartman

    Paolo Bonzini
     
  • commit b45bacd2d048f405c7760e5cc9b60dd67708734f upstream.

    Writing CP0_Compare clears the timer interrupt pending bit
    (CP0_Cause.TI), but this wasn't being done atomically. If a timer
    interrupt raced with the write of the guest CP0_Compare, the timer
    interrupt could end up being pending even though the new CP0_Compare is
    nowhere near CP0_Count.

    We were already updating the hrtimer expiry with
    kvm_mips_update_hrtimer(), which used both kvm_mips_freeze_hrtimer() and
    kvm_mips_resume_hrtimer(). Close the race window by expanding out
    kvm_mips_update_hrtimer(), and clearing CP0_Cause.TI and setting
    CP0_Compare between the freeze and resume. Since the pending timer
    interrupt should not be cleared when CP0_Compare is written via the KVM
    user API, an ack argument is added to distinguish the source of the
    write.

    Fixes: e30492bbe95a ("MIPS: KVM: Rewrite count/compare timer emulation")
    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář"
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: Paolo Bonzini
    Signed-off-by: Greg Kroah-Hartman

    James Hogan
     
  • commit 4355c44f063d3de4f072d796604c7f4ba4085cc3 upstream.

    There's a particularly narrow and subtle race condition when the
    software emulated guest timer is frozen which can allow a guest timer
    interrupt to be missed.

    This happens due to the hrtimer expiry being inexact, so very
    occasionally the freeze time will be after the moment when the emulated
    CP0_Count transitions to the same value as CP0_Compare (so an IRQ should
    be generated), but before the moment when the hrtimer is due to expire
    (so no IRQ is generated). The IRQ won't be generated when the timer is
    resumed either, since the resume CP0_Count will already match CP0_Compare.

    With VZ guests in particular this is far more likely to happen, since
    the soft timer may be frozen frequently in order to restore the timer
    state to the hardware guest timer. This happens after 5-10 hours of
    guest soak testing, resulting in an overflow in guest kernel timekeeping
    calculations, hanging the guest. A more focussed test case to
    intentionally hit the race (with the help of a new hypcall to cause the
    timer state to migrated between hardware & software) hits the condition
    fairly reliably within around 30 seconds.

    Instead of relying purely on the inexact hrtimer expiry to determine
    whether an IRQ should be generated, read the guest CP0_Compare and
    directly check whether the freeze time is before or after it. Only if
    CP0_Count is on or after CP0_Compare do we check the hrtimer expiry to
    determine whether the last IRQ has already been generated (which will
    have pushed back the expiry by one timer period).

    Fixes: e30492bbe95a ("MIPS: KVM: Rewrite count/compare timer emulation")
    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář"
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: Paolo Bonzini
    Signed-off-by: Greg Kroah-Hartman

    James Hogan
     
  • commit f24632475d4ffed5626abbfab7ef30a128dd1474 upstream.

    Commit d28bc9dd25ce reversed the order of two lines which initialize cr0,
    allowing the current (old) cr0 value to mess up vcpu initialization.
    This was observed in the checks for cr0 X86_CR0_WP bit in the context of
    kvm_mmu_reset_context(). Besides, setting vcpu->arch.cr0 after vmx_set_cr0()
    is completely redundant. Change the order back to ensure proper vcpu
    initialization.

    The combination of booting with ovmf firmware when guest vcpus > 1 and kvm's
    ept=N option being set results in a VM-entry failure. This patch fixes that.

    Fixes: d28bc9dd25ce ("KVM: x86: INIT and reset sequences are different")
    Signed-off-by: Bruce Rogers
    Signed-off-by: Radim Krčmář
    Signed-off-by: Greg Kroah-Hartman

    Bruce Rogers
     
  • commit 9842df62004f366b9fed2423e24df10542ee0dc5 upstream.

    MSR 0x2f8 accessed the 124th Variable Range MTRR ever since MTRR support
    was introduced by 9ba075a664df ("KVM: MTRR support").

    0x2f8 became harmful when 910a6aae4e2e ("KVM: MTRR: exactly define the
    size of variable MTRRs") shrinked the array of VR MTRRs from 256 to 8,
    which made access to index 124 out of bounds. The surrounding code only
    WARNs in this situation, thus the guest gained a limited read/write
    access to struct kvm_arch_vcpu.

    0x2f8 is not a valid VR MTRR MSR, because KVM has/advertises only 16 VR
    MTRR MSRs, 0x200-0x20f. Every VR MTRR is set up using two MSRs, 0x2f8
    was treated as a PHYSBASE and 0x2f9 would be its PHYSMASK, but 0x2f9 was
    not implemented in KVM, therefore 0x2f8 could never do anything useful
    and getting rid of it is safe.

    This fixes CVE-2016-3713.

    Fixes: 910a6aae4e2e ("KVM: MTRR: exactly define the size of variable MTRRs")
    Reported-by: David Matlack
    Signed-off-by: Andy Honig
    Signed-off-by: Radim Krčmář
    Signed-off-by: Paolo Bonzini
    Signed-off-by: Greg Kroah-Hartman

    Andy Honig
     
  • commit d375278d666760e195693b57415ba0a125cadd55 upstream.

    DMA is optional with this driver. If it was not enabled the devpriv->dma
    pointer will be NULL.

    Fix the possible NULL pointer dereference when trying to disable the DMA
    channels in das1800_ai_cancel() and tidy up the comments to fix the
    checkpatch.pl issues:
    WARNING: line over 80 characters

    It's probably harmless in das1800_ai_setup_dma() because the 'desc' pointer
    will not be used if DMA is disabled but fix it there also.

    Fixes: 99dfc3357e98 ("staging: comedi: das1800: remove depends on ISA_DMA_API limitation")
    Signed-off-by: H Hartley Sweeten
    Reviewed-by: Ian Abbott
    Signed-off-by: Greg Kroah-Hartman

    H Hartley Sweeten
     
  • commit 5096c4d3bfa75bdd23c78f799aabd08598afb48f upstream.

    The argument of dev_err() in usb_gadget_map_request() should be dev
    instead of &gadget->dev.

    Fixes: 7ace8fc ("usb: gadget: udc: core: Fix argument of dma_map_single for IOMMU")
    Signed-off-by: Yoshihiro Shimoda
    Signed-off-by: Greg Kroah-Hartman

    Yoshihiro Shimoda
     
  • commit 6fb650d43da3e7054984dc548eaa88765a94d49f upstream.

    When a USB driver is bound to an interface (either through probing or
    by claiming it) or is unbound from an interface, the USB core always
    disables Link Power Management during the transition and then
    re-enables it afterward. The reason is because the driver might want
    to prevent hub-initiated link power transitions, in which case the HCD
    would have to recalculate the various LPM parameters. This
    recalculation takes place when LPM is re-enabled and the new
    parameters are sent to the device and its parent hub.

    However, if the driver does not want to prevent hub-initiated link
    power transitions then none of this work is necessary. The parameters
    don't need to be recalculated, and LPM doesn't need to be disabled and
    re-enabled.

    It turns out that disabling and enabling LPM can be time-consuming,
    enough so that it interferes with user programs that want to claim and
    release interfaces rapidly via usbfs. Since the usbfs kernel driver
    doesn't set the disable_hub_initiated_lpm flag, we can speed things up
    and get the user programs to work by leaving LPM alone whenever the
    flag isn't set.

    And while we're improving the way disable_hub_initiated_lpm gets used,
    let's also fix its kerneldoc.

    Signed-off-by: Alan Stern
    Tested-by: Matthew Giassa
    CC: Mathias Nyman
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit cdc77c82a8286b1181b81b6e5ef60c8e83ded7bc upstream.

    The current implemenentation restart the sent pattern for each entry in
    the sg list. The receiving end expects a continuous pattern, and test
    will fail unless scatterilst entries happen to be aligned with the
    pattern

    Fix this by calculating the pattern byte based on total sent size
    instead of just the current sg entry.

    Signed-off-by: Mathias Nyman
    Fixes: 8b5249019352 ("[PATCH] USB: usbtest: scatterlist OUT data pattern testing")
    Acked-by: Felipe Balbi
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Mathias Nyman
     
  • commit f78bbcae86e676fad9e6c6bb6cd9d9868ba23696 upstream.

    When binding the function to usb_configuration, check whether the thread
    is running before starting another one. Without that, when function
    instance is added to multiple configurations, fsg_bing starts multiple
    threads with all but the latest one being forgotten by the driver. This
    leads to obvious thread leaks, possible lockups when trying to halt the
    machine and possible more issues.

    This fixes issues with legacy/multi¹ gadget as well as configfs gadgets
    when mass_storage function is added to multiple configurations.

    This change also simplifies API since the legacy gadgets no longer need
    to worry about starting the thread by themselves (which was where bug
    in legacy/multi was in the first place).

    N.B., this patch doesn’t address adding single mass_storage function
    instance to a single configuration twice. Thankfully, there’s no
    legitimate reason for such setup plus, if I’m not mistaken, configfs
    gadget doesn’t even allow it to be expressed.

    ¹ I have no example failure though. Conclusion that legacy/multi has
    a bug is based purely on me reading the code.

    Acked-by: Alan Stern
    Signed-off-by: Michal Nazarewicz
    Tested-by: Ivaylo Dimitrov
    Cc: Alan Stern
    Signed-off-by: Felipe Balbi
    Signed-off-by: Greg Kroah-Hartman

    Michal Nazarewicz
     
  • commit 332a5b446b7916d272c2a659a3b20909ce34d2c1 upstream.

    In the current implementation functionfs generates a EFAULT for async read
    operations if the read buffer size is larger than the URB data size. Since
    a application does not necessarily know how much data the host side is
    going to send it typically supplies a buffer larger than the actual data,
    which will then result in a EFAULT error.

    This behaviour was introduced while refactoring the code to use iov_iter
    interface in commit c993c39b8639 ("gadget/function/f_fs.c: use put iov_iter
    into io_data"). The original code took the minimum over the URB size and
    the user buffer size and then attempted to copy that many bytes using
    copy_to_user(). If copy_to_user() could not copy all data a EFAULT error
    was generated. Restore the original behaviour by only generating a EFAULT
    error when the number of bytes copied is not the size of the URB and the
    target buffer has not been fully filled.

    Commit 342f39a6c8d3 ("usb: gadget: f_fs: fix check in read operation")
    already fixed the same problem for the synchronous read path.

    Fixes: c993c39b8639 ("gadget/function/f_fs.c: use put iov_iter into io_data")
    Acked-by: Michal Nazarewicz
    Signed-off-by: Lars-Peter Clausen
    Signed-off-by: Felipe Balbi
    Signed-off-by: Greg Kroah-Hartman

    Lars-Peter Clausen
     
  • commit 74d2a91aec97ab832790c9398d320413ad185321 upstream.

    Add even more ZTE device ids.

    Signed-off-by: lei liu
    [johan: rebase and replace commit message ]
    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Lei Liu
     
  • commit f0d09463c59c2d764a6c6d492cbe6d2c77f27153 upstream.

    More ZTE device ids.

    Signed-off-by: lei liu
    [properly sort them - gregkh]
    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    lei liu