sysutils/acpi_call: Check for errors from copyout()

The base system will soon require all copyout() calls to either preserve
the return value or explicitly ignore it.

PR:		275986
Approved by:	antoine
2024Q1
Mark Johnston 2024-01-02 13:18:53 -05:00
parent c9d519a603
commit d0d5a75f66
2 changed files with 9 additions and 5 deletions

View File

@ -1,6 +1,6 @@
PORTNAME= acpi_call
PORTVERSION= 1.0.1
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= sysutils
MASTER_SITES= http://projects.ukrweb.net/files/ \
http://imax.in.ua/files/

View File

@ -12,7 +12,7 @@
#include <sys/kernel.h>
#if __FreeBSD__ >= 8
# include <contrib/dev/acpica/include/acpi.h>
@@ -45,18 +45,97 @@
@@ -45,18 +45,99 @@ void acpi_call_fixup_pointers(ACPI_OBJECT *p, UINT8 *o
void acpi_call_fixup_pointers(ACPI_OBJECT *p, UINT8 *orig);
@ -95,7 +95,9 @@
+ ACPI_OBJECT_LIST *args;
ACPI_BUFFER result;
+ char path[256];
+ int error;
+ error = 0;
result.Length = ACPI_ALLOCATE_BUFFER;
result.Pointer = NULL;
@ -111,13 +113,14 @@
if (ACPI_SUCCESS(params->retval))
{
if (result.Pointer != NULL)
@@ -64,30 +143,31 @@ acpi_call_ioctl(u_long cmd, caddr_t addr, void *arg)
@@ -64,30 +145,31 @@ acpi_call_ioctl(u_long cmd, caddr_t addr, void *arg)
if (params->result.Pointer != NULL)
{
params->result.Length = min(params->result.Length, result.Length);
- copyout(result.Pointer, params->result.Pointer,
+ if (result.Length >= sizeof(ACPI_OBJECT))
+ acpi_call_fixup_pointers((ACPI_OBJECT*)result.Pointer, params->result.Pointer);
copyout(result.Pointer, params->result.Pointer,
+ error = copyout(result.Pointer, params->result.Pointer,
params->result.Length);
params->reslen = result.Length;
- if (result.Length >= sizeof(ACPI_OBJECT))
@ -129,7 +132,8 @@
+ free_acpi_object_list(args);
}
return (0);
- return (0);
+ return error;
}
void