Merge tag 'trace-v6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux...
[linux-2.6-microblaze.git] / drivers / platform / x86 / intel / ifs / load.c
index 6b82724..959b187 100644 (file)
@@ -291,6 +291,13 @@ static int validate_ifs_metadata(struct device *dev)
                return ret;
        }
 
+       if (ifs_meta->chunks_per_stride &&
+           (ifs_meta->starting_chunk % ifs_meta->chunks_per_stride != 0)) {
+               dev_warn(dev, "Starting chunk num %u not a multiple of chunks_per_stride %u\n",
+                        ifs_meta->starting_chunk, ifs_meta->chunks_per_stride);
+               return ret;
+       }
+
        return 0;
 }
 
@@ -375,6 +382,7 @@ int ifs_load_firmware(struct device *dev)
 {
        const struct ifs_test_caps *test = ifs_get_test_caps(dev);
        struct ifs_data *ifsd = ifs_get_data(dev);
+       unsigned int expected_size;
        const struct firmware *fw;
        char scan_path[64];
        int ret = -EINVAL;
@@ -389,6 +397,13 @@ int ifs_load_firmware(struct device *dev)
                goto done;
        }
 
+       expected_size = ((struct microcode_header_intel *)fw->data)->totalsize;
+       if (fw->size != expected_size) {
+               dev_err(dev, "File size mismatch (expected %u, actual %zu). Corrupted IFS image.\n",
+                       expected_size, fw->size);
+               return -EINVAL;
+       }
+
        ret = image_sanity_check(dev, (struct microcode_header_intel *)fw->data);
        if (ret)
                goto release;