Title: [6568] trunk/arch/blackfin/include/asm/uaccess.h: Fix [#5202].
Revision
6568
Author
rgetz
Date
2009-06-03 19:32:59 -0500 (Wed, 03 Jun 2009)

Log Message

Fix [#5202].

Make sure we check the userspace pointer before the kernel acts on it.

Modified Paths

Diff

Modified: trunk/arch/blackfin/include/asm/uaccess.h (6567 => 6568)


--- trunk/arch/blackfin/include/asm/uaccess.h	2009-06-04 00:08:05 UTC (rev 6567)
+++ trunk/arch/blackfin/include/asm/uaccess.h	2009-06-04 00:32:59 UTC (rev 6568)
@@ -233,17 +233,32 @@
 }
 
 /*
- * Return the size of a string (including the ending 0)
+ * Get the size of a string in user space.
+ *   src: The string to measure
+ *     n: The maximum valid length
  *
- * Return 0 on exception, a value greater than N if too long
+ * Get the size of a NUL-terminated string in user space.
+ *
+ * Returns the size of the string INCLUDING the terminating NUL.
+ * On exception, returns 0.
+ * If the string is too long, returns a value greater than n.
  */
-static inline long strnlen_user(const char *src, long n)
+static inline long __must_check strnlen_user(const char *src, long n)
 {
-	return (strlen(src) + 1);
+	if (!access_ok(VERIFY_READ, src, n))
+		return 0;
+	return strnlen(src, n) + 1;
 }
 
-#define strlen_user(str) strnlen_user(str, 32767)
+/* We don't know the length, so only check the start of the string */
 
+static inline long __must_check strlen_user(const char *src)
+{
+	if (!access_ok(VERIFY_READ, src, 1))
+		return 0;
+	return strlen(src) + 1;
+}
+
 /*
  * Zero Userspace
  */
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to