Patch "drm/msm: Set drvdata to NULL when msm_drm_init() fails" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm/msm: Set drvdata to NULL when msm_drm_init() fails

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-msm-set-drvdata-to-null-when-msm_drm_init-fails.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 583905845ade726283b32938c4d33d5c308174d1
Author: Stephen Boyd <swboyd@xxxxxxxxxxxx>
Date:   Thu Mar 25 14:28:22 2021 -0700

    drm/msm: Set drvdata to NULL when msm_drm_init() fails
    
    [ Upstream commit 5620b135aea49a8f41c86aaecfcb1598a7774121 ]
    
    We should set the platform device's driver data to NULL here so that
    code doesn't assume the struct drm_device pointer is valid when it could
    have been destroyed. The lifetime of this pointer is managed by a kref
    but when msm_drm_init() fails we call drm_dev_put() on the pointer which
    will free the pointer's memory. This driver uses the component model, so
    there's sort of two "probes" in this file, one for the platform device
    i.e. msm_pdev_probe() and one for the component i.e. msm_drm_bind(). The
    msm_drm_bind() code is using the platform device's driver data to store
    struct drm_device so the two functions are intertwined.
    
    This relationship becomes a problem for msm_pdev_shutdown() when it
    tests the NULL-ness of the pointer to see if it should call
    drm_atomic_helper_shutdown(). The NULL test is a proxy check for if the
    pointer has been freed by kref_put(). If the drm_device has been
    destroyed, then we shouldn't call the shutdown helper, and we know that
    is the case if msm_drm_init() failed, therefore set the driver data to
    NULL so that this pointer liveness is tracked properly.
    
    Fixes: 9d5cbf5fe46e ("drm/msm: add shutdown support for display platform_driver")
    Cc: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>
    Cc: Fabio Estevam <festevam@xxxxxxxxx>
    Cc: Krishna Manikandan <mkrishn@xxxxxxxxxxxxxx>
    Signed-off-by: Stephen Boyd <swboyd@xxxxxxxxxxxx>
    Message-Id: <20210325212822.3663144-1-swboyd@xxxxxxxxxxxx>
    Signed-off-by: Rob Clark <robdclark@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 896d6f95a960..7443df77cadb 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -567,6 +567,7 @@ err_free_priv:
 	kfree(priv);
 err_put_drm_dev:
 	drm_dev_put(ddev);
+	platform_set_drvdata(pdev, NULL);
 	return ret;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux