Skip to content
  1. Apr 17, 2020
    • Christophe Leroy's avatar
      powerpc/kasan: Fix kasan_remap_early_shadow_ro() · c1f3e1d8
      Christophe Leroy authored
      [ Upstream commit af92bad6
      
       ]
      
      At the moment kasan_remap_early_shadow_ro() does nothing, because
      k_end is 0 and k_cur < 0 is always true.
      
      Change the test to k_cur != k_end, as done in
      kasan_init_shadow_page_tables()
      
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
      Fixes: cbd18991
      
       ("powerpc/mm: Fix an Oops in kasan_mmu_init()")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/4e7b56865e01569058914c991143f5961b5d4719.1583507333.git.christophe.leroy@c-s.fr
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c1f3e1d8
    • Imre Deak's avatar
      drm/i915/icl+: Don't enable DDI IO power on a TypeC port in TBT mode · 36b0b1f6
      Imre Deak authored
      
      
      The DDI IO power well must not be enabled for a TypeC port in TBT mode,
      ensure this during driver loading/system resume.
      
      This gets rid of error messages like
      [drm] *ERROR* power well DDI E TC2 IO state mismatch (refcount 1/enabled 0)
      
      and avoids leaking the power ref when disabling the output.
      
      Cc: <stable@vger.kernel.org> # v5.4+
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200330152244.11316-1-imre.deak@intel.com
      (cherry picked from commit f77a2db2
      
      )
      Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      36b0b1f6
    • Prike Liang's avatar
      drm/amdgpu: fix gfx hang during suspend with video playback (v2) · bdac1d76
      Prike Liang authored
      [ Upstream commit 487eca11
      
       ]
      
      The system will be hang up during S3 suspend because of SMU is pending
      for GC not respose the register CP_HQD_ACTIVE access request.This issue
      root cause of accessing the GC register under enter GFX CGGPG and can
      be fixed by disable GFX CGPG before perform suspend.
      
      v2: Use disable the GFX CGPG instead of RLC safe mode guard.
      
      Signed-off-by: default avatarPrike Liang <Prike.Liang@amd.com>
      Tested-by: default avatarMengbing Wang <Mengbing.Wang@amd.com>
      Reviewed-by: default avatarHuang Rui <ray.huang@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bdac1d76
    • Lyude Paul's avatar
      drm/dp_mst: Fix clearing payload state on topology disable · d1bbdf00
      Lyude Paul authored
      [ Upstream commit 8732fe46 ]
      
      The issues caused by:
      
      commit 64e62bdf
      
       ("drm/dp_mst: Remove VCPI while disabling topology
      mgr")
      
      Prompted me to take a closer look at how we clear the payload state in
      general when disabling the topology, and it turns out there's actually
      two subtle issues here.
      
      The first is that we're not grabbing &mgr.payload_lock when clearing the
      payloads in drm_dp_mst_topology_mgr_set_mst(). Seeing as the canonical
      lock order is &mgr.payload_lock -> &mgr.lock (because we always want
      &mgr.lock to be the inner-most lock so topology validation always
      works), this makes perfect sense. It also means that -technically- there
      could be racing between someone calling
      drm_dp_mst_topology_mgr_set_mst() to disable the topology, along with a
      modeset occurring that's modifying the payload state at the same time.
      
      The second is the more obvious issue that Wayne Lin discovered, that
      we're not clearing proposed_payloads when disabling the topology.
      
      I actually can't see any obvious places where the racing caused by the
      first issue would break something, and it could be that some of our
      higher-level locks already prevent this by happenstance, but better safe
      then sorry. So, let's make it so that drm_dp_mst_topology_mgr_set_mst()
      first grabs &mgr.payload_lock followed by &mgr.lock so that we never
      race when modifying the payload state. Then, we also clear
      proposed_payloads to fix the original issue of enabling a new topology
      with a dirty payload state. This doesn't clear any of the drm_dp_vcpi
      structures, but those are getting destroyed along with the ports anyway.
      
      Changes since v1:
      * Use sizeof(mgr->payloads[0])/sizeof(mgr->proposed_vcpis[0]) instead -
        vsyrjala
      
      Cc: Sean Paul <sean@poorly.run>
      Cc: Wayne Lin <Wayne.Lin@amd.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: stable@vger.kernel.org # v4.4+
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200122194321.14953-1-lyude@redhat.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d1bbdf00
    • Sasha Levin's avatar
      Revert "drm/dp_mst: Remove VCPI while disabling topology mgr" · 7676e69c
      Sasha Levin authored
      [ Upstream commit a8667596 ]
      
      This reverts commit 64e62bdf
      
      .
      
      This commit ends up causing some lockdep splats due to trying to grab the
      payload lock while holding the mgr's lock:
      
      [   54.010099]
      [   54.011765] ======================================================
      [   54.018670] WARNING: possible circular locking dependency detected
      [   54.025577] 5.5.0-rc6-02274-g77381c23ee63 #47 Not tainted
      [   54.031610] ------------------------------------------------------
      [   54.038516] kworker/1:6/1040 is trying to acquire lock:
      [   54.044354] ffff888272af3228 (&mgr->payload_lock){+.+.}, at:
      drm_dp_mst_topology_mgr_set_mst+0x218/0x2e4
      [   54.054957]
      [   54.054957] but task is already holding lock:
      [   54.061473] ffff888272af3060 (&mgr->lock){+.+.}, at:
      drm_dp_mst_topology_mgr_set_mst+0x3c/0x2e4
      [   54.071193]
      [   54.071193] which lock already depends on the new lock.
      [   54.071193]
      [   54.080334]
      [   54.080334] the existing dependency chain (in reverse order) is:
      [   54.088697]
      [   54.088697] -> #1 (&mgr->lock){+.+.}:
      [   54.094440]        __mutex_lock+0xc3/0x498
      [   54.099015]        drm_dp_mst_topology_get_port_validated+0x25/0x80
      [   54.106018]        drm_dp_update_payload_part1+0xa2/0x2e2
      [   54.112051]        intel_mst_pre_enable_dp+0x144/0x18f
      [   54.117791]        intel_encoders_pre_enable+0x63/0x70
      [   54.123532]        hsw_crtc_enable+0xa1/0x722
      [   54.128396]        intel_update_crtc+0x50/0x194
      [   54.133455]        skl_commit_modeset_enables+0x40c/0x540
      [   54.139485]        intel_atomic_commit_tail+0x5f7/0x130d
      [   54.145418]        intel_atomic_commit+0x2c8/0x2d8
      [   54.150770]        drm_atomic_helper_set_config+0x5a/0x70
      [   54.156801]        drm_mode_setcrtc+0x2ab/0x833
      [   54.161862]        drm_ioctl+0x2e5/0x424
      [   54.166242]        vfs_ioctl+0x21/0x2f
      [   54.170426]        do_vfs_ioctl+0x5fb/0x61e
      [   54.175096]        ksys_ioctl+0x55/0x75
      [   54.179377]        __x64_sys_ioctl+0x1a/0x1e
      [   54.184146]        do_syscall_64+0x5c/0x6d
      [   54.188721]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [   54.194946]
      [   54.194946] -> #0 (&mgr->payload_lock){+.+.}:
      [   54.201463]
      [   54.201463] other info that might help us debug this:
      [   54.201463]
      [   54.210410]  Possible unsafe locking scenario:
      [   54.210410]
      [   54.217025]        CPU0                    CPU1
      [   54.222082]        ----                    ----
      [   54.227138]   lock(&mgr->lock);
      [   54.230643]                                lock(&mgr->payload_lock);
      [   54.237742]                                lock(&mgr->lock);
      [   54.244062]   lock(&mgr->payload_lock);
      [   54.248346]
      [   54.248346]  *** DEADLOCK ***
      [   54.248346]
      [   54.254959] 7 locks held by kworker/1:6/1040:
      [   54.259822]  #0: ffff888275c4f528 ((wq_completion)events){+.+.},
      at: worker_thread+0x455/0x6e2
      [   54.269451]  #1: ffffc9000119beb0
      ((work_completion)(&(&dev_priv->hotplug.hotplug_work)->work)){+.+.},
      at: worker_thread+0x455/0x6e2
      [   54.282768]  #2: ffff888272a403f0 (&dev->mode_config.mutex){+.+.},
      at: i915_hotplug_work_func+0x4b/0x2be
      [   54.293368]  #3: ffffffff824fc6c0 (drm_connector_list_iter){.+.+},
      at: i915_hotplug_work_func+0x17e/0x2be
      [   54.304061]  #4: ffffc9000119bc58 (crtc_ww_class_acquire){+.+.},
      at: drm_helper_probe_detect_ctx+0x40/0xfd
      [   54.314855]  #5: ffff888272a40470 (crtc_ww_class_mutex){+.+.}, at:
      drm_modeset_lock+0x74/0xe2
      [   54.324385]  #6: ffff888272af3060 (&mgr->lock){+.+.}, at:
      drm_dp_mst_topology_mgr_set_mst+0x3c/0x2e4
      [   54.334597]
      [   54.334597] stack backtrace:
      [   54.339464] CPU: 1 PID: 1040 Comm: kworker/1:6 Not tainted
      5.5.0-rc6-02274-g77381c23ee63 #47
      [   54.348893] Hardware name: Google Fizz/Fizz, BIOS
      Google_Fizz.10139.39.0 01/04/2018
      [   54.357451] Workqueue: events i915_hotplug_work_func
      [   54.362995] Call Trace:
      [   54.365724]  dump_stack+0x71/0x9c
      [   54.369427]  check_noncircular+0x91/0xbc
      [   54.373809]  ? __lock_acquire+0xc9e/0xf66
      [   54.378286]  ? __lock_acquire+0xc9e/0xf66
      [   54.382763]  ? lock_acquire+0x175/0x1ac
      [   54.387048]  ? drm_dp_mst_topology_mgr_set_mst+0x218/0x2e4
      [   54.393177]  ? __mutex_lock+0xc3/0x498
      [   54.397362]  ? drm_dp_mst_topology_mgr_set_mst+0x218/0x2e4
      [   54.403492]  ? drm_dp_mst_topology_mgr_set_mst+0x218/0x2e4
      [   54.409620]  ? drm_dp_dpcd_access+0xd9/0x101
      [   54.414390]  ? drm_dp_mst_topology_mgr_set_mst+0x218/0x2e4
      [   54.420517]  ? drm_dp_mst_topology_mgr_set_mst+0x218/0x2e4
      [   54.426645]  ? intel_digital_port_connected+0x34d/0x35c
      [   54.432482]  ? intel_dp_detect+0x227/0x44e
      [   54.437056]  ? ww_mutex_lock+0x49/0x9a
      [   54.441242]  ? drm_helper_probe_detect_ctx+0x75/0xfd
      [   54.446789]  ? intel_encoder_hotplug+0x4b/0x97
      [   54.451752]  ? intel_ddi_hotplug+0x61/0x2e0
      [   54.456423]  ? mark_held_locks+0x53/0x68
      [   54.460803]  ? _raw_spin_unlock_irqrestore+0x3a/0x51
      [   54.466347]  ? lockdep_hardirqs_on+0x187/0x1a4
      [   54.471310]  ? drm_connector_list_iter_next+0x89/0x9a
      [   54.476953]  ? i915_hotplug_work_func+0x206/0x2be
      [   54.482208]  ? worker_thread+0x4d5/0x6e2
      [   54.486587]  ? worker_thread+0x455/0x6e2
      [   54.490966]  ? queue_work_on+0x64/0x64
      [   54.495151]  ? kthread+0x1e9/0x1f1
      [   54.498946]  ? queue_work_on+0x64/0x64
      [   54.503130]  ? kthread_unpark+0x5e/0x5e
      [   54.507413]  ? ret_from_fork+0x3a/0x50
      
      The proper fix for this is probably cleanup the VCPI allocations when we're
      enabling the topology, or on the first payload allocation. For now though,
      let's just revert.
      
      Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
      Fixes: 64e62bdf
      
       ("drm/dp_mst: Remove VCPI while disabling topology mgr")
      Cc: Sean Paul <sean@poorly.run>
      Cc: Wayne Lin <Wayne.Lin@amd.com>
      Reviewed-by: default avatarSean Paul <sean@poorly.run>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200117205149.97262-1-lyude@redhat.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7676e69c
    • James Smart's avatar
      scsi: lpfc: Fix broken Credit Recovery after driver load · ba74ab0c
      James Smart authored
      [ Upstream commit 835214f5 ]
      
      When driver is set to enable bb credit recovery, the switch displayed the
      setting as inactive.  If the link bounces, it switches to Active.
      
      During link up processing, the driver currently does a MBX_READ_SPARAM
      followed by a MBX_CONFIG_LINK. These mbox commands are queued to be
      executed, one at a time and the completion is processed by the worker
      thread.  Since the MBX_READ_SPARAM is done BEFORE the MBX_CONFIG_LINK, the
      BB_SC_N bit is never set the the returned values. BB Credit recovery status
      only gets set after the driver requests the feature in CONFIG_LINK, which
      is done after the link up. Thus the ordering of READ_SPARAM needs to follow
      the CONFIG_LINK.
      
      Fix by reordering so that READ_SPARAM is done after CONFIG_LINK.  Added a
      HBA_DEFER_FLOGI flag so that any FLOGI handling waits until after the
      READ_SPARAM is done so that the proper BB credit value is set in the FLOGI
      payload.
      
      Fixes: 6bfb1620
      
       ("scsi: lpfc: Fix configuration of BB credit recovery in service parameters")
      Cc: <stable@vger.kernel.org> # v5.4+
      Link: https://lore.kernel.org/r/20200128002312.16346-4-jsmart2021@gmail.com
      Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
      Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ba74ab0c
    • James Smart's avatar
      scsi: lpfc: Fix configuration of BB credit recovery in service parameters · 33ebae4f
      James Smart authored
      [ Upstream commit 6bfb1620
      
       ]
      
      The driver today is reading service parameters from the firmware and then
      overwriting the firmware-provided values with values of its own.  There are
      some switch features that require preliminary FLOGI's that are
      switch-specific and done prior to the actual fabric FLOGI for traffic.  The
      fw will perform those FLOGIs and will revise the service parameters for the
      features configured. As the driver later overwrites those values with its
      own values, it misconfigures things like BBSCN use by doing so.
      
      Correct by eliminating the driver-overwrite of firmware values. The driver
      correctly re-reads the service parameters after each link up to obtain the
      latest values from firmware.
      
      Link: https://lore.kernel.org/r/20191105005708.7399-3-jsmart2021@gmail.com
      Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
      Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      33ebae4f
    • James Smart's avatar
      scsi: lpfc: Fix Fabric hostname registration if system hostname changes · 037b0b55
      James Smart authored
      [ Upstream commit e3ba04c9
      
       ]
      
      There are reports of multiple ports on the same system displaying different
      hostnames in fabric FDMI displays.
      
      Currently, the driver registers the hostname at initialization and obtains
      the hostname via init_utsname()->nodename queried at the time the FC link
      comes up. Unfortunately, if the machine hostname is updated after
      initialization, such as via DHCP or admin command, the value registered
      initially will be incorrect.
      
      Fix by having the driver save the hostname that was registered with FDMI.
      The driver then runs a heartbeat action that will check the hostname.  If
      the name changes, reregister the FMDI data.
      
      The hostname is used in RSNN_NN, FDMI RPA and FDMI RHBA.
      
      Link: https://lore.kernel.org/r/20191218235808.31922-5-jsmart2021@gmail.com
      Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
      Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      037b0b55
    • James Smart's avatar
      scsi: lpfc: Add registration for CPU Offline/Online events · f48e7593
      James Smart authored
      [ Upstream commit 93a4d6f4
      
       ]
      
      The recent affinitization didn't address cpu offlining/onlining.  If an
      interrupt vector is shared and the low order cpu owning the vector is
      offlined, as interrupts are managed, the vector is taken offline. This
      causes the other CPUs sharing the vector will hang as they can't get io
      completions.
      
      Correct by registering callbacks with the system for Offline/Online
      events. When a cpu is taken offline, its eq, which is tied to an interrupt
      vector is found. If the cpu is the "owner" of the vector and if the
      eq/vector is shared by other CPUs, the eq is placed into a polled mode.
      Additionally, code paths that perform io submission on the "sharing CPUs"
      will check the eq state and poll for completion after submission of new io
      to a wq that uses the eq.
      
      Similarly, when a cpu comes back online and owns an offlined vector, the eq
      is taken out of polled mode and rearmed to start driving interrupts for eq.
      
      Link: https://lore.kernel.org/r/20191105005708.7399-9-jsmart2021@gmail.com
      Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
      Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f48e7593
    • Nikos Tsironis's avatar
      dm clone: Add missing casts to prevent overflows and data corruption · 33344a76
      Nikos Tsironis authored
      [ Upstream commit 9fc06ff5 ]
      
      Add missing casts when converting from regions to sectors.
      
      In case BITS_PER_LONG == 32, the lack of the appropriate casts can lead
      to overflows and miscalculation of the device sector.
      
      As a result, we could end up discarding and/or copying the wrong parts
      of the device, thus corrupting the device's data.
      
      Fixes: 7431b783
      
       ("dm: add clone target")
      Cc: stable@vger.kernel.org # v5.4+
      Signed-off-by: default avatarNikos Tsironis <ntsironis@arrikto.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      33344a76
    • Nikos Tsironis's avatar
      dm clone: Fix handling of partial region discards · 2d7eb7ee
      Nikos Tsironis authored
      [ Upstream commit 4b514290 ]
      
      There is a bug in the way dm-clone handles discards, which can lead to
      discarding the wrong blocks or trying to discard blocks beyond the end
      of the device.
      
      This could lead to data corruption, if the destination device indeed
      discards the underlying blocks, i.e., if the discard operation results
      in the original contents of a block to be lost.
      
      The root of the problem is the code that calculates the range of regions
      covered by a discard request and decides which regions to discard.
      
      Since dm-clone handles the device in units of regions, we don't discard
      parts of a region, only whole regions.
      
      The range is calculated as:
      
          rs = dm_sector_div_up(bio->bi_iter.bi_sector, clone->region_size);
          re = bio_end_sector(bio) >> clone->region_shift;
      
      , where 'rs' is the first region to discard and (re - rs) is the number
      of regions to discard.
      
      The bug manifests when we try to discard part of a single region, i.e.,
      when we try to discard a block with size < region_size, and the discard
      request both starts at an offset with respect to the beginning of that
      region and ends before the end of the region.
      
      The root cause is the following comparison:
      
        if (rs == re)
          // skip discard and complete original bio immediately
      
      , which doesn't take into account that 'rs' might be greater than 're'.
      
      Thus, we then issue a discard request for the wrong blocks, instead of
      skipping the discard all together.
      
      Fix the check to also take into account the above case, so we don't end
      up discarding the wrong blocks.
      
      Also, add some range checks to dm_clone_set_region_hydrated() and
      dm_clone_cond_set_range(), which update dm-clone's region bitmap.
      
      Note that the aforementioned bug doesn't cause invalid memory accesses,
      because dm_clone_is_range_hydrated() returns True for this case, so the
      checks are just precautionary.
      
      Fixes: 7431b783
      
       ("dm: add clone target")
      Cc: stable@vger.kernel.org # v5.4+
      Signed-off-by: default avatarNikos Tsironis <ntsironis@arrikto.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2d7eb7ee
    • Mikulas Patocka's avatar
      dm clone: replace spin_lock_irqsave with spin_lock_irq · dcf2f00b
      Mikulas Patocka authored
      [ Upstream commit 6ca43ed8
      
       ]
      
      If we are in a place where it is known that interrupts are enabled,
      functions spin_lock_irq/spin_unlock_irq should be used instead of
      spin_lock_irqsave/spin_unlock_irqrestore.
      
      spin_lock_irq and spin_unlock_irq are faster because they don't need to
      push and pop the flags register.
      
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarNikos Tsironis <ntsironis@arrikto.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dcf2f00b
    • Bob Liu's avatar
      dm zoned: remove duplicate nr_rnd_zones increase in dmz_init_zone() · fddfa591
      Bob Liu authored
      [ Upstream commit b8fdd090 ]
      
      zmd->nr_rnd_zones was increased twice by mistake. The other place it
      is increased in dmz_init_zone() is the only one needed:
      
      1131                 zmd->nr_useable_zones++;
      1132                 if (dmz_is_rnd(zone)) {
      1133                         zmd->nr_rnd_zones++;
      					^^^
      Fixes: 3b1a94c8
      
       ("dm zoned: drive-managed zoned block device target")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarBob Liu <bob.liu@oracle.com>
      Reviewed-by: default avatarDamien Le Moal <damien.lemoal@wdc.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fddfa591
    • Mark Brown's avatar
      arm64: Always force a branch protection mode when the compiler has one · 1ba26c2a
      Mark Brown authored
      commit b8fdef31 upstream.
      
      Compilers with branch protection support can be configured to enable it by
      default, it is likely that distributions will do this as part of deploying
      branch protection system wide. As well as the slight overhead from having
      some extra NOPs for unused branch protection features this can cause more
      serious problems when the kernel is providing pointer authentication to
      userspace but not built for pointer authentication itself. In that case our
      switching of keys for userspace can affect the kernel unexpectedly, causing
      pointer authentication instructions in the kernel to corrupt addresses.
      
      To ensure that we get consistent and reliable behaviour always explicitly
      initialise the branch protection mode, ensuring that the kernel is built
      the same way regardless of the compiler defaults.
      
      [This is a reworked version of b8fdef31 ("arm64: Always
      force a branch protection mode when the compiler has one") for backport.
      Kernels prior to 74afda40 ("arm64: compile the kernel with ptrauth
      return address signing") don't have any Makefile machinery for forcing
      on pointer auth but still have issues if the compiler defaults it on so
      need this reworked version. -- broonie]
      
      Fixes: 75031975
      
       (arm64: add basic pointer authentication support)
      Reported-by: default avatarSzabolcs Nagy <szabolcs.nagy@arm.com>
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      [catalin.marinas@arm.com: remove Kconfig option in favour of Makefile check]
      Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1ba26c2a
    • Clement Courbet's avatar
      powerpc: Make setjmp/longjmp signature standard · ba7581be
      Clement Courbet authored
      commit c17eb4dc upstream.
      
      Declaring setjmp()/longjmp() as taking longs makes the signature
      non-standard, and makes clang complain. In the past, this has been
      worked around by adding -ffreestanding to the compile flags.
      
      The implementation looks like it only ever propagates the value
      (in longjmp) or sets it to 1 (in setjmp), and we only call longjmp
      with integer parameters.
      
      This allows removing -ffreestanding from the compilation flags.
      
      Fixes: c9029ef9
      
       ("powerpc: Avoid clang warnings around setjmp and longjmp")
      Cc: stable@vger.kernel.org # v4.14+
      Signed-off-by: default avatarClement Courbet <courbet@google.com>
      Reviewed-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Tested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200330080400.124803-1-courbet@google.com
      Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ba7581be
    • Sreekanth Reddy's avatar
      scsi: mpt3sas: Fix kernel panic observed on soft HBA unplug · 3457b223
      Sreekanth Reddy authored
      commit cc41f11a upstream.
      
      Generic protection fault type kernel panic is observed when user performs
      soft (ordered) HBA unplug operation while IOs are running on drives
      connected to HBA.
      
      When user performs ordered HBA removal operation, the kernel calls PCI
      device's .remove() call back function where driver is flushing out all the
      outstanding SCSI IO commands with DID_NO_CONNECT host byte and also unmaps
      sg buffers allocated for these IO commands.
      
      However, in the ordered HBA removal case (unlike of real HBA hot removal),
      HBA device is still alive and hence HBA hardware is performing the DMA
      operations to those buffers on the system memory which are already unmapped
      while flushing out the outstanding SCSI IO commands and this leads to
      kernel panic.
      
      Don't flush out the outstanding IOs from .remove() path in case of ordered
      removal since HBA will be still alive in this case and it can complete the
      outstanding IOs. Flush out the outstanding IOs only in case of 'physical
      HBA hot unplug' where there won't be any communication with the HBA.
      
      During shutdown also it is possible that HBA hardware can perform DMA
      operations on those outstanding IO buffers which are completed with
      DID_NO_CONNECT by the driver from .shutdown(). So same above fix is applied
      in shutdown path as well.
      
      It is safe to drop the outstanding commands when HBA is inaccessible such
      as when permanent PCI failure happens, when HBA is in non-operational
      state, or when someone does a real HBA hot unplug operation. Since driver
      knows that HBA is inaccessible during these cases, it is safe to drop the
      outstanding commands instead of waiting for SCSI error recovery to kick in
      and clear these outstanding commands.
      
      Link: https://lore.kernel.org/r/1585302763-23007-1-git-send-email-sreekanth.reddy@broadcom.com
      Fixes: c666d3be
      
       ("scsi: mpt3sas: wait for and flush running commands on shutdown/unload")
      Cc: stable@vger.kernel.org #v4.14.174+
      Signed-off-by: default avatarSreekanth Reddy <sreekanth.reddy@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      
      3457b223
    • Michael Ellerman's avatar
      powerpc/64: Prevent stack protection in early boot · e294f8a5
      Michael Ellerman authored
      commit 7053f80d upstream.
      
      The previous commit reduced the amount of code that is run before we
      setup a paca. However there are still a few remaining functions that
      run with no paca, or worse, with an arbitrary value in r13 that will
      be used as a paca pointer.
      
      In particular the stack protector canary is stored in the paca, so if
      stack protector is activated for any of these functions we will read
      the stack canary from wherever r13 points. If r13 happens to point
      outside of memory we will get a machine check / checkstop.
      
      For example if we modify initialise_paca() to trigger stack
      protection, and then boot in the mambo simulator with r13 poisoned in
      skiboot before calling the kernel:
      
        DEBUG: 19952232: (19952232): INSTRUCTION: PC=0xC0000000191FC1E8: [0x3C4C006D]: addis   r2,r12,0x6D [fetch]
        DEBUG: 19952236: (19952236): INSTRUCTION: PC=0xC00000001807EAD8: [0x7D8802A6]: mflr    r12 [fetch]
        FATAL ERROR: 19952276: (19952276): Check Stop for 0:0: Machine Check with ME bit of MSR off
        DEBUG: 19952276: (19952276): INSTRUCTION: PC=0xC0000000191FCA7C: [0xE90D0CF8]: ld      r8,0xCF8(r13) [Instruction Failed]
        INFO: 19952276: (19952277): ** Execution stopped: Mambo Error, Machine Check Stop,  **
        systemsim % bt
        pc:                             0xC0000000191FCA7C      initialise_paca+0x54
        lr:                             0xC0000000191FC22C      early_setup+0x44
        stack:0x00000000198CBED0        0x0     +0x0
        stack:0x00000000198CBF00        0xC0000000191FC22C      early_setup+0x44
        stack:0x00000000198CBF90        0x1801C968      +0x1801C968
      
      So annotate the relevant functions to ensure stack protection is never
      enabled for them.
      
      Fixes: 06ec27ae
      
       ("powerpc/64: add stack protector support")
      Cc: stable@vger.kernel.org # v4.20+
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200320032116.1024773-2-mpe@ellerman.id.au
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e294f8a5
    • Christophe Leroy's avatar
      powerpc/kprobes: Ignore traps that happened in real mode · fc8755dc
      Christophe Leroy authored
      commit 21f8b2fa
      
       upstream.
      
      When a program check exception happens while MMU translation is
      disabled, following Oops happens in kprobe_handler() in the following
      code:
      
      	} else if (*addr != BREAKPOINT_INSTRUCTION) {
      
        BUG: Unable to handle kernel data access on read at 0x0000e268
        Faulting instruction address: 0xc000ec34
        Oops: Kernel access of bad area, sig: 11 [#1]
        BE PAGE_SIZE=16K PREEMPT CMPC885
        Modules linked in:
        CPU: 0 PID: 429 Comm: cat Not tainted 5.6.0-rc1-s3k-dev-00824-g84195dc6c58a #3267
        NIP:  c000ec34 LR: c000ecd8 CTR: c019cab8
        REGS: ca4d3b58 TRAP: 0300   Not tainted  (5.6.0-rc1-s3k-dev-00824-g84195dc6c58a)
        MSR:  00001032 <ME,IR,DR,RI>  CR: 2a4d3c52  XER: 00000000
        DAR: 0000e268 DSISR: c0000000
        GPR00: c000b09c ca4d3c10 c66d0620 00000000 ca4d3c60 00000000 00009032 00000000
        GPR08: 00020000 00000000 c087de44 c000afe0 c66d0ad0 100d3dd6 fffffff3 00000000
        GPR16: 00000000 00000041 00000000 ca4d3d70 00000000 00000000 0000416d 00000000
        GPR24: 00000004 c53b6128 00000000 0000e268 00000000 c07c0000 c07bb6fc ca4d3c60
        NIP [c000ec34] kprobe_handler+0x128/0x290
        LR [c000ecd8] kprobe_handler+0x1cc/0x290
        Call Trace:
        [ca4d3c30] [c000b09c] program_check_exception+0xbc/0x6fc
        [ca4d3c50] [c000e43c] ret_from_except_full+0x0/0x4
        --- interrupt: 700 at 0xe268
        Instruction dump:
        913e0008 81220000 38600001 3929ffff 91220000 80010024 bb410008 7c0803a6
        38210020 4e800020 38600000 4e800020 <813b0000> 6d2a7fe0 2f8a0008 419e0154
        ---[ end trace 5b9152d4cdadd06d ]---
      
      kprobe is not prepared to handle events in real mode and functions
      running in real mode should have been blacklisted, so kprobe_handler()
      can safely bail out telling 'this trap is not mine' for any trap that
      happened while in real-mode.
      
      If the trap happened with MSR_IR or MSR_DR cleared, return 0
      immediately.
      
      Reported-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
      Fixes: 6cc89bad
      
       ("powerpc/kprobes: Invoke handlers directly")
      Cc: stable@vger.kernel.org # v4.10+
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
      Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Reviewed-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/424331e2006e7291a1bfe40e7f3fa58825f565e1.1582054578.git.christophe.leroy@c-s.fr
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fc8755dc
    • Cédric Le Goater's avatar
      powerpc/xive: Fix xmon support on the PowerNV platform · ed6f6b2b
      Cédric Le Goater authored
      commit 97ef2750 upstream.
      
      The PowerNV platform has multiple IRQ chips and the xmon command
      dumping the state of the XIVE interrupt should only operate on the
      XIVE IRQ chip.
      
      Fixes: 5896163f
      
       ("powerpc/xmon: Improve output of XIVE interrupts")
      Cc: stable@vger.kernel.org # v5.4+
      Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
      Reviewed-by: default avatarGreg Kurz <groug@kaod.org>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200306150143.5551-3-clg@kaod.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ed6f6b2b
    • Daniel Axtens's avatar
      powerpc/64: Setup a paca before parsing device tree etc. · 1ab730b6
      Daniel Axtens authored
      commit d4a8e986 upstream.
      
      Currently we set up the paca after parsing the device tree for CPU
      features. Prior to that, r13 contains random data, which means there
      is random data in r13 while we're running the generic dt parsing code.
      
      This random data varies depending on whether we boot through a vmlinux
      or a zImage: for the vmlinux case it's usually around zero, but for
      zImages we see random values like 912a72603d420015.
      
      This is poor practice, and can also lead to difficult-to-debug
      crashes. For example, when kcov is enabled, the kcov instrumentation
      attempts to read preempt_count out of the current task, which goes via
      the paca. This then crashes in the zImage case.
      
      Similarly stack protector can cause crashes if r13 is bogus, by
      reading from the stack canary in the paca.
      
      To resolve this:
      
       - move the paca setup to before the CPU feature parsing.
      
       - because we no longer have access to CPU feature flags in paca
       setup, change the HV feature test in the paca setup path to consider
       the actual value of the MSR rather than the CPU feature.
      
      Translations get switched on once we leave early_setup, so I think
      we'd already catch any other cases where the paca or task aren't set
      up.
      
      Boot tested on a P9 guest and host.
      
      Fixes: fb0b0a73 ("powerpc: Enable kcov")
      Fixes: 06ec27ae
      
       ("powerpc/64: add stack protector support")
      Cc: stable@vger.kernel.org # v4.20+
      Reviewed-by: default avatarAndrew Donnellan <ajd@linux.ibm.com>
      Suggested-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: default avatarDaniel Axtens <dja@axtens.net>
      [mpe: Reword comments & change log a bit to mention stack protector]
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200320032116.1024773-1-mpe@ellerman.id.au
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1ab730b6
    • Cédric Le Goater's avatar
      powerpc/xive: Use XIVE_BAD_IRQ instead of zero to catch non configured IPIs · 9240f83a
      Cédric Le Goater authored
      commit b1a504a6
      
       upstream.
      
      When a CPU is brought up, an IPI number is allocated and recorded
      under the XIVE CPU structure. Invalid IPI numbers are tracked with
      interrupt number 0x0.
      
      On the PowerNV platform, the interrupt number space starts at 0x10 and
      this works fine. However, on the sPAPR platform, it is possible to
      allocate the interrupt number 0x0 and this raises an issue when CPU 0
      is unplugged. The XIVE spapr driver tracks allocated interrupt numbers
      in a bitmask and it is not correctly updated when interrupt number 0x0
      is freed. It stays allocated and it is then impossible to reallocate.
      
      Fix by using the XIVE_BAD_IRQ value instead of zero on both platforms.
      
      Reported-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      Fixes: eac1e731
      
       ("powerpc/xive: guest exploitation of the XIVE interrupt controller")
      Cc: stable@vger.kernel.org # v4.14+
      Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
      Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      Tested-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200306150143.5551-2-clg@kaod.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9240f83a
    • Aneesh Kumar K.V's avatar
      powerpc/hash64/devmap: Use H_PAGE_THP_HUGE when setting up huge devmap PTE entries · bd0fa144
      Aneesh Kumar K.V authored
      commit 36b78402 upstream.
      
      H_PAGE_THP_HUGE is used to differentiate between a THP hugepage and
      hugetlb hugepage entries. The difference is WRT how we handle hash
      fault on these address. THP address enables MPSS in segments. We want
      to manage devmap hugepage entries similar to THP pt entries. Hence use
      H_PAGE_THP_HUGE for devmap huge PTE entries.
      
      With current code while handling hash PTE fault, we do set is_thp =
      true when finding devmap PTE huge PTE entries.
      
      Current code also does the below sequence we setting up huge devmap
      entries.
      
      	entry = pmd_mkhuge(pfn_t_pmd(pfn, prot));
      	if (pfn_t_devmap(pfn))
      		entry = pmd_mkdevmap(entry);
      
      In that case we would find both H_PAGE_THP_HUGE and PAGE_DEVMAP set
      for huge devmap PTE entries. This results in false positive error like
      below.
      
        kernel BUG at /home/kvaneesh/src/linux/mm/memory.c:4321!
        Oops: Exception in kernel mode, sig: 5 [#1]
        LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
        Modules linked in:
        CPU: 56 PID: 67996 Comm: t_mmap_dio Not tainted 5.6.0-rc4-59640-g371c804dedbc #128
        ....
        NIP [c00000000044c9e4] __follow_pte_pmd+0x264/0x900
        LR [c0000000005d45f8] dax_writeback_one+0x1a8/0x740
        Call Trace:
          str_spec.74809+0x22ffb4/0x2d116c (unreliable)
          dax_writeback_one+0x1a8/0x740
          dax_writeback_mapping_range+0x26c/0x700
          ext4_dax_writepages+0x150/0x5a0
          do_writepages+0x68/0x180
          __filemap_fdatawrite_range+0x138/0x180
          file_write_and_wait_range+0xa4/0x110
          ext4_sync_file+0x370/0x6e0
          vfs_fsync_range+0x70/0xf0
          sys_msync+0x220/0x2e0
          system_call+0x5c/0x68
      
      This is because our pmd_trans_huge check doesn't exclude _PAGE_DEVMAP.
      
      To make this all consistent, update pmd_mkdevmap to set
      H_PAGE_THP_HUGE and pmd_trans_huge check now excludes _PAGE_DEVMAP
      correctly.
      
      Fixes: ebd31197
      
       ("powerpc/mm: Add devmap support for ppc64")
      Cc: stable@vger.kernel.org # v4.13+
      Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200313094842.351830-1-aneesh.kumar@linux.ibm.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bd0fa144
    • Laurentiu Tudor's avatar
      powerpc/fsl_booke: Avoid creating duplicate tlb1 entry · 81b9336a
      Laurentiu Tudor authored
      commit aa411334 upstream.
      
      In the current implementation, the call to loadcam_multi() is wrapped
      between switch_to_as1() and restore_to_as0() calls so, when it tries
      to create its own temporary AS=1 TLB1 entry, it ends up duplicating
      the existing one created by switch_to_as1(). Add a check to skip
      creating the temporary entry if already running in AS=1.
      
      Fixes: d9e1831a
      
       ("powerpc/85xx: Load all early TLB entries at once")
      Cc: stable@vger.kernel.org # v4.4+
      Signed-off-by: default avatarLaurentiu Tudor <laurentiu.tudor@nxp.com>
      Acked-by: default avatarScott Wood <oss@buserror.net>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200123111914.2565-1-laurentiu.tudor@nxp.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      81b9336a
    • Michael Ellerman's avatar
      powerpc/64/tm: Don't let userspace set regs->trap via sigreturn · 38aa7f32
      Michael Ellerman authored
      commit c7def7fb upstream.
      
      In restore_tm_sigcontexts() we take the trap value directly from the
      user sigcontext with no checking:
      
      	err |= __get_user(regs->trap, &sc->gp_regs[PT_TRAP]);
      
      This means we can be in the kernel with an arbitrary regs->trap value.
      
      Although that's not immediately problematic, there is a risk we could
      trigger one of the uses of CHECK_FULL_REGS():
      
      	#define CHECK_FULL_REGS(regs)	BUG_ON(regs->trap & 1)
      
      It can also cause us to unnecessarily save non-volatile GPRs again in
      save_nvgprs(), which shouldn't be problematic but is still wrong.
      
      It's also possible it could trick the syscall restart machinery, which
      relies on regs->trap not being == 0xc00 (see 9a81c16b ("powerpc:
      fix double syscall restarts")), though I haven't been able to make
      that happen.
      
      Finally it doesn't match the behaviour of the non-TM case, in
      restore_sigcontext() which zeroes regs->trap.
      
      So change restore_tm_sigcontexts() to zero regs->trap.
      
      This was discovered while testing Nick's upcoming rewrite of the
      syscall entry path. In that series the call to save_nvgprs() prior to
      signal handling (do_notify_resume()) is removed, which leaves the
      low-bit of regs->trap uncleared which can then trigger the FULL_REGS()
      WARNs in setup_tm_sigcontexts().
      
      Fixes: 2b0a576d
      
       ("powerpc: Add new transactional memory state to the signal context")
      Cc: stable@vger.kernel.org # v3.9+
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200401023836.3286664-1-mpe@ellerman.id.au
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      38aa7f32
    • Juergen Gross's avatar
      xen/blkfront: fix memory allocation flags in blkfront_setup_indirect() · 0abc07d2
      Juergen Gross authored
      commit 3a169c0b upstream.
      
      Commit 1d5c76e6 ("xen-blkfront: switch kcalloc to kvcalloc for
      large array allocation") didn't fix the issue it was meant to, as the
      flags for allocating the memory are GFP_NOIO, which will lead the
      memory allocation falling back to kmalloc().
      
      So instead of GFP_NOIO use GFP_KERNEL and do all the memory allocation
      in blkfront_setup_indirect() in a memalloc_noio_{save,restore} section.
      
      Fixes: 1d5c76e6
      
       ("xen-blkfront: switch kcalloc to kvcalloc for large array allocation")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
      Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
      Acked-by: default avatarRoger Pau Monné <roger.pau@citrix.com>
      Link: https://lore.kernel.org/r/20200403090034.8753-1-jgross@suse.com
      Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0abc07d2
    • Wen Yang's avatar
      ipmi: fix hung processes in __get_guid() · 5fdf0118
      Wen Yang authored
      commit 32830a05 upstream.
      
      The wait_event() function is used to detect command completion.
      When send_guid_cmd() returns an error, smi_send() has not been
      called to send data. Therefore, wait_event() should not be used
      on the error path, otherwise it will cause the following warning:
      
      [ 1361.588808] systemd-udevd   D    0  1501   1436 0x00000004
      [ 1361.588813]  ffff883f4b1298c0 0000000000000000 ffff883f4b188000 ffff887f7e3d9f40
      [ 1361.677952]  ffff887f64bd4280 ffffc90037297a68 ffffffff8173ca3b ffffc90000000010
      [ 1361.767077]  00ffc90037297ad0 ffff887f7e3d9f40 0000000000000286 ffff883f4b188000
      [ 1361.856199] Call Trace:
      [ 1361.885578]  [<ffffffff8173ca3b>] ? __schedule+0x23b/0x780
      [ 1361.951406]  [<ffffffff8173cfb6>] schedule+0x36/0x80
      [ 1362.010979]  [<ffffffffa071f178>] get_guid+0x118/0x150 [ipmi_msghandler]
      [ 1362.091281]  [<ffffffff810d5350>] ? prepare_to_wait_event+0x100/0x100
      [ 1362.168533]  [<ffffffffa071f755>] ipmi_register_smi+0x405/0x940 [ipmi_msghandler]
      [ 1362.258337]  [<ffffffffa0230ae9>] try_smi_init+0x529/0x950 [ipmi_si]
      [ 1362.334521]  [<ffffffffa022f350>] ? std_irq_setup+0xd0/0xd0 [ipmi_si]
      [ 1362.411701]  [<ffffffffa0232bd2>] init_ipmi_si+0x492/0x9e0 [ipmi_si]
      [ 1362.487917]  [<ffffffffa0232740>] ? ipmi_pci_probe+0x280/0x280 [ipmi_si]
      [ 1362.568219]  [<ffffffff810021a0>] do_one_initcall+0x50/0x180
      [ 1362.636109]  [<ffffffff812231b2>] ? kmem_cache_alloc_trace+0x142/0x190
      [ 1362.714330]  [<ffffffff811b2ae1>] do_init_module+0x5f/0x200
      [ 1362.781208]  [<ffffffff81123ca8>] load_module+0x1898/0x1de0
      [ 1362.848069]  [<ffffffff811202e0>] ? __symbol_put+0x60/0x60
      [ 1362.913886]  [<ffffffff8130696b>] ? security_kernel_post_read_file+0x6b/0x80
      [ 1362.998514]  [<ffffffff81124465>] SYSC_finit_module+0xe5/0x120
      [ 1363.068463]  [<ffffffff81124465>] ? SYSC_finit_module+0xe5/0x120
      [ 1363.140513]  [<ffffffff811244be>] SyS_finit_module+0xe/0x10
      [ 1363.207364]  [<ffffffff81003c04>] do_syscall_64+0x74/0x180
      
      Fixes: 50c812b2
      
       ("[PATCH] ipmi: add full sysfs support")
      Signed-off-by: default avatarWen Yang <wenyang@linux.alibaba.com>
      Cc: Corey Minyard <minyard@acm.org>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: openipmi-developer@lists.sourceforge.net
      Cc: linux-kernel@vger.kernel.org
      Cc: stable@vger.kernel.org # 2.6.17-
      Message-Id: <20200403090408.58745-1-wenyang@linux.alibaba.com>
      Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5fdf0118
    • Kai-Heng Feng's avatar
      libata: Return correct status in sata_pmp_eh_recover_pm() when ATA_DFLAG_DETACH is set · d0b9bd48
      Kai-Heng Feng authored
      commit 8305f72f
      
       upstream.
      
      During system resume from suspend, this can be observed on ASM1062 PMP
      controller:
      
      ata10.01: SATA link down (SStatus 0 SControl 330)
      ata10.02: hard resetting link
      ata10.02: SATA link down (SStatus 0 SControl 330)
      ata10.00: configured for UDMA/133
      Kernel panic - not syncing: stack-protector: Kernel
       in: sata_pmp_eh_recover+0xa2b/0xa40
      
      CPU: 2 PID: 230 Comm: scsi_eh_9 Tainted: P OE
      #49-Ubuntu
      Hardware name: System manufacturer System Product
       1001 12/10/2017
      Call Trace:
      dump_stack+0x63/0x8b
      panic+0xe4/0x244
      ? sata_pmp_eh_recover+0xa2b/0xa40
      __stack_chk_fail+0x19/0x20
      sata_pmp_eh_recover+0xa2b/0xa40
      ? ahci_do_softreset+0x260/0x260 [libahci]
      ? ahci_do_hardreset+0x140/0x140 [libahci]
      ? ata_phys_link_offline+0x60/0x60
      ? ahci_stop_engine+0xc0/0xc0 [libahci]
      sata_pmp_error_handler+0x22/0x30
      ahci_error_handler+0x45/0x80 [libahci]
      ata_scsi_port_error_handler+0x29b/0x770
      ? ata_scsi_cmd_error_handler+0x101/0x140
      ata_scsi_error+0x95/0xd0
      ? scsi_try_target_reset+0x90/0x90
      scsi_error_handler+0xd0/0x5b0
      kthread+0x121/0x140
      ? scsi_eh_get_sense+0x200/0x200
      ? kthread_create_worker_on_cpu+0x70/0x70
      ret_from_fork+0x22/0x40
      Kernel Offset: 0xcc00000 from 0xffffffff81000000
      (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
      
      Since sata_pmp_eh_recover_pmp() doens't set rc when ATA_DFLAG_DETACH is
      set, sata_pmp_eh_recover() continues to run. During retry it triggers
      the stack protector.
      
      Set correct rc in sata_pmp_eh_recover_pmp() to let sata_pmp_eh_recover()
      jump to pmp_fail directly.
      
      BugLink: https://bugs.launchpad.net/bugs/1821434
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d0b9bd48
    • Simon Gander's avatar
      hfsplus: fix crash and filesystem corruption when deleting files · ec2c054e
      Simon Gander authored
      commit 25efb2ff
      
       upstream.
      
      When removing files containing extended attributes, the hfsplus driver may
      remove the wrong entries from the attributes b-tree, causing major
      filesystem damage and in some cases even kernel crashes.
      
      To remove a file, all its extended attributes have to be removed as well.
      The driver does this by looking up all keys in the attributes b-tree with
      the cnid of the file.  Each of these entries then gets deleted using the
      key used for searching, which doesn't contain the attribute's name when it
      should.  Since the key doesn't contain the name, the deletion routine will
      not find the correct entry and instead remove the one in front of it.  If
      parent nodes have to be modified, these become corrupt as well.  This
      causes invalid links and unsorted entries that not even macOS's fsck_hfs
      is able to fix.
      
      To fix this, modify the search key before an entry is deleted from the
      attributes b-tree by copying the found entry's key into the search key,
      therefore ensuring that the correct entry gets removed from the tree.
      
      Signed-off-by: default avatarSimon Gander <simon@tuxera.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarAnton Altaparmakov <anton@tuxera.com>
      Cc: <stable@vger.kernel.org>
      Link: http://lkml.kernel.org/r/20200327155541.1521-1-simon@tuxera.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ec2c054e
    • Oliver O'Halloran's avatar
      cpufreq: powernv: Fix use-after-free · af80e6f7
      Oliver O'Halloran authored
      commit d0a72efa upstream.
      
      The cpufreq driver has a use-after-free that we can hit if:
      
      a) There's an OCC message pending when the notifier is registered, and
      b) The cpufreq driver fails to register with the core.
      
      When a) occurs the notifier schedules a workqueue item to handle the
      message. The backing work_struct is located on chips[].throttle and
      when b) happens we clean up by freeing the array. Once we get to
      the (now free) queued item and the kernel crashes.
      
      Fixes: c5e29ea7
      
       ("cpufreq: powernv: Fix bugs in powernv_cpufreq_{init/exit}")
      Cc: stable@vger.kernel.org # v4.6+
      Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
      Reviewed-by: default avatarGautham R. Shenoy <ego@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20200206062622.28235-1-oohall@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      af80e6f7
    • Eric Biggers's avatar
      kmod: make request_module() return an error when autoloading is disabled · 9cc4f52d
      Eric Biggers authored
      commit d7d27cfc
      
       upstream.
      
      Patch series "module autoloading fixes and cleanups", v5.
      
      This series fixes a bug where request_module() was reporting success to
      kernel code when module autoloading had been completely disabled via
      'echo > /proc/sys/kernel/modprobe'.
      
      It also addresses the issues raised on the original thread
      (https://lkml.kernel.org/lkml/20200310223731.126894-1-ebiggers@kernel.org/T/#u)
      bydocumenting the modprobe sysctl, adding a self-test for the empty path
      case, and downgrading a user-reachable WARN_ONCE().
      
      This patch (of 4):
      
      It's long been possible to disable kernel module autoloading completely
      (while still allowing manual module insertion) by setting
      /proc/sys/kernel/modprobe to the empty string.
      
      This can be preferable to setting it to a nonexistent file since it
      avoids the overhead of an attempted execve(), avoids potential
      deadlocks, and avoids the call to security_kernel_module_request() and
      thus on SELinux-based systems eliminates the need to write SELinux rules
      to dontaudit module_request.
      
      However, when module autoloading is disabled in this way,
      request_module() returns 0.  This is broken because callers expect 0 to
      mean that the module was successfully loaded.
      
      Apparently this was never noticed because this method of disabling
      module autoloading isn't used much, and also most callers don't use the
      return value of request_module() since it's always necessary to check
      whether the module registered its functionality or not anyway.
      
      But improperly returning 0 can indeed confuse a few callers, for example
      get_fs_type() in fs/filesystems.c where it causes a WARNING to be hit:
      
      	if (!fs && (request_module("fs-%.*s", len, name) == 0)) {
      		fs = __get_fs_type(name, len);
      		WARN_ONCE(!fs, "request_module fs-%.*s succeeded, but still no fs?\n", len, name);
      	}
      
      This is easily reproduced with:
      
      	echo > /proc/sys/kernel/modprobe
      	mount -t NONEXISTENT none /
      
      It causes:
      
      	request_module fs-NONEXISTENT succeeded, but still no fs?
      	WARNING: CPU: 1 PID: 1106 at fs/filesystems.c:275 get_fs_type+0xd6/0xf0
      	[...]
      
      This should actually use pr_warn_once() rather than WARN_ONCE(), since
      it's also user-reachable if userspace immediately unloads the module.
      Regardless, request_module() should correctly return an error when it
      fails.  So let's make it return -ENOENT, which matches the error when
      the modprobe binary doesn't exist.
      
      I've also sent patches to document and test this case.
      
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Reviewed-by: default avatarJessica Yu <jeyu@kernel.org>
      Acked-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jeff Vander Stoep <jeffv@google.com>
      Cc: Ben Hutchings <benh@debian.org>
      Cc: Josh Triplett <josh@joshtriplett.org>
      Cc: <stable@vger.kernel.org>
      Link: http://lkml.kernel.org/r/20200310223731.126894-1-ebiggers@kernel.org
      Link: http://lkml.kernel.org/r/20200312202552.241885-1-ebiggers@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9cc4f52d
    • Paul Cercueil's avatar
      clk: ingenic/TCU: Fix round_rate returning error · bf4fcd52
      Paul Cercueil authored
      commit edcc4294 upstream.
      
      When requesting a rate superior to the parent's rate, it would return
      -EINVAL instead of simply returning the parent's rate like it should.
      
      Fixes: 4f89e4b8
      
       ("clk: ingenic: Add driver for the TCU clocks")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPaul Cercueil <paul@crapouillou.net>
      Link: https://lkml.kernel.org/r/20200213161952.37460-2-paul@crapouillou.net
      Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bf4fcd52
    • Paul Cercueil's avatar
      clk: ingenic/jz4770: Exit with error if CGU init failed · 9e8388fd
      Paul Cercueil authored
      commit c067b46d upstream.
      
      Exit jz4770_cgu_init() if the 'cgu' pointer we get is NULL, since the
      pointer is passed as argument to functions later on.
      
      Fixes: 7a01c190
      
       ("clk: Add Ingenic jz4770 CGU driver")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPaul Cercueil <paul@crapouillou.net>
      Reported-by: default avatarkbuild test robot <lkp@intel.com>
      Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Link: https://lkml.kernel.org/r/20200213161952.37460-1-paul@crapouillou.net
      Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9e8388fd
    • Masami Hiramatsu's avatar
      ftrace/kprobe: Show the maxactive number on kprobe_events · 7bcca67b
      Masami Hiramatsu authored
      commit 6a13a0d7 upstream.
      
      Show maxactive parameter on kprobe_events.
      This allows user to save the current configuration and
      restore it without losing maxactive parameter.
      
      Link: http://lkml.kernel.org/r/4762764a-6df7-bc93-ed60-e336146dce1f@gmail.com
      Link: http://lkml.kernel.org/r/158503528846.22706.5549974121212526020.stgit@devnote2
      
      Cc: stable@vger.kernel.org
      Fixes: 696ced4f
      
       ("tracing/kprobes: expose maxactive for kretprobe in kprobe_events")
      Reported-by: default avatarTaeung Song <treeze.taeung@gmail.com>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7bcca67b
    • Hans de Goede's avatar
      Input: i8042 - add Acer Aspire 5738z to nomux list · 7dad5beb
      Hans de Goede authored
      commit ebc68ced
      
       upstream.
      
      The Acer Aspire 5738z has a button to disable (and re-enable) the
      touchpad next to the touchpad.
      
      When this button is pressed a LED underneath indicates that the touchpad
      is disabled (and an event is send to userspace and GNOME shows its
      touchpad enabled / disable OSD thingie).
      
      So far so good, but after re-enabling the touchpad it no longer works.
      
      The laptop does not have an external ps2 port, so mux mode is not needed
      and disabling mux mode fixes the touchpad no longer working after toggling
      it off and back on again, so lets add this laptop model to the nomux list.
      
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20200331123947.318908-1-hdegoede@redhat.com
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7dad5beb
    • Michael Mueller's avatar
      s390/diag: fix display of diagnose call statistics · efb9e9f7
      Michael Mueller authored
      commit 6c7c851f upstream.
      
      Show the full diag statistic table and not just parts of it.
      
      The issue surfaced in a KVM guest with a number of vcpus
      defined smaller than NR_DIAG_STAT.
      
      Fixes: 1ec2772e
      
       ("s390/diag: add a statistic for diagnose calls")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMichael Mueller <mimu@linux.ibm.com>
      Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      efb9e9f7
    • Sam Lunt's avatar
      perf tools: Support Python 3.8+ in Makefile · 453fb8b2
      Sam Lunt authored
      commit b9c9ce4e
      
       upstream.
      
      Python 3.8 changed the output of 'python-config --ldflags' to no longer
      include the '-lpythonX.Y' flag (this apparently fixed an issue loading
      modules with a statically linked Python executable).  The libpython
      feature check in linux/build/feature fails if the Python library is not
      included in FEATURE_CHECK_LDFLAGS-libpython variable.
      
      This adds a check in the Makefile to determine if PYTHON_CONFIG accepts
      the '--embed' flag and passes that flag alongside '--ldflags' if so.
      
      tools/perf is the only place the libpython feature check is used.
      
      Signed-off-by: default avatarSam Lunt <samuel.j.lunt@gmail.com>
      Tested-by: default avatarHe Zhe <zhe.he@windriver.com>
      Link: http://lore.kernel.org/lkml/c56be2e1-8111-9dfe-8298-f7d0f9ab7431@windriver.com
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: trivial@kernel.org
      Cc: stable@kernel.org
      Link: http://lore.kernel.org/lkml/20200131181123.tmamivhq4b7uqasr@gmail.com
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      453fb8b2
    • Changwei Ge's avatar
      ocfs2: no need try to truncate file beyond i_size · beb3ef51
      Changwei Ge authored
      commit 783fda85
      
       upstream.
      
      Linux fallocate(2) with FALLOC_FL_PUNCH_HOLE mode set, its offset can
      exceed the inode size.  Ocfs2 now doesn't allow that offset beyond inode
      size.  This restriction is not necessary and violates fallocate(2)
      semantics.
      
      If fallocate(2) offset is beyond inode size, just return success and do
      nothing further.
      
      Otherwise, ocfs2 will crash the kernel.
      
        kernel BUG at fs/ocfs2//alloc.c:7264!
         ocfs2_truncate_inline+0x20f/0x360 [ocfs2]
         ocfs2_remove_inode_range+0x23c/0xcb0 [ocfs2]
         __ocfs2_change_file_space+0x4a5/0x650 [ocfs2]
         ocfs2_fallocate+0x83/0xa0 [ocfs2]
         vfs_fallocate+0x148/0x230
         SyS_fallocate+0x48/0x80
         do_syscall_64+0x79/0x170
      
      Signed-off-by: default avatarChangwei Ge <chge@linux.alibaba.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: <stable@vger.kernel.org>
      Link: http://lkml.kernel.org/r/20200407082754.17565-1-chge@linux.alibaba.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      beb3ef51
    • Eric Biggers's avatar
      fs/filesystems.c: downgrade user-reachable WARN_ONCE() to pr_warn_once() · 47199f4b
      Eric Biggers authored
      commit 26c5d78c upstream.
      
      After request_module(), nothing is stopping the module from being
      unloaded until someone takes a reference to it via try_get_module().
      
      The WARN_ONCE() in get_fs_type() is thus user-reachable, via userspace
      running 'rmmod' concurrently.
      
      Since WARN_ONCE() is for kernel bugs only, not for user-reachable
      situations, downgrade this warning to pr_warn_once().
      
      Keep it printed once only, since the intent of this warning is to detect
      a bug in modprobe at boot time.  Printing the warning more than once
      wouldn't really provide any useful extra information.
      
      Fixes: 41124db8
      
       ("fs: warn in case userspace lied about modprobe return")
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarJessica Yu <jeyu@kernel.org>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jeff Vander Stoep <jeffv@google.com>
      Cc: Jessica Yu <jeyu@kernel.org>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Luis Chamberlain <mcgrof@kernel.org>
      Cc: NeilBrown <neilb@suse.com>
      Cc: <stable@vger.kernel.org>		[4.13+]
      Link: http://lkml.kernel.org/r/20200312202552.241885-3-ebiggers@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      47199f4b
    • Qian Cai's avatar
      ext4: fix a data race at inode->i_blocks · 6772387e
      Qian Cai authored
      commit 28936b62
      
       upstream.
      
      inode->i_blocks could be accessed concurrently as noticed by KCSAN,
      
       BUG: KCSAN: data-race in ext4_do_update_inode [ext4] / inode_add_bytes
      
       write to 0xffff9a00d4b982d0 of 8 bytes by task 22100 on cpu 118:
        inode_add_bytes+0x65/0xf0
        __inode_add_bytes at fs/stat.c:689
        (inlined by) inode_add_bytes at fs/stat.c:702
        ext4_mb_new_blocks+0x418/0xca0 [ext4]
        ext4_ext_map_blocks+0x1a6b/0x27b0 [ext4]
        ext4_map_blocks+0x1a9/0x950 [ext4]
        _ext4_get_block+0xfc/0x270 [ext4]
        ext4_get_block_unwritten+0x33/0x50 [ext4]
        __block_write_begin_int+0x22e/0xae0
        __block_write_begin+0x39/0x50
        ext4_write_begin+0x388/0xb50 [ext4]
        ext4_da_write_begin+0x35f/0x8f0 [ext4]
        generic_perform_write+0x15d/0x290
        ext4_buffered_write_iter+0x11f/0x210 [ext4]
        ext4_file_write_iter+0xce/0x9e0 [ext4]
        new_sync_write+0x29c/0x3b0
        __vfs_write+0x92/0xa0
        vfs_write+0x103/0x260
        ksys_write+0x9d/0x130
        __x64_sys_write+0x4c/0x60
        do_syscall_64+0x91/0xb05
        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
       read to 0xffff9a00d4b982d0 of 8 bytes by task 8 on cpu 65:
        ext4_do_update_inode+0x4a0/0xf60 [ext4]
        ext4_inode_blocks_set at fs/ext4/inode.c:4815
        ext4_mark_iloc_dirty+0xaf/0x160 [ext4]
        ext4_mark_inode_dirty+0x129/0x3e0 [ext4]
        ext4_convert_unwritten_extents+0x253/0x2d0 [ext4]
        ext4_convert_unwritten_io_end_vec+0xc5/0x150 [ext4]
        ext4_end_io_rsv_work+0x22c/0x350 [ext4]
        process_one_work+0x54f/0xb90
        worker_thread+0x80/0x5f0
        kthread+0x1cd/0x1f0
        ret_from_fork+0x27/0x50
      
       4 locks held by kworker/u256:0/8:
        #0: ffff9a025abc4328 ((wq_completion)ext4-rsv-conversion){+.+.}, at: process_one_work+0x443/0xb90
        #1: ffffab5a862dbe20 ((work_completion)(&ei->i_rsv_conversion_work)){+.+.}, at: process_one_work+0x443/0xb90
        #2: ffff9a025a9d0f58 (jbd2_handle){++++}, at: start_this_handle+0x1c1/0x9d0 [jbd2]
        #3: ffff9a00d4b985d8 (&(&ei->i_raw_lock)->rlock){+.+.}, at: ext4_do_update_inode+0xaa/0xf60 [ext4]
       irq event stamp: 3009267
       hardirqs last  enabled at (3009267): [<ffffffff980da9b7>] __find_get_block+0x107/0x790
       hardirqs last disabled at (3009266): [<ffffffff980da8f9>] __find_get_block+0x49/0x790
       softirqs last  enabled at (3009230): [<ffffffff98a0034c>] __do_softirq+0x34c/0x57c
       softirqs last disabled at (3009223): [<ffffffff97cc67a2>] irq_exit+0xa2/0xc0
      
       Reported by Kernel Concurrency Sanitizer on:
       CPU: 65 PID: 8 Comm: kworker/u256:0 Tainted: G L 5.6.0-rc2-next-20200221+ #7
       Hardware name: HPE ProLiant DL385 Gen10/ProLiant DL385 Gen10, BIOS A40 07/10/2019
       Workqueue: ext4-rsv-conversion ext4_end_io_rsv_work [ext4]
      
      The plain read is outside of inode->i_lock critical section which
      results in a data race. Fix it by adding READ_ONCE() there.
      
      Link: https://lore.kernel.org/r/20200222043258.2279-1-cai@lca.pw
      Signed-off-by: default avatarQian Cai <cai@lca.pw>
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Cc: stable@kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6772387e
    • Trond Myklebust's avatar
      NFS: Fix a page leak in nfs_destroy_unlinked_subrequests() · 699d2c4d
      Trond Myklebust authored
      commit add42de3 upstream.
      
      When we detach a subrequest from the list, we must also release the
      reference it holds to the parent.
      
      Fixes: 5b2b5187
      
       ("NFS: Fix nfs_page_group_destroy() and nfs_lock_and_join_requests() race cases")
      Cc: stable@vger.kernel.org # v4.14+
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      699d2c4d