public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] dma-debug: fix check_unmap null pointer dereference
@ 2009-08-20  1:17 Kyle McMartin
  2009-08-21  8:07 ` [tip:core/urgent] dma-debug: Fix " tip-bot for Kyle McMartin
  0 siblings, 1 reply; 2+ messages in thread
From: Kyle McMartin @ 2009-08-20  1:17 UTC (permalink / raw)
  To: Joerg Roedel; +Cc: mingo, linux-kernel, mchehab

From: Kyle McMartin <kyle@redhat.com>

While it's debatable whether or not a NULL device argument to the
DMA API functions is valid... since it certainly isn't valid on devices
with an IOMMU... dma-debug really shouldn't be dereferencing null
pointers either.

Guard against that in err_printk and the driver_filter functions. A
Fedora rawhide user was seeing this in one of the dvb drivers resulting
in an oops on boot.

Signed-off-by: Kyle McMartin <kyle@redhat.com>
---
A patch has been sent for testing to the driver, but I feel the
dma debugging support should be fixed as well. (There's still a pile of
legacy garbage in the kernel passing null pointers to
dma_{alloc,free}_*. :(

regards, Kyle

diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 65b0d99..58a9f9f 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -156,9 +156,13 @@ static bool driver_filter(struct device *dev)
 		return true;
 
 	/* driver filter on and initialized */
-	if (current_driver && dev->driver == current_driver)
+	if (current_driver && dev && dev->driver == current_driver)
 		return true;
 
+	/* driver filter on, but we can't filter on a NULL device... */
+	if (!dev)
+		return false;
+
 	if (current_driver || !current_driver_name[0])
 		return false;
 
@@ -183,17 +187,17 @@ static bool driver_filter(struct device *dev)
 	return ret;
 }
 
-#define err_printk(dev, entry, format, arg...) do {		\
-		error_count += 1;				\
-		if (driver_filter(dev) &&			\
-		    (show_all_errors || show_num_errors > 0)) {	\
-			WARN(1, "%s %s: " format,		\
-			     dev_driver_string(dev),		\
-			     dev_name(dev) , ## arg);		\
-			dump_entry_trace(entry);		\
-		}						\
-		if (!show_all_errors && show_num_errors > 0)	\
-			show_num_errors -= 1;			\
+#define err_printk(dev, entry, format, arg...) do {			\
+		error_count += 1;					\
+		if (driver_filter(dev) &&				\
+		    (show_all_errors || show_num_errors > 0)) {		\
+			WARN(1, "%s %s: " format,			\
+			     dev ? dev_driver_string(dev) : "NULL",	\
+			     dev ? dev_name(dev) : "NULL", ## arg);	\
+			dump_entry_trace(entry);			\
+		}							\
+		if (!show_all_errors && show_num_errors > 0)		\
+			show_num_errors -= 1;				\
 	} while (0);
 
 /*

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

end of thread, other threads:[~2009-08-21  8:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-20  1:17 [PATCH] dma-debug: fix check_unmap null pointer dereference Kyle McMartin
2009-08-21  8:07 ` [tip:core/urgent] dma-debug: Fix " tip-bot for Kyle McMartin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox