<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/acpi/acpica, branch linux-4.4.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.4.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.4.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2022-01-27T07:46:18Z</updated>
<entry>
<title>ACPICA: Executer: Fix the REFCLASS_REFOF case in acpi_ex_opcode_1A_0T_1R()</title>
<updated>2022-01-27T07:46:18Z</updated>
<author>
<name>Rafael J. Wysocki</name>
</author>
<published>2021-12-22T16:31:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2a06b800c5f936e4f670729ef32358ff17d45638'/>
<id>urn:sha1:2a06b800c5f936e4f670729ef32358ff17d45638</id>
<content type='text'>
[ Upstream commit 24ea5f90ec9548044a6209685c5010edd66ffe8f ]

ACPICA commit d984f12041392fa4156b52e2f7e5c5e7bc38ad9e

If Operand[0] is a reference of the ACPI_REFCLASS_REFOF class,
acpi_ex_opcode_1A_0T_1R () calls acpi_ns_get_attached_object () to
obtain return_desc which may require additional resolution with
the help of acpi_ex_read_data_from_field (). If the latter fails,
the reference counter of the original return_desc is decremented
which is incorrect, because acpi_ns_get_attached_object () does not
increment the reference counter of the object returned by it.

This issue may lead to premature deletion of the attached object
while it is still attached and a use-after-free and crash in the
host OS.  For example, this may happen when on evaluation of ref_of()
a local region field where there is no registered handler for the
given Operation Region.

Fix it by making acpi_ex_opcode_1A_0T_1R () return Status right away
after a acpi_ex_read_data_from_field () failure.

Link: https://github.com/acpica/acpica/commit/d984f120
Link: https://github.com/acpica/acpica/pull/685
Reported-by: Lenny Szubowicz &lt;lszubowi@redhat.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Bob Moore &lt;robert.moore@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Utilities: Avoid deleting the same object twice in a row</title>
<updated>2022-01-27T07:46:18Z</updated>
<author>
<name>Rafael J. Wysocki</name>
</author>
<published>2021-12-22T16:29:45Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d5ec369154444357d9a8903b5b6ede95f8f7f4b6'/>
<id>urn:sha1:d5ec369154444357d9a8903b5b6ede95f8f7f4b6</id>
<content type='text'>
[ Upstream commit 1cdfe9e346b4c5509ffe19ccde880fd259d9f7a3 ]

ACPICA commit c11af67d8f7e3d381068ce7771322f2b5324d687

If original_count is 0 in acpi_ut_update_ref_count (),
acpi_ut_delete_internal_obj () is invoked for the target object, which is
incorrect, because that object has been deleted once already and the
memory allocated to store it may have been reclaimed and allocated
for a different purpose by the host OS.  Moreover, a confusing debug
message following the "Reference Count is already zero, cannot
decrement" warning is printed in that case.

To fix this issue, make acpi_ut_update_ref_count () return after finding
that original_count is 0 and printing the above warning.

Link: https://github.com/acpica/acpica/commit/c11af67d
Link: https://github.com/acpica/acpica/pull/652
Reported-by: Mark Asselstine &lt;mark.asselstine@windriver.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Bob Moore &lt;robert.moore@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Avoid evaluating methods too early during system resume</title>
<updated>2021-11-26T10:58:37Z</updated>
<author>
<name>Rafael J. Wysocki</name>
</author>
<published>2021-09-29T16:31:25Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=12cf2b9b86661691226a7c229aa1e96a31849f83'/>
<id>urn:sha1:12cf2b9b86661691226a7c229aa1e96a31849f83</id>
<content type='text'>
[ Upstream commit d3c4b6f64ad356c0d9ddbcf73fa471e6a841cc5c ]

ACPICA commit 0762982923f95eb652cf7ded27356b247c9774de

During wakeup from system-wide sleep states, acpi_get_sleep_type_data()
is called and it tries to get memory from the slab allocator in order
to evaluate a control method, but if KFENCE is enabled in the kernel,
the memory allocation attempt causes an IRQ work to be queued and a
self-IPI to be sent to the CPU running the code which requires the
memory controller to be ready, so if that happens too early in the
wakeup path, it doesn't work.

