1. 13 Nov, 2018 40 commits
    • Alexandre Belloni's avatar
      uio: ensure class is registered before devices · e2274c76
      Alexandre Belloni authored
      [ Upstream commit ae61cf5b ]
      
      When both uio and the uio drivers are built in the kernel, it is possible
      for a driver to register devices before the uio class is registered.
      
      This may result in a NULL pointer dereference later on in
      get_device_parent() when accessing the class glue_dirs spinlock.
      
      The trace looks like that:
      
      Unable to handle kernel NULL pointer dereference at virtual address 00000140
      [...]
      [<ffff0000089cc234>] _raw_spin_lock+0x14/0x48
      [<ffff0000084f56bc>] device_add+0x154/0x6a0
      [<ffff0000084f5e48>] device_create_groups_vargs+0x120/0x128
      [<ffff0000084f5edc>] device_create+0x54/0x60
      [<ffff0000086e72c0>] __uio_register_device+0x120/0x4a8
      [<ffff000008528b7c>] jaguar2_pci_probe+0x2d4/0x558
      [<ffff0000083fc18c>] local_pci_probe+0x3c/0xb8
      [<ffff0000083fd81c>] pci_device_probe+0x11c/0x180
      [<ffff0000084f88bc>] driver_probe_device+0x22c/0x2d8
      [<ffff0000084f8a24>] __driver_attach+0xbc/0xc0
      [<ffff0000084f69fc>] bus_for_each_dev+0x4c/0x98
      [<ffff0000084f81b8>] driver_attach+0x20/0x28
      [<ffff0000084f7d08>] bus_add_driver+0x1b8/0x228
      [<ffff0000084f93c0>] driver_register+0x60/0xf8
      [<ffff0000083fb918>] __pci_register_driver+0x40/0x48
      
      Return EPROBE_DEFER in that case so the driver can register the device
      later.
      Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e2274c76
    • Waiman Long's avatar
      driver/dma/ioat: Call del_timer_sync() without holding prep_lock · 479cd3e8
      Waiman Long authored
      [ Upstream commit cfb03be6 ]
      
      The following lockdep splat was observed:
      
      [ 1222.241750] ======================================================
      [ 1222.271301] WARNING: possible circular locking dependency detected
      [ 1222.301060] 4.16.0-10.el8+5.x86_64+debug #1 Not tainted
      [ 1222.326659] ------------------------------------------------------
      [ 1222.356565] systemd-shutdow/1 is trying to acquire lock:
      [ 1222.382660]  ((&ioat_chan->timer)){+.-.}, at: [<00000000f71e1a28>] del_timer_sync+0x5/0xf0
      [ 1222.422928]
      [ 1222.422928] but task is already holding lock:
      [ 1222.451743]  (&(&ioat_chan->prep_lock)->rlock){+.-.}, at: [<000000008ea98b12>] ioat_shutdown+0x86/0x100 [ioatdma]
         :
      [ 1223.524987] Chain exists of:
      [ 1223.524987]   (&ioat_chan->timer) --> &(&ioat_chan->cleanup_lock)->rlock --> &(&ioat_chan->prep_lock)->rlock
      [ 1223.524987]
      [ 1223.594082]  Possible unsafe locking scenario:
      [ 1223.594082]
      [ 1223.622630]        CPU0                    CPU1
      [ 1223.645080]        ----                    ----
      [ 1223.667404]   lock(&(&ioat_chan->prep_lock)->rlock);
      [ 1223.691535]                                lock(&(&ioat_chan->cleanup_lock)->rlock);
      [ 1223.728657]                                lock(&(&ioat_chan->prep_lock)->rlock);
      [ 1223.765122]   lock((&ioat_chan->timer));
      [ 1223.784095]
      [ 1223.784095]  *** DEADLOCK ***
      [ 1223.784095]
      [ 1223.813492] 4 locks held by systemd-shutdow/1:
      [ 1223.834677]  #0:  (reboot_mutex){+.+.}, at: [<0000000056d33456>] SYSC_reboot+0x10f/0x300
      [ 1223.873310]  #1:  (&dev->mutex){....}, at: [<00000000258dfdd7>] device_shutdown+0x1c8/0x660
      [ 1223.913604]  #2:  (&dev->mutex){....}, at: [<0000000068331147>] device_shutdown+0x1d6/0x660
      [ 1223.954000]  #3:  (&(&ioat_chan->prep_lock)->rlock){+.-.}, at: [<000000008ea98b12>] ioat_shutdown+0x86/0x100 [ioatdma]
      
      In the ioat_shutdown() function:
      
      	spin_lock_bh(&ioat_chan->prep_lock);
      	set_bit(IOAT_CHAN_DOWN, &ioat_chan->state);
      	del_timer_sync(&ioat_chan->timer);
      	spin_unlock_bh(&ioat_chan->prep_lock);
      
      According to the synchronization rule for the del_timer_sync() function,
      the caller must not hold locks which would prevent completion of the
      timer's handler.
      
      The timer structure has its own lock that manages its synchronization.
      Setting the IOAT_CHAN_DOWN bit should prevent other CPUs from
      trying to use that device anyway, there is probably no need to call
      del_timer_sync() while holding the prep_lock. So the del_timer_sync()
      call is now moved outside of the prep_lock critical section to prevent
      the circular lock dependency.
      Signed-off-by: default avatarWaiman Long <longman@redhat.com>
      Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      479cd3e8
    • Loic Poulain's avatar
      usb: chipidea: Prevent unbalanced IRQ disable · ae893bc6
      Loic Poulain authored
      [ Upstream commit 8b97d73c ]
      
      The ChipIdea IRQ is disabled before scheduling the otg work and
      re-enabled on otg work completion. However if the job is already
      scheduled we have to undo the effect of disable_irq int order to
      balance the IRQ disable-depth value.
      
      Fixes: be6b0c1b ("usb: chipidea: using one inline function to cover queue work operations")
      Signed-off-by: default avatarLoic Poulain <loic.poulain@linaro.org>
      Signed-off-by: default avatarPeter Chen <peter.chen@nxp.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ae893bc6
    • Horia Geantă's avatar
      crypto: caam - fix implicit casts in endianness helpers · ffa426d6
      Horia Geantă authored
      [ Upstream commit aae733a3 ]
      
      Fix the following sparse endianness warnings:
      
      drivers/crypto/caam/regs.h:95:1: sparse: incorrect type in return expression (different base types) @@    expected unsigned int @@    got restricted __le32unsigned int @@
      drivers/crypto/caam/regs.h:95:1:    expected unsigned int
      drivers/crypto/caam/regs.h:95:1:    got restricted __le32 [usertype] <noident>
      drivers/crypto/caam/regs.h:95:1: sparse: incorrect type in return expression (different base types) @@    expected unsigned int @@    got restricted __be32unsigned int @@
      drivers/crypto/caam/regs.h:95:1:    expected unsigned int
      drivers/crypto/caam/regs.h:95:1:    got restricted __be32 [usertype] <noident>
      
      drivers/crypto/caam/regs.h:92:1: sparse: cast to restricted __le32
      drivers/crypto/caam/regs.h:92:1: sparse: cast to restricted __be32
      
      Fixes: 261ea058 ("crypto: caam - handle core endianness != caam endianness")
      Reported-by: default avatarkbuild test robot <lkp@intel.com>
      Signed-off-by: default avatarHoria Geantă <horia.geanta@nxp.com>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ffa426d6
    • Suzuki K Poulose's avatar
      coresight: etb10: Fix handling of perf mode · 2048b787
      Suzuki K Poulose authored
      [ Upstream commit 987d1e8d ]
      
      If the ETB is already enabled in sysfs mode, the ETB reports
      success even if a perf mode is requested. Fix this by checking
      the requested mode.
      
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
      Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2048b787
    • Tonghao Zhang's avatar
      PCI/MSI: Warn and return error if driver enables MSI/MSI-X twice · a8433138
      Tonghao Zhang authored
      [ Upstream commit 4c1ef72e ]
      
      It is a serious driver defect to enable MSI or MSI-X more than once.  Doing
      so may panic the kernel as in the stack trace below:
      
        Call Trace:
          sysfs_add_one+0xa5/0xd0
          create_dir+0x7c/0xe0
          sysfs_create_subdir+0x1c/0x20
          internal_create_group+0x6d/0x290
          sysfs_create_groups+0x4a/0xa0
          populate_msi_sysfs+0x1cd/0x210
          pci_enable_msix+0x31c/0x3e0
          igbuio_pci_open+0x72/0x300 [igb_uio]
          uio_open+0xcc/0x120 [uio]
          chrdev_open+0xa1/0x1e0
          [...]
          do_sys_open+0xf3/0x1f0
          SyS_open+0x1e/0x20
          system_call_fastpath+0x16/0x1b
          ---[ end trace 11042e2848880209 ]---
          Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: ffffffffa056b4fa
      
      We want to keep the WARN_ON() and stack trace so the driver can be fixed,
      but we can avoid the kernel panic by returning an error.  We may still get
      warnings like this:
      
        Call Trace:
          pci_enable_msix+0x3c9/0x3e0
          igbuio_pci_open+0x72/0x300 [igb_uio]
          uio_open+0xcc/0x120 [uio]
          chrdev_open+0xa1/0x1e0
          [...]
          do_sys_open+0xf3/0x1f0
          SyS_open+0x1e/0x20
          system_call_fastpath+0x16/0x1b
          ------------[ cut here ]------------
          WARNING: at fs/sysfs/dir.c:526 sysfs_add_one+0xa5/0xd0()
          sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:03.0/0000:01:00.1/msi_irqs'
      Signed-off-by: default avatarTonghao Zhang <xiangxia.m.yue@gmail.com>
      [bhelgaas: changelog, fix patch whitespace, remove !!]
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a8433138
    • Shaohua Li's avatar
      MD: fix invalid stored role for a disk · 4e1fabdd
      Shaohua Li authored
      [ Upstream commit d595567d ]
      
      If we change the number of array's device after device is removed from array,
      then add the device back to array, we can see that device is added as active
      role instead of spare which we expected.
      
      Please see the below link for details:
      https://marc.info/?l=linux-raid&m=153736982015076&w=2
      
      This is caused by that we prefer to use device's previous role which is
      recorded by saved_raid_disk, but we should respect the new number of
      conf->raid_disks since it could be changed after device is removed.
      Reported-by: default avatarGioh Kim <gi-oh.kim@profitbricks.com>
      Tested-by: default avatarGioh Kim <gi-oh.kim@profitbricks.com>
      Acked-by: default avatarGuoqing Jiang <gqjiang@suse.com>
      Signed-off-by: default avatarShaohua Li <shli@fb.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4e1fabdd
    • Theodore Ts'o's avatar
      ext4: fix argument checking in EXT4_IOC_MOVE_EXT · 44760d8a
      Theodore Ts'o authored
      [ Upstream commit f18b2b83 ]
      
      If the starting block number of either the source or destination file
      exceeds the EOF, EXT4_IOC_MOVE_EXT should return EINVAL.
      
      Also fixed the helper function mext_check_coverage() so that if the
      logical block is beyond EOF, make it return immediately, instead of
      looping until the block number wraps all the away around.  This takes
      long enough that if there are multiple threads trying to do pound on
      an the same inode doing non-sensical things, it can end up triggering
      the kernel's soft lockup detector.
      
      Reported-by: syzbot+c61979f6f2cba5cb3c06@syzkaller.appspotmail.com
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Cc: stable@kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      44760d8a
    • Alexandre Belloni's avatar
      usb: gadget: udc: atmel: handle at91sam9rl PMC · e9f5a3d1
      Alexandre Belloni authored
      [ Upstream commit bb80e4fa ]
      
      The at91sam9rl PMC is not quite the same as the at91sam9g45 one and now has
      its own compatible string. Add support for that.
      
      Fixes: 217bace8e548 ("ARM: dts: fix PMC compatible")
      Acked-by: default avatarCristian Birsan <cristian.birsan@microchip.com>
      Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e9f5a3d1
    • Jorgen Hansen's avatar
      VMCI: Resource wildcard match fixed · 2b049a3b
      Jorgen Hansen authored
      [ Upstream commit 11924ba5 ]
      
      When adding a VMCI resource, the check for an existing entry
      would ignore that the new entry could be a wildcard. This could
      result in multiple resource entries that would match a given
      handle. One disastrous outcome of this is that the
      refcounting used to ensure that delayed callbacks for VMCI
      datagrams have run before the datagram is destroyed can be
      wrong, since the refcount could be increased on the duplicate
      entry. This in turn leads to a use after free bug. This issue
      was discovered by Hangbin Liu using KASAN and syzkaller.
      
      Fixes: bc63dedb ("VMCI: resource object implementation")
      Reported-by: default avatarHangbin Liu <liuhangbin@gmail.com>
      Reviewed-by: default avatarAdit Ranadive <aditr@vmware.com>
      Reviewed-by: default avatarVishnu Dasa <vdasa@vmware.com>
      Signed-off-by: default avatarJorgen Hansen <jhansen@vmware.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2b049a3b
    • Javier Martinez Canillas's avatar
      tpm: suppress transmit cmd error logs when TPM 1.2 is disabled/deactivated · e269ca18
      Javier Martinez Canillas authored
      [ Upstream commit 0d6d0d62 ]
      
      For TPM 1.2 chips the system setup utility allows to set the TPM device in
      one of the following states:
      
        * Active: Security chip is functional
        * Inactive: Security chip is visible, but is not functional
        * Disabled: Security chip is hidden and is not functional
      
      When choosing the "Inactive" state, the TPM 1.2 device is enumerated and
      registered, but sending TPM commands fail with either TPM_DEACTIVATED or
      TPM_DISABLED depending if the firmware deactivated or disabled the TPM.
      
      Since these TPM 1.2 error codes don't have special treatment, inactivating
      the TPM leads to a very noisy kernel log buffer that shows messages like
      the following:
      
        tpm_tis 00:05: 1.2 TPM (device-id 0x0, rev-id 78)
        tpm tpm0: A TPM error (6) occurred attempting to read a pcr value
        tpm tpm0: TPM is disabled/deactivated (0x6)
        tpm tpm0: A TPM error (6) occurred attempting get random
        tpm tpm0: A TPM error (6) occurred attempting to read a pcr value
        ima: No TPM chip found, activating TPM-bypass! (rc=6)
        tpm tpm0: A TPM error (6) occurred attempting get random
        tpm tpm0: A TPM error (6) occurred attempting get random
        tpm tpm0: A TPM error (6) occurred attempting get random
        tpm tpm0: A TPM error (6) occurred attempting get random
      
      Let's just suppress error log messages for the TPM_{DEACTIVATED,DISABLED}
      return codes, since this is expected when the TPM 1.2 is set to Inactive.
      
      In that case the kernel log is cleaner and less confusing for users, i.e:
      
        tpm_tis 00:05: 1.2 TPM (device-id 0x0, rev-id 78)
        tpm tpm0: TPM is disabled/deactivated (0x6)
        ima: No TPM chip found, activating TPM-bypass! (rc=6)
      Reported-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
      Reviewed-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
      Signed-off-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e269ca18
    • Denis Drozdov's avatar
      IB/ipoib: Clear IPCB before icmp_send · a48a3a51
      Denis Drozdov authored
      [ Upstream commit 4d6e4d12 ]
      
      IPCB should be cleared before icmp_send, since it may contain data from
      previous layers and the data could be misinterpreted as ip header options,
      which later caused the ihl to be set to an invalid value and resulted in
      the following stack corruption:
      
      [ 1083.031512] ib0: packet len 57824 (> 2048) too long to send, dropping
      [ 1083.031843] ib0: packet len 37904 (> 2048) too long to send, dropping
      [ 1083.032004] ib0: packet len 4040 (> 2048) too long to send, dropping
      [ 1083.032253] ib0: packet len 63800 (> 2048) too long to send, dropping
      [ 1083.032481] ib0: packet len 23960 (> 2048) too long to send, dropping
      [ 1083.033149] ib0: packet len 63800 (> 2048) too long to send, dropping
      [ 1083.033439] ib0: packet len 63800 (> 2048) too long to send, dropping
      [ 1083.033700] ib0: packet len 63800 (> 2048) too long to send, dropping
      [ 1083.034124] ib0: packet len 63800 (> 2048) too long to send, dropping
      [ 1083.034387] ==================================================================
      [ 1083.034602] BUG: KASAN: stack-out-of-bounds in __ip_options_echo+0xf08/0x1310
      [ 1083.034798] Write of size 4 at addr ffff880353457c5f by task kworker/u16:0/7
      [ 1083.034990]
      [ 1083.035104] CPU: 7 PID: 7 Comm: kworker/u16:0 Tainted: G           O      4.19.0-rc5+ #1
      [ 1083.035316] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu2 04/01/2014
      [ 1083.035573] Workqueue: ipoib_wq ipoib_cm_skb_reap [ib_ipoib]
      [ 1083.035750] Call Trace:
      [ 1083.035888]  dump_stack+0x9a/0xeb
      [ 1083.036031]  print_address_description+0xe3/0x2e0
      [ 1083.036213]  kasan_report+0x18a/0x2e0
      [ 1083.036356]  ? __ip_options_echo+0xf08/0x1310
      [ 1083.036522]  __ip_options_echo+0xf08/0x1310
      [ 1083.036688]  icmp_send+0x7b9/0x1cd0
      [ 1083.036843]  ? icmp_route_lookup.constprop.9+0x1070/0x1070
      [ 1083.037018]  ? netif_schedule_queue+0x5/0x200
      [ 1083.037180]  ? debug_show_all_locks+0x310/0x310
      [ 1083.037341]  ? rcu_dynticks_curr_cpu_in_eqs+0x85/0x120
      [ 1083.037519]  ? debug_locks_off+0x11/0x80
      [ 1083.037673]  ? debug_check_no_obj_freed+0x207/0x4c6
      [ 1083.037841]  ? check_flags.part.27+0x450/0x450
      [ 1083.037995]  ? debug_check_no_obj_freed+0xc3/0x4c6
      [ 1083.038169]  ? debug_locks_off+0x11/0x80
      [ 1083.038318]  ? skb_dequeue+0x10e/0x1a0
      [ 1083.038476]  ? ipoib_cm_skb_reap+0x2b5/0x650 [ib_ipoib]
      [ 1083.038642]  ? netif_schedule_queue+0xa8/0x200
      [ 1083.038820]  ? ipoib_cm_skb_reap+0x544/0x650 [ib_ipoib]
      [ 1083.038996]  ipoib_cm_skb_reap+0x544/0x650 [ib_ipoib]
      [ 1083.039174]  process_one_work+0x912/0x1830
      [ 1083.039336]  ? wq_pool_ids_show+0x310/0x310
      [ 1083.039491]  ? lock_acquire+0x145/0x3a0
      [ 1083.042312]  worker_thread+0x87/0xbb0
      [ 1083.045099]  ? process_one_work+0x1830/0x1830
      [ 1083.047865]  kthread+0x322/0x3e0
      [ 1083.050624]  ? kthread_create_worker_on_cpu+0xc0/0xc0
      [ 1083.053354]  ret_from_fork+0x3a/0x50
      
      For instance __ip_options_echo is failing to proceed with invalid srr and
      optlen passed from another layer via IPCB
      
      [  762.139568] IPv4: __ip_options_echo rr=0 ts=0 srr=43 cipso=0
      [  762.139720] IPv4: ip_options_build: IPCB 00000000f3cd969e opt 000000002ccb3533
      [  762.139838] IPv4: __ip_options_echo in srr: optlen 197 soffset 84
      [  762.139852] IPv4: ip_options_build srr=0 is_frag=0 rr_needaddr=0 ts_needaddr=0 ts_needtime=0 rr=0 ts=0
      [  762.140269] ==================================================================
      [  762.140713] IPv4: __ip_options_echo rr=0 ts=0 srr=0 cipso=0
      [  762.141078] BUG: KASAN: stack-out-of-bounds in __ip_options_echo+0x12ec/0x1680
      [  762.141087] Write of size 4 at addr ffff880353457c7f by task kworker/u16:0/7
      Signed-off-by: default avatarDenis Drozdov <denisd@mellanox.com>
      Reviewed-by: default avatarErez Shitrit <erezsh@mellanox.com>
      Reviewed-by: default avatarFeras Daoud <ferasda@mellanox.com>
      Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a48a3a51
    • Parav Pandit's avatar
      RDMA/core: Do not expose unsupported counters · 2537f9ad
      Parav Pandit authored
      [ Upstream commit 0f6ef65d ]
      
      If the provider driver (such as rdma_rxe) doesn't support pma counters,
      avoid exposing its directory similar to optional hw_counters directory.
      If core fails to read the PMA counter, return an error so that user can
      retry later if needed.
      
      Fixes: 35c4cbb1 ("IB/core: Create get_perf_mad function in sysfs.c")
      Reported-by: default avatarHolger Hoffstätte <holger@applied-asynchrony.com>
      Tested-by: default avatarHolger Hoffstätte <holger@applied-asynchrony.com>
      Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
      Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2537f9ad
    • Wenwen Wang's avatar
      scsi: megaraid_sas: fix a missing-check bug · b18de4e8
      Wenwen Wang authored
      [ Upstream commit 47db7873 ]
      
      In megasas_mgmt_compat_ioctl_fw(), to handle the structure
      compat_megasas_iocpacket 'cioc', a user-space structure megasas_iocpacket
      'ioc' is allocated before megasas_mgmt_ioctl_fw() is invoked to handle
      the packet. Since the two data structures have different fields, the data
      is copied from 'cioc' to 'ioc' field by field. In the copy process,
      'sense_ptr' is prepared if the field 'sense_len' is not null, because it
      will be used in megasas_mgmt_ioctl_fw(). To prepare 'sense_ptr', the
      user-space data 'ioc->sense_off' and 'cioc->sense_off' are copied and
      saved to kernel-space variables 'local_sense_off' and 'user_sense_off'
      respectively. Given that 'ioc->sense_off' is also copied from
      'cioc->sense_off', 'local_sense_off' and 'user_sense_off' should have the
      same value. However, 'cioc' is in the user space and a malicious user can
      race to change the value of 'cioc->sense_off' after it is copied to
      'ioc->sense_off' but before it is copied to 'user_sense_off'. By doing
      so, the attacker can inject different values into 'local_sense_off' and
      'user_sense_off'. This can cause undefined behavior in the following
      execution, because the two variables are supposed to be same.
      
      This patch enforces a check on the two kernel variables 'local_sense_off'
      and 'user_sense_off' to make sure they are the same after the copy. In
      case they are not, an error code EINVAL will be returned.
      Signed-off-by: default avatarWenwen Wang <wang6495@umn.edu>
      Acked-by: default avatarSumit Saxena <sumit.saxena@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b18de4e8
    • Finn Thain's avatar
      scsi: esp_scsi: Track residual for PIO transfers · 57589690
      Finn Thain authored
      [ Upstream commit fd47d919 ]
      
      If a target disconnects during a PIO data transfer the command may fail
      when the target reconnects:
      
      scsi host1: DMA length is zero!
      scsi host1: cur adr[04380000] len[00000000]
      
      The scsi bus is then reset. This happens because the residual reached
      zero before the transfer was completed.
      
      The usual residual calculation relies on the Transfer Count registers.
      That works for DMA transfers but not for PIO transfers. Fix the problem
      by storing the PIO transfer residual and using that to correctly
      calculate bytes_sent.
      
      Fixes: 6fe07aaf ("[SCSI] m68k: new mac_esp scsi driver")
      Tested-by: default avatarStan Johnson <userm57@yahoo.com>
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Tested-by: default avatarMichael Schmitz <schmitzmic@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      57589690
    • Michal Hocko's avatar
      cgroup, netclassid: add a preemption point to write_classid · 3f413ec0
      Michal Hocko authored
      [ Upstream commit a90e90b7 ]
      
      We have seen a customer complaining about soft lockups on !PREEMPT
      kernel config with 4.4 based kernel
      
      [1072141.435366] NMI watchdog: BUG: soft lockup - CPU#21 stuck for 22s! [systemd:1]
      [1072141.444090] Modules linked in: mpt3sas raid_class binfmt_misc af_packet 8021q garp mrp stp llc xfs libcrc32c bonding iscsi_ibft iscsi_boot_sysfs msr ext4 crc16 jbd2 mbcache cdc_ether usbnet mii joydev hid_generic usbhid intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel ipmi_ssif mgag200 i2c_algo_bit ttm ipmi_devintf drbg ixgbe drm_kms_helper vxlan ansi_cprng ip6_udp_tunnel drm aesni_intel udp_tunnel aes_x86_64 iTCO_wdt syscopyarea ptp xhci_pci lrw iTCO_vendor_support pps_core gf128mul ehci_pci glue_helper sysfillrect mdio pcspkr sb_edac ablk_helper cryptd ehci_hcd sysimgblt xhci_hcd fb_sys_fops edac_core mei_me lpc_ich ses usbcore enclosure dca mfd_core ipmi_si mei i2c_i801 scsi_transport_sas usb_common ipmi_msghandler shpchp fjes wmi processor button acpi_pad btrfs xor raid6_pq sd_mod crc32c_intel megaraid_sas sg dm_multipath dm_mod scsi_dh_rdac scsi_dh_emc scsi_dh_alua scsi_mod md_mod autofs4
      [1072141.444146] Supported: Yes
      [1072141.444149] CPU: 21 PID: 1 Comm: systemd Not tainted 4.4.121-92.80-default #1
      [1072141.444150] Hardware name: LENOVO Lenovo System x3650 M5 -[5462P4U]- -[5462P4U]-/01GR451, BIOS -[TCE136H-2.70]- 06/13/2018
      [1072141.444151] task: ffff880191bd0040 ti: ffff880191bd4000 task.ti: ffff880191bd4000
      [1072141.444153] RIP: 0010:[<ffffffff815229f9>]  [<ffffffff815229f9>] update_classid_sock+0x29/0x40
      [1072141.444157] RSP: 0018:ffff880191bd7d58  EFLAGS: 00000286
      [1072141.444158] RAX: ffff883b177cb7c0 RBX: 0000000000000000 RCX: 0000000000000000
      [1072141.444159] RDX: 00000000000009c7 RSI: ffff880191bd7d5c RDI: ffff8822e29bb200
      [1072141.444160] RBP: ffff883a72230980 R08: 0000000000000101 R09: 0000000000000000
      [1072141.444161] R10: 0000000000000008 R11: f000000000000000 R12: ffffffff815229d0
      [1072141.444162] R13: 0000000000000000 R14: ffff881fd0a47ac0 R15: ffff880191bd7f28
      [1072141.444163] FS:  00007f3e2f1eb8c0(0000) GS:ffff882000340000(0000) knlGS:0000000000000000
      [1072141.444164] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [1072141.444165] CR2: 00007f3e2f200000 CR3: 0000001ffea4e000 CR4: 00000000001606f0
      [1072141.444166] Stack:
      [1072141.444166]  ffffffa800000246 00000000000009c7 ffffffff8121d583 ffff8818312a05c0
      [1072141.444168]  ffff8818312a1100 ffff880197c3b280 ffff881861422858 ffffffffffffffea
      [1072141.444170]  ffffffff81522b1c ffffffff81d0ca20 ffff8817fa17b950 ffff883fdd8121e0
      [1072141.444171] Call Trace:
      [1072141.444179]  [<ffffffff8121d583>] iterate_fd+0x53/0x80
      [1072141.444182]  [<ffffffff81522b1c>] write_classid+0x4c/0x80
      [1072141.444187]  [<ffffffff8111328b>] cgroup_file_write+0x9b/0x100
      [1072141.444193]  [<ffffffff81278bcb>] kernfs_fop_write+0x11b/0x150
      [1072141.444198]  [<ffffffff81201566>] __vfs_write+0x26/0x100
      [1072141.444201]  [<ffffffff81201bed>] vfs_write+0x9d/0x190
      [1072141.444203]  [<ffffffff812028c2>] SyS_write+0x42/0xa0
      [1072141.444207]  [<ffffffff815f58c3>] entry_SYSCALL_64_fastpath+0x1e/0xca
      [1072141.445490] DWARF2 unwinder stuck at entry_SYSCALL_64_fastpath+0x1e/0xca
      
      If a cgroup has many tasks with many open file descriptors then we would
      end up in a large loop without any rescheduling point throught the
      operation. Add cond_resched once per task.
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3f413ec0
    • Martin Willi's avatar
      ath10k: schedule hardware restart if WMI command times out · 771d03e4
      Martin Willi authored
      [ Upstream commit a9911937 ]
      
      When running in AP mode, ath10k sometimes suffers from TX credit
      starvation. The issue is hard to reproduce and shows up once in a
      few days, but has been repeatedly seen with QCA9882 and a large
      range of firmwares, including 10.2.4.70.67.
      
      Once the module is in this state, TX credits are never replenished,
      which results in "SWBA overrun" errors, as no beacons can be sent.
      Even worse, WMI commands run in a timeout while holding the conf
      mutex for three seconds each, making any further operations slow
      and the whole system unresponsive.
      
      The firmware/driver never recovers from that state automatically,
      and triggering TX flush or warm restarts won't work over WMI. So
      issue a hardware restart if a WMI command times out due to missing
      TX credits. This implies a connectivity outage of about 1.4s in AP
      mode, but brings back the interface and the whole system to a usable
      state. WMI command timeouts have not been seen in absent of this
      specific issue, so taking such drastic actions seems legitimate.
      Signed-off-by: default avatarMartin Willi <martin@strongswan.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      771d03e4
    • Sebastian Basierski's avatar
      ixgbevf: VF2VF TCP RSS · 4444593f
      Sebastian Basierski authored
      [ Upstream commit 7fb94bd5 ]
      
      While VF2VF with RSS communication, RSS Type were wrongly recognized
      and RSS hash was not calculated as it should be. Packets was
      distributed on various queues by accident.
      This commit fixes that behaviour and causes proper RSS Type recognition.
      Signed-off-by: default avatarSebastian Basierski <sebastianx.basierski@intel.com>
      Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4444593f
    • Douglas Anderson's avatar
      pinctrl: ssbi-gpio: Fix pm8xxx_pin_config_get() to be compliant · 98933582
      Douglas Anderson authored
      [ Upstream commit b432414b ]
      
      If you look at "pinconf-groups" in debugfs for ssbi-gpio you'll notice
      it looks like nonsense.
      
      The problem is fairly well described in commit 1cf86bc2 ("pinctrl:
      qcom: spmi-gpio: Fix pmic_gpio_config_get() to be compliant") and
      commit 05e0c828 ("pinctrl: msm: Fix msm_config_group_get() to be
      compliant"), but it was pointed out that ssbi-gpio has the same
      problem.  Let's fix it there too.
      
      Fixes: b4c45fe9 ("pinctrl: qcom: ssbi: Family A gpio & mpp drivers")
      Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
      Reviewed-by: default avatarStephen Boyd <sboyd@kernel.org>
      Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      98933582
    • Douglas Anderson's avatar
      pinctrl: spmi-mpp: Fix pmic_mpp_config_get() to be compliant · 3b95f649
      Douglas Anderson authored
      [ Upstream commit 0d5b476f ]
      
      If you look at "pinconf-groups" in debugfs for ssbi-mpp you'll notice
      it looks like nonsense.
      
      The problem is fairly well described in commit 1cf86bc2 ("pinctrl:
      qcom: spmi-gpio: Fix pmic_gpio_config_get() to be compliant") and
      commit 05e0c828 ("pinctrl: msm: Fix msm_config_group_get() to be
      compliant"), but it was pointed out that ssbi-mpp has the same
      problem.  Let's fix it there too.
      
      NOTE: in case it's helpful to someone reading this, the way to tell
      whether to do the -EINVAL or not is to look at the PCONFDUMP for a
      given attribute.  If the last element (has_arg) is false then you need
      to do the -EINVAL trick.
      
      ALSO NOTE: it seems unlikely that the values returned when we try to
      get PIN_CONFIG_BIAS_PULL_UP will actually be printed since "has_arg"
      is false for that one, but I guess it's still fine to return different
      values so I kept doing that.  It seems like another driver (ssbi-gpio)
      uses a custom attribute (PM8XXX_QCOM_PULL_UP_STRENGTH) for something
      similar so maybe a future change should do that here too.
      
      Fixes: cfb24f6e ("pinctrl: Qualcomm SPMI PMIC MPP pin controller driver")
      Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
      Reviewed-by: default avatarStephen Boyd <sboyd@kernel.org>
      Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3b95f649
    • Stephen Boyd's avatar
      pinctrl: qcom: spmi-mpp: Fix drive strength setting · dbd7095b
      Stephen Boyd authored
      [ Upstream commit 89c68b10 ]
      
      It looks like we parse the drive strength setting here, but never
      actually write it into the hardware to update it. Parse the setting and
      then write it at the end of the pinconf setting function so that it
      actually sticks in the hardware.
      
      Fixes: 0e948042 ("pinctrl: qcom: spmi-mpp: Implement support for sink mode")
      Cc: Doug Anderson <dianders@chromium.org>
      Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
      Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      dbd7095b
    • Hans de Goede's avatar
      ACPI / LPSS: Add alternative ACPI HIDs for Cherry Trail DMA controllers · 0b915343
      Hans de Goede authored
      [ Upstream commit 24071406 ]
      
      Bay and Cherry Trail DSTDs represent a different set of devices depending
      on which OS the device think it is booting. One set of decices for Windows
      and another set of devices for Android which targets the Android-x86 Linux
      kernel fork (which e.g. used to have its own display driver instead of
      using the i915 driver).
      
      Which set of devices we are actually going to get is out of our control,
      this is controlled by the ACPI OSID variable, which gets either set through
      an EFI setup option, or sometimes is autodetected. So we need to support
      both.
      
      This commit adds support for the 80862286 and 808622C0 ACPI HIDs which we
      get for the first resp. second DMA controller on Cherry Trail devices when
      OSID is set to Android.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0b915343
    • Masami Hiramatsu's avatar
      kprobes: Return error if we fail to reuse kprobe instead of BUG_ON() · 6c8b1db8
      Masami Hiramatsu authored
      [ Upstream commit 819319fc ]
      
      Make reuse_unused_kprobe() to return error code if
      it fails to reuse unused kprobe for optprobe instead
      of calling BUG_ON().
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
      Cc: David S . Miller <davem@davemloft.net>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Naveen N . Rao <naveen.n.rao@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/153666124040.21306.14150398706331307654.stgit@devboxSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6c8b1db8
    • Arend van Spriel's avatar
      brcmfmac: fix for proper support of 160MHz bandwidth · d5b19a43
      Arend van Spriel authored
      [ Upstream commit 330994e8 ]
      
      Decoding of firmware channel information was not complete for 160MHz
      support. This resulted in the following warning:
      
        WARNING: CPU: 2 PID: 2222 at .../broadcom/brcm80211/brcmutil/d11.c:196
      	brcmu_d11ac_decchspec+0x2e/0x100 [brcmutil]
        Modules linked in: brcmfmac(O) brcmutil(O) sha256_generic cfg80211 ...
        CPU: 2 PID: 2222 Comm: kworker/2:0 Tainted: G           O
        4.17.0-wt-testing-x64-00002-gf1bed50 #1
        Hardware name: Dell Inc. Latitude E6410/07XJP9, BIOS A07 02/15/2011
        Workqueue: events request_firmware_work_func
        RIP: 0010:brcmu_d11ac_decchspec+0x2e/0x100 [brcmutil]
        RSP: 0018:ffffc90000047bd0 EFLAGS: 00010206
        RAX: 000000000000e832 RBX: ffff8801146fe910 RCX: ffff8801146fd3c0
        RDX: 0000000000002800 RSI: 0000000000000070 RDI: ffffc90000047c30
        RBP: ffffc90000047bd0 R08: 0000000000000000 R09: ffffffffa0798c80
        R10: ffff88012bca55e0 R11: ffff880110a4ea00 R12: ffff8801146f8000
        R13: ffffc90000047c30 R14: ffff8801146fe930 R15: ffff8801138e02e0
        FS:  0000000000000000(0000) GS:ffff88012bc80000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 00007f18ce8b8070 CR3: 000000000200a003 CR4: 00000000000206e0
        Call Trace:
         brcmf_setup_wiphybands+0x212/0x780 [brcmfmac]
         brcmf_cfg80211_attach+0xae2/0x11a0 [brcmfmac]
         brcmf_attach+0x1fc/0x4b0 [brcmfmac]
         ? __kmalloc+0x13c/0x1c0
         brcmf_pcie_setup+0x99b/0xe00 [brcmfmac]
         brcmf_fw_request_done+0x16a/0x1f0 [brcmfmac]
         request_firmware_work_func+0x36/0x60
         process_one_work+0x146/0x350
         worker_thread+0x4a/0x3b0
         kthread+0x102/0x140
         ? process_one_work+0x350/0x350
         ? kthread_bind+0x20/0x20
         ret_from_fork+0x35/0x40
        Code: 66 90 0f b7 07 55 48 89 e5 89 c2 88 47 02 88 47 03 66 81 e2 00 38
      	66 81 fa 00 18 74 6e 66 81 fa 00 20 74 39 66 81 fa 00 10 74 14 <0f>
      	0b 66 25 00 c0 74 20 66 3d 00 c0 75 20 c6 47 04 01 5d c3 66
        ---[ end trace 550c46682415b26d ]---
        brcmfmac: brcmf_construct_chaninfo: Ignoring unexpected firmware channel 50
      
      This patch adds the missing stuff to properly handle this.
      Reviewed-by: default avatarHante Meuleman <hante.meuleman@broadcom.com>
      Reviewed-by: default avatarPieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
      Reviewed-by: default avatarFranky Lin <franky.lin@broadcom.com>
      Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d5b19a43
    • YueHaibing's avatar
      pinctrl: qcom: spmi-mpp: Fix err handling of pmic_mpp_set_mux · 8bcc01ae
      YueHaibing authored
      [ Upstream commit 69f8455f ]
      
      'ret' should be returned while pmic_mpp_write_mode_ctl fails.
      
      Fixes: 0e948042 ("pinctrl: qcom: spmi-mpp: Implement support for sink mode")
      Signed-off-by: default avatarYueHaibing <yuehaibing@huawei.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8bcc01ae
    • Ben Hutchings's avatar
      x86: boot: Fix EFI stub alignment · 24395d64
      Ben Hutchings authored
      [ Upstream commit 9c1442a9 ]
      
      We currently align the end of the compressed image to a multiple of
      16.  However, the PE-COFF header included in the EFI stub says that
      the file alignment is 32 bytes, and when adding an EFI signature to
      the file it must first be padded to this alignment.
      
      sbsigntool commands warn about this:
      
        warning: file-aligned section .text extends beyond end of file
        warning: checksum areas are greater than image size. Invalid section table?
      
      Worse, pesign -at least when creating a detached signature- uses the
      hash of the unpadded file, resulting in an invalid signature if
      padding is required.
      
      Avoid both these problems by increasing alignment to 32 bytes when
      CONFIG_EFI_STUB is enabled.
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      24395d64
    • Christian Hewitt's avatar
      Bluetooth: btbcm: Add entry for BCM4335C0 UART bluetooth · 21a5ff20
      Christian Hewitt authored
      [ Upstream commit a357ea09 ]
      
      This patch adds the device ID for the AMPAK AP6335 combo module used
      in the 1st generation WeTek Hub Android/LibreELEC HTPC box. The WiFI
      chip identifies itself as BCM4339, while Bluetooth identifies itself
      as BCM4335 (rev C0):
      
      ```
      [    4.864248] Bluetooth: hci0: BCM: chip id 86
      [    4.866388] Bluetooth: hci0: BCM: features 0x2f
      [    4.889317] Bluetooth: hci0: BCM4335C0
      [    4.889332] Bluetooth: hci0: BCM4335C0 (003.001.009) build 0000
      [    9.778383] Bluetooth: hci0: BCM4335C0 (003.001.009) build 0268
      ```
      
      Output from hciconfig:
      
      ```
      hci0:	Type: Primary  Bus: UART
      	BD Address: 43:39:00:00:1F:AC  ACL MTU: 1021:8  SCO MTU: 64:1
      	UP RUNNING
      	RX bytes:7567 acl:234 sco:0 events:386 errors:0
      	TX bytes:53844 acl:77 sco:0 commands:304 errors:0
      	Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
      	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
      	Link policy: RSWITCH SNIFF
      	Link mode: SLAVE ACCEPT
      	Name: 'HUB'
      	Class: 0x0c0000
      	Service Classes: Rendering, Capturing
      	Device Class: Miscellaneous,
      	HCI Version: 4.0 (0x6)  Revision: 0x10c
      	LMP Version: 4.0 (0x6)  Subversion: 0x6109
      	Manufacturer: Broadcom Corporation (15)
      ```
      Signed-off-by: default avatarChristian Hewitt <christianshewitt@gmail.com>
      Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      21a5ff20
    • Viresh Kumar's avatar
      cpufreq: dt: Try freeing static OPPs only if we have added them · 36cce138
      Viresh Kumar authored
      [ Upstream commit 51c99dd2 ]
      
      We can not call dev_pm_opp_of_cpumask_remove_table() freely anymore
      since the latest OPP core updates as that uses reference counting to
      free resources. There are cases where no static OPPs are added (using
      DT) for a platform and trying to remove the OPP table may end up
      decrementing refcount which is already zero and hence generating
      warnings.
      
      Lets track if we were able to add static OPPs or not and then only
      remove the table based on that. Some reshuffling of code is also done to
      do that.
      Reported-by: default avatarNiklas Cassel <niklas.cassel@linaro.org>
      Tested-by: default avatarNiklas Cassel <niklas.cassel@linaro.org>
      Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      36cce138
    • Lubomir Rintel's avatar
      x86/olpc: Indicate that legacy PC XO-1 platform should not register RTC · a25ba419
      Lubomir Rintel authored
      [ Upstream commit d92116b8 ]
      
      On OLPC XO-1, the RTC is discovered via device tree from the arch
      initcall. Don't let the PC platform register another one from its device
      initcall, it's not going to work:
      
        sysfs: cannot create duplicate filename '/devices/platform/rtc_cmos'
        CPU: 0 PID: 1 Comm: swapper Not tainted 4.19.0-rc6 #12
        Hardware name: OLPC XO/XO, BIOS OLPC Ver 1.00.01 06/11/2014
        Call Trace:
         dump_stack+0x16/0x18
         sysfs_warn_dup+0x46/0x58
         sysfs_create_dir_ns+0x76/0x9b
         kobject_add_internal+0xed/0x209
         ? __schedule+0x3fa/0x447
         kobject_add+0x5b/0x66
         device_add+0x298/0x535
         ? insert_resource_conflict+0x2a/0x3e
         platform_device_add+0x14d/0x192
         ? io_delay_init+0x19/0x19
         platform_device_register+0x1c/0x1f
         add_rtc_cmos+0x16/0x31
         do_one_initcall+0x78/0x14a
         ? do_early_param+0x75/0x75
         kernel_init_freeable+0x152/0x1e0
         ? rest_init+0xa2/0xa2
         kernel_init+0x8/0xd5
         ret_from_fork+0x2e/0x38
        kobject_add_internal failed for rtc_cmos with -EEXIST, don't try to
          register things with the same name in the same directory.
        platform rtc_cmos: registered platform RTC device (no PNP device found)
      Signed-off-by: default avatarLubomir Rintel <lkundrak@v3.sk>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      CC: "H. Peter Anvin" <hpa@zytor.com>
      CC: Ingo Molnar <mingo@redhat.com>
      CC: x86-ml <x86@kernel.org>
      Link: http://lkml.kernel.org/r/20181004160808.307738-1-lkundrak@v3.skSigned-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a25ba419
    • Shaul Triebitz's avatar
      iwlwifi: pcie: avoid empty free RB queue · 3ba19f96
      Shaul Triebitz authored
      [ Upstream commit 868a1e86 ]
      
      If all free RB queues are empty, the driver will never restock the
      free RB queue.  That's because the restocking happens in the Rx flow,
      and if the free queue is empty there will be no Rx.
      
      Although there's a background worker (a.k.a. allocator) allocating
      memory for RBs so that the Rx handler can restock them, the worker may
      run only after the free queue has become empty (and then it is too
      late for restocking as explained above).
      
      There is a solution for that called 'emergency': If the number of used
      RB's reaches half the amount of all RB's, the Rx handler will not wait
      for the allocator but immediately allocate memory for the used RB's
      and restock the free queue.
      
      But, since the used RB's is per queue, it may happen that the used
      RB's are spread between the queues such that the emergency check will
      fail for each of the queues
      (and still run out of RBs, causing the above symptom).
      
      To fix it, move to emergency mode if the sum of *all* used RBs (for
      all Rx queues) reaches half the amount of all RB's
      Signed-off-by: default avatarShaul Triebitz <shaul.triebitz@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3ba19f96
    • Yu Zhao's avatar
      mmc: sdhci-pci-o2micro: Add quirk for O2 Micro dev 0x8620 rev 0x01 · 7e3f3319
      Yu Zhao authored
      [ Upstream commit 51698949 ]
      
      This device reports SDHCI_CLOCK_INT_STABLE even though it's not
      ready to take SDHCI_CLOCK_CARD_EN. The symptom is that reading
      SDHCI_CLOCK_CONTROL after enabling the clock shows absence of the
      bit from the register (e.g. expecting 0x0000fa07 = 0x0000fa03 |
      SDHCI_CLOCK_CARD_EN but only observed the first operand).
      
      mmc1: Timeout waiting for hardware cmd interrupt.
      mmc1: sdhci: ============ SDHCI REGISTER DUMP ===========
      mmc1: sdhci: Sys addr:  0x00000000 | Version:  0x00000603
      mmc1: sdhci: Blk size:  0x00000000 | Blk cnt:  0x00000000
      mmc1: sdhci: Argument:  0x00000000 | Trn mode: 0x00000000
      mmc1: sdhci: Present:   0x01ff0001 | Host ctl: 0x00000001
      mmc1: sdhci: Power:     0x0000000f | Blk gap:  0x00000000
      mmc1: sdhci: Wake-up:   0x00000000 | Clock:    0x0000fa03
      mmc1: sdhci: Timeout:   0x00000000 | Int stat: 0x00000000
      mmc1: sdhci: Int enab:  0x00ff0083 | Sig enab: 0x00ff0083
      mmc1: sdhci: AC12 err:  0x00000000 | Slot int: 0x00000000
      mmc1: sdhci: Caps:      0x25fcc8bf | Caps_1:   0x00002077
      mmc1: sdhci: Cmd:       0x00000000 | Max curr: 0x005800c8
      mmc1: sdhci: Resp[0]:   0x00000000 | Resp[1]:  0x00000000
      mmc1: sdhci: Resp[2]:   0x00000000 | Resp[3]:  0x00000000
      mmc1: sdhci: Host ctl2: 0x00000008
      mmc1: sdhci: ADMA Err:  0x00000000 | ADMA Ptr: 0x00000000
      mmc1: sdhci: ============================================
      
      The problem happens during wakeup from S3. Adding a delay quirk
      after power up reliably fixes the problem.
      Signed-off-by: default avatarYu Zhao <yuzhao@google.com>
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7e3f3319
    • Sanskriti Sharma's avatar
      perf strbuf: Match va_{add,copy} with va_end · af414f34
      Sanskriti Sharma authored
      [ Upstream commit ce49d843 ]
      
      Ensure that all code paths in strbuf_addv() call va_end() on the
      ap_saved copy that was made.
      
      Fixes the following coverity complaint:
      
        Error: VARARGS (CWE-237): [#def683]
        tools/perf/util/strbuf.c:106: missing_va_end: va_end was not called
        for "ap_saved".
      Signed-off-by: default avatarSanskriti Sharma <sansharm@redhat.com>
      Reviewed-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Joe Lawrence <joe.lawrence@redhat.com>
      Link: http://lkml.kernel.org/r/1538490554-8161-2-git-send-email-sansharm@redhat.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      af414f34
    • Sanskriti Sharma's avatar
      perf tools: Cleanup trace-event-info 'tdata' leak · 0af42d67
      Sanskriti Sharma authored
      [ Upstream commit faedbf3f ]
      
      Free tracing_data structure in tracing_data_get() error paths.
      
      Fixes the following coverity complaint:
      
        Error: RESOURCE_LEAK (CWE-772):
        leaked_storage: Variable "tdata" going out of scope leaks the storage
      Signed-off-by: default avatarSanskriti Sharma <sansharm@redhat.com>
      Reviewed-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Joe Lawrence <joe.lawrence@redhat.com>
      Link: http://lkml.kernel.org/r/1538490554-8161-3-git-send-email-sansharm@redhat.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0af42d67
    • Sanskriti Sharma's avatar
      perf tools: Free temporary 'sys' string in read_event_files() · 401bd18c
      Sanskriti Sharma authored
      [ Upstream commit 1e44224f ]
      
      For each system in a given pevent, read_event_files() reads in a
      temporary 'sys' string.  Be sure to free this string before moving onto
      to the next system and/or leaving read_event_files().
      
      Fixes the following coverity complaints:
      
        Error: RESOURCE_LEAK (CWE-772):
      
        tools/perf/util/trace-event-read.c:343: overwrite_var: Overwriting
        "sys" in "sys = read_string()" leaks the storage that "sys" points to.
      
        tools/perf/util/trace-event-read.c:353: leaked_storage: Variable "sys"
        going out of scope leaks the storage it points to.
      Signed-off-by: default avatarSanskriti Sharma <sansharm@redhat.com>
      Reviewed-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Joe Lawrence <joe.lawrence@redhat.com>
      Link: http://lkml.kernel.org/r/1538490554-8161-6-git-send-email-sansharm@redhat.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      401bd18c
    • Thierry Reding's avatar
      hwmon: (pwm-fan) Set fan speed to 0 on suspend · 912d51f2
      Thierry Reding authored
      [ Upstream commit 95dcd64b ]
      
      Technically this is not required because disabling the PWM should be
      enough. However, when support for atomic operations was implemented in
      the PWM subsystem, only actual changes to the PWM channel are applied
      during pwm_config(), which means that during after resume from suspend
      the old settings won't be applied.
      
      One possible solution is for the PWM driver to implement its own PM
      operations such that settings from before suspend get applied on resume.
      This has the disadvantage of completely ignoring any particular ordering
      requirements that PWM user drivers might have, so it is best to leave it
      up to the user drivers to apply the settings that they want at the
      appropriate time.
      
      Another way to solve this would be to read back the current state of the
      PWM at the time of resume. That way, in case the configuration was lost
      during suspend, applying the old settings in PWM user drivers would
      actually get them applied because they differ from the current settings.
      However, not all PWM drivers support reading the hardware state, and not
      all hardware may support it.
      
      The best workaround at this point seems to be to let PWM user drivers
      tell the PWM subsystem that the PWM is turned off by, in addition to
      disabling it, also setting the duty cycle to 0. This causes the resume
      operation to apply a configuration that is different from the current
      configuration, resulting in the proper state from before suspend getting
      restored.
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      912d51f2
    • Janosch Frank's avatar
      s390/sthyi: Fix machine name validity indication · fccb699c
      Janosch Frank authored
      [ Upstream commit b5130dc2 ]
      
      When running as a level 3 guest with no host provided sthyi support
      sclp_ocf_cpc_name_copy() will only return zeroes. Zeroes are not a
      valid group name, so let's not indicate that the group name field is
      valid.
      
      Also the group name is not dependent on stsi, let's not return based
      on stsi before setting it.
      
      Fixes: 95ca2cb5 ("KVM: s390: Add sthyi emulation")
      Signed-off-by: default avatarJanosch Frank <frankja@linux.ibm.com>
      Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fccb699c
    • Serhey Popovych's avatar
      tun: Consistently configure generic netdev params via rtnetlink · 5f008fce
      Serhey Popovych authored
      [ Upstream commit df52eab2 ]
      
      Configuring generic network device parameters on tun will fail in
      presence of IFLA_INFO_KIND attribute in IFLA_LINKINFO nested attribute
      since tun_validate() always return failure.
      
      This can be visualized with following ip-link(8) command sequences:
      
        # ip link set dev tun0 group 100
        # ip link set dev tun0 group 100 type tun
        RTNETLINK answers: Invalid argument
      
      with contrast to dummy and veth drivers:
      
        # ip link set dev dummy0 group 100
        # ip link set dev dummy0 type dummy
      
        # ip link set dev veth0 group 100
        # ip link set dev veth0 group 100 type veth
      
      Fix by returning zero in tun_validate() when @data is NULL that is
      always in case since rtnl_link_ops->maxtype is zero in tun driver.
      
      Fixes: f019a7a5 ("tun: Implement ip link del tunXXX")
      Signed-off-by: default avatarSerhey Popovych <serhe.popovych@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5f008fce
    • Omar Sandoval's avatar
      swim: fix cleanup on setup error · a2b544ef
      Omar Sandoval authored
      [ Upstream commit 1448a2a5 ]
      
      If we fail to allocate the request queue for a disk, we still need to
      free that disk, not just the previous ones. Additionally, we need to
      cleanup the previous request queues.
      Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a2b544ef
    • Omar Sandoval's avatar
      ataflop: fix error handling during setup · 0915f562
      Omar Sandoval authored
      [ Upstream commit 71327f54 ]
      
      Move queue allocation next to disk allocation to fix a couple of issues:
      
      - If add_disk() hasn't been called, we should clear disk->queue before
        calling put_disk().
      - If we fail to allocate a request queue, we still need to put all of
        the disks, not just the ones that we allocated queues for.
      Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0915f562
    • Waiman Long's avatar
      locking/lockdep: Fix debug_locks off performance problem · 81301a15
      Waiman Long authored
      [ Upstream commit 9506a742 ]
      
      It was found that when debug_locks was turned off because of a problem
      found by the lockdep code, the system performance could drop quite
      significantly when the lock_stat code was also configured into the
      kernel. For instance, parallel kernel build time on a 4-socket x86-64
      server nearly doubled.
      
      Further analysis into the cause of the slowdown traced back to the
      frequent call to debug_locks_off() from the __lock_acquired() function
      probably due to some inconsistent lockdep states with debug_locks
      off. The debug_locks_off() function did an unconditional atomic xchg
      to write a 0 value into debug_locks which had already been set to 0.
      This led to severe cacheline contention in the cacheline that held
      debug_locks.  As debug_locks is being referenced in quite a few different
      places in the kernel, this greatly slow down the system performance.
      
      To prevent that trashing of debug_locks cacheline, lock_acquired()
      and lock_contended() now checks the state of debug_locks before
      proceeding. The debug_locks_off() function is also modified to check
      debug_locks before calling __debug_locks_off().
      Signed-off-by: default avatarWaiman Long <longman@redhat.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Will Deacon <will.deacon@arm.com>
      Link: http://lkml.kernel.org/r/1539913518-15598-1-git-send-email-longman@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      81301a15