Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'drm-misc-next-fixes-2025-12-10' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-next

drm-misc-next-fixes for v6.19-rc1:
- Fix uaf in panthor.
- Revert 8 byte alignment constraint for pitch in dumb bo's.
- Fix DRM_MODE_FLAG_N.SYNC and !DRM_MODE_FLAG_P.SYNC handling renasas.

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patch.msgid.link/a82c2a2a-314f-403b-85bf-9b3ee09b903c@linux.intel.com

+19 -8
+1 -1
drivers/gpu/drm/drm_gem_dma_helper.c
··· 308 308 struct drm_gem_dma_object *dma_obj; 309 309 int ret; 310 310 311 - ret = drm_mode_size_dumb(drm, args, SZ_8, 0); 311 + ret = drm_mode_size_dumb(drm, args, 0, 0); 312 312 if (ret) 313 313 return ret; 314 314
+1 -1
drivers/gpu/drm/drm_gem_shmem_helper.c
··· 559 559 { 560 560 int ret; 561 561 562 - ret = drm_mode_size_dumb(dev, args, SZ_8, 0); 562 + ret = drm_mode_size_dumb(dev, args, 0, 0); 563 563 if (ret) 564 564 return ret; 565 565
+15 -4
drivers/gpu/drm/panthor/panthor_sched.c
··· 779 779 */ 780 780 #define MAX_GROUPS_PER_POOL 128 781 781 782 + /* 783 + * Mark added on an entry of group pool Xarray to identify if the group has 784 + * been fully initialized and can be accessed elsewhere in the driver code. 785 + */ 786 + #define GROUP_REGISTERED XA_MARK_1 787 + 782 788 /** 783 789 * struct panthor_group_pool - Group pool 784 790 * ··· 3013 3007 return; 3014 3008 3015 3009 xa_lock(&gpool->xa); 3016 - xa_for_each(&gpool->xa, i, group) { 3010 + xa_for_each_marked(&gpool->xa, i, group, GROUP_REGISTERED) { 3017 3011 guard(spinlock)(&group->fdinfo.lock); 3018 3012 pfile->stats.cycles += group->fdinfo.data.cycles; 3019 3013 pfile->stats.time += group->fdinfo.data.time; ··· 3733 3727 3734 3728 group_init_task_info(group); 3735 3729 3730 + xa_set_mark(&gpool->xa, gid, GROUP_REGISTERED); 3731 + 3736 3732 return gid; 3737 3733 3738 3734 err_erase_gid: ··· 3751 3743 struct panthor_device *ptdev = pfile->ptdev; 3752 3744 struct panthor_scheduler *sched = ptdev->scheduler; 3753 3745 struct panthor_group *group; 3746 + 3747 + if (!xa_get_mark(&gpool->xa, group_handle, GROUP_REGISTERED)) 3748 + return -EINVAL; 3754 3749 3755 3750 group = xa_erase(&gpool->xa, group_handle); 3756 3751 if (!group) ··· 3780 3769 } 3781 3770 3782 3771 static struct panthor_group *group_from_handle(struct panthor_group_pool *pool, 3783 - u32 group_handle) 3772 + unsigned long group_handle) 3784 3773 { 3785 3774 struct panthor_group *group; 3786 3775 3787 3776 xa_lock(&pool->xa); 3788 - group = group_get(xa_load(&pool->xa, group_handle)); 3777 + group = group_get(xa_find(&pool->xa, &group_handle, group_handle, GROUP_REGISTERED)); 3789 3778 xa_unlock(&pool->xa); 3790 3779 3791 3780 return group; ··· 3872 3861 return; 3873 3862 3874 3863 xa_lock(&gpool->xa); 3875 - xa_for_each(&gpool->xa, i, group) { 3864 + xa_for_each_marked(&gpool->xa, i, group, GROUP_REGISTERED) { 3876 3865 stats->resident += group->fdinfo.kbo_sizes; 3877 3866 if (group->csg_id >= 0) 3878 3867 stats->active += group->fdinfo.kbo_sizes;
+2 -2
drivers/gpu/drm/renesas/rcar-du/rcar_mipi_dsi.c
··· 492 492 493 493 /* Configuration for Video Parameters, input is always RGB888 */ 494 494 vprmset0r = TXVMVPRMSET0R_BPP_24; 495 - if (mode->flags & DRM_MODE_FLAG_NVSYNC) 495 + if (!(mode->flags & DRM_MODE_FLAG_PVSYNC)) 496 496 vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW; 497 - if (mode->flags & DRM_MODE_FLAG_NHSYNC) 497 + if (!(mode->flags & DRM_MODE_FLAG_PHSYNC)) 498 498 vprmset0r |= TXVMVPRMSET0R_HSPOL_LOW; 499 499 500 500 vprmset1r = TXVMVPRMSET1R_VACTIVE(mode->vdisplay)