1. 23 Aug, 2023 3 commits
    • Zack Rusin's avatar
      drm/vmwgfx: Fix possible invalid drm gem put calls · f9e96bf1
      Zack Rusin authored
      vmw_bo_unreference sets the input buffer to null on exit, resulting in
      null ptr deref's on the subsequent drm gem put calls.
      
      This went unnoticed because only very old userspace would be exercising
      those paths but it wouldn't be hard to hit on old distros with brand
      new kernels.
      
      Introduce a new function that abstracts unrefing of user bo's to make
      the code cleaner and more explicit.
      Signed-off-by: default avatarZack Rusin <zackr@vmware.com>
      Reported-by: default avatarIan Forbes <iforbes@vmware.com>
      Fixes: 9ef8d83e ("drm/vmwgfx: Do not drop the reference to the handle too soon")
      Cc: <stable@vger.kernel.org> # v6.4+
      Reviewed-by: Maaz Mombasawala<mombasawalam@vmware.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20230818041301.407636-1-zack@kde.org
      f9e96bf1
    • Zack Rusin's avatar
      drm/vmwgfx: Fix shader stage validation · 14abdfae
      Zack Rusin authored
      For multiple commands the driver was not correctly validating the shader
      stages resulting in possible kernel oopses. The validation code was only.
      if ever, checking the upper bound on the shader stages but never a lower
      bound (valid shader stages start at 1 not 0).
      
      Fixes kernel oopses ending up in vmw_binding_add, e.g.:
      Oops: 0000 [#1] PREEMPT SMP PTI
      CPU: 1 PID: 2443 Comm: testcase Not tainted 6.3.0-rc4-vmwgfx #1
      Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020
      RIP: 0010:vmw_binding_add+0x4c/0x140 [vmwgfx]
      Code: 7e 30 49 83 ff 0e 0f 87 ea 00 00 00 4b 8d 04 7f 89 d2 89 cb 48 c1 e0 03 4c 8b b0 40 3d 93 c0 48 8b 80 48 3d 93 c0 49 0f af de <48> 03 1c d0 4c 01 e3 49 8>
      RSP: 0018:ffffb8014416b968 EFLAGS: 00010206
      RAX: ffffffffc0933ec0 RBX: 0000000000000000 RCX: 0000000000000000
      RDX: 00000000ffffffff RSI: ffffb8014416b9c0 RDI: ffffb8014316f000
      RBP: ffffb8014416b998 R08: 0000000000000003 R09: 746f6c735f726564
      R10: ffffffffaaf2bda0 R11: 732e676e69646e69 R12: ffffb8014316f000
      R13: ffffb8014416b9c0 R14: 0000000000000040 R15: 0000000000000006
      FS:  00007fba8c0af740(0000) GS:ffff8a1277c80000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00000007c0933eb8 CR3: 0000000118244001 CR4: 00000000003706e0
      Call Trace:
       <TASK>
       vmw_view_bindings_add+0xf5/0x1b0 [vmwgfx]
       ? ___drm_dbg+0x8a/0xb0 [drm]
       vmw_cmd_dx_set_shader_res+0x8f/0xc0 [vmwgfx]
       vmw_execbuf_process+0x590/0x1360 [vmwgfx]
       vmw_execbuf_ioctl+0x173/0x370 [vmwgfx]
       ? __drm_dev_dbg+0xb4/0xe0 [drm]
       ? __pfx_vmw_execbuf_ioctl+0x10/0x10 [vmwgfx]
       drm_ioctl_kernel+0xbc/0x160 [drm]
       drm_ioctl+0x2d2/0x580 [drm]
       ? __pfx_vmw_execbuf_ioctl+0x10/0x10 [vmwgfx]
       ? do_fault+0x1a6/0x420
       vmw_generic_ioctl+0xbd/0x180 [vmwgfx]
       vmw_unlocked_ioctl+0x19/0x20 [vmwgfx]
       __x64_sys_ioctl+0x96/0xd0
       do_syscall_64+0x5d/0x90
       ? handle_mm_fault+0xe4/0x2f0
       ? debug_smp_processor_id+0x1b/0x30
       ? fpregs_assert_state_consistent+0x2e/0x50
       ? exit_to_user_mode_prepare+0x40/0x180
       ? irqentry_exit_to_user_mode+0xd/0x20
       ? irqentry_exit+0x3f/0x50
       ? exc_page_fault+0x8b/0x180
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
      Signed-off-by: default avatarZack Rusin <zackr@vmware.com>
      Cc: security@openanolis.org
      Reported-by: default avatarZiming Zhang <ezrakiez@gmail.com>
      Testcase-found-by: default avatarNiels De Graef <ndegraef@redhat.com>
      Fixes: d80efd5c ("drm/vmwgfx: Initial DX support")
      Cc: <stable@vger.kernel.org> # v4.3+
      Reviewed-by: Maaz Mombasawala<mombasawalam@vmware.com>
      Reviewed-by: default avatarMartin Krastev <krastevm@vmware.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20230616190934.54828-1-zack@kde.org
      14abdfae
    • Rob Clark's avatar
      dma-buf/sw_sync: Avoid recursive lock during fence signal · e531fdb5
      Rob Clark authored
      If a signal callback releases the sw_sync fence, that will trigger a
      deadlock as the timeline_fence_release recurses onto the fence->lock
      (used both for signaling and the the timeline tree).
      
      To avoid that, temporarily hold an extra reference to the signalled
      fences until after we drop the lock.
      
      (This is an alternative implementation of https://patchwork.kernel.org/patch/11664717/
      which avoids some potential UAF issues with the original patch.)
      
      v2: Remove now obsolete comment, use list_move_tail() and
          list_del_init()
      Reported-by: default avatarBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
      Fixes: d3c6dd1f ("dma-buf/sw_sync: Synchronize signal vs syncpt free")
      Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20230818145939.39697-1-robdclark@gmail.comReviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      e531fdb5
  2. 22 Aug, 2023 1 commit
  3. 21 Aug, 2023 1 commit
  4. 18 Aug, 2023 1 commit
  5. 17 Aug, 2023 1 commit
  6. 16 Aug, 2023 1 commit
  7. 15 Aug, 2023 2 commits
  8. 14 Aug, 2023 2 commits
  9. 10 Aug, 2023 1 commit
  10. 09 Aug, 2023 1 commit
  11. 08 Aug, 2023 2 commits
  12. 04 Aug, 2023 1 commit
  13. 03 Aug, 2023 4 commits
  14. 02 Aug, 2023 1 commit
  15. 28 Jul, 2023 1 commit
  16. 27 Jul, 2023 1 commit
    • Guchun Chen's avatar
      drm/ttm: check null pointer before accessing when swapping · 2dedcf41
      Guchun Chen authored
      Add a check to avoid null pointer dereference as below:
      
      [   90.002283] general protection fault, probably for non-canonical
      address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN NOPTI
      [   90.002292] KASAN: null-ptr-deref in range
      [0x0000000000000000-0x0000000000000007]
      [   90.002346]  ? exc_general_protection+0x159/0x240
      [   90.002352]  ? asm_exc_general_protection+0x26/0x30
      [   90.002357]  ? ttm_bo_evict_swapout_allowable+0x322/0x5e0 [ttm]
      [   90.002365]  ? ttm_bo_evict_swapout_allowable+0x42e/0x5e0 [ttm]
      [   90.002373]  ttm_bo_swapout+0x134/0x7f0 [ttm]
      [   90.002383]  ? __pfx_ttm_bo_swapout+0x10/0x10 [ttm]
      [   90.002391]  ? lock_acquire+0x44d/0x4f0
      [   90.002398]  ? ttm_device_swapout+0xa5/0x260 [ttm]
      [   90.002412]  ? lock_acquired+0x355/0xa00
      [   90.002416]  ? do_raw_spin_trylock+0xb6/0x190
      [   90.002421]  ? __pfx_lock_acquired+0x10/0x10
      [   90.002426]  ? ttm_global_swapout+0x25/0x210 [ttm]
      [   90.002442]  ttm_device_swapout+0x198/0x260 [ttm]
      [   90.002456]  ? __pfx_ttm_device_swapout+0x10/0x10 [ttm]
      [   90.002472]  ttm_global_swapout+0x75/0x210 [ttm]
      [   90.002486]  ttm_tt_populate+0x187/0x3f0 [ttm]
      [   90.002501]  ttm_bo_handle_move_mem+0x437/0x590 [ttm]
      [   90.002517]  ttm_bo_validate+0x275/0x430 [ttm]
      [   90.002530]  ? __pfx_ttm_bo_validate+0x10/0x10 [ttm]
      [   90.002544]  ? kasan_save_stack+0x33/0x60
      [   90.002550]  ? kasan_set_track+0x25/0x30
      [   90.002554]  ? __kasan_kmalloc+0x8f/0xa0
      [   90.002558]  ? amdgpu_gtt_mgr_new+0x81/0x420 [amdgpu]
      [   90.003023]  ? ttm_resource_alloc+0xf6/0x220 [ttm]
      [   90.003038]  amdgpu_bo_pin_restricted+0x2dd/0x8b0 [amdgpu]
      [   90.003210]  ? __x64_sys_ioctl+0x131/0x1a0
      [   90.003210]  ? do_syscall_64+0x60/0x90
      
      Fixes: a2848d08 ("drm/ttm: never consider pinned BOs for eviction&swap")
      Tested-by: default avatarMikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
      Signed-off-by: default avatarGuchun Chen <guchun.chen@amd.com>
      Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Cc: stable@vger.kernel.org
      Link: https://patchwork.freedesktop.org/patch/msgid/20230724024229.1118444-1-guchun.chen@amd.comSigned-off-by: default avatarChristian König <christian.koenig@amd.com>
      2dedcf41
  17. 25 Jul, 2023 1 commit
  18. 19 Jul, 2023 3 commits
  19. 15 Jul, 2023 1 commit
  20. 14 Jul, 2023 4 commits
  21. 13 Jul, 2023 2 commits
  22. 12 Jul, 2023 4 commits
  23. 11 Jul, 2023 1 commit
    • Thomas Zimmermann's avatar
      drm/client: Send hotplug event after registering a client · 27655b9b
      Thomas Zimmermann authored
      Generate a hotplug event after registering a client to allow the
      client to configure its display. Remove the hotplug calls from the
      existing clients for fbdev emulation. This change fixes a concurrency
      bug between registering a client and receiving events from the DRM
      core. The bug is present in the fbdev emulation of all drivers.
      
      The fbdev emulation currently generates a hotplug event before
      registering the client to the device. For each new output, the DRM
      core sends an additional hotplug event to each registered client.
      
      If the DRM core detects first output between sending the artificial
      hotplug and registering the device, the output's hotplug event gets
      lost. If this is the first output, the fbdev console display remains
      dark. This has been observed with amdgpu and fbdev-generic.
      
      Fix this by adding hotplug generation directly to the client's
      register helper drm_client_register(). Registering the client and
      receiving events are serialized by struct drm_device.clientlist_mutex.
      So an output is either configured by the initial hotplug event, or
      the client has already been registered.
      
      The bug was originally added in commit 6e3f17ee ("drm/fb-helper:
      generic: Call drm_client_add() after setup is done"), in which adding
      a client and receiving a hotplug event switched order. It was hidden,
      as most hardware and drivers have at least on static output configured.
      Other drivers didn't use the internal DRM client or still had struct
      drm_mode_config_funcs.output_poll_changed set. That callback handled
      hotplug events as well. After not setting the callback in amdgpu in
      commit 0e3172ba ("drm/amdgpu: Don't set struct
      drm_driver.output_poll_changed"), amdgpu did not show a framebuffer
      console if output events got lost. The bug got copy-pasted from
      fbdev-generic into the other fbdev emulation.
      Reported-by: default avatarMoritz Duge <MoritzDuge@kolahilft.de>
      Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2649
      Fixes: 6e3f17ee ("drm/fb-helper: generic: Call drm_client_add() after setup is done")
      Fixes: 8ab59da2 ("drm/fb-helper: Move generic fbdev emulation into separate source file")
      Fixes: b79fe9ab ("drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers")
      Fixes: 63c38155 ("drm/armada: Implement fbdev emulation as in-kernel client")
      Fixes: 49953b70 ("drm/exynos: Implement fbdev emulation as in-kernel client")
      Fixes: 8f1aaccb ("drm/gma500: Implement client-based fbdev emulation")
      Fixes: 940b869c ("drm/msm: Implement fbdev emulation as in-kernel client")
      Fixes: 9e69bcd8 ("drm/omapdrm: Implement fbdev emulation as in-kernel client")
      Fixes: e317a69f ("drm/radeon: Implement client-based fbdev emulation")
      Fixes: 71ec16f4 ("drm/tegra: Implement fbdev emulation as in-kernel client")
      Fixes: 0e3172ba ("drm/amdgpu: Don't set struct drm_driver.output_poll_changed")
      Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Tested-by: default avatarMoritz Duge <MoritzDuge@kolahilft.de>
      Tested-by: default avatarTorsten Krah <krah.tm@gmail.com>
      Tested-by: default avatarPaul Schyska <pschyska@gmail.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: David Airlie <airlied@gmail.com>
      Cc: Noralf Trønnes <noralf@tronnes.org>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Maxime Ripard <mripard@kernel.org>
      Cc: Javier Martinez Canillas <javierm@redhat.com>
      Cc: Russell King <linux@armlinux.org.uk>
      Cc: Inki Dae <inki.dae@samsung.com>
      Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
      Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
      Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: "Christian König" <christian.koenig@amd.com>
      Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Mikko Perttunen <mperttunen@nvidia.com>
      Cc: dri-devel@lists.freedesktop.org
      Cc: linux-kernel@vger.kernel.org
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-samsung-soc@vger.kernel.org
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: amd-gfx@lists.freedesktop.org
      Cc: linux-tegra@vger.kernel.org
      Cc: dri-devel@lists.freedesktop.org
      Cc: <stable@vger.kernel.org> # v5.2+
      Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
      Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> # msm
      Link: https://patchwork.freedesktop.org/patch/msgid/20230710091029.27503-1-tzimmermann@suse.de
      27655b9b