x86: Do sanity test on the cache record in mrccache_update()
authorBin Meng <bmeng.cn@gmail.com>
Mon, 12 Oct 2015 04:37:37 +0000 (21:37 -0700)
committerSimon Glass <sjg@chromium.org>
Wed, 21 Oct 2015 13:46:26 +0000 (07:46 -0600)
For the cache record to write in mrccache_update(), we should
perform a sanity test to see if it is a valid one.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
arch/x86/include/asm/mrccache.h
arch/x86/lib/mrccache.c

index 1d50ebb85a7ded7241c693b9d03ece7e6623ce76..ff41b8a3c4dda8ef4ab91231bf85478f404167b1 100644 (file)
@@ -43,7 +43,7 @@ struct mrc_data_container *mrccache_find_current(struct fmap_entry *entry);
  * @entry:     Position and size of MRC cache in SPI flash
  * @cur:       Record to write
  * @return 0 if updated, -EEXIST if the record is the same as the latest
- * record, other error if SPI write failed
+ * record, -EINVAL if the record is not valid, other error if SPI write failed
  */
 int mrccache_update(struct udevice *sf, struct fmap_entry *entry,
                    struct mrc_data_container *cur);
index ec0d2cb18b29c38a8781f43e53e6f6c77337ae6d..6dd3b5ec836ec268917de765a32bedcf2d2b6974 100644 (file)
@@ -112,6 +112,9 @@ int mrccache_update(struct udevice *sf, struct fmap_entry *entry,
        ulong base_addr;
        int ret;
 
+       if (!is_mrc_cache(cur))
+               return -EINVAL;
+
        /* Find the last used block */
        base_addr = (1ULL << 32) - CONFIG_ROM_SIZE + entry->offset;
        debug("Updating MRC cache data\n");