Mediatek DRM Fixes - 20251028

1. Fix device use-after-free on unbind
 -----BEGIN PGP SIGNATURE-----
 
 iQJMBAABCgA2FiEEACwLKSDmq+9RDv5P4cpzo8lZTiQFAmkA3MQYHGNodW5rdWFu
 Zy5odUBrZXJuZWwub3JnAAoJEOHKc6PJWU4kSa8P/R6+lSSH7ARnhhUbK7Iffaht
 q0Drx7hyL2WfRHk/RisJPbRB42SlGlqore7s9BIWNHWQ9L7m8s+Z5oVjwnqNTJ0g
 yzsekndjViSNJTdZtmHQPVNgZhpIuo93eEoSZfByXIeTatTfYN6+5O8zdjSg5Q/u
 VrZWK9z9qGDLR8tzBwCCySvCRn92zQ+gqDQl1D2oa5AW0swWeYyfWMqYDLY/gezi
 6G44pfeevG45hA17XWlw8jtfKUCXF5jIGafK5eVMnWTdwYuDqG6Z5mlxQCJNhiN8
 NcmU2QwSNtNSl0KAKKAYrbbmjGUusTuGUkCuj3pSRucGf1n0Ue4zHZWpo6z5wMBE
 g94YuNLg5Bp50M4a2aJAYYPS2FuLPBMnzqtOiXUFqBFJSj6OxmZLSMB1oulQUZVc
 HBsJrsUOjF8oLsQBOYS2Ac0kFE90uG7YBmfu/65Z4Y8tmPMaxfqIBWNF131PM+Bn
 OiQkp/Twa06890Pn4R+guyK7loaTLUV7MYx0JX/6w1ndDoxKENXWgf47vLD5N42+
 fM2z9UwaEwjFsJGwFqIsc2Fx7PGUPWRH3iyOuHtHau7NXDyo1nHx3pRwNk+3rTB+
 Bh+GDf/NRweuFSJYDu5WMszqCVCqjMZkeozP45Sc4PK6rGK13P+deFh0tvtzuyv7
 Usf78hGdDFCrHHYQ6WHA
 =7uIz
 -----END PGP SIGNATURE-----

Merge tag 'mediatek-drm-fixes-20251028' of https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux into drm-fixes

Mediatek DRM Fixes - 20251028

1. Fix device use-after-free on unbind

Signed-off-by: Simona Vetter <simona.vetter@ffwll.ch>
From: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Link: https://patch.msgid.link/20251028151548.3944-1-chunkuang.hu@kernel.org
This commit is contained in:
Simona Vetter 2025-10-31 18:54:21 +01:00
commit ef54548455

View file

@ -686,10 +686,6 @@ err_free:
for (i = 0; i < private->data->mmsys_dev_num; i++)
private->all_drm_private[i]->drm = NULL;
err_put_dev:
for (i = 0; i < private->data->mmsys_dev_num; i++) {
/* For device_find_child in mtk_drm_get_all_priv() */
put_device(private->all_drm_private[i]->dev);
}
put_device(private->mutex_dev);
return ret;
}
@ -697,18 +693,12 @@ err_put_dev:
static void mtk_drm_unbind(struct device *dev)
{
struct mtk_drm_private *private = dev_get_drvdata(dev);
int i;
/* for multi mmsys dev, unregister drm dev in mmsys master */
if (private->drm_master) {
drm_dev_unregister(private->drm);
mtk_drm_kms_deinit(private->drm);
drm_dev_put(private->drm);
for (i = 0; i < private->data->mmsys_dev_num; i++) {
/* For device_find_child in mtk_drm_get_all_priv() */
put_device(private->all_drm_private[i]->dev);
}
put_device(private->mutex_dev);
}
private->mtk_drm_bound = false;