1. 02 Apr, 2020 40 commits
    • YueHaibing's avatar
      xfrm: policy: Fix doulbe free in xfrm_policy_timer · 86e98ce7
      YueHaibing authored
      commit 4c59406e upstream.
      
      After xfrm_add_policy add a policy, its ref is 2, then
      
                                   xfrm_policy_timer
                                     read_lock
                                     xp->walk.dead is 0
                                     ....
                                     mod_timer()
      xfrm_policy_kill
        policy->walk.dead = 1
        ....
        del_timer(&policy->timer)
          xfrm_pol_put //ref is 1
        xfrm_pol_put  //ref is 0
          xfrm_policy_destroy
            call_rcu
                                       xfrm_pol_hold //ref is 1
                                     read_unlock
                                     xfrm_pol_put //ref is 0
                                       xfrm_policy_destroy
                                        call_rcu
      
      xfrm_policy_destroy is called twice, which may leads to
      double free.
      
      Call Trace:
      RIP: 0010:refcount_warn_saturate+0x161/0x210
      ...
       xfrm_policy_timer+0x522/0x600
       call_timer_fn+0x1b3/0x5e0
       ? __xfrm_decode_session+0x2990/0x2990
       ? msleep+0xb0/0xb0
       ? _raw_spin_unlock_irq+0x24/0x40
       ? __xfrm_decode_session+0x2990/0x2990
       ? __xfrm_decode_session+0x2990/0x2990
       run_timer_softirq+0x5c5/0x10e0
      
      Fix this by use write_lock_bh in xfrm_policy_kill.
      
      Fixes: ea2dea9d ("xfrm: remove policy lock when accessing policy->walk.dead")
      Signed-off-by: default avatarYueHaibing <yuehaibing@huawei.com>
      Acked-by: default avatarTimo Teräs <timo.teras@iki.fi>
      Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      86e98ce7
    • Xin Long's avatar
      xfrm: add the missing verify_sec_ctx_len check in xfrm_add_acquire · c2e254ef
      Xin Long authored
      commit a1a7e3a3 upstream.
      
      Without doing verify_sec_ctx_len() check in xfrm_add_acquire(), it may be
      out-of-bounds to access uctx->ctx_str with uctx->ctx_len, as noticed by
      syz:
      
        BUG: KASAN: slab-out-of-bounds in selinux_xfrm_alloc_user+0x237/0x430
        Read of size 768 at addr ffff8880123be9b4 by task syz-executor.1/11650
      
        Call Trace:
         dump_stack+0xe8/0x16e
         print_address_description.cold.3+0x9/0x23b
         kasan_report.cold.4+0x64/0x95
         memcpy+0x1f/0x50
         selinux_xfrm_alloc_user+0x237/0x430
         security_xfrm_policy_alloc+0x5c/0xb0
         xfrm_policy_construct+0x2b1/0x650
         xfrm_add_acquire+0x21d/0xa10
         xfrm_user_rcv_msg+0x431/0x6f0
         netlink_rcv_skb+0x15a/0x410
         xfrm_netlink_rcv+0x6d/0x90
         netlink_unicast+0x50e/0x6a0
         netlink_sendmsg+0x8ae/0xd40
         sock_sendmsg+0x133/0x170
         ___sys_sendmsg+0x834/0x9a0
         __sys_sendmsg+0x100/0x1e0
         do_syscall_64+0xe5/0x660
         entry_SYSCALL_64_after_hwframe+0x6a/0xdf
      
      So fix it by adding the missing verify_sec_ctx_len check there.
      
      Fixes: 980ebd25 ("[IPSEC]: Sync series - acquire insert")
      Reported-by: default avatarHangbin Liu <liuhangbin@gmail.com>
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c2e254ef
    • Xin Long's avatar
      xfrm: fix uctx len check in verify_sec_ctx_len · fa40d12e
      Xin Long authored
      commit 171d449a upstream.
      
      It's not sufficient to do 'uctx->len != (sizeof(struct xfrm_user_sec_ctx) +
      uctx->ctx_len)' check only, as uctx->len may be greater than nla_len(rt),
      in which case it will cause slab-out-of-bounds when accessing uctx->ctx_str
      later.
      
      This patch is to fix it by return -EINVAL when uctx->len > nla_len(rt).
      
      Fixes: df71837d ("[LSM-IPSec]: Security association restriction.")
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fa40d12e
    • Nicolas Dichtel's avatar
      vti[6]: fix packet tx through bpf_redirect() in XinY cases · 0807f594
      Nicolas Dichtel authored
      commit f1ed1026 upstream.
      
      I forgot the 4in6/6in4 cases in my previous patch. Let's fix them.
      
      Fixes: 95224166 ("vti[6]: fix packet tx through bpf_redirect()")
      Signed-off-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0807f594
    • Edward Cree's avatar
      genirq: Fix reference leaks on irq affinity notifiers · cc24d74e
      Edward Cree authored
      commit df81dfcf upstream.
      
      The handling of notify->work did not properly maintain notify->kref in two
       cases:
      1) where the work was already scheduled, another irq_set_affinity_locked()
         would get the ref and (no-op-ly) schedule the work.  Thus when
         irq_affinity_notify() ran, it would drop the original ref but not the
         additional one.
      2) when cancelling the (old) work in irq_set_affinity_notifier(), if there
         was outstanding work a ref had been got for it but was never put.
      Fix both by checking the return values of the work handling functions
       (schedule_work() for (1) and cancel_work_sync() for (2)) and put the
       extra ref if the return value indicates preexisting work.
      
      Fixes: cd7eab44 ("genirq: Add IRQ affinity notifiers")
      Fixes: 59c39840 ("genirq: Prevent use-after-free and work list corruption")
      Signed-off-by: default avatarEdward Cree <ecree@solarflare.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Acked-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Link: https://lkml.kernel.org/r/24f5983f-2ab5-e83a-44ee-a45b5f9300f5@solarflare.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cc24d74e
    • Johannes Berg's avatar
      mac80211: mark station unauthorized before key removal · e52d8aff
      Johannes Berg authored
      commit b16798f5 upstream.
      
      If a station is still marked as authorized, mark it as no longer
      so before removing its keys. This allows frames transmitted to it
      to be rejected, providing additional protection against leaking
      plain text data during the disconnection flow.
      
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20200326155133.ccb4fb0bb356.If48f0f0504efdcf16b8921f48c6d3bb2cb763c99@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e52d8aff
    • Martin K. Petersen's avatar
      scsi: sd: Fix optimal I/O size for devices that change reported values · 95b526e7
      Martin K. Petersen authored
      commit ea697a8b upstream.
      
      Some USB bridge devices will return a default set of characteristics during
      initialization. And then, once an attached drive has spun up, substitute
      the actual parameters reported by the drive. According to the SCSI spec,
      the device should return a UNIT ATTENTION in case any reported parameters
      change. But in this case the change is made silently after a small window
      where default values are reported.
      
      Commit a83da8a4 ("scsi: sd: Optimal I/O size should be a multiple of
      physical block size") validated the reported optimal I/O size against the
      physical block size to overcome problems with devices reporting nonsensical
      transfer sizes. However, this validation did not account for the fact that
      aforementioned devices will return default values during a brief window
      during spin-up. The subsequent change in reported characteristics would
      invalidate the checking that had previously been performed.
      
      Unset a previously configured optimal I/O size should the sanity checking
      fail on subsequent revalidate attempts.
      
      Link: https://lore.kernel.org/r/33fb522e-4f61-1b76-914f-c9e6a3553c9b@gmail.com
      Cc: Bryan Gurney <bgurney@redhat.com>
      Cc: <stable@vger.kernel.org>
      Reported-by: default avatarBernhard Sulzer <micraft.b@gmail.com>
      Tested-by: default avatarBernhard Sulzer <micraft.b@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      95b526e7
    • Dirk Mueller's avatar
      scripts/dtc: Remove redundant YYLOC global declaration · 8e8ab855
      Dirk Mueller authored
      commit e33a814e upstream.
      
      gcc 10 will default to -fno-common, which causes this error at link
      time:
      
        (.text+0x0): multiple definition of `yylloc'; dtc-lexer.lex.o (symbol from plugin):(.text+0x0): first defined here
      
      This is because both dtc-lexer as well as dtc-parser define the same
      global symbol yyloc. Before with -fcommon those were merged into one
      defintion. The proper solution would be to to mark this as "extern",
      however that leads to:
      
        dtc-lexer.l:26:16: error: redundant redeclaration of 'yylloc' [-Werror=redundant-decls]
         26 | extern YYLTYPE yylloc;
            |                ^~~~~~
      In file included from dtc-lexer.l:24:
      dtc-parser.tab.h:127:16: note: previous declaration of 'yylloc' was here
        127 | extern YYLTYPE yylloc;
            |                ^~~~~~
      cc1: all warnings being treated as errors
      
      which means the declaration is completely redundant and can just be
      dropped.
      Signed-off-by: default avatarDirk Mueller <dmueller@suse.com>
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      [robh: cherry-pick from upstream]
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarRob Herring <robh@kernel.org>
      [nc: Also apply to dtc-lexer.lex.c_shipped due to a lack of
           e039139b, where dtc-lexer.l started being used]
      Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8e8ab855
    • Masami Hiramatsu's avatar
      perf probe: Do not depend on dwfl_module_addrsym() · 791b3ea2
      Masami Hiramatsu authored
      commit 1efde275 upstream.
      
      Do not depend on dwfl_module_addrsym() because it can fail on user-space
      shared libraries.
      
      Actually, same bug was fixed by commit 664fee3d ("perf probe: Do not
      use dwfl_module_addrsym if dwarf_diename finds symbol name"), but commit
      07d36985 ("perf probe: Fix wrong address verification) reverted to
      get actual symbol address from symtab.
      
      This fixes it again by getting symbol address from DIE, and only if the
      DIE has only address range, it uses dwfl_module_addrsym().
      
      Fixes: 07d36985 ("perf probe: Fix wrong address verification)
      Reported-by: default avatarAlexandre Ghiti <alex@ghiti.fr>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Tested-by: default avatarAlexandre Ghiti <alex@ghiti.fr>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sasha Levin <sashal@kernel.org>
      Link: http://lore.kernel.org/lkml/158281812176.476.14164573830975116234.stgit@devnote2Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      791b3ea2
    • Roger Quadros's avatar
      ARM: dts: omap5: Add bus_dma_limit for L3 bus · 7ff9fb22
      Roger Quadros authored
      commit dfa7ea30 upstream.
      
      The L3 interconnect's memory map is from 0x0 to
      0xffffffff. Out of this, System memory (SDRAM) can be
      accessed from 0x80000000 to 0xffffffff (2GB)
      
      OMAP5 does support 4GB of SDRAM but upper 2GB can only be
      accessed by the MPU subsystem.
      
      Add the dma-ranges property to reflect the physical address limit
      of the L3 bus.
      
      Cc: stable@kernel.org
      Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7ff9fb22
    • Roger Quadros's avatar
      ARM: dts: dra7: Add bus_dma_limit for L3 bus · 35e50a4f
      Roger Quadros authored
      commit cfb5d65f upstream.
      
      The L3 interconnect's memory map is from 0x0 to
      0xffffffff. Out of this, System memory (SDRAM) can be
      accessed from 0x80000000 to 0xffffffff (2GB)
      
      DRA7 does support 4GB of SDRAM but upper 2GB can only be
      accessed by the MPU subsystem.
      
      Add the dma-ranges property to reflect the physical address limit
      of the L3 bus.
      
      Issues ere observed only with SATA on DRA7-EVM with 4GB RAM
      and CONFIG_ARM_LPAE enabled. This is because the controller
      supports 64-bit DMA and its driver sets the dma_mask to 64-bit
      thus resulting in DMA accesses beyond L3 limit of 2G.
      
      Setting the correct bus_dma_limit fixes the issue.
      Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
      Cc: stable@kernel.org
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      35e50a4f
    • Chuhong Yuan's avatar
      i2c: hix5hd2: add missed clk_disable_unprepare in remove · 01d5bf94
      Chuhong Yuan authored
      commit e1b9f99f upstream.
      
      The driver forgets to disable and unprepare clk when remove.
      Add a call to clk_disable_unprepare to fix it.
      Signed-off-by: default avatarChuhong Yuan <hslester96@gmail.com>
      Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
      Cc: stable@kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      01d5bf94
    • Dominik Czarnota's avatar
      sxgbe: Fix off by one in samsung driver strncpy size arg · 2f5432ef
      Dominik Czarnota authored
      [ Upstream commit f3cc008b ]
      
      This patch fixes an off-by-one error in strncpy size argument in
      drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c. The issue is that in:
      
              strncmp(opt, "eee_timer:", 6)
      
      the passed string literal: "eee_timer:" has 10 bytes (without the NULL
      byte) and the passed size argument is 6. As a result, the logic will
      also accept other, malformed strings, e.g. "eee_tiXXX:".
      
      This bug doesn't seem to have any security impact since its present in
      module's cmdline parsing code.
      Signed-off-by: default avatarDominik Czarnota <dominik.b.czarnota@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2f5432ef
    • Nicolas Cavallari's avatar
      mac80211: Do not send mesh HWMP PREQ if HWMP is disabled · a8351c8a
      Nicolas Cavallari authored
      [ Upstream commit ba32679c ]
      
      When trying to transmit to an unknown destination, the mesh code would
      unconditionally transmit a HWMP PREQ even if HWMP is not the current
      path selection algorithm.
      Signed-off-by: default avatarNicolas Cavallari <nicolas.cavallari@green-communications.fr>
      Link: https://lore.kernel.org/r/20200305140409.12204-1-cavallar@lri.frSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a8351c8a
    • Wen Xiong's avatar
      scsi: ipr: Fix softlockup when rescanning devices in petitboot · 9509c913
      Wen Xiong authored
      [ Upstream commit 394b6171 ]
      
      When trying to rescan disks in petitboot shell, we hit the following
      softlockup stacktrace:
      
      Kernel panic - not syncing: System is deadlocked on memory
      [  241.223394] CPU: 32 PID: 693 Comm: sh Not tainted 5.4.16-openpower1 #1
      [  241.223406] Call Trace:
      [  241.223415] [c0000003f07c3180] [c000000000493fc4] dump_stack+0xa4/0xd8 (unreliable)
      [  241.223432] [c0000003f07c31c0] [c00000000007d4ac] panic+0x148/0x3cc
      [  241.223446] [c0000003f07c3260] [c000000000114b10] out_of_memory+0x468/0x4c4
      [  241.223461] [c0000003f07c3300] [c0000000001472b0] __alloc_pages_slowpath+0x594/0x6d8
      [  241.223476] [c0000003f07c3420] [c00000000014757c] __alloc_pages_nodemask+0x188/0x1a4
      [  241.223492] [c0000003f07c34a0] [c000000000153e10] alloc_pages_current+0xcc/0xd8
      [  241.223508] [c0000003f07c34e0] [c0000000001577ac] alloc_slab_page+0x30/0x98
      [  241.223524] [c0000003f07c3520] [c0000000001597fc] new_slab+0x138/0x40c
      [  241.223538] [c0000003f07c35f0] [c00000000015b204] ___slab_alloc+0x1e4/0x404
      [  241.223552] [c0000003f07c36c0] [c00000000015b450] __slab_alloc+0x2c/0x48
      [  241.223566] [c0000003f07c36f0] [c00000000015b754] kmem_cache_alloc_node+0x9c/0x1b4
      [  241.223582] [c0000003f07c3760] [c000000000218c48] blk_alloc_queue_node+0x34/0x270
      [  241.223599] [c0000003f07c37b0] [c000000000226574] blk_mq_init_queue+0x2c/0x78
      [  241.223615] [c0000003f07c37e0] [c0000000002ff710] scsi_mq_alloc_queue+0x28/0x70
      [  241.223631] [c0000003f07c3810] [c0000000003005b8] scsi_alloc_sdev+0x184/0x264
      [  241.223647] [c0000003f07c38a0] [c000000000300ba0] scsi_probe_and_add_lun+0x288/0xa3c
      [  241.223663] [c0000003f07c3a00] [c000000000301768] __scsi_scan_target+0xcc/0x478
      [  241.223679] [c0000003f07c3b20] [c000000000301c64] scsi_scan_channel.part.9+0x74/0x7c
      [  241.223696] [c0000003f07c3b70] [c000000000301df4] scsi_scan_host_selected+0xe0/0x158
      [  241.223712] [c0000003f07c3bd0] [c000000000303f04] store_scan+0x104/0x114
      [  241.223727] [c0000003f07c3cb0] [c0000000002d5ac4] dev_attr_store+0x30/0x4c
      [  241.223741] [c0000003f07c3cd0] [c0000000001dbc34] sysfs_kf_write+0x64/0x78
      [  241.223756] [c0000003f07c3cf0] [c0000000001da858] kernfs_fop_write+0x170/0x1b8
      [  241.223773] [c0000003f07c3d40] [c0000000001621fc] __vfs_write+0x34/0x60
      [  241.223787] [c0000003f07c3d60] [c000000000163c2c] vfs_write+0xa8/0xcc
      [  241.223802] [c0000003f07c3db0] [c000000000163df4] ksys_write+0x70/0xbc
      [  241.223816] [c0000003f07c3e20] [c00000000000b40c] system_call+0x5c/0x68
      
      As a part of the scan process Linux will allocate and configure a
      scsi_device for each target to be scanned. If the device is not present,
      then the scsi_device is torn down. As a part of scsi_device teardown a
      workqueue item will be scheduled and the lockups we see are because there
      are 250k workqueue items to be processed.  Accoding to the specification of
      SIS-64 sas controller, max_channel should be decreased on SIS-64 adapters
      to 4.
      
      The patch fixes softlockup issue.
      
      Thanks for Oliver Halloran's help with debugging and explanation!
      
      Link: https://lore.kernel.org/r/1583510248-23672-1-git-send-email-wenxiong@linux.vnet.ibm.comSigned-off-by: default avatarWen Xiong <wenxiong@linux.vnet.ibm.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9509c913
    • Madalin Bucur's avatar
      dt-bindings: net: FMan erratum A050385 · 4fe8dc06
      Madalin Bucur authored
      [ Upstream commit 26d5bb9e ]
      
      FMAN DMA read or writes under heavy traffic load may cause FMAN
      internal resource leak; thus stopping further packet processing.
      
      The FMAN internal queue can overflow when FMAN splits single
      read or write transactions into multiple smaller transactions
      such that more than 17 AXI transactions are in flight from FMAN
      to interconnect. When the FMAN internal queue overflows, it can
      stall further packet processing. The issue can occur with any one
      of the following three conditions:
      
        1. FMAN AXI transaction crosses 4K address boundary (Errata
           A010022)
        2. FMAN DMA address for an AXI transaction is not 16 byte
           aligned, i.e. the last 4 bits of an address are non-zero
        3. Scatter Gather (SG) frames have more than one SG buffer in
           the SG list and any one of the buffers, except the last
           buffer in the SG list has data size that is not a multiple
           of 16 bytes, i.e., other than 16, 32, 48, 64, etc.
      
      With any one of the above three conditions present, there is
      likelihood of stalled FMAN packet processing, especially under
      stress with multiple ports injecting line-rate traffic.
      
      To avoid situations that stall FMAN packet processing, all of the
      above three conditions must be avoided; therefore, configure the
      system with the following rules:
      
        1. Frame buffers must not span a 4KB address boundary, unless
           the frame start address is 256 byte aligned
        2. All FMAN DMA start addresses (for example, BMAN buffer
           address, FD[address] + FD[offset]) are 16B aligned
        3. SG table and buffer addresses are 16B aligned and the size
           of SG buffers are multiple of 16 bytes, except for the last
           SG buffer that can be of any size.
      
      Additional workaround notes:
      - Address alignment of 64 bytes is recommended for maximally
      efficient system bus transactions (although 16 byte alignment is
      sufficient to avoid the stall condition)
      - To support frame sizes that are larger than 4K bytes, there are
      two options:
        1. Large single buffer frames that span a 4KB page boundary can
           be converted into SG frames to avoid transaction splits at
           the 4KB boundary,
        2. Align the large single buffer to 256B address boundaries,
           ensure that the frame address plus offset is 256B aligned.
      - If software generated SG frames have buffers that are unaligned
      and with random non-multiple of 16 byte lengths, before
      transmitting such frames via FMAN, frames will need to be copied
      into a new single buffer or multiple buffer SG frame that is
      compliant with the three rules listed above.
      Signed-off-by: default avatarMadalin Bucur <madalin.bucur@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4fe8dc06
    • Mike Gilbert's avatar
      cpupower: avoid multiple definition with gcc -fno-common · 85e8b90e
      Mike Gilbert authored
      [ Upstream commit 2de7fb60 ]
      
      Building cpupower with -fno-common in CFLAGS results in errors due to
      multiple definitions of the 'cpu_count' and 'start_time' variables.
      
      ./utils/idle_monitor/snb_idle.o:./utils/idle_monitor/cpupower-monitor.h:28:
      multiple definition of `cpu_count';
      ./utils/idle_monitor/nhm_idle.o:./utils/idle_monitor/cpupower-monitor.h:28:
      first defined here
      ...
      ./utils/idle_monitor/cpuidle_sysfs.o:./utils/idle_monitor/cpuidle_sysfs.c:22:
      multiple definition of `start_time';
      ./utils/idle_monitor/amd_fam14h_idle.o:./utils/idle_monitor/amd_fam14h_idle.c:85:
      first defined here
      
      The -fno-common option will be enabled by default in GCC 10.
      
      Bug: https://bugs.gentoo.org/707462Signed-off-by: default avatarMike Gilbert <floppym@gentoo.org>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      85e8b90e
    • Sabrina Dubroca's avatar
      net: ipv4: don't let PMTU updates increase route MTU · 14c137ce
      Sabrina Dubroca authored
      [ Upstream commit 28d35bcd ]
      
      When an MTU update with PMTU smaller than net.ipv4.route.min_pmtu is
      received, we must clamp its value. However, we can receive a PMTU
      exception with PMTU < old_mtu < ip_rt_min_pmtu, which would lead to an
      increase in PMTU.
      
      To fix this, take the smallest of the old MTU and ip_rt_min_pmtu.
      
      Before this patch, in case of an update, the exception's MTU would
      always change. Now, an exception can have only its lock flag updated,
      but not the MTU, so we need to add a check on locking to the following
      "is this exception getting updated, or close to expiring?" test.
      
      Fixes: d52e5a7e ("ipv4: lock mtu in fnhe when received PMTU < net.ipv4.route.min_pmtu")
      Signed-off-by: default avatarSabrina Dubroca <sd@queasysnail.net>
      Reviewed-by: default avatarStefano Brivio <sbrivio@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      14c137ce
    • Sean Christopherson's avatar
      KVM: VMX: Do not allow reexecute_instruction() when skipping MMIO instr · 6be2735f
      Sean Christopherson authored
      [ Upstream commit c4409905 ]
      
      Re-execution after an emulation decode failure is only intended to
      handle a case where two or vCPUs race to write a shadowed page, i.e.
      we should never re-execute an instruction as part of MMIO emulation.
      As handle_ept_misconfig() is only used for MMIO emulation, it should
      pass EMULTYPE_NO_REEXECUTE when using the emulator to skip an instr
      in the fast-MMIO case where VM_EXIT_INSTRUCTION_LEN is invalid.
      
      And because the cr2 value passed to x86_emulate_instruction() is only
      destined for use when retrying or reexecuting, we can simply call
      emulate_instruction().
      
      Fixes: d391f120 ("x86/kvm/vmx: do not use vm-exit instruction length
                            for fast MMIO when running nested")
      Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
      Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6be2735f
    • Taehee Yoo's avatar
      hsr: set .netnsok flag · 03e7234b
      Taehee Yoo authored
      [ Upstream commit 09e91dbe ]
      
      The hsr module has been supporting the list and status command.
      (HSR_C_GET_NODE_LIST and HSR_C_GET_NODE_STATUS)
      These commands send node information to the user-space via generic netlink.
      But, in the non-init_net namespace, these commands are not allowed
      because .netnsok flag is false.
      So, there is no way to get node information in the non-init_net namespace.
      
      Fixes: f421436a ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
      Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      03e7234b
    • Taehee Yoo's avatar
      hsr: add restart routine into hsr_get_node_list() · c669c937
      Taehee Yoo authored
      [ Upstream commit ca19c70f ]
      
      The hsr_get_node_list() is to send node addresses to the userspace.
      If there are so many nodes, it could fail because of buffer size.
      In order to avoid this failure, the restart routine is added.
      
      Fixes: f421436a ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
      Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c669c937
    • Taehee Yoo's avatar
      hsr: use rcu_read_lock() in hsr_get_node_{list/status}() · 9bc97bc6
      Taehee Yoo authored
      [ Upstream commit 173756b8 ]
      
      hsr_get_node_{list/status}() are not under rtnl_lock() because
      they are callback functions of generic netlink.
      But they use __dev_get_by_index() without rtnl_lock().
      So, it would use unsafe data.
      In order to fix it, rcu_read_lock() and dev_get_by_index_rcu()
      are used instead of __dev_get_by_index().
      
      Fixes: f421436a ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
      Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9bc97bc6
    • Jisheng Zhang's avatar
      net: mvneta: Fix the case where the last poll did not process all rx · dabbf0e8
      Jisheng Zhang authored
      [ Upstream commit 065fd83e ]
      
      For the case where the last mvneta_poll did not process all
      RX packets, we need to xor the pp->cause_rx_tx or port->cause_rx_tx
      before claculating the rx_queue.
      
      Fixes: 2dcf75e2 ("net: mvneta: Associate RX queues with each CPU")
      Signed-off-by: default avatarJisheng Zhang <Jisheng.Zhang@synaptics.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      dabbf0e8
    • Taehee Yoo's avatar
      vxlan: check return value of gro_cells_init() · cc42f986
      Taehee Yoo authored
      [ Upstream commit 384d91c2 ]
      
      gro_cells_init() returns error if memory allocation is failed.
      But the vxlan module doesn't check the return value of gro_cells_init().
      
      Fixes: 58ce31cc ("vxlan: GRO support at tunnel layer")`
      Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cc42f986
    • Oliver Hartkopp's avatar
      slcan: not call free_netdev before rtnl_unlock in slcan_open · a1c9b231
      Oliver Hartkopp authored
      [ Upstream commit 2091a3d4 ]
      
      As the description before netdev_run_todo, we cannot call free_netdev
      before rtnl_unlock, fix it by reorder the code.
      
      This patch is a 1:1 copy of upstream slip.c commit f596c870
      ("slip: not call free_netdev before rtnl_unlock in slip_open").
      Reported-by: default avataryangerkun <yangerkun@huawei.com>
      Signed-off-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a1c9b231
    • Dan Carpenter's avatar
      NFC: fdp: Fix a signedness bug in fdp_nci_send_patch() · 93b84b9c
      Dan Carpenter authored
      [ Upstream commit 0dcdf9f6 ]
      
      The nci_conn_max_data_pkt_payload_size() function sometimes returns
      -EPROTO so "max_size" needs to be signed for the error handling to
      work.  We can make "payload_size" an int as well.
      
      Fixes: a06347c0 ("NFC: Add Intel Fields Peak NFC solution driver")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      93b84b9c
    • Cong Wang's avatar
      net_sched: keep alloc_hash updated after hash allocation · c4453d28
      Cong Wang authored
      [ Upstream commit 0d1c3530 ]
      
      In commit 599be01e ("net_sched: fix an OOB access in cls_tcindex")
      I moved cp->hash calculation before the first
      tcindex_alloc_perfect_hash(), but cp->alloc_hash is left untouched.
      This difference could lead to another out of bound access.
      
      cp->alloc_hash should always be the size allocated, we should
      update it after this tcindex_alloc_perfect_hash().
      
      Reported-and-tested-by: syzbot+dcc34d54d68ef7d2d53d@syzkaller.appspotmail.com
      Reported-and-tested-by: syzbot+c72da7b9ed57cde6fca2@syzkaller.appspotmail.com
      Fixes: 599be01e ("net_sched: fix an OOB access in cls_tcindex")
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Cc: Jiri Pirko <jiri@resnulli.us>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c4453d28
    • Cong Wang's avatar
      net_sched: cls_route: remove the right filter from hashtable · 97a8e7af
      Cong Wang authored
      [ Upstream commit ef299cc3 ]
      
      route4_change() allocates a new filter and copies values from
      the old one. After the new filter is inserted into the hash
      table, the old filter should be removed and freed, as the final
      step of the update.
      
      However, the current code mistakenly removes the new one. This
      looks apparently wrong to me, and it causes double "free" and
      use-after-free too, as reported by syzbot.
      
      Reported-and-tested-by: syzbot+f9b32aaacd60305d9687@syzkaller.appspotmail.com
      Reported-and-tested-by: syzbot+2f8c233f131943d6056d@syzkaller.appspotmail.com
      Reported-and-tested-by: syzbot+9c2df9fd5e9445b74e01@syzkaller.appspotmail.com
      Fixes: 1109c005 ("net: sched: RCU cls_route")
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Cc: Jiri Pirko <jiri@resnulli.us>
      Cc: John Fastabend <john.fastabend@gmail.com>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      97a8e7af
    • Florian Fainelli's avatar
      net: dsa: Fix duplicate frames flooded by learning · 5e845dc6
      Florian Fainelli authored
      [ Upstream commit 0e62f543 ]
      
      When both the switch and the bridge are learning about new addresses,
      switch ports attached to the bridge would see duplicate ARP frames
      because both entities would attempt to send them.
      
      Fixes: 5037d532 ("net: dsa: add Broadcom tag RX/TX handler")
      Reported-by: default avatarMaxime Bizon <mbizon@freebox.fr>
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Reviewed-by: default avatarVivien Didelot <vivien.didelot@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5e845dc6
    • Willem de Bruijn's avatar
      macsec: restrict to ethernet devices · 52d58912
      Willem de Bruijn authored
      [ Upstream commit b06d072c ]
      
      Only attach macsec to ethernet devices.
      
      Syzbot was able to trigger a KMSAN warning in macsec_handle_frame
      by attaching to a phonet device.
      
      Macvlan has a similar check in macvlan_port_create.
      
      v1->v2
        - fix commit message typo
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      52d58912
    • Taehee Yoo's avatar
      hsr: fix general protection fault in hsr_addr_is_self() · a6362a9f
      Taehee Yoo authored
      [ Upstream commit 3a303cfd ]
      
      The port->hsr is used in the hsr_handle_frame(), which is a
      callback of rx_handler.
      hsr master and slaves are initialized in hsr_add_port().
      This function initializes several pointers, which includes port->hsr after
      registering rx_handler.
      So, in the rx_handler routine, un-initialized pointer would be used.
      In order to fix this, pointers should be initialized before
      registering rx_handler.
      
      Test commands:
          ip netns del left
          ip netns del right
          modprobe -rv veth
          modprobe -rv hsr
          killall ping
          modprobe hsr
          ip netns add left
          ip netns add right
          ip link add veth0 type veth peer name veth1
          ip link add veth2 type veth peer name veth3
          ip link add veth4 type veth peer name veth5
          ip link set veth1 netns left
          ip link set veth3 netns right
          ip link set veth4 netns left
          ip link set veth5 netns right
          ip link set veth0 up
          ip link set veth2 up
          ip link set veth0 address fc:00:00:00:00:01
          ip link set veth2 address fc:00:00:00:00:02
          ip netns exec left ip link set veth1 up
          ip netns exec left ip link set veth4 up
          ip netns exec right ip link set veth3 up
          ip netns exec right ip link set veth5 up
          ip link add hsr0 type hsr slave1 veth0 slave2 veth2
          ip a a 192.168.100.1/24 dev hsr0
          ip link set hsr0 up
          ip netns exec left ip link add hsr1 type hsr slave1 veth1 slave2 veth4
          ip netns exec left ip a a 192.168.100.2/24 dev hsr1
          ip netns exec left ip link set hsr1 up
          ip netns exec left ip n a 192.168.100.1 dev hsr1 lladdr \
      	    fc:00:00:00:00:01 nud permanent
          ip netns exec left ip n r 192.168.100.1 dev hsr1 lladdr \
      	    fc:00:00:00:00:01 nud permanent
          for i in {1..100}
          do
              ip netns exec left ping 192.168.100.1 &
          done
          ip netns exec left hping3 192.168.100.1 -2 --flood &
          ip netns exec right ip link add hsr2 type hsr slave1 veth3 slave2 veth5
          ip netns exec right ip a a 192.168.100.3/24 dev hsr2
          ip netns exec right ip link set hsr2 up
          ip netns exec right ip n a 192.168.100.1 dev hsr2 lladdr \
      	    fc:00:00:00:00:02 nud permanent
          ip netns exec right ip n r 192.168.100.1 dev hsr2 lladdr \
      	    fc:00:00:00:00:02 nud permanent
          for i in {1..100}
          do
              ip netns exec right ping 192.168.100.1 &
          done
          ip netns exec right hping3 192.168.100.1 -2 --flood &
          while :
          do
              ip link add hsr0 type hsr slave1 veth0 slave2 veth2
      	ip a a 192.168.100.1/24 dev hsr0
      	ip link set hsr0 up
      	ip link del hsr0
          done
      
      Splat looks like:
      [  120.954938][    C0] general protection fault, probably for non-canonical address 0xdffffc0000000006: 0000 [#1]I
      [  120.957761][    C0] KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
      [  120.959064][    C0] CPU: 0 PID: 1511 Comm: hping3 Not tainted 5.6.0-rc5+ #460
      [  120.960054][    C0] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
      [  120.962261][    C0] RIP: 0010:hsr_addr_is_self+0x65/0x2a0 [hsr]
      [  120.963149][    C0] Code: 44 24 18 70 73 2f c0 48 c1 eb 03 48 8d 04 13 c7 00 f1 f1 f1 f1 c7 40 04 00 f2 f2 f2 4
      [  120.966277][    C0] RSP: 0018:ffff8880d9c09af0 EFLAGS: 00010206
      [  120.967293][    C0] RAX: 0000000000000006 RBX: 1ffff1101b38135f RCX: 0000000000000000
      [  120.968516][    C0] RDX: dffffc0000000000 RSI: ffff8880d17cb208 RDI: 0000000000000000
      [  120.969718][    C0] RBP: 0000000000000030 R08: ffffed101b3c0e3c R09: 0000000000000001
      [  120.972203][    C0] R10: 0000000000000001 R11: ffffed101b3c0e3b R12: 0000000000000000
      [  120.973379][    C0] R13: ffff8880aaf80100 R14: ffff8880aaf800f2 R15: ffff8880aaf80040
      [  120.974410][    C0] FS:  00007f58e693f740(0000) GS:ffff8880d9c00000(0000) knlGS:0000000000000000
      [  120.979794][    C0] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  120.980773][    C0] CR2: 00007ffcb8b38f29 CR3: 00000000afe8e001 CR4: 00000000000606f0
      [  120.981945][    C0] Call Trace:
      [  120.982411][    C0]  <IRQ>
      [  120.982848][    C0]  ? hsr_add_node+0x8c0/0x8c0 [hsr]
      [  120.983522][    C0]  ? rcu_read_lock_held+0x90/0xa0
      [  120.984159][    C0]  ? rcu_read_lock_sched_held+0xc0/0xc0
      [  120.984944][    C0]  hsr_handle_frame+0x1db/0x4e0 [hsr]
      [  120.985597][    C0]  ? hsr_nl_nodedown+0x2b0/0x2b0 [hsr]
      [  120.986289][    C0]  __netif_receive_skb_core+0x6bf/0x3170
      [  120.992513][    C0]  ? check_chain_key+0x236/0x5d0
      [  120.993223][    C0]  ? do_xdp_generic+0x1460/0x1460
      [  120.993875][    C0]  ? register_lock_class+0x14d0/0x14d0
      [  120.994609][    C0]  ? __netif_receive_skb_one_core+0x8d/0x160
      [  120.995377][    C0]  __netif_receive_skb_one_core+0x8d/0x160
      [  120.996204][    C0]  ? __netif_receive_skb_core+0x3170/0x3170
      [ ... ]
      
      Reported-by: syzbot+fcf5dd39282ceb27108d@syzkaller.appspotmail.com
      Fixes: c5a75911 ("net/hsr: Use list_head (and rcu) instead of array for slave devices.")
      Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a6362a9f
    • Lyude Paul's avatar
      Revert "drm/dp_mst: Skip validating ports during destruction, just ref" · 594b0602
      Lyude Paul authored
      commit 9765635b upstream.
      
      This reverts commit:
      
      c54c7374 ("drm/dp_mst: Skip validating ports during destruction, just ref")
      
      ugh.
      
      In drm_dp_destroy_connector_work(), we have a pretty good chance of
      freeing the actual struct drm_dp_mst_port. However, after destroying
      things we send a hotplug through (*mgr->cbs->hotplug)(mgr) which is
      where the problems start.
      
      For i915, this calls all the way down to the fbcon probing helpers,
      which start trying to access the port in a modeset.
      
      [   45.062001] ==================================================================
      [   45.062112] BUG: KASAN: use-after-free in ex_handler_refcount+0x146/0x180
      [   45.062196] Write of size 4 at addr ffff8882b4b70968 by task kworker/3:1/53
      
      [   45.062325] CPU: 3 PID: 53 Comm: kworker/3:1 Kdump: loaded Tainted: G           O      4.20.0-rc4Lyude-Test+ #3
      [   45.062442] Hardware name: LENOVO 20BWS1KY00/20BWS1KY00, BIOS JBET71WW (1.35 ) 09/14/2018
      [   45.062554] Workqueue: events drm_dp_destroy_connector_work [drm_kms_helper]
      [   45.062641] Call Trace:
      [   45.062685]  dump_stack+0xbd/0x15a
      [   45.062735]  ? dump_stack_print_info.cold.0+0x1b/0x1b
      [   45.062801]  ? printk+0x9f/0xc5
      [   45.062847]  ? kmsg_dump_rewind_nolock+0xe4/0xe4
      [   45.062909]  ? ex_handler_refcount+0x146/0x180
      [   45.062970]  print_address_description+0x71/0x239
      [   45.063036]  ? ex_handler_refcount+0x146/0x180
      [   45.063095]  kasan_report.cold.5+0x242/0x30b
      [   45.063155]  __asan_report_store4_noabort+0x1c/0x20
      [   45.063313]  ex_handler_refcount+0x146/0x180
      [   45.063371]  ? ex_handler_clear_fs+0xb0/0xb0
      [   45.063428]  fixup_exception+0x98/0xd7
      [   45.063484]  ? raw_notifier_call_chain+0x20/0x20
      [   45.063548]  do_trap+0x6d/0x210
      [   45.063605]  ? _GLOBAL__sub_I_65535_1_drm_dp_aux_unregister_devnode+0x2f/0x1c6 [drm_kms_helper]
      [   45.063732]  do_error_trap+0xc0/0x170
      [   45.063802]  ? _GLOBAL__sub_I_65535_1_drm_dp_aux_unregister_devnode+0x2f/0x1c6 [drm_kms_helper]
      [   45.063929]  do_invalid_op+0x3b/0x50
      [   45.063997]  ? _GLOBAL__sub_I_65535_1_drm_dp_aux_unregister_devnode+0x2f/0x1c6 [drm_kms_helper]
      [   45.064103]  invalid_op+0x14/0x20
      [   45.064162] RIP: 0010:_GLOBAL__sub_I_65535_1_drm_dp_aux_unregister_devnode+0x2f/0x1c6 [drm_kms_helper]
      [   45.064274] Code: 00 48 c7 c7 80 fe 53 a0 48 89 e5 e8 5b 6f 26 e1 5d c3 48 8d 0e 0f 0b 48 8d 0b 0f 0b 48 8d 0f 0f 0b 48 8d 0f 0f 0b 49 8d 4d 00 <0f> 0b 49 8d 0e 0f 0b 48 8d 08 0f 0b 49 8d 4d 00 0f 0b 48 8d 0b 0f
      [   45.064569] RSP: 0018:ffff8882b789ee10 EFLAGS: 00010282
      [   45.064637] RAX: ffff8882af47ae70 RBX: ffff8882af47aa60 RCX: ffff8882b4b70968
      [   45.064723] RDX: ffff8882af47ae70 RSI: 0000000000000008 RDI: ffff8882b788bdb8
      [   45.064808] RBP: ffff8882b789ee28 R08: ffffed1056f13db4 R09: ffffed1056f13db3
      [   45.064894] R10: ffffed1056f13db3 R11: ffff8882b789ed9f R12: ffff8882af47ad28
      [   45.064980] R13: ffff8882b4b70968 R14: ffff8882acd86728 R15: ffff8882b4b75dc8
      [   45.065084]  drm_dp_mst_reset_vcpi_slots+0x12/0x80 [drm_kms_helper]
      [   45.065225]  intel_mst_disable_dp+0xda/0x180 [i915]
      [   45.065361]  intel_encoders_disable.isra.107+0x197/0x310 [i915]
      [   45.065498]  haswell_crtc_disable+0xbe/0x400 [i915]
      [   45.065622]  ? i9xx_disable_plane+0x1c0/0x3e0 [i915]
      [   45.065750]  intel_atomic_commit_tail+0x74e/0x3e60 [i915]
      [   45.065884]  ? intel_pre_plane_update+0xbc0/0xbc0 [i915]
      [   45.065968]  ? drm_atomic_helper_swap_state+0x88b/0x1d90 [drm_kms_helper]
      [   45.066054]  ? kasan_check_write+0x14/0x20
      [   45.066165]  ? i915_gem_track_fb+0x13a/0x330 [i915]
      [   45.066277]  ? i915_sw_fence_complete+0xe9/0x140 [i915]
      [   45.066406]  ? __i915_sw_fence_complete+0xc50/0xc50 [i915]
      [   45.066540]  intel_atomic_commit+0x72e/0xef0 [i915]
      [   45.066635]  ? drm_dev_dbg+0x200/0x200 [drm]
      [   45.066764]  ? intel_atomic_commit_tail+0x3e60/0x3e60 [i915]
      [   45.066898]  ? intel_atomic_commit_tail+0x3e60/0x3e60 [i915]
      [   45.067001]  drm_atomic_commit+0xc4/0xf0 [drm]
      [   45.067074]  restore_fbdev_mode_atomic+0x562/0x780 [drm_kms_helper]
      [   45.067166]  ? drm_fb_helper_debug_leave+0x690/0x690 [drm_kms_helper]
      [   45.067249]  ? kasan_check_read+0x11/0x20
      [   45.067324]  restore_fbdev_mode+0x127/0x4b0 [drm_kms_helper]
      [   45.067364]  ? kasan_check_read+0x11/0x20
      [   45.067406]  drm_fb_helper_restore_fbdev_mode_unlocked+0x164/0x200 [drm_kms_helper]
      [   45.067462]  ? drm_fb_helper_hotplug_event+0x30/0x30 [drm_kms_helper]
      [   45.067508]  ? kasan_check_write+0x14/0x20
      [   45.070360]  ? mutex_unlock+0x22/0x40
      [   45.073748]  drm_fb_helper_set_par+0xb2/0xf0 [drm_kms_helper]
      [   45.075846]  drm_fb_helper_hotplug_event.part.33+0x1cd/0x290 [drm_kms_helper]
      [   45.078088]  drm_fb_helper_hotplug_event+0x1c/0x30 [drm_kms_helper]
      [   45.082614]  intel_fbdev_output_poll_changed+0x9f/0x140 [i915]
      [   45.087069]  drm_kms_helper_hotplug_event+0x67/0x90 [drm_kms_helper]
      [   45.089319]  intel_dp_mst_hotplug+0x37/0x50 [i915]
      [   45.091496]  drm_dp_destroy_connector_work+0x510/0x6f0 [drm_kms_helper]
      [   45.093675]  ? drm_dp_update_payload_part1+0x1220/0x1220 [drm_kms_helper]
      [   45.095851]  ? kasan_check_write+0x14/0x20
      [   45.098473]  ? kasan_check_read+0x11/0x20
      [   45.101155]  ? strscpy+0x17c/0x530
      [   45.103808]  ? __switch_to_asm+0x34/0x70
      [   45.106456]  ? syscall_return_via_sysret+0xf/0x7f
      [   45.109711]  ? read_word_at_a_time+0x20/0x20
      [   45.113138]  ? __switch_to_asm+0x40/0x70
      [   45.116529]  ? __switch_to_asm+0x34/0x70
      [   45.119891]  ? __switch_to_asm+0x40/0x70
      [   45.123224]  ? __switch_to_asm+0x34/0x70
      [   45.126540]  ? __switch_to_asm+0x34/0x70
      [   45.129824]  process_one_work+0x88d/0x15d0
      [   45.133172]  ? pool_mayday_timeout+0x850/0x850
      [   45.136459]  ? pci_mmcfg_check_reserved+0x110/0x128
      [   45.139739]  ? wake_q_add+0xb0/0xb0
      [   45.143010]  ? check_preempt_wakeup+0x652/0x1050
      [   45.146304]  ? worker_enter_idle+0x29e/0x740
      [   45.149589]  ? __schedule+0x1ec0/0x1ec0
      [   45.152937]  ? kasan_check_read+0x11/0x20
      [   45.156179]  ? _raw_spin_lock_irq+0xa3/0x130
      [   45.159382]  ? _raw_read_unlock_irqrestore+0x30/0x30
      [   45.162542]  ? kasan_check_write+0x14/0x20
      [   45.165657]  worker_thread+0x1a5/0x1470
      [   45.168725]  ? set_load_weight+0x2e0/0x2e0
      [   45.171755]  ? process_one_work+0x15d0/0x15d0
      [   45.174806]  ? __switch_to_asm+0x34/0x70
      [   45.177645]  ? __switch_to_asm+0x40/0x70
      [   45.180323]  ? __switch_to_asm+0x34/0x70
      [   45.182936]  ? __switch_to_asm+0x40/0x70
      [   45.185539]  ? __switch_to_asm+0x34/0x70
      [   45.188100]  ? __switch_to_asm+0x40/0x70
      [   45.190628]  ? __schedule+0x7d4/0x1ec0
      [   45.193143]  ? save_stack+0xa9/0xd0
      [   45.195632]  ? kasan_check_write+0x10/0x20
      [   45.198162]  ? kasan_kmalloc+0xc4/0xe0
      [   45.200609]  ? kmem_cache_alloc_trace+0xdd/0x190
      [   45.203046]  ? kthread+0x9f/0x3b0
      [   45.205470]  ? ret_from_fork+0x35/0x40
      [   45.207876]  ? unwind_next_frame+0x43/0x50
      [   45.210273]  ? __save_stack_trace+0x82/0x100
      [   45.212658]  ? deactivate_slab.isra.67+0x3d4/0x580
      [   45.215026]  ? default_wake_function+0x35/0x50
      [   45.217399]  ? kasan_check_read+0x11/0x20
      [   45.219825]  ? _raw_spin_lock_irqsave+0xae/0x140
      [   45.222174]  ? __lock_text_start+0x8/0x8
      [   45.224521]  ? replenish_dl_entity.cold.62+0x4f/0x4f
      [   45.226868]  ? __kthread_parkme+0x87/0xf0
      [   45.229200]  kthread+0x2f7/0x3b0
      [   45.231557]  ? process_one_work+0x15d0/0x15d0
      [   45.233923]  ? kthread_park+0x120/0x120
      [   45.236249]  ret_from_fork+0x35/0x40
      
      [   45.240875] Allocated by task 242:
      [   45.243136]  save_stack+0x43/0xd0
      [   45.245385]  kasan_kmalloc+0xc4/0xe0
      [   45.247597]  kmem_cache_alloc_trace+0xdd/0x190
      [   45.249793]  drm_dp_add_port+0x1e0/0x2170 [drm_kms_helper]
      [   45.252000]  drm_dp_send_link_address+0x4a7/0x740 [drm_kms_helper]
      [   45.254389]  drm_dp_check_and_send_link_address+0x1a7/0x210 [drm_kms_helper]
      [   45.256803]  drm_dp_mst_link_probe_work+0x6f/0xb0 [drm_kms_helper]
      [   45.259200]  process_one_work+0x88d/0x15d0
      [   45.261597]  worker_thread+0x1a5/0x1470
      [   45.264038]  kthread+0x2f7/0x3b0
      [   45.266371]  ret_from_fork+0x35/0x40
      
      [   45.270937] Freed by task 53:
      [   45.273170]  save_stack+0x43/0xd0
      [   45.275382]  __kasan_slab_free+0x139/0x190
      [   45.277604]  kasan_slab_free+0xe/0x10
      [   45.279826]  kfree+0x99/0x1b0
      [   45.282044]  drm_dp_free_mst_port+0x4a/0x60 [drm_kms_helper]
      [   45.284330]  drm_dp_destroy_connector_work+0x43e/0x6f0 [drm_kms_helper]
      [   45.286660]  process_one_work+0x88d/0x15d0
      [   45.288934]  worker_thread+0x1a5/0x1470
      [   45.291231]  kthread+0x2f7/0x3b0
      [   45.293547]  ret_from_fork+0x35/0x40
      
      [   45.298206] The buggy address belongs to the object at ffff8882b4b70968
                      which belongs to the cache kmalloc-2k of size 2048
      [   45.303047] The buggy address is located 0 bytes inside of
                      2048-byte region [ffff8882b4b70968, ffff8882b4b71168)
      [   45.308010] The buggy address belongs to the page:
      [   45.310477] page:ffffea000ad2dc00 count:1 mapcount:0 mapping:ffff8882c080cf40 index:0x0 compound_mapcount: 0
      [   45.313051] flags: 0x8000000000010200(slab|head)
      [   45.315635] raw: 8000000000010200 ffffea000aac2808 ffffea000abe8608 ffff8882c080cf40
      [   45.318300] raw: 0000000000000000 00000000000d000d 00000001ffffffff 0000000000000000
      [   45.320966] page dumped because: kasan: bad access detected
      
      [   45.326312] Memory state around the buggy address:
      [   45.329085]  ffff8882b4b70800: fb fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [   45.331845]  ffff8882b4b70880: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [   45.334584] >ffff8882b4b70900: fc fc fc fc fc fc fc fc fc fc fc fc fc fb fb fb
      [   45.337302]                                                           ^
      [   45.340061]  ffff8882b4b70980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   45.342910]  ffff8882b4b70a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   45.345748] ==================================================================
      
      So, this definitely isn't a fix that we want. This being said; there's
      no real easy fix for this problem because of some of the catch-22's of
      the MST helpers current design. For starters; we always need to validate
      a port with drm_dp_get_validated_port_ref(), but validation relies on
      the lifetime of the port in the actual topology. So once the port is
      gone, it can't be validated again.
      
      If we were to try to make the payload helpers not use port validation,
      then we'd cause another problem: if the port isn't validated, it could
      be freed and we'd just start causing more KASAN issues. There are
      already hacks that attempt to workaround this in
      drm_dp_mst_destroy_connector_work() by re-initializing the kref so that
      it can be used again and it's memory can be freed once the VCPI helpers
      finish removing the port's respective payloads. But none of these really
      do anything helpful since the port still can't be validated since it's
      gone from the topology. Also, that workaround is immensely confusing to
      read through.
      
      What really needs to be done in order to fix this is to teach DRM how to
      track the lifetime of the structs for MST ports and branch devices
      separately from their lifetime in the actual topology. Simply put; this
      means having two different krefs-one that removes the port/branch device
      from the topology, and one that finally calls kfree(). This would let us
      simplify things, since we'd now be able to keep ports around without
      having to keep them in the topology at the same time, which is exactly
      what we need in order to teach our VCPI helpers to only validate ports
      when it's actually necessary without running the risk of trying to use
      unallocated memory.
      
      Such a fix is on it's way, but for now let's play it safe and just
      revert this. If this bug has been around for well over a year, we can
      wait a little while to get an actual proper fix here.
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Fixes: c54c7374 ("drm/dp_mst: Skip validating ports during destruction, just ref")
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: Sean Paul <sean@poorly.run>
      Cc: Jerry Zuo <Jerry.Zuo@amd.com>
      Cc: Harry Wentland <Harry.Wentland@amd.com>
      Cc: stable@vger.kernel.org # v4.6+
      Acked-by: default avatarSean Paul <sean@poorly.run>
      Link: https://patchwork.freedesktop.org/patch/msgid/20181128210005.24434-1-lyude@redhat.com
      Cc: Guenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      594b0602
    • Johan Hovold's avatar
      staging: greybus: loopback_test: fix potential path truncations · 0e68b689
      Johan Hovold authored
      commit ae62cf5e upstream.
      
      Newer GCC warns about possible truncations of two generated path names as
      we're concatenating the configurable sysfs and debugfs path prefixes
      with a filename and placing the results in buffers of the same size as
      the maximum length of the prefixes.
      
      	snprintf(d->name, MAX_STR_LEN, "gb_loopback%u", dev_id);
      
      	snprintf(d->sysfs_entry, MAX_SYSFS_PATH, "%s%s/",
      		 t->sysfs_prefix, d->name);
      
      	snprintf(d->debugfs_entry, MAX_SYSFS_PATH, "%sraw_latency_%s",
      		 t->debugfs_prefix, d->name);
      
      Fix this by separating the maximum path length from the maximum prefix
      length and reducing the latter enough to fit the generated strings.
      
      Note that we also need to reduce the device-name buffer size as GCC
      isn't smart enough to figure out that we ever only used MAX_STR_LEN
      bytes of it.
      
      Fixes: 6b0658f6 ("greybus: tools: Add tools directory to greybus repo and add loopback")
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Link: https://lore.kernel.org/r/20200312110151.22028-4-johan@kernel.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0e68b689
    • Johan Hovold's avatar
      staging: greybus: loopback_test: fix potential path truncation · d444ed69
      Johan Hovold authored
      commit f1602383 upstream.
      
      Newer GCC warns about a possible truncation of a generated sysfs path
      name as we're concatenating a directory path with a file name and
      placing the result in a buffer that is half the size of the maximum
      length of the directory path (which is user controlled).
      
      loopback_test.c: In function 'open_poll_files':
      loopback_test.c:651:31: warning: '%s' directive output may be truncated writing up to 511 bytes into a region of size 255 [-Wformat-truncation=]
        651 |   snprintf(buf, sizeof(buf), "%s%s", dev->sysfs_entry, "iteration_count");
            |                               ^~
      loopback_test.c:651:3: note: 'snprintf' output between 16 and 527 bytes into a destination of size 255
        651 |   snprintf(buf, sizeof(buf), "%s%s", dev->sysfs_entry, "iteration_count");
            |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      Fix this by making sure the buffer is large enough the concatenated
      strings.
      
      Fixes: 6b0658f6 ("greybus: tools: Add tools directory to greybus repo and add loopback")
      Fixes: 9250c0ee ("greybus: Loopback_test: use poll instead of inotify")
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Link: https://lore.kernel.org/r/20200312110151.22028-3-johan@kernel.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d444ed69
    • Cristian Marussi's avatar
      arm64: smp: fix smp_send_stop() behaviour · 35989bb9
      Cristian Marussi authored
      commit d0bab0c3 upstream.
      
      On a system with only one CPU online, when another one CPU panics while
      starting-up, smp_send_stop() will fail to send any STOP message to the
      other already online core, resulting in a system still responsive and
      alive at the end of the panic procedure.
      
      [  186.700083] CPU3: shutdown
      [  187.075462] CPU2: shutdown
      [  187.162869] CPU1: shutdown
      [  188.689998] ------------[ cut here ]------------
      [  188.691645] kernel BUG at arch/arm64/kernel/cpufeature.c:886!
      [  188.692079] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
      [  188.692444] Modules linked in:
      [  188.693031] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 5.6.0-rc4-00001-g338d25c35a98 #104
      [  188.693175] Hardware name: Foundation-v8A (DT)
      [  188.693492] pstate: 200001c5 (nzCv dAIF -PAN -UAO)
      [  188.694183] pc : has_cpuid_feature+0xf0/0x348
      [  188.694311] lr : verify_local_elf_hwcaps+0x84/0xe8
      [  188.694410] sp : ffff800011b1bf60
      [  188.694536] x29: ffff800011b1bf60 x28: 0000000000000000
      [  188.694707] x27: 0000000000000000 x26: 0000000000000000
      [  188.694801] x25: 0000000000000000 x24: ffff80001189a25c
      [  188.694905] x23: 0000000000000000 x22: 0000000000000000
      [  188.694996] x21: ffff8000114aa018 x20: ffff800011156a38
      [  188.695089] x19: ffff800010c944a0 x18: 0000000000000004
      [  188.695187] x17: 0000000000000000 x16: 0000000000000000
      [  188.695280] x15: 0000249dbde5431e x14: 0262cbe497efa1fa
      [  188.695371] x13: 0000000000000002 x12: 0000000000002592
      [  188.695472] x11: 0000000000000080 x10: 00400032b5503510
      [  188.695572] x9 : 0000000000000000 x8 : ffff800010c80204
      [  188.695659] x7 : 00000000410fd0f0 x6 : 0000000000000001
      [  188.695750] x5 : 00000000410fd0f0 x4 : 0000000000000000
      [  188.695836] x3 : 0000000000000000 x2 : ffff8000100939d8
      [  188.695919] x1 : 0000000000180420 x0 : 0000000000180480
      [  188.696253] Call trace:
      [  188.696410]  has_cpuid_feature+0xf0/0x348
      [  188.696504]  verify_local_elf_hwcaps+0x84/0xe8
      [  188.696591]  check_local_cpu_capabilities+0x44/0x128
      [  188.696666]  secondary_start_kernel+0xf4/0x188
      [  188.697150] Code: 52805001 72a00301 6b01001f 54000ec0 (d4210000)
      [  188.698639] ---[ end trace 3f12ca47652f7b72 ]---
      [  188.699160] Kernel panic - not syncing: Attempted to kill the idle task!
      [  188.699546] Kernel Offset: disabled
      [  188.699828] CPU features: 0x00004,20c02008
      [  188.700012] Memory Limit: none
      [  188.700538] ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]---
      
      [root@arch ~]# echo Helo
      Helo
      [root@arch ~]# cat /proc/cpuinfo | grep proce
      processor	: 0
      
      Make smp_send_stop() account also for the online status of the calling CPU
      while evaluating how many CPUs are effectively online: this way, the right
      number of STOPs is sent, so enforcing a proper freeze of the system at the
      end of panic even under the above conditions.
      
      Fixes: 08e875c1 ("arm64: SMP support")
      Reported-by: default avatarDave Martin <Dave.Martin@arm.com>
      Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
      Signed-off-by: default avatarCristian Marussi <cristian.marussi@arm.com>
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      35989bb9
    • Kai-Heng Feng's avatar
      ALSA: hda/realtek: Fix pop noise on ALC225 · caf41111
      Kai-Heng Feng authored
      commit 3b36b13d upstream.
      
      Commit 317d9313 ("ALSA: hda/realtek - Set default power save node to
      0") makes the ALC225 have pop noise on S3 resume and cold boot.
      
      So partially revert this commit for ALC225 to fix the regression.
      
      Fixes: 317d9313 ("ALSA: hda/realtek - Set default power save node to 0")
      BugLink: https://bugs.launchpad.net/bugs/1866357Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
      Link: https://lore.kernel.org/r/20200311061328.17614-1-kai.heng.feng@canonical.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      caf41111
    • Thomas Gleixner's avatar
      futex: Unbreak futex hashing · 95c53834
      Thomas Gleixner authored
      commit 8d677436 upstream.
      
      The recent futex inode life time fix changed the ordering of the futex key
      union struct members, but forgot to adjust the hash function accordingly,
      
      As a result the hashing omits the leading 64bit and even hashes beyond the
      futex key causing a bad hash distribution which led to a ~100% performance
      regression.
      
      Hand in the futex key pointer instead of a random struct member and make
      the size calculation based of the struct offset.
      
      Fixes: 8019ad13 ("futex: Fix inode life-time issue")
      Reported-by: default avatarRong Chen <rong.a.chen@intel.com>
      Decoded-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarRong Chen <rong.a.chen@intel.com>
      Link: https://lkml.kernel.org/r/87h7yy90ve.fsf@nanos.tec.linutronix.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      95c53834
    • Peter Zijlstra's avatar
      futex: Fix inode life-time issue · fb099f3b
      Peter Zijlstra authored
      commit 8019ad13 upstream.
      
      As reported by Jann, ihold() does not in fact guarantee inode
      persistence. And instead of making it so, replace the usage of inode
      pointers with a per boot, machine wide, unique inode identifier.
      
      This sequence number is global, but shared (file backed) futexes are
      rare enough that this should not become a performance issue.
      Reported-by: default avatarJann Horn <jannh@google.com>
      Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fb099f3b
    • Nathan Chancellor's avatar
      kbuild: Disable -Wpointer-to-enum-cast · 3251c97f
      Nathan Chancellor authored
      commit 82f2bc2f upstream.
      
      Clang's -Wpointer-to-int-cast deviates from GCC in that it warns when
      casting to enums. The kernel does this in certain places, such as device
      tree matches to set the version of the device being used, which allows
      the kernel to avoid using a gigantic union.
      
      https://elixir.bootlin.com/linux/v5.5.8/source/drivers/ata/ahci_brcm.c#L428
      https://elixir.bootlin.com/linux/v5.5.8/source/drivers/ata/ahci_brcm.c#L402
      https://elixir.bootlin.com/linux/v5.5.8/source/include/linux/mod_devicetable.h#L264
      
      To avoid a ton of false positive warnings, disable this particular part
      of the warning, which has been split off into a separate diagnostic so
      that the entire warning does not need to be turned off for clang. It
      will be visible under W=1 in case people want to go about fixing these
      easily and enabling the warning treewide.
      
      Cc: stable@vger.kernel.org
      Link: https://github.com/ClangBuiltLinux/linux/issues/887
      Link: https://github.com/llvm/llvm-project/commit/2a41b31fcdfcb67ab7038fc2ffb606fd50b83a84Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3251c97f
    • Anthony Mallet's avatar
      USB: cdc-acm: fix rounding error in TIOCSSERIAL · 8e22289c
      Anthony Mallet authored
      [ Upstream commit b401f8c4 ]
      
      By default, tty_port_init() initializes those parameters to a multiple
      of HZ. For instance in line 69 of tty_port.c:
         port->close_delay = (50 * HZ) / 100;
      https://github.com/torvalds/linux/blob/master/drivers/tty/tty_port.c#L69
      
      With e.g. CONFIG_HZ = 250 (as this is the case for Ubuntu 18.04
      linux-image-4.15.0-37-generic), the default setting for close_delay is
      thus 125.
      
      When ioctl(fd, TIOCGSERIAL, &s) is executed, the setting returned in
      user space is '12' (125/10). When ioctl(fd, TIOCSSERIAL, &s) is then
      executed with the same setting '12', the value is interpreted as '120'
      which is different from the current setting and a EPERM error may be
      raised by set_serial_info() if !CAP_SYS_ADMIN.
      https://github.com/torvalds/linux/blob/master/drivers/usb/class/cdc-acm.c#L919
      
      Fixes: ba2d8ce9 ("cdc-acm: implement TIOCSSERIAL to avoid blocking close(2)")
      Signed-off-by: default avatarAnthony Mallet <anthony.mallet@laas.fr>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200312133101.7096-2-anthony.mallet@laas.frSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8e22289c