From: "Michał Kępień" <kernel@kempniu.pl>
To: Jonathan Woithe <jwoithe@just42.net>
Cc: kernel test robot <xiaolong.ye@intel.com>,
Darren Hart <dvhart@infradead.org>,
Andy Shevchenko <andy@infradead.org>,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org, lkp@01.org
Subject: Re: [lkp-robot] [platform/x86] b925ff7dcd: BUG:unable_to_handle_kernel
Date: Mon, 13 Feb 2017 09:14:40 +0100 [thread overview]
Message-ID: <20170213081440.GA1093@ozzy.nask.waw.pl> (raw)
In-Reply-To: <20170213043427.GQ18615@marvin.atrad.com.au>
> Michael
>
> On Mon, Feb 13, 2017 at 10:40:15AM +0800, kernel test robot wrote:
> > FYI, we noticed the following commit:
> >
> > commit: b925ff7dcd1fc45b86baaebd3442f8b484123716 ("platform/x86: fujitsu-laptop: only register backlight device if FUJ02B1 is present")
> > url: https://github.com/0day-ci/linux/commits/Micha-K-pie/fujitsu-laptop-renames-and-cleanups/20170209-030748
> > base: git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git for-next
> >
> > in testcase: boot
> >
> > on test machine: qemu-system-i386 -enable-kvm -cpu Haswell,+smep,+smap -m 360M
> >
> > caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):
> > :
> > [ 4.656202] fujitsu_laptop: call_fext_func: FUNC interface is not present
> > [ 4.657478] BUG: unable to handle kernel NULL pointer dereference at 00000008
> > [ 4.658433] IP: fujitsu_init+0x137/0x1b7
> > [ 4.659208] *pdpt = 0000000000000000 *pde = f000ff53f000ff53
> > :
>
> I'm away from my Fujitsu hardware right now, and in any case this does not
> get triggered on it.
>
> I note that prior to the bug we get "FUNC interface is not present".
> Therefore something called call_fext_func() some time before the NULL
> pointer dereference. As far as I can tell the only such call which could be
> made prior to or within fujitsu_init() is from fujitsu_init(), but this is
> conditional on acpi_video_get_backlight_type() returning
> acpi_backlight_vendor (line 1269). Obviously if this conditional were
> passed but fujitsu_bl->bl_device were NULL then we would get the NULL
> dereference.
Yes, this is exactly what is happening.
>
> If ACPI_FUJITSU_LAPTOP_HID
I think you meant ACPI_FUJITSU_BL_HID.
> is not present then presumedly the
>
> acpi_bus_register_driver(&acpi_fujitsu_bl_driver)
>
> call in fujitsu_init() will fail and nothing further would happen.
> Therefore this HID must be in the system.
Not really. acpi_bus_register_driver() is just a wrapper around
driver_register(). In other words, whether or not a given HID is
present in the firmware does not have any influence on the return code
of that function.
In fact, the bug only happens when ACPI_FUJITSU_BL_HID is _not_ present.
Or, putting it differently, on all Skylake machines (when
acpi_backlight=vendor). Once again I am really glad the kernel test
robot is there to counter my carelessness...
>
> However, the acpi_fujitsu_bl_add() callback wouldn't necessarily get run by
> acpi_bus_register_driver(), would it? I'm not too familiar with the lower
> level ACPI functions but a quick trip through the source suggested that the
> add callback isn't called via acpi_bus_register_driver(). This would mean
> that that fujitsu_bl->bl_device would not yet be initialised when referenced
> within fujitsu_init() at line 1271 or 1273. If this were the case then I
> see two options:
>
> 1) Don't move the backlight registration out of fujitsu_init().
>
> 2) Move the remaining backlight code (lines 1268-1274) into
> acpi_fujitsu_bl_add().
>
> Item 1 effectively amounts to dropping this commit. I'm not sure option 2
> is workable because of the code's reliance on FUJ02E3; is that guaranteed to
> be useable by the time acpi_fujitsu_bl_add() is called?
To keep things simple, I think we should drop this particular patch for
now. Darren, Andy, could you skip it when applying this series?
Patches 9 and 10 do not rely on this one being applied. Thanks and
sorry for the trouble. v2 of my fujitsu_init() cleanup series will fix
this properly.
>
> The only problem with the above theory is that it doesn't explain why the
> NULL pointer dereference wasn't triggered on my Fujitsu hardware when this
> code was tested on it.
Because the bug is not triggered as long as FUJ02B1 is present.
> If the ACPI bus probed/added asynchronously I guess
> there could be a race whereby acpi_fujitsu_bl_add() may or may not have
> completed by the time fujitsu_init() referenced fujitsu_bl->bl_device. That
> doesn't seem right to me though.
When acpi_bus_register_driver() is called, the .add callback is
"synchronously" called for all ACPI devices handled by the registered
driver that are yet unbound to any driver. So if FUJ02B1 is present,
acpi_fujitsu_bl_add() is called and bl_device is allocated. However, if
that ACPI device is not present (like on Skylakes) and
acpi_backlight=vendor, we get a NULL dereference.
--
Best regards,
Michał Kępień
next prev parent reply other threads:[~2017-02-13 8:14 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-08 13:46 [PATCH 00/10] fujitsu-laptop: renames and cleanups Michał Kępień
2017-02-08 13:46 ` [PATCH 01/10] platform/x86: fujitsu-laptop: clearly denote backlight-related symbols Michał Kępień
2017-02-08 13:46 ` [PATCH 02/10] platform/x86: fujitsu-laptop: replace "hotkey" with "laptop" in symbol names Michał Kępień
2017-02-08 13:46 ` [PATCH 03/10] platform/x86: fujitsu-laptop: make platform-related variables match naming convention Michał Kępień
2017-02-08 13:46 ` [PATCH 04/10] platform/x86: fujitsu-laptop: rename FUNC_RFKILL to FUNC_FLAGS Michał Kępień
2017-02-08 13:46 ` [PATCH 05/10] platform/x86: fujitsu-laptop: replace numeric values with constants Michał Kępień
2017-02-08 13:46 ` [PATCH 06/10] platform/x86: fujitsu-laptop: remove redundant forward declarations Michał Kępień
2017-02-08 13:46 ` [PATCH 07/10] platform/x86: fujitsu-laptop: simplify acpi_bus_register_driver() error handling Michał Kępień
2017-02-08 13:46 ` [PATCH 08/10] platform/x86: fujitsu-laptop: only register backlight device if FUJ02B1 is present Michał Kępień
2017-02-13 2:40 ` [lkp-robot] [platform/x86] b925ff7dcd: BUG:unable_to_handle_kernel kernel test robot
2017-02-13 4:34 ` Jonathan Woithe
2017-02-13 8:14 ` Michał Kępień [this message]
2017-02-13 12:26 ` Jonathan Woithe
2017-02-08 13:46 ` [PATCH 09/10] platform/x86: fujitsu-laptop: autodetect LCD interface on all models Michał Kępień
2017-02-08 13:46 ` [PATCH 10/10] platform/x86: fujitsu-laptop: remove redundant MODULE_ALIAS entries Michał Kępień
2017-02-08 15:24 ` [PATCH 00/10] fujitsu-laptop: renames and cleanups Andy Shevchenko
2017-02-09 1:36 ` Darren Hart
2017-02-09 1:46 ` Andy Shevchenko
2017-02-09 6:57 ` Michał Kępień
2017-02-08 22:52 ` Jonathan Woithe
2017-02-09 7:29 ` Michał Kępień
2017-02-10 0:16 ` Jonathan Woithe
2017-02-10 0:42 ` Andy Shevchenko
2017-02-17 2:57 ` Darren Hart
2017-02-17 3:08 ` Jonathan Woithe
2017-02-17 3:53 ` Darren Hart
2017-02-17 4:17 ` Jonathan Woithe
2017-02-17 5:23 ` Darren Hart
2017-02-24 20:34 ` Andy Shevchenko
2017-02-26 11:30 ` Michał Kępień
2017-02-26 15:03 ` Andy Shevchenko
2017-02-17 7:14 ` Michał Kępień
2017-02-24 22:13 ` Darren Hart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170213081440.GA1093@ozzy.nask.waw.pl \
--to=kernel@kempniu.pl \
--cc=andy@infradead.org \
--cc=dvhart@infradead.org \
--cc=jwoithe@just42.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@01.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=xiaolong.ye@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox