From: Bin Meng <bmeng.cn@gmail.com>
Date: Mon, 12 Oct 2015 04:37:37 +0000 (-0700)
Subject: x86: Do sanity test on the cache record in mrccache_update()
X-Git-Tag: v2025.01-rc5-pxa1908~11507^2~29
X-Git-Url: http://git.dujemihanovic.xyz/html/%7B%7B%20.Permalink%20%7D%7D?a=commitdiff_plain;h=2fe66dbcbc1793dc199d90c4d66acaad981f9820;p=u-boot.git

x86: Do sanity test on the cache record in mrccache_update()

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>
---

diff --git a/arch/x86/include/asm/mrccache.h b/arch/x86/include/asm/mrccache.h
index 1d50ebb85a..ff41b8a3c4 100644
--- a/arch/x86/include/asm/mrccache.h
+++ b/arch/x86/include/asm/mrccache.h
@@ -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);
diff --git a/arch/x86/lib/mrccache.c b/arch/x86/lib/mrccache.c
index ec0d2cb18b..6dd3b5ec83 100644
--- a/arch/x86/lib/mrccache.c
+++ b/arch/x86/lib/mrccache.c
@@ -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");