On Mon, 3 Jun 2019 14:45:03 +0200 Michael Mueller <mimu@xxxxxxxxxxxxx> wrote: > On 03.06.19 14:06, Cornelia Huck wrote: > > On Wed, 29 May 2019 14:26:52 +0200 > > Michael Mueller <mimu@xxxxxxxxxxxxx> wrote: > >> @@ -1593,20 +1625,31 @@ struct ccw_device * __init ccw_device_create_console(struct ccw_driver *drv) > >> return ERR_CAST(sch); > >> > >> io_priv = kzalloc(sizeof(*io_priv), GFP_KERNEL | GFP_DMA); > >> - if (!io_priv) { > >> - put_device(&sch->dev); > >> - return ERR_PTR(-ENOMEM); > >> - } > >> + if (!io_priv) > >> + goto err_priv; > >> + io_priv->dma_area = dma_alloc_coherent(&sch->dev, > >> + sizeof(*io_priv->dma_area), > >> + &io_priv->dma_area_dma, GFP_KERNEL); > >> + if (!io_priv->dma_area) > >> + goto err_dma_area; > >> set_io_private(sch, io_priv); > >> cdev = io_subchannel_create_ccwdev(sch); > >> if (IS_ERR(cdev)) { > >> put_device(&sch->dev); > >> + dma_free_coherent(&sch->dev, sizeof(*io_priv->dma_area), > >> + io_priv->dma_area, io_priv->dma_area_dma); > >> kfree(io_priv); > > > > <pre-existing, not introduced by this patch> > > Shouldn't that branch do set_io_private(sch, NULL)? Not sure if any > > code would make use of it, but it's probably better to clean out > > references to freed objects. > > Added behind kfree(). I hope nobody asks for a separate patch. ;) I would probably have added it just before the kfree, but I'm not asking for a separate patch ;) > > > </pre-existing, not introduced by this patch> > > > >> return cdev; > >> } > >> cdev->drv = drv; > >> ccw_device_set_int_class(cdev); > >> return cdev; > >> + > >> +err_dma_area: > >> + kfree(io_priv); > >> +err_priv: > >> + put_device(&sch->dev); > >> + return ERR_PTR(-ENOMEM); > >> } > >> > >> void __init ccw_device_destroy_console(struct ccw_device *cdev)