[PATCH] x86 microcode: don't check the size
authorShaohua Li <shaohua.li@intel.com>
Wed, 27 Sep 2006 08:50:54 +0000 (01:50 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 27 Sep 2006 15:26:18 +0000 (08:26 -0700)
IA32 manual says if micorcode update's size is 0, then the size is
default size (2048 bytes). But this doesn't suggest all microcode
update's size should be above 2048 bytes to me. We actually had a
microcode update whose size is 1024 bytes. The patch just removed the
check.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Cc: Tigran Aivazian <tigran@veritas.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/i386/kernel/microcode.c

index 467901ebb99230f4c5555b9fb56a4acdaa7cc374..9b9479768d5ebcda920044781234b8aa2d4183d3 100644 (file)
@@ -187,8 +187,7 @@ static int microcode_sanity_check(void *mc)
 
        total_size = get_totalsize(mc_header);
        data_size = get_datasize(mc_header);
-       if ((data_size + MC_HEADER_SIZE > total_size)
-               || (data_size < DEFAULT_UCODE_DATASIZE)) {
+       if (data_size + MC_HEADER_SIZE > total_size) {
                printk(KERN_ERR "microcode: error! "
                        "Bad data size in microcode data file\n");
                return -EINVAL;
@@ -365,8 +364,7 @@ static long get_next_ucode(void **mc, long offset)
                return -EFAULT;
        }
        total_size = get_totalsize(&mc_header);
-       if ((offset + total_size > user_buffer_size)
-               || (total_size < DEFAULT_UCODE_TOTALSIZE)) {
+       if (offset + total_size > user_buffer_size) {
                printk(KERN_ERR "microcode: error! Bad total size in microcode "
                                "data file\n");
                return -EINVAL;
@@ -432,11 +430,6 @@ static ssize_t microcode_write (struct file *file, const char __user *buf, size_
 {
        ssize_t ret;
 
-       if (len < DEFAULT_UCODE_TOTALSIZE) {
-               printk(KERN_ERR "microcode: not enough data\n"); 
-               return -EINVAL;
-       }
-
        if ((len >> PAGE_SHIFT) > num_physpages) {
                printk(KERN_ERR "microcode: too much data (max %ld pages)\n", num_physpages);
                return -EINVAL;
@@ -508,8 +501,7 @@ static long get_next_ucode_from_buffer(void **mc, void *buf,
        mc_header = (microcode_header_t *)(buf + offset);
        total_size = get_totalsize(mc_header);
 
-       if ((offset + total_size > size)
-               || (total_size < DEFAULT_UCODE_TOTALSIZE)) {
+       if (offset + total_size > size) {
                printk(KERN_ERR "microcode: error! Bad data in microcode data file\n");
                return -EINVAL;
        }