mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge branch 'acpica'
Merge ACPICA updates for 7.2-rc1 including the following changes: - Add support for the Legacy Virtual Register (LVR) field in I2C serial bus resource descriptors to ACPICA (Akhil R) - Fix multiple issues related to bounds checks, input validation, use-after-free, and integer overflow checks in the AML interpreter in ACPICA (ikaros) - Update the copyright year to 2026 in ACPICA files and make minor changes related to ACPI 6.6 support (Pawel Chmielewski) - Remove spurious precision from format used to dump parse trees in ACPICA (David Laight) - Add modern standby DSM GUIDs to ACPICA header files (Daniel Schaefer) - Fix FADT 32/64X length mismatch warning in ACPICA (Abdelkader Boudih) - Update D3hot/cold device power states definitions in ACPICA header files (Aymeric Wibo) - Fix NULL pointer dereference in acpi_ns_custom_package() (Weiming Shi) - Update ACPICA version to 20260408 (Saket Dumbre) * acpica: (27 commits) ACPICA: add boundary checks in two places ACPICA: Add package limit checks in parser functions ACPICA: Update version to 20260408 ACPICA: Update the copyright year to 2026 ACPICA: Remove spurious precision from format used to dump parse trees ACPICA: Enhance OEM ID and Table ID validation in acpi_ex_load_table_op() ACPICA: Fix NULL pointer dereference in acpi_ns_custom_package() ACPICA: Enhance buffer validation in acpi_ut_walk_aml_resources() ACPICA: Add validation for node in acpi_ns_build_normalized_path() ACPICA: validate handler object type in two places ACPICA: Improve argument parsing in acpi_ps_get_next_simple_arg() ACPICA: Fix integer overflow in acpi_ex_opcode_3A_1T_1R() (mid_op) ACPICA: Prevent adding invalid references ACPICA: add boundary checks in acpi_ps_get_next_field() ACPICA: validate byte_count in acpi_ps_get_next_package_length() ACPICA: Fix use-after-free in acpi_ds_terminate_control_method() ACPICA: fix I2C LVR item count in the conversion table ACPICA: Mention the LVR bits ACPICA: Change LVR to 8 bit value ACPICA: Fetch LVR I2C resource descriptor ...
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: acapps - common include for ACPI applications/tools
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* Common info for tool signons */
|
||||
|
||||
#define ACPICA_NAME "Intel ACPI Component Architecture"
|
||||
#define ACPICA_COPYRIGHT "Copyright (c) 2000 - 2025 Intel Corporation"
|
||||
#define ACPICA_COPYRIGHT "Copyright (c) 2000 - 2026 Intel Corporation"
|
||||
|
||||
#if ACPI_MACHINE_WIDTH == 64
|
||||
#define ACPI_WIDTH " (64-bit version)"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: accommon.h - Common include files for generation of ACPICA source
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: acapps - common include for ACPI applications/tools
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acdebug.h - ACPI/AML debugger
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acdispat.h - dispatcher (parser to interpreter interface)
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acevents.h - Event subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acglobal.h - Declarations for global variables
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: achware.h -- hardware specific interfaces
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: aclocal.h - Internal data types used across the ACPI subsystem
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -169,6 +169,7 @@ struct acpi_namespace_node {
|
||||
#define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */
|
||||
#define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */
|
||||
#define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */
|
||||
#define ANOBJ_IS_ALIAS 0x40 /* iASL only: Node is an alias to another node */
|
||||
#define ANOBJ_IS_REFERENCED 0x80 /* iASL only: Object was referenced */
|
||||
|
||||
/* Internal ACPI table management - master table list */
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acmacros.h - C macros for the entire subsystem.
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acnamesp.h - Namespace subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acobject.h - Definition of union acpi_operand_object (Internal object only)
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acopcode.h - AML opcode information for the AML parser and interpreter
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: acparser.h - AML Parser subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acpredef - Information table for ACPI predefined methods and objects
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acresrc.h - Resource Manager function prototypes
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acstruct.h - Internal structs
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: actables.h - ACPI table management
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Declarations and definitions contained herein are derived
|
||||
* directly from the ACPI specification.
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: amlresrc.h - AML resource descriptors
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dbhistry - debugger HISTORY command
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: dsargs - Support for execution of dynamic arguments for static
|
||||
* objects (regions, fields, buffer fields, etc.)
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: dscontrol - Support for execution control opcodes -
|
||||
* if/else/while/return
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsdebug - Parser/Interpreter interface - debugging
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsfield - Dispatcher field routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsinit - Object initialization namespace walk
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsmethod - Parser/Interpreter interface - control method parsing
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -705,6 +705,8 @@ void
|
||||
acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
|
||||
struct acpi_walk_state *walk_state)
|
||||
{
|
||||
u32 i;
|
||||
struct acpi_namespace_node *ref_node;
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR(ds_terminate_control_method, walk_state);
|
||||
|
||||
@@ -715,6 +717,47 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
|
||||
}
|
||||
|
||||
if (walk_state) {
|
||||
/*
|
||||
* Check if the return value is a ref_of reference to a method local
|
||||
* or argument. If so, clear the reference to avoid use-after-free
|
||||
* when the walk state is deleted.
|
||||
*/
|
||||
if (walk_state->return_desc &&
|
||||
(walk_state->return_desc->common.type ==
|
||||
ACPI_TYPE_LOCAL_REFERENCE)
|
||||
&& (walk_state->return_desc->reference.class ==
|
||||
ACPI_REFCLASS_REFOF)) {
|
||||
ref_node = walk_state->return_desc->reference.object;
|
||||
if (ref_node) {
|
||||
|
||||
/* Check against method locals */
|
||||
for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) {
|
||||
if (ref_node ==
|
||||
&walk_state->local_variables[i]) {
|
||||
acpi_ut_remove_reference
|
||||
(walk_state->return_desc);
|
||||
walk_state->return_desc = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check against method arguments if not already cleared */
|
||||
if (walk_state->return_desc) {
|
||||
for (i = 0; i < ACPI_METHOD_NUM_ARGS;
|
||||
i++) {
|
||||
if (ref_node ==
|
||||
&walk_state->arguments[i]) {
|
||||
acpi_ut_remove_reference
|
||||
(walk_state->
|
||||
return_desc);
|
||||
walk_state->
|
||||
return_desc = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Delete all arguments and locals */
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsobject - Dispatcher object management routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsopcode - Dispatcher support for regions and fields
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dspkginit - Completion of deferred package initialization
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: dswexec - Dispatcher method execution callbacks;
|
||||
* dispatch to interpreter.
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswload - Dispatcher first pass namespace load callbacks
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswload2 - Dispatcher second pass namespace load callbacks
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswscope - Scope stack manipulation
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswstate - Dispatcher parse tree walk management routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evevent - Fixed Event handling and dispatch
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evglock - Global Lock support
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpe - General Purpose Event handling and dispatch
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpeblk - GPE block creation and initialization.
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpeinit - System GPE initialization and update
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpeutil - GPE utilities
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evhandler - Support for Address Space handlers
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -130,6 +130,14 @@ acpi_ev_has_default_handler(struct acpi_namespace_node *node,
|
||||
/* Walk the linked list of handlers for this object */
|
||||
|
||||
while (handler_obj) {
|
||||
|
||||
/* Validate handler object type before accessing fields */
|
||||
|
||||
if (handler_obj->common.type !=
|
||||
ACPI_TYPE_LOCAL_ADDRESS_HANDLER) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (handler_obj->address_space.space_id == space_id) {
|
||||
if (handler_obj->address_space.handler_flags &
|
||||
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
|
||||
@@ -292,6 +300,9 @@ union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type
|
||||
/* Walk the handler list for this device */
|
||||
|
||||
while (handler_obj) {
|
||||
if (handler_obj->common.type != ACPI_TYPE_LOCAL_ADDRESS_HANDLER) {
|
||||
break;
|
||||
}
|
||||
|
||||
/* Same space_id indicates a handler is installed */
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evmisc - Miscellaneous event manager support functions
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evregion - Operation Region support
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evrgnini- ACPI address_space (op_region) init
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evxface - External interfaces for ACPI events
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evxfgpe - External Interfaces for General Purpose Events (GPEs)
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: evxfregn - External Interfaces, ACPI Operation Regions and
|
||||
* Address Spaces.
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exconcat - Concatenate-type AML operators
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes)
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -90,6 +90,8 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *return_obj;
|
||||
union acpi_operand_object *ddb_handle;
|
||||
u32 table_index;
|
||||
char oem_id[ACPI_OEM_ID_SIZE + 1];
|
||||
char oem_table_id[ACPI_OEM_TABLE_ID_SIZE + 1];
|
||||
|
||||
ACPI_FUNCTION_TRACE(ex_load_table_op);
|
||||
|
||||
@@ -102,12 +104,32 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
|
||||
|
||||
*return_desc = return_obj;
|
||||
|
||||
/*
|
||||
* Validate OEM ID and OEM Table ID string lengths.
|
||||
* acpi_tb_find_table expects strings that can safely read
|
||||
* ACPI_OEM_ID_SIZE and ACPI_OEM_TABLE_ID_SIZE bytes.
|
||||
*/
|
||||
if ((operand[1]->string.length > ACPI_OEM_ID_SIZE) ||
|
||||
(operand[2]->string.length > ACPI_OEM_TABLE_ID_SIZE)) {
|
||||
return_ACPI_STATUS(AE_AML_STRING_LIMIT);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy OEM strings to local buffers with guaranteed null-termination.
|
||||
* This prevents heap-buffer-overflow when acpi_tb_find_table reads
|
||||
* ACPI_OEM_ID_SIZE/ACPI_OEM_TABLE_ID_SIZE bytes.
|
||||
*/
|
||||
memcpy(oem_id, operand[1]->string.pointer, operand[1]->string.length);
|
||||
oem_id[operand[1]->string.length] = 0;
|
||||
memcpy(oem_table_id, operand[2]->string.pointer,
|
||||
operand[2]->string.length);
|
||||
oem_table_id[operand[2]->string.length] = 0;
|
||||
|
||||
/* Find the ACPI table in the RSDT/XSDT */
|
||||
|
||||
acpi_ex_exit_interpreter();
|
||||
status = acpi_tb_find_table(operand[0]->string.pointer,
|
||||
operand[1]->string.pointer,
|
||||
operand[2]->string.pointer, &table_index);
|
||||
oem_id, oem_table_id, &table_index);
|
||||
acpi_ex_enter_interpreter();
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (status != AE_NOT_FOUND) {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exconvrt - Object conversion routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: excreate - Named object creation
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exdebug - Support for stores to the AML Debug Object
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exdump - Interpreter debug output routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exfield - AML execution - field_unit read/write
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exfldio - Aml Field I/O
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exmutex - ASL Mutex Acquire/Release functions
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exnames - interpreter/scanner name load/execute
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exoparg1 - AML execution - opcodes with 1 argument
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exoparg2 - AML execution - opcodes with 2 arguments
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exoparg3 - AML execution - opcodes with 3 arguments
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -159,7 +159,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
|
||||
|
||||
/* Truncate request if larger than the actual String/Buffer */
|
||||
|
||||
else if ((index + length) > operand[0]->string.length) {
|
||||
else if ((index + length) > operand[0]->string.length || (index + length) < index) { /* Check for overflow */
|
||||
length =
|
||||
(acpi_size)operand[0]->string.length -
|
||||
(acpi_size)index;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exoparg6 - AML execution - opcodes with 6 arguments
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exprep - ACPI AML field prep utilities
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exregion - ACPI default op_region (address space) handlers
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exresnte - AML Interpreter object resolution
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exresolv - AML Interpreter object resolution
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exresop - AML Interpreter operand/object resolution
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exserial - field_unit support for serial address spaces
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exstore - AML Interpreter object store support
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: exstoren - AML Interpreter object store support,
|
||||
* Store to Node (namespace object)
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exstorob - AML object store support, store to object
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exsystem - Interface to OS services
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: extrace - Support for interpreter execution tracing
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exutils - interpreter/scanner utilities
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Name: hwesleep.c - ACPI Hardware Sleep/Wake Support functions for the
|
||||
* extended FADT-V5 sleep registers.
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: hwgpe - Low level GPE enable/disable/clear functions
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Name: hwsleep.c - ACPI Hardware Sleep/Wake Support functions for the
|
||||
* original/legacy sleep/PM registers.
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: hwtimer.c - ACPI Power Management Timer Interface
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: hwvalid - I/O request validation
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: hwxface - Public ACPICA hardware interfaces
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: hwxfsleep.c - ACPI Hardware Sleep/Wake External Interfaces
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsarguments - Validation of args for ACPI predefined methods
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: nsconvert - Object conversions for objects returned by
|
||||
* predefined methods
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsdump - table dumping routines for debug
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsdump - table dumping routines for debug
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsinit - namespace initialization
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsload - namespace loading/expanding/contracting procedures
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -222,6 +222,12 @@ acpi_ns_build_normalized_path(struct acpi_namespace_node *node,
|
||||
goto build_trailing_null;
|
||||
}
|
||||
|
||||
/* Validate the Node to avoid use-after-free vulnerabilities */
|
||||
|
||||
if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
|
||||
goto build_trailing_null;
|
||||
}
|
||||
|
||||
next_node = node;
|
||||
while (next_node && next_node != acpi_gbl_root_node) {
|
||||
if (next_node != node) {
|
||||
|
||||
@@ -173,6 +173,12 @@ void acpi_ns_detach_object(struct acpi_namespace_node *node)
|
||||
|
||||
obj_desc = node->object;
|
||||
|
||||
/* Alias nodes point directly to other namespace nodes; skip teardown */
|
||||
if (node->flags & ANOBJ_IS_ALIAS) {
|
||||
node->object = NULL;
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
if (!obj_desc || (obj_desc->common.type == ACPI_TYPE_LOCAL_DATA)) {
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsparse - namespace interface to AML parser
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nspredef - Validation of ACPI predefined methods and objects
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsprepkg - Validation of package objects for predefined names
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -631,6 +631,13 @@ acpi_ns_custom_package(struct acpi_evaluate_info *info,
|
||||
|
||||
/* Get version number, must be Integer */
|
||||
|
||||
if (!(*elements)) {
|
||||
ACPI_WARN_PREDEFINED((AE_INFO, info->full_pathname,
|
||||
info->node_flags,
|
||||
"Return Package has a NULL version element"));
|
||||
return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
|
||||
}
|
||||
|
||||
if ((*elements)->common.type != ACPI_TYPE_INTEGER) {
|
||||
ACPI_WARN_PREDEFINED((AE_INFO, info->full_pathname,
|
||||
info->node_flags,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: nsrepair - Repair for objects returned by predefined methods
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: nsrepair2 - Repair for objects returned by specific
|
||||
* predefined methods
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: nsutils - Utilities for accessing ACPI namespace, accessing
|
||||
* parents and siblings and Scope manipulation
|
||||
*
|
||||
* Copyright (C) 2000 - 2025, Intel Corp.
|
||||
* Copyright (C) 2000 - 2026, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user