Prevent that from taking place by calling acpi_get_sleep_type_data()
for S0 upfront, when preparing to enter a given sleep state, and
saving the data obtained by it for later use during system wakeup.

BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=214271
Reported-by: Reik Keutterling &lt;spielkind@gmail.com&gt;
Tested-by: Reik Keutterling &lt;spielkind@gmail.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Do not increment operation_region reference counts for field units</title>
<updated>2020-08-21T08:53:00Z</updated>
<author>
<name>Erik Kaneda</name>
</author>
<published>2020-07-20T17:31:20Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=22de203c0fc82c7acf12d69d1107c74e4a3f4bdf'/>
<id>urn:sha1:22de203c0fc82c7acf12d69d1107c74e4a3f4bdf</id>
<content type='text'>
[ Upstream commit 6a54ebae6d047c988a31f5ac5a64ab5cf83797a2 ]

ACPICA commit e17b28cfcc31918d0db9547b6b274b09c413eb70

Object reference counts are used as a part of ACPICA's garbage
collection mechanism. This mechanism keeps track of references to
heap-allocated structures such as the ACPI operand objects.

Recent server firmware has revealed that this reference count can
overflow on large servers that declare many field units under the
same operation_region. This occurs because each field unit declaration
will add a reference count to the source operation_region.

This change solves the reference count overflow for operation_regions
objects by preventing fieldunits from incrementing their
operation_region's reference count. Each operation_region's reference
count will not be changed by named objects declared under the Field
operator. During namespace deletion, the operation_region namespace
node will be deleted and each fieldunit will be deleted without
touching the deleted operation_region object.

Link: https://github.com/acpica/acpica/commit/e17b28cf
Signed-off-by: Erik Kaneda &lt;erik.kaneda@intel.com&gt;
Signed-off-by: Bob Moore &lt;robert.moore@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Disassembler: create buffer fields in ACPI_PARSE_LOAD_PASS1</title>
<updated>2020-02-28T14:38:59Z</updated>
<author>
<name>Erik Kaneda</name>
</author>
<published>2019-12-17T19:35:20Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1dea20a1e410013807379c0a48a45036a8d36fa6'/>
<id>urn:sha1:1dea20a1e410013807379c0a48a45036a8d36fa6</id>
<content type='text'>
[ Upstream commit 5ddbd77181dfca61b16d2e2222382ea65637f1b9 ]

ACPICA commit 29cc8dbc5463a93625bed87d7550a8bed8913bf4

create_buffer_field is a deferred op that is typically processed in
load pass 2. However, disassembly of control method contents walk the
parse tree with ACPI_PARSE_LOAD_PASS1 and AML_CREATE operators are
processed in a later walk. This is a problem when there is a control
method that has the same name as the AML_CREATE object. In this case,
any use of the name segment will be detected as a method call rather
than a reference to a buffer field. If this is detected as a method
call, it can result in a mal-formed parse tree if the control methods
have parameters.

This change in processing AML_CREATE ops earlier solves this issue by
inserting the named object in the ACPI namespace so that references
to this name would be detected as a name string rather than a method
call.

Link: https://github.com/acpica/acpica/commit/29cc8dbc
Reported-by: Elia Geretto &lt;elia.f.geretto@gmail.com&gt;
Tested-by: Elia Geretto &lt;elia.f.geretto@gmail.com&gt;
Signed-off-by: Bob Moore &lt;robert.moore@intel.com&gt;
Signed-off-by: Erik Kaneda &lt;erik.kaneda@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: acpi: acpica: fix acpi operand cache leak in nseval.c</title>
<updated>2018-05-30T05:49:11Z</updated>
<author>
<name>Seunghun Han</name>
</author>
<published>2018-03-14T23:12:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dfcb739c20d88461fbd0dc007670f63ad82db881'/>
<id>urn:sha1:dfcb739c20d88461fbd0dc007670f63ad82db881</id>
<content type='text'>
[ Upstream commit 97f3c0a4b0579b646b6b10ae5a3d59f0441cc12c ]

