On Mon, Dec 30, 2024 at 07:37:36PM +0100, Louis Chauvet wrote: > The current implementation of drm_writeback_connector initialization does > not properly clean up all resources in case of failure (allocated > properties and possible_encoders). Add this cleaning in case of failure. > > Signed-off-by: Louis Chauvet <louis.chauvet@xxxxxxxxxxx> > --- > drivers/gpu/drm/drm_writeback.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c > index 494400b09796d37ed89145da45d5f1e029632de5..9c69f7181e02c23dabce488405608c40d4184af5 100644 > --- a/drivers/gpu/drm/drm_writeback.c > +++ b/drivers/gpu/drm/drm_writeback.c > @@ -247,18 +247,20 @@ static int __drm_writeback_connector_init(struct drm_device *dev, > int ret = create_writeback_properties(dev); > > if (ret != 0) > - return ret; > + goto failed_properties; > > connector->interlace_allowed = 0; > > ret = drm_connector_attach_encoder(connector, enc); > if (ret) > - return ret; > + goto failed_properties; > > blob = drm_property_create_blob(dev, n_formats * sizeof(*formats), > formats); > - if (IS_ERR(blob)) > - return PTR_ERR(blob); > + if (IS_ERR(blob)) { > + ret = PTR_ERR(blob); > + goto failed_blob; > + } > > INIT_LIST_HEAD(&wb_connector->job_queue); > spin_lock_init(&wb_connector->job_lock); > @@ -281,6 +283,11 @@ static int __drm_writeback_connector_init(struct drm_device *dev, > wb_connector->pixel_formats_blob_ptr = blob; > > return 0; > +failed_blob: > + connector->possible_encoders &= ~drm_encoder_mask(enc); I don't think it's worth it to uninitialize that particular field. All the structure fields are going to be in an undefined state, and shouldn't be used anymore. Maxime
Attachment:
signature.asc
Description: PGP signature