DragonFlyBSD Kernel Audit
DF-1788 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/acpica/acpi_fujitsu/acpi_fujitsu.c b/sys/dev/acpica/acpi_fujitsu/acpi_fujitsu.c
--- a/sys/dev/acpica/acpi_fujitsu/acpi_fujitsu.c
+++ b/sys/dev/acpica/acpi_fujitsu/acpi_fujitsu.c
@@ -448,11 +448,15 @@
 	arg = acpi_fujitsu_method_get(sc, method);
 	error = sysctl_handle_int(oidp, &arg, 0, req);
 
-	if (error != 0 || req->newptr == NULL)
-		goto out;
-
-	/* Update the value */
-	error = acpi_fujitsu_method_set(sc, method, arg);
+	if (error != 0 || req->newptr == NULL)
+		goto out;
+
+	/* Sanity-check the user-supplied value before forwarding to ACPI. */
+	if (arg < 0)
+		arg = 0;
+
+	/* Update the value */
+	error = acpi_fujitsu_method_set(sc, method, arg);
 
 out:
 	ACPI_SERIAL_END(fujitsu);