I found an ACPI cache leak in ACPI early termination and boot continuing case.

When early termination occurs due to malicious ACPI table, Linux kernel
terminates ACPI function and continues to boot process. While kernel terminates
ACPI function, kmem_cache_destroy() reports Acpi-Operand cache leak.

Boot log of ACPI operand cache leak is as follows:
&gt;[    0.464168] ACPI: Added _OSI(Module Device)
&gt;[    0.467022] ACPI: Added _OSI(Processor Device)
&gt;[    0.469376] ACPI: Added _OSI(3.0 _SCP Extensions)
&gt;[    0.471647] ACPI: Added _OSI(Processor Aggregator Device)
&gt;[    0.477997] ACPI Error: Null stack entry at ffff880215c0aad8 (20170303/exresop-174)
&gt;[    0.482706] ACPI Exception: AE_AML_INTERNAL, While resolving operands for [opcode_name unavailable] (20170303/dswexec-461)
&gt;[    0.487503] ACPI Error: Method parse/execution failed [\DBG] (Node ffff88021710ab40), AE_AML_INTERNAL (20170303/psparse-543)
&gt;[    0.492136] ACPI Error: Method parse/execution failed [\_SB._INI] (Node ffff88021710a618), AE_AML_INTERNAL (20170303/psparse-543)
&gt;[    0.497683] ACPI: Interpreter enabled
&gt;[    0.499385] ACPI: (supports S0)
&gt;[    0.501151] ACPI: Using IOAPIC for interrupt routing
&gt;[    0.503342] ACPI Error: Null stack entry at ffff880215c0aad8 (20170303/exresop-174)
&gt;[    0.506522] ACPI Exception: AE_AML_INTERNAL, While resolving operands for [opcode_name unavailable] (20170303/dswexec-461)
&gt;[    0.510463] ACPI Error: Method parse/execution failed [\DBG] (Node ffff88021710ab40), AE_AML_INTERNAL (20170303/psparse-543)
&gt;[    0.514477] ACPI Error: Method parse/execution failed [\_PIC] (Node ffff88021710ab18), AE_AML_INTERNAL (20170303/psparse-543)
&gt;[    0.518867] ACPI Exception: AE_AML_INTERNAL, Evaluating _PIC (20170303/bus-991)
&gt;[    0.522384] kmem_cache_destroy Acpi-Operand: Slab cache still has objects
&gt;[    0.524597] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.12.0-rc5 #26
&gt;[    0.526795] Hardware name: innotek gmb_h virtual_box/virtual_box, BIOS virtual_box 12/01/2006
&gt;[    0.529668] Call Trace:
&gt;[    0.530811]  ? dump_stack+0x5c/0x81
&gt;[    0.532240]  ? kmem_cache_destroy+0x1aa/0x1c0
&gt;[    0.533905]  ? acpi_os_delete_cache+0xa/0x10
&gt;[    0.535497]  ? acpi_ut_delete_caches+0x3f/0x7b
&gt;[    0.537237]  ? acpi_terminate+0xa/0x14
&gt;[    0.538701]  ? acpi_init+0x2af/0x34f
&gt;[    0.540008]  ? acpi_sleep_proc_init+0x27/0x27
&gt;[    0.541593]  ? do_one_initcall+0x4e/0x1a0
&gt;[    0.543008]  ? kernel_init_freeable+0x19e/0x21f
&gt;[    0.546202]  ? rest_init+0x80/0x80
&gt;[    0.547513]  ? kernel_init+0xa/0x100
&gt;[    0.548817]  ? ret_from_fork+0x25/0x30
&gt;[    0.550587] vgaarb: loaded
&gt;[    0.551716] EDAC MC: Ver: 3.0.0
&gt;[    0.553744] PCI: Probing PCI hardware
&gt;[    0.555038] PCI host bridge to bus 0000:00
&gt; ... Continue to boot and log is omitted ...

