x86, microcode, AMD: Fix section header size check
[pandora-kernel.git] / arch / x86 / kernel / microcode_amd.c
index d30d67c..591be0e 100644 (file)
@@ -66,8 +66,8 @@ struct microcode_amd {
        unsigned int                    mpb[0];
 };
 
-#define UCODE_CONTAINER_SECTION_HDR    8
-#define UCODE_CONTAINER_HEADER_SIZE    12
+#define SECTION_HDR_SIZE       8
+#define CONTAINER_HDR_SZ       12
 
 static struct equiv_cpu_entry *equiv_cpu_table;
 
@@ -177,7 +177,7 @@ static unsigned int verify_ucode_size(int cpu, const u8 *buf, unsigned int size)
 
        actual_size = *(u32 *)(buf + 4);
 
-       if (actual_size > size || actual_size > max_size) {
+       if (actual_size + SECTION_HDR_SIZE > size || actual_size > max_size) {
                pr_err("section size mismatch\n");
                return 0;
        }
@@ -204,8 +204,8 @@ get_next_ucode(int cpu, const u8 *buf, unsigned int size, unsigned int *mc_size)
        if (!mc)
                goto out;
 
-       get_ucode_data(mc, buf + UCODE_CONTAINER_SECTION_HDR, actual_size);
-       *mc_size = actual_size + UCODE_CONTAINER_SECTION_HDR;
+       get_ucode_data(mc, buf + SECTION_HDR_SIZE, actual_size);
+       *mc_size = actual_size + SECTION_HDR_SIZE;
 
 out:
        return mc;
@@ -229,9 +229,10 @@ static int install_equiv_cpu_table(const u8 *buf)
                return -ENOMEM;
        }
 
-       get_ucode_data(equiv_cpu_table, buf + UCODE_CONTAINER_HEADER_SIZE, size);
+       get_ucode_data(equiv_cpu_table, buf + CONTAINER_HDR_SZ, size);
 
-       return size + UCODE_CONTAINER_HEADER_SIZE; /* add header length */
+       /* add header length */
+       return size + CONTAINER_HDR_SZ;
 }
 
 static void free_equiv_cpu_table(void)