All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: Re: [udev] bug in udev-remove.c
Date: Thu, 18 Dec 2003 02:27:50 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-107171461124585@msgid-missing> (raw)
In-Reply-To: <marc-linux-hotplug-107170107012651@msgid-missing>

[-- Attachment #1: Type: text/plain, Size: 506 bytes --]

On Wed, Dec 17, 2003 at 02:37:27PM -0800, Greg KH wrote:
> On Wed, Dec 17, 2003 at 10:53:44PM +0100, Kay Sievers wrote:
> > 
> > Uups, we have a bug in udev-remove.c.
> 
> Ick, this was probably my fault from the merge with the dbus code,
> sorry.  Thanks for the patch, I've applied it.

I've moved the malloc out of the udevdb into udev-remove to free the
struct after use and not to allocate a different struct in the case the
device is not in the data base. I seems a bit easier to read.


thanks,
Kay

[-- Attachment #2: 01-free-data-in-udev-delete.diff --]
[-- Type: text/plain, Size: 2227 bytes --]

diff -Nru a/udev-remove.c b/udev-remove.c
--- a/udev-remove.c	Thu Dec 18 03:23:11 2003
+++ b/udev-remove.c	Thu Dec 18 03:23:11 2003
@@ -119,18 +119,21 @@
 int udev_remove_device(char *path, char *subsystem)
 {
 	struct udevice *dev;
-	struct udevice device;
 	char *temp;
+	int retval;
 
-	dev = udevdb_get_dev(path);
-	if (dev == NULL) {
+	dev = malloc(sizeof(*dev));
+	if (dev == NULL)
+		return -ENOMEM;
+	memset(dev, 0, sizeof(*dev));
+
+	retval = udevdb_get_dev(path, dev);
+	if (retval) {
 		dbg("'%s' not found in database, falling back on default name", path);
 		temp = strrchr(path, '/');
 		if (temp == NULL)
 			return -ENODEV;
-		memset(&device, 0, sizeof(device));
-		dev = &device;
-		strncpy(device.name, &temp[1], sizeof(device.name));
+		strncpy(dev->name, &temp[1], sizeof(dev->name));
 	}
 
 	dbg("name is '%s'", dev->name);
@@ -138,5 +141,7 @@
 
 	sysbus_send_remove(dev->name, path);
 
-	return delete_node(dev);
+	retval = delete_node(dev);
+	free(dev);
+	return retval;
 }
diff -Nru a/udevdb.c b/udevdb.c
--- a/udevdb.c	Thu Dec 18 03:23:11 2003
+++ b/udevdb.c	Thu Dec 18 03:23:11 2003
@@ -62,29 +62,22 @@
 	return tdb_store(udevdb, key, data, TDB_REPLACE); 
 }
 
-struct udevice *udevdb_get_dev(const char *path)
+int udevdb_get_dev(const char *path, struct udevice *dev)
 {
 	TDB_DATA key, data;
-	struct udevice *dev;
 
 	if (path == NULL)
-		return NULL;
+		return -ENODEV;
 
 	key.dptr = (void *)path;
 	key.dsize = strlen(path) + 1;
 
 	data = tdb_fetch(udevdb, key);
 	if (data.dptr == NULL || data.dsize == 0)
-		return NULL;
-
-	dev = malloc(sizeof(*dev));
-	if (dev == NULL)
-		goto exit;
+		return -ENODEV;
 
 	memcpy(dev, data.dptr, sizeof(*dev));
-exit:
-	free(data.dptr);
-	return dev;
+	return 0;
 }
 
 int udevdb_delete_dev(const char *path)
diff -Nru a/udevdb.h b/udevdb.h
--- a/udevdb.h	Thu Dec 18 03:23:11 2003
+++ b/udevdb.h	Thu Dec 18 03:23:11 2003
@@ -13,7 +13,7 @@
 extern int udevdb_init(int init_flag);
 
 extern int udevdb_add_dev(const char *path, const struct udevice *dev);
-extern struct udevice *udevdb_get_dev(const char *path);
+extern int udevdb_get_dev(const char *path, struct udevice *dev);
 extern int udevdb_delete_dev(const char *path);
 
 #endif /* _UDEVDB_H_ */

  reply	other threads:[~2003-12-18  2:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-17 22:37 [udev] bug in udev-remove.c Greg KH
2003-12-18  2:27 ` Kay Sievers [this message]
2003-12-19 18:30 ` Greg KH
  -- strict thread matches above, loose matches on Subject: below --
2003-12-17 21:53 Kay Sievers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-107171461124585@msgid-missing \
    --to=kay.sievers@vrfy.org \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.