6434926 sd_get_write_cache_enabled() should verify the received mode sense data
authorcg149915
Wed, 26 Jul 2006 09:24:19 -0700
changeset 2444 64cc3e332ab9
parent 2443 52636152cdca
child 2445 45c1310316ff
6434926 sd_get_write_cache_enabled() should verify the received mode sense data Contributed by Juergen Keil <[email protected]>.
usr/src/uts/common/io/scsi/targets/sd.c
--- a/usr/src/uts/common/io/scsi/targets/sd.c	Wed Jul 26 06:38:48 2006 -0700
+++ b/usr/src/uts/common/io/scsi/targets/sd.c	Wed Jul 26 09:24:19 2006 -0700
@@ -9901,6 +9901,13 @@
 	}
 
 	mode_caching_page = (struct mode_caching *)(header + hdrlen + bd_len);
+	if (mode_caching_page->mode_page.code != MODEPAGE_CACHING) {
+		SD_ERROR(SD_LOG_COMMON, un, "sd_cache_control: Mode Sense"
+		    " caching page code mismatch %d\n",
+		    mode_caching_page->mode_page.code);
+		kmem_free(header, buflen);
+		return (EIO);
+	}
 
 	/* Check the relevant bits on successful mode sense. */
 	if ((mode_caching_page->rcd && rcd_flag == SD_CACHE_ENABLE) ||
@@ -10073,6 +10080,13 @@
 	}
 
 	mode_caching_page = (struct mode_caching *)(header + hdrlen + bd_len);
+	if (mode_caching_page->mode_page.code != MODEPAGE_CACHING) {
+		SD_ERROR(SD_LOG_COMMON, un, "sd_cache_control: Mode Sense"
+		    " caching page code mismatch %d\n",
+		    mode_caching_page->mode_page.code);
+		kmem_free(header, buflen);
+		return (EIO);
+	}
 	*is_enabled = mode_caching_page->wce;
 
 	kmem_free(header, buflen);