I analyzed this memory leak in detail and found acpi_ns_evaluate() function
only removes Info-&gt;return_object in AE_CTRL_RETURN_VALUE case. But, when errors
occur, the status value is not AE_CTRL_RETURN_VALUE, and Info-&gt;return_object is
also not null. Therefore, this causes acpi operand memory leak.

This cache leak causes a security threat because an old kernel (&lt;= 4.9) shows
memory locations of kernel functions in stack dump. Some malicious users
could use this information to neutralize kernel ASLR.

I made a patch to fix ACPI operand cache leak.

Signed-off-by: Seunghun Han &lt;kkamagui@gmail.com&gt;
Signed-off-by: Erik Schmauss &lt;erik.schmauss@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;alexander.levin@microsoft.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Events: add a return on failure from acpi_hw_register_read</title>
<updated>2018-05-30T05:49:11Z</updated>
<author>
<name>Erik Schmauss</name>
</author>
<published>2018-03-14T23:13:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=0170c50523cd75f67f3616f068a5dcd7e8c93f68'/>
<id>urn:sha1:0170c50523cd75f67f3616f068a5dcd7e8c93f68</id>
<content type='text'>
[ Upstream commit b4c0de312613ca676db5bd7e696a44b56795612a ]

This ensures that acpi_ev_fixed_event_detect() does not use fixed_status
and and fixed_enable as uninitialized variables.

Signed-off-by: Erik Schmauss &lt;erik.schmauss@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;alexander.levin@microsoft.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Disassembler: Abort on an invalid/unknown AML opcode</title>
<updated>2018-04-13T17:50:21Z</updated>
<author>
<name>Bob Moore</name>
</author>
<published>2017-06-05T08:40:34Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3ab8ad5317699389e19d00618996eaae2da6f2d8'/>
<id>urn:sha1:3ab8ad5317699389e19d00618996eaae2da6f2d8</id>
<content type='text'>
[ Upstream commit 6f0527b77d9e0129dd8e50945b0d610ed943d6b2 ]

ACPICA commit ed0389cb11a61e63c568ac1f67948fc6a7bd1aeb

An invalid opcode indicates something seriously wrong with the
input AML file. The AML parser is immediately confused and lost,
causing the resulting parse tree to be ill-formed. The actual
disassembly can then cause numerous unrelated errors and faults.

This change aborts the disassembly upon discovery of such an
opcode during the AML parse phase.

Link: https://github.com/acpica/acpica/commit/ed0389cb
Signed-off-by: Bob Moore &lt;robert.moore@intel.com&gt;
Signed-off-by: Lv Zheng &lt;lv.zheng@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;alexander.levin@microsoft.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Events: Add runtime stub support for event APIs</title>
<updated>2018-04-13T17:50:21Z</updated>
<author>
<name>Lv Zheng</name>
</author>
<published>2017-06-05T08:40:02Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=07bd736446c1e187d68cdfd3ad4b1def4f2241ce'/>
<id>urn:sha1:07bd736446c1e187d68cdfd3ad4b1def4f2241ce</id>
<content type='text'>
[ Upstream commit 861ba6351c520328e94a78c923b415faa9116287 ]

ACPICA commit 99bc3beca92c6574ea1d69de42e54f872e6373ce

It is reported that on Linux, RTC driver complains wrong errors on
hardware reduced platform:
  [    4.085420] ACPI Warning: Could not enable fixed event - real_time_clock (4) (20160422/evxface-654)

This patch fixes this by correctly adding runtime reduced hardware check.
Reported by Chandan Tagore, fixed by Lv Zheng.

Link: https://github.com/acpica/acpica/commit/99bc3bec
Tested-by: Chandan Tagore &lt;tagore.chandan@gmail.com&gt;
Signed-off-by: Lv Zheng &lt;lv.zheng@intel.com&gt;
Signed-off-by: Bob Moore &lt;robert.moore@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Signed-off-by: Sasha Levin &lt;alexander.levin@microsoft.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>ACPICA: Namespace: fix operand cache leak</title>
<updated>2018-01-31T11:06:10Z</updated>
<author>
<name>Seunghun Han</name>
</author>
<published>2017-04-26T08:18:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=4c19b00e5588828f0d3198b926efade766dcf2c8'/>
<id>urn:sha1:4c19b00e5588828f0d3198b926efade766dcf2c8</id>
<content type='text'>
commit 3b2d69114fefa474fca542e51119036dceb4aa6f upstream.

