Most recent kernel where this bug did not occur: Distribution: Hardware Environment: Software Environment: Problem Description: The Linux kernel ACPI interpreter fails the following AML test when it is compiled into a simulator. So if an OEM BIOS includes this code, Linux would fail. Steps to reproduce: Run interpreter with the .asl demo code attached below.
Created attachment 6217 [details] ASL code to reproduce bug. The name of the Buffer (String) declared in the current Method is passed to the DerefOf operator. It is expected that DerefOf evaluate it to the contents of that Buffer but exception occurs instead. INTERNAL BUG NUMBER 12
Created attachment 7223 [details] Proposed patch TESTED: The update was tested by the ASLTS test suite runs (all the test cases) on the following systems: - CYGWIN_NT-5.1 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin - Linux 2.6.5-7.191-smp #1 SMP Tue Jun 28 14:58:56 UTC 2005 i686 i686 i386 GNU/Linux for the following modes supported by the ASLTS test suite: - 32-bit norm mode - 64-bit norm mode - 64-bit slack mode # 32-bit slack mode (currently impossible to run tests in this mode due to Bug198) The tests were run (on the systems described above) before update, then the tests were run on those systems after update. Then results of two runs were compared. All is Ok (the relevant error fixed, no new errors). SUPPORTED FEATURES (of DerefOf AML operator): 1. If parameter passed to DerefOf is String no matter the way it was delivered to (see examples below) and that String is a valid name (absolute or relative to the current scope) of some Object in the NameSpace the value of that object of NameSpace is returned by DerefOf. Examples: Store(DerefOf("b000"), Local7) Store(DerefOf(Arg0), Local7) Store(DerefOf(Local0), Local7) Store(DerefOf(s000), Local7) Store(DerefOf(m000()), Local7) Store(DerefOf(<other expressions>), Local7) where: "b000" - literal String s000 - Name(s000, "zzzz") Arg0 - contains string Local0 - contains string m000 - Method returning String <other expressions> - any expression resulting in String 2. If parameter passed to DerefOf is an IndexReference to some field (obtained by Index() AML operator) or an ObjectReference to some object (obtained by RefOf AML operator) then DerefOf processes those references. 3. In all other cases - DerefOf(Integer/String/Buffer/Package/Device/Mutex/Event/... etc.) exceptions occur.
Created attachment 7259 [details] Proposed patch fixes simultaneously 5360 and 5392 This patch fixes both 5360 and 5392. They refer near functionality in exoparg1.c file. Prefer one patch instead several ones were possible.
Released in ACPICA version 20060210
ACPICA 20060608 shipped in Linux-2.6.17-git9, closed.