summaryrefslogtreecommitdiff
path: root/src/drivers/smmstore/smi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/smmstore/smi.c')
-rw-r--r--src/drivers/smmstore/smi.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/drivers/smmstore/smi.c b/src/drivers/smmstore/smi.c
index 083535c877..b21423e90e 100644
--- a/src/drivers/smmstore/smi.c
+++ b/src/drivers/smmstore/smi.c
@@ -1,6 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <console/console.h>
+#include <commonlib/region.h>
+#include <cpu/x86/smm.h>
#include <smmstore.h>
#include <stddef.h>
#include <stdint.h>
@@ -10,13 +12,14 @@
*
* Legal means:
* - not pointing into SMRAM
- * - ...?
*
* returns 0 on success, -1 on failure
*/
static int range_check(void *start, size_t size)
{
- // TODO: fill in
+ if (smm_points_to_smram(start, size))
+ return -1;
+
return 0;
}
@@ -30,6 +33,9 @@ uint32_t smmstore_exec(uint8_t command, void *param)
printk(BIOS_DEBUG, "Reading from SMM store\n");
struct smmstore_params_read *params = param;
+ if (range_check(params, sizeof(*params)) != 0)
+ break;
+
if (range_check(params->buf, params->bufsize) != 0)
break;
@@ -42,6 +48,8 @@ uint32_t smmstore_exec(uint8_t command, void *param)
printk(BIOS_DEBUG, "Appending into SMM store\n");
struct smmstore_params_append *params = param;
+ if (range_check(params, sizeof(*params)) != 0)
+ break;
if (range_check(params->key, params->keysize) != 0)
break;
if (range_check(params->val, params->valsize) != 0)