lkml.org 
[lkml]   [2013]   [Dec]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH 20/38] net: iucv: add missing put_device call
From
From: Levente Kurusa <levex@linux.com>
Date: Thu, 19 Dec 2013 16:03:31 +0100

> This is required so that we give up the last reference to the device.
>
> Signed-off-by: Levente Kurusa <levex@linux.com>
...
> @@ -2377,8 +2377,10 @@ static int afiucv_iucv_init(void)
> af_iucv_dev->release = (void (*)(struct device *))kfree;
> af_iucv_dev->driver = &af_iucv_driver;
> err = device_register(af_iucv_dev);
> - if (err)
> + if (err) {
> + put_device(af_iucv_dev);
> goto out_driver;
> + }

This has the same problem as the ATM patch, there is no reference held on
af_iucv_dev, I mean look at where it comes from:

af_iucv_dev = kzalloc(sizeof(struct device), GFP_KERNEL);
...
dev_set_name(af_iucv_dev, "af_iucv");
af_iucv_dev->bus = pr_iucv->bus;
af_iucv_dev->parent = pr_iucv->root;
af_iucv_dev->release = (void (*)(struct device *))kfree;
af_iucv_dev->driver = &af_iucv_driver;

No reference count is incremented or set to one for af_iucv_dev.

Please study these code paths more carefully, thank you.


\
 
 \ /
  Last update: 2013-12-27 19:21    [W:0.252 / U:0.708 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site