[SCSI] enclosure: fix oops while iterating enclosure_status array
authorJames Bottomley <James.Bottomley@suse.de>
Thu, 26 Nov 2009 15:50:20 +0000 (09:50 -0600)
committerJames Bottomley <James.Bottomley@suse.de>
Thu, 10 Dec 2009 14:54:14 +0000 (08:54 -0600)
Based on patch originally by Jeff Mahoney <jeffm@suse.com>

 enclosure_status is expected to be a NULL terminated array of strings
 but isn't actually NULL terminated. When writing an invalid value to
 /sys/class/enclosure/.../.../status, it goes off the end of the array
 and Oopses.

Fix by making the assumption true and adding NULL at the end.

Reported-by: Artur Wojcik <artur.wojcik@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/misc/enclosure.c
include/linux/enclosure.h

index e9eae4a..1eac626 100644 (file)
@@ -391,6 +391,7 @@ static const char *const enclosure_status [] = {
        [ENCLOSURE_STATUS_NOT_INSTALLED] = "not installed",
        [ENCLOSURE_STATUS_UNKNOWN] = "unknown",
        [ENCLOSURE_STATUS_UNAVAILABLE] = "unavailable",
+       [ENCLOSURE_STATUS_MAX] = NULL,
 };
 
 static const char *const enclosure_type [] = {
index 90d1c21..9a33c5f 100644 (file)
@@ -42,6 +42,8 @@ enum enclosure_status {
        ENCLOSURE_STATUS_NOT_INSTALLED,
        ENCLOSURE_STATUS_UNKNOWN,
        ENCLOSURE_STATUS_UNAVAILABLE,
+       /* last element for counting purposes */
+       ENCLOSURE_STATUS_MAX
 };
 
 /* SFF-8485 activity light settings */