• Maxime Ripard's avatar
    drm/vc4: dsi: Fix the driver structure lifetime · 6eda1564
    Maxime Ripard authored
    The vc4_dsi structure is currently allocated through a device-managed
    allocation. This can lead to use-after-free issues however in the unbinding
    path since the DRM entities will stick around, but the underlying structure
    has been freed.
    
    However, we can't just fix it by using a DRM-managed allocation like we did
    for the other drivers since the DSI case is a bit more intricate.
    
    Indeed, the structure will be allocated at probe time, when we don't have a
    DRM device yet, to be able to register the DSI bus driver. We will then
    reuse it at bind time to register our KMS entities in the framework.
    
    In order to work around both constraints, we can use a kref to track the
    users of the structure (DSI host, and KMS), and then put our structure when
    the DSI host will have been unregistered, and through a DRM-managed action
    that will execute once we won't need the KMS entities anymore.
    Acked-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
    Link: https://lore.kernel.org/r/20220711173939.1132294-36-maxime@cerno.tech
    6eda1564
vc4_dsi.c 52.7 KB