Module Name: src
Committed By: riastradh
Date: Thu Mar 28 13:40:08 UTC 2024
Modified Files:
src/sys/dev/acpi: apei_einj.c
Log Message:
apei(4): Fix uninitialized stack access in error branch.
PR kern/58046
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/acpi/apei_einj.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/acpi/apei_einj.c
diff -u src/sys/dev/acpi/apei_einj.c:1.6 src/sys/dev/acpi/apei_einj.c:1.7
--- src/sys/dev/acpi/apei_einj.c:1.6 Tue Mar 26 22:01:03 2024
+++ src/sys/dev/acpi/apei_einj.c Thu Mar 28 13:40:08 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: apei_einj.c,v 1.6 2024/03/26 22:01:03 rillig Exp $ */
+/* $NetBSD: apei_einj.c,v 1.7 2024/03/28 13:40:08 riastradh Exp $ */
/*-
* Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -44,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: apei_einj.c,v 1.6 2024/03/26 22:01:03 rillig Exp $");
+__KERNEL_RCSID(0, "$NetBSD: apei_einj.c,v 1.7 2024/03/28 13:40:08 riastradh Exp $");
#include <sys/types.h>
@@ -516,6 +516,16 @@ apei_einj_trigger(struct apei_softc *sc,
uint32_t i, nentries;
/*
+ * Initialize the machine to execute the TRIGGER_ERROR action's
+ * instructions. Do this early to keep the error branches
+ * simpler.
+ */
+ memset(M, 0, sizeof(*M));
+ M->sc = sc;
+ M->x = x; /* input */
+ M->y = 0; /* output */
+
+ /*
* Get the TRIGGER_ERROR action table's physical address.
*/
teatab_pa = apei_einj_act(sc, ACPI_EINJ_GET_TRIGGER_TABLE, 0);
@@ -588,15 +598,6 @@ apei_einj_trigger(struct apei_softc *sc,
teatab = AcpiOsMapMemory(teatab_pa, mapsize);
/*
- * Initialize the machine to execute the TRIGGER_ERROR action's
- * instructions.
- */
- memset(M, 0, sizeof(*M));
- M->sc = sc;
- M->x = x; /* input */
- M->y = 0; /* output */
-
- /*
* Now iterate over the EINJ-type entries and execute the
* trigger error action instructions -- but skip if they're not
* for the TRIGGER_ERROR action, and stop if they're truncated.