ACPICA commit a23325b2e583556eae88ed3f764e457786bf4df6

I found some ACPI operand cache leaks in ACPI early abort cases.

Boot log of ACPI operand cache leak is as follows:
&gt;[    0.174332] ACPI: Added _OSI(Module Device)
&gt;[    0.175504] ACPI: Added _OSI(Processor Device)
&gt;[    0.176010] ACPI: Added _OSI(3.0 _SCP Extensions)
&gt;[    0.177032] ACPI: Added _OSI(Processor Aggregator Device)
&gt;[    0.178284] ACPI: SCI (IRQ16705) allocation failed
&gt;[    0.179352] ACPI Exception: AE_NOT_ACQUIRED, Unable to install
System Control Interrupt handler (20160930/evevent-131)
&gt;[    0.180008] ACPI: Unable to start the ACPI Interpreter
&gt;[    0.181125] ACPI Error: Could not remove SCI handler
(20160930/evmisc-281)
&gt;[    0.184068] kmem_cache_destroy Acpi-Operand: Slab cache still has
objects
&gt;[    0.185358] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.10.0-rc3 #2
&gt;[    0.186820] Hardware name: innotek gmb_h virtual_box/virtual_box, BIOS
virtual_box 12/01/2006
&gt;[    0.188000] Call Trace:
&gt;[    0.188000]  ? dump_stack+0x5c/0x7d
&gt;[    0.188000]  ? kmem_cache_destroy+0x224/0x230
&gt;[    0.188000]  ? acpi_sleep_proc_init+0x22/0x22
&gt;[    0.188000]  ? acpi_os_delete_cache+0xa/0xd
&gt;[    0.188000]  ? acpi_ut_delete_caches+0x3f/0x7b
&gt;[    0.188000]  ? acpi_terminate+0x5/0xf
&gt;[    0.188000]  ? acpi_init+0x288/0x32e
&gt;[    0.188000]  ? __class_create+0x4c/0x80
&gt;[    0.188000]  ? video_setup+0x7a/0x7a
&gt;[    0.188000]  ? do_one_initcall+0x4e/0x1b0
&gt;[    0.188000]  ? kernel_init_freeable+0x194/0x21a
&gt;[    0.188000]  ? rest_init+0x80/0x80
&gt;[    0.188000]  ? kernel_init+0xa/0x100
&gt;[    0.188000]  ? ret_from_fork+0x25/0x30

When early abort is occurred due to invalid ACPI information, Linux kernel
terminates ACPI by calling acpi_terminate() function. The function calls
acpi_ns_terminate() function to delete namespace data and ACPI operand cache
(acpi_gbl_module_code_list).

But the deletion code in acpi_ns_terminate() function is wrapped in
ACPI_EXEC_APP definition, therefore the code is only executed when the
definition exists. If the define doesn't exist, ACPI operand cache
(acpi_gbl_module_code_list) is leaked, and stack dump is shown in kernel log.

This causes a security threat because the old kernel (&lt;= 4.9) shows memory
locations of kernel functions in stack dump, therefore kernel ASLR can be
neutralized.

To fix ACPI operand leak for enhancing security, I made a patch which
removes the ACPI_EXEC_APP define in acpi_ns_terminate() function for
executing the deletion code unconditionally.

Link: https://github.com/acpica/acpica/commit/a23325b2
Signed-off-by: Seunghun Han &lt;kkamagui@gmail.com&gt;
Signed-off-by: Lv Zheng &lt;lv.zheng@intel.com&gt;
Signed-off-by: Bob Moore &lt;robert.moore@intel.com&gt;
Signed-off-by: Rafael J. Wysocki &lt;rafael.j.wysocki@intel.com&gt;
Acked-by: Lee, Chun-Yi &lt;jlee@suse.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
</feed>
