All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] uevent: improve error checking and handling
@ 2007-03-04  0:56 Eric Rannaud
  2007-03-04  1:00 ` [PATCH 2/2] uevent: use add_uevent_var() instead of open coding it Eric Rannaud
  0 siblings, 1 reply; 2+ messages in thread
From: Eric Rannaud @ 2007-03-04  0:56 UTC (permalink / raw)
  To: linux-kernel; +Cc: torvalds

Subject: uevent: improve error checking and handling
From: Eric Rannaud <eric.rannaud@gmail.com>

	add_uevent_var() is used w/o checking for its return value, even though
	it is possible for those calls to return -ENOMEM.

Signed-off-by: Eric Rannaud <eric.rannaud@gmail.com>
---

 drivers/base/core.c |   93 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 59 insertions(+), 34 deletions(-)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index cf2a398..3a52332 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -162,18 +162,25 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
 
 	/* add the major/minor if present */
 	if (MAJOR(dev->devt)) {
-		add_uevent_var(envp, num_envp, &i,
-			       buffer, buffer_size, &length,
-			       "MAJOR=%u", MAJOR(dev->devt));
-		add_uevent_var(envp, num_envp, &i,
-			       buffer, buffer_size, &length,
-			       "MINOR=%u", MINOR(dev->devt));
+		retval = add_uevent_var(envp, num_envp, &i,
+					buffer, buffer_size, &length,
+					"MAJOR=%u", MAJOR(dev->devt));
+		if (retval)
+			return retval;
+		retval = add_uevent_var(envp, num_envp, &i,
+					buffer, buffer_size, &length,
+					"MINOR=%u", MINOR(dev->devt));
+		if (retval)
+			return retval;
 	}
 
-	if (dev->driver)
-		add_uevent_var(envp, num_envp, &i,
-			       buffer, buffer_size, &length,
-			       "DRIVER=%s", dev->driver->name);
+	if (dev->driver) {
+		retval = add_uevent_var(envp, num_envp, &i,
+					buffer, buffer_size, &length,
+					"DRIVER=%s", dev->driver->name);
+		if (retval)
+			return retval;
+	}
 
 #ifdef CONFIG_SYSFS_DEPRECATED
 	if (dev->class) {
@@ -186,29 +193,41 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
 			const char *path;
 
 			path = kobject_get_path(&parent->kobj, GFP_KERNEL);
-			add_uevent_var(envp, num_envp, &i,
-				       buffer, buffer_size, &length,
-				       "PHYSDEVPATH=%s", path);
+			retval = add_uevent_var(envp, num_envp, &i,
+						buffer, buffer_size, &length,
+						"PHYSDEVPATH=%s", path);
 			kfree(path);
-
-			add_uevent_var(envp, num_envp, &i,
-				       buffer, buffer_size, &length,
-				       "PHYSDEVBUS=%s", parent->bus->name);
-
-			if (parent->driver)
-				add_uevent_var(envp, num_envp, &i,
-					       buffer, buffer_size, &length,
-					       "PHYSDEVDRIVER=%s", parent->driver->name);
+			if (retval)
+				return retval;
+
+			retval = add_uevent_var(envp, num_envp, &i,
+						buffer, buffer_size, &length,
+						"PHYSDEVBUS=%s", parent->bus->name);
+			if (retval)
+				return retval;
+
+			if (parent->driver) {
+				retval = add_uevent_var(envp, num_envp, &i,
+							buffer, buffer_size, &length,
+							"PHYSDEVDRIVER=%s", parent->driver->name);
+				if (retval)
+					return retval;
+			}
 		}
 	} else if (dev->bus) {
-		add_uevent_var(envp, num_envp, &i,
-			       buffer, buffer_size, &length,
-			       "PHYSDEVBUS=%s", dev->bus->name);
-
-		if (dev->driver)
-			add_uevent_var(envp, num_envp, &i,
-				       buffer, buffer_size, &length,
-				       "PHYSDEVDRIVER=%s", dev->driver->name);
+		retval = add_uevent_var(envp, num_envp, &i,
+					buffer, buffer_size, &length,
+					"PHYSDEVBUS=%s", dev->bus->name);
+		if (retval)
+			return retval;
+
+		if (dev->driver) {
+			retval = add_uevent_var(envp, num_envp, &i,
+						buffer, buffer_size, &length,
+						"PHYSDEVDRIVER=%s", dev->driver->name);
+			if (retval)
+				return retval;
+		}
 	}
 #endif
 
@@ -222,27 +241,33 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
 	if (dev->bus && dev->bus->uevent) {
 		/* have the bus specific function add its stuff */
 		retval = dev->bus->uevent(dev, envp, num_envp, buffer, buffer_size);
-		if (retval)
+		if (retval) {
 			pr_debug ("%s: bus uevent() returned %d\n",
 				  __FUNCTION__, retval);
+			goto out;
+		}
 	}
 
 	if (dev->class && dev->class->dev_uevent) {
 		/* have the class specific function add its stuff */
 		retval = dev->class->dev_uevent(dev, envp, num_envp, buffer, buffer_size);
-		if (retval)
+		if (retval) {
 			pr_debug("%s: class uevent() returned %d\n",
 				 __FUNCTION__, retval);
+			goto out;
+		}
 	}
 
 	if (dev->type && dev->type->uevent) {
 		/* have the device type specific fuction add its stuff */
 		retval = dev->type->uevent(dev, envp, num_envp, buffer, buffer_size);
-		if (retval)
+		if (retval) {
 			pr_debug("%s: dev_type uevent() returned %d\n",
 				 __FUNCTION__, retval);
+			goto out;
+		}
 	}
-
+out:
 	return retval;
 }
 


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-03-04  1:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-04  0:56 [PATCH 1/2] uevent: improve error checking and handling Eric Rannaud
2007-03-04  1:00 ` [PATCH 2/2] uevent: use add_uevent_var() instead of open coding it Eric Rannaud

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.