|
|
|
Re: PROBLEM: NULL pointer dereference in acpi_ns_check_object_type() | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
On 07/02/2012 09:59 PM, Moore, Robert wrote:
I was able to reproduce the problem here with your ACPI tables. Will look at your patch, and get back to you.
Thanks.
You should probably open a bugzilla on this.
Done: bug 44171 https://bugzilla.kernel.org/show_bug.cgi?id=44171
Thanks, Bob-----Original Message----- From: linux-acpi-owner@xxxxxxxxxxxxxxx [mailto:linux-acpi- owner@xxxxxxxxxxxxxxx] On Behalf Of Vlastimil Babka Sent: Monday, July 02, 2012 1:45 AM To: linux-acpi@xxxxxxxxxxxxxxx Subject: PROBLEM: NULL pointer dereference in acpi_ns_check_object_type() Hello, I've been experiencing kernel panic with NULL pointer dereference in acpi_ns_check_object_type since kernel 3.4 on a MacPro machine. By recompiling as much of ACPI as possible as modules, I was able to get the system running and postpone the error until doing 'modprobe acpi-cpufreq', which now results in oops, not panic. The log is attached as error.log. By bisecting linus tree between 3.3 and 3.4, I found the guilty commit 6a99b1c94d053b3420eaa4a4bc8b2883dd90a2f9 "ACPICA: Object repair code: Support to add Package wrappers" [1] However this patch does not directly touch the functions in the stack trace. Next I created a kdump of the oops, and looked around with gdb. - In acpi_ns_check_package(), the null pointer is in the parameter return_object_ptr, which is dereferenced when initializing the variable return_object. - The calling function acpi_ns_check_package_list() is in the 'case ACPI_PTYPE2_COUNT:' part, the passed null pointer is in the sub_elements variable. - Before the switch, sub_elements is initialized like this: sub_elements = sub_package->package.elements interestingly, in the crashdump, sub_elements is null, but sub_package->package.elements is non-null I've added some printk's and verified that the call of status = acpi_ns_check_object_type(data, &sub_package, ACPI_RTYPE_PACKAGE, i); makes sub_package->package.elements become non-null, but sub_elements was already initialized before this call and remains null. The above led me to create the attached patch which simply moves the initialization of sub_elements after the sub_package check. I think it's this check that results in the Integer to Package conversion/wrapping. After this patch, the null pointer dereference is gone, but the debug output of ACPI (acpi.debug_layer=0xffffffff acpi.debug_level=0x00000008) shows that something is probably still wrong: [ 1.353677] nsrepair-0681 [4294967287] ns_wrap_with_package : \_PR_.CPU0._PSD: Wrapped Integer with expected Package object [ 1.353869] nsrepair-0681 [4294967287] ns_wrap_with_package : \_PR_.CPU0._PSD: Wrapped Integer with expected Package object [ 1.354059] ACPI Warning: For \_PR_.CPU0._PSD: Return Sub-Package[0] is too small - found 1 elements, expected 5 (20120320/nspredef-905) [ 1.354253] ACPI: Invalid package argument [ 1.354322] ACPI: Invalid _PSD data ... (the same for other CPUx) In comparison, 3.3 kernel with same acpi debug options shows only stuff like: [ 1.494238] nsrepair-0728 [4294967287] ns_repair_package_list: \_PR_.CPU0._PSD: Repaired incorrectly formed Package [ 1.494449] nsrepair-0728 [4294967287] ns_repair_package_list: \_PR_.CPU2._PSD: Repaired incorrectly formed Package [ 1.494657] nsrepair-0728 [4294967287] ns_repair_package_list: \_PR_.CPU4._PSD: Repaired incorrectly formed Package ... (the same for other CPUx) Since I don't know much about this subsystem, I figured that I should just report my findings at this point. The patched system is usable, but I guess it's not a complete fix. I also attach the output of acpidump. I hope I didn't forget anything important, please ask for more information if needed. Thanks, Vlastimil Babka [1] git.kernel.org/?p=linux/kernel/git/torvalds/linux- 2.6.git;a=commit;h=6a99b1c94d053b3420eaa4a4bc8b2883dd90a2f9N�����r��y���b�X��ǧv�^�){.n�+����{�i�b�{ay�ʇڙ�,j��f���h���z��w������j:+v���w�j�m��������zZ+��ݢj"��!tml=
-- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
[Site Home] [Linux IBM ACPI] [Linux Power Management] [Linux Kernel] [Linux Laptop] [Kernel Newbies] [Share Photos] [Security] [Netfilter] [Bugtraq] [Rubini] [Photo] [Yosemite Photos] [Yosemite News] [MIPS Linux] [ARM Linux] [Linux Security] [Linux RAID] [Samba] [Video 4 Linux] [Device Mapper] [Linux Resources]
![]() |