From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Dou Liyang <douly.fnst@cn.fujitsu.com>,
cl@linux.com, Tejun Heo <tj@kernel.org>,
mika.j.penttila@gmail.com, Ingo Molnar <mingo@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
"H. Peter Anvin" <hpa@zytor.com>,
yasu.isimatu@gmail.com, isimatu.yasuaki@jp.fujitsu.com,
kamezawa.hiroyu@jp.fujitsu.com, izumi.taku@jp.fujitsu.com,
gongzhaogang@inspur.com, Len Brown <len.brown@intel.com>,
Len Brown <lenb@kernel.org>,
chen.tang@easystack.cn, "Rafael J. Wysocki" <rafael@kernel.org>,
the arch/x86 maintainers <x86@kernel.org>,
ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linux Memory Management List <linux-mm@kvack.org>,
Gu Zheng <guz.fnst@cn.fujitsu.com>,
Tang
Subject: Re: acpi: Fix broken error check in map_processor()
Date: Sat, 24 Sep 2016 02:06:36 +0200 [thread overview]
Message-ID: <CAJZ5v0iCo=23ZC5G9gBY01VxY4PpJEbQsjdfZk1fC7bVR++M8w@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1609231705570.5640@nanos>
On Fri, Sep 23, 2016 at 5:08 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> map_processor() checks the cpuid value returned by acpi_map_cpuid() for -1
> but acpi_map_cpuid() returns -EINVAL in case of error.
>
> As a consequence the error is ignored and the following access into percpu
> data with that negative cpuid results in a boot crash.
>
> This happens always when NR_CPUS/nr_cpu_ids is smaller than the number of
> processors listed in the ACPI tables.
>
> Use a proper error check for id < 0 so the function returns instead of
> trying to map CPU#(-EINVAL).
>
> Reported-by: Ingo Molnar <mingo@kernel.org>
> Fixes: dc6db24d2476 ("x86/acpi: Set persistent cpuid <-> nodeid mapping when booting")
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
It looks like the commit in the Fixes tag is in the tip tree now, so
the fix should better go in via tip as well IMO.
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> drivers/acpi/processor_core.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -284,7 +284,7 @@ EXPORT_SYMBOL_GPL(acpi_get_cpuid);
> static bool __init
> map_processor(acpi_handle handle, phys_cpuid_t *phys_id, int *cpuid)
> {
> - int type;
> + int type, id;
> u32 acpi_id;
> acpi_status status;
> acpi_object_type acpi_type;
> @@ -320,10 +320,11 @@ map_processor(acpi_handle handle, phys_c
> type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
>
> *phys_id = __acpi_get_phys_id(handle, type, acpi_id, false);
> - *cpuid = acpi_map_cpuid(*phys_id, acpi_id);
> - if (*cpuid == -1)
> - return false;
> + id = acpi_map_cpuid(*phys_id, acpi_id);
>
> + if (id < 0)
> + return false;
> + *cpuid = id;
> return true;
> }
>
WARNING: multiple messages have this Message-ID (diff)
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Dou Liyang <douly.fnst@cn.fujitsu.com>,
cl@linux.com, Tejun Heo <tj@kernel.org>,
mika.j.penttila@gmail.com, Ingo Molnar <mingo@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
"H. Peter Anvin" <hpa@zytor.com>,
yasu.isimatu@gmail.com, isimatu.yasuaki@jp.fujitsu.com,
kamezawa.hiroyu@jp.fujitsu.com, izumi.taku@jp.fujitsu.com,
gongzhaogang@inspur.com, Len Brown <len.brown@intel.com>,
Len Brown <lenb@kernel.org>,
chen.tang@easystack.cn, "Rafael J. Wysocki" <rafael@kernel.org>,
"the arch/x86 maintainers" <x86@kernel.org>,
ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linux Memory Management List <linux-mm@kvack.org>,
Gu Zheng <guz.fnst@cn.fujitsu.com>,
Tang Chen <tangchen@cn.fujitsu.com>,
Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
Subject: Re: acpi: Fix broken error check in map_processor()
Date: Sat, 24 Sep 2016 02:06:36 +0200 [thread overview]
Message-ID: <CAJZ5v0iCo=23ZC5G9gBY01VxY4PpJEbQsjdfZk1fC7bVR++M8w@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1609231705570.5640@nanos>
On Fri, Sep 23, 2016 at 5:08 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> map_processor() checks the cpuid value returned by acpi_map_cpuid() for -1
> but acpi_map_cpuid() returns -EINVAL in case of error.
>
> As a consequence the error is ignored and the following access into percpu
> data with that negative cpuid results in a boot crash.
>
> This happens always when NR_CPUS/nr_cpu_ids is smaller than the number of
> processors listed in the ACPI tables.
>
> Use a proper error check for id < 0 so the function returns instead of
> trying to map CPU#(-EINVAL).
>
> Reported-by: Ingo Molnar <mingo@kernel.org>
> Fixes: dc6db24d2476 ("x86/acpi: Set persistent cpuid <-> nodeid mapping when booting")
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
It looks like the commit in the Fixes tag is in the tip tree now, so
the fix should better go in via tip as well IMO.
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> drivers/acpi/processor_core.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -284,7 +284,7 @@ EXPORT_SYMBOL_GPL(acpi_get_cpuid);
> static bool __init
> map_processor(acpi_handle handle, phys_cpuid_t *phys_id, int *cpuid)
> {
> - int type;
> + int type, id;
> u32 acpi_id;
> acpi_status status;
> acpi_object_type acpi_type;
> @@ -320,10 +320,11 @@ map_processor(acpi_handle handle, phys_c
> type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
>
> *phys_id = __acpi_get_phys_id(handle, type, acpi_id, false);
> - *cpuid = acpi_map_cpuid(*phys_id, acpi_id);
> - if (*cpuid == -1)
> - return false;
> + id = acpi_map_cpuid(*phys_id, acpi_id);
>
> + if (id < 0)
> + return false;
> + *cpuid = id;
> return true;
> }
>
WARNING: multiple messages have this Message-ID (diff)
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Dou Liyang <douly.fnst@cn.fujitsu.com>,
cl@linux.com, Tejun Heo <tj@kernel.org>,
mika.j.penttila@gmail.com, Ingo Molnar <mingo@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
"H. Peter Anvin" <hpa@zytor.com>,
yasu.isimatu@gmail.com, isimatu.yasuaki@jp.fujitsu.com,
kamezawa.hiroyu@jp.fujitsu.com, izumi.taku@jp.fujitsu.com,
gongzhaogang@inspur.com, Len Brown <len.brown@intel.com>,
Len Brown <lenb@kernel.org>,
chen.tang@easystack.cn, "Rafael J. Wysocki" <rafael@kernel.org>,
the arch/x86 maintainers <x86@kernel.org>,
ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linux Memory Management List <linux-mm@kvack.org>,
Gu Zheng <guz.fnst@cn.fujitsu.com>,
Tang Chen <tangchen@cn.fujitsu.com>,
Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
Subject: Re: acpi: Fix broken error check in map_processor()
Date: Sat, 24 Sep 2016 02:06:36 +0200 [thread overview]
Message-ID: <CAJZ5v0iCo=23ZC5G9gBY01VxY4PpJEbQsjdfZk1fC7bVR++M8w@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1609231705570.5640@nanos>
On Fri, Sep 23, 2016 at 5:08 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> map_processor() checks the cpuid value returned by acpi_map_cpuid() for -1
> but acpi_map_cpuid() returns -EINVAL in case of error.
>
> As a consequence the error is ignored and the following access into percpu
> data with that negative cpuid results in a boot crash.
>
> This happens always when NR_CPUS/nr_cpu_ids is smaller than the number of
> processors listed in the ACPI tables.
>
> Use a proper error check for id < 0 so the function returns instead of
> trying to map CPU#(-EINVAL).
>
> Reported-by: Ingo Molnar <mingo@kernel.org>
> Fixes: dc6db24d2476 ("x86/acpi: Set persistent cpuid <-> nodeid mapping when booting")
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
It looks like the commit in the Fixes tag is in the tip tree now, so
the fix should better go in via tip as well IMO.
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> drivers/acpi/processor_core.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> --- a/drivers/acpi/processor_core.c
> +++ b/drivers/acpi/processor_core.c
> @@ -284,7 +284,7 @@ EXPORT_SYMBOL_GPL(acpi_get_cpuid);
> static bool __init
> map_processor(acpi_handle handle, phys_cpuid_t *phys_id, int *cpuid)
> {
> - int type;
> + int type, id;
> u32 acpi_id;
> acpi_status status;
> acpi_object_type acpi_type;
> @@ -320,10 +320,11 @@ map_processor(acpi_handle handle, phys_c
> type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0;
>
> *phys_id = __acpi_get_phys_id(handle, type, acpi_id, false);
> - *cpuid = acpi_map_cpuid(*phys_id, acpi_id);
> - if (*cpuid == -1)
> - return false;
> + id = acpi_map_cpuid(*phys_id, acpi_id);
>
> + if (id < 0)
> + return false;
> + *cpuid = id;
> return true;
> }
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2016-09-24 0:06 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-23 15:08 acpi: Fix broken error check in map_processor() Thomas Gleixner
2016-09-23 15:08 ` Thomas Gleixner
2016-09-23 18:54 ` [tip:x86/apic] " tip-bot for Thomas Gleixner
2016-09-24 0:06 ` Rafael J. Wysocki [this message]
2016-09-24 0:06 ` Rafael J. Wysocki
2016-09-24 0:06 ` Rafael J. Wysocki
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='CAJZ5v0iCo=23ZC5G9gBY01VxY4PpJEbQsjdfZk1fC7bVR++M8w@mail.gmail.com' \
--to=rafael@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=chen.tang@easystack.cn \
--cc=cl@linux.com \
--cc=douly.fnst@cn.fujitsu.com \
--cc=gongzhaogang@inspur.com \
--cc=guz.fnst@cn.fujitsu.com \
--cc=hpa@zytor.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=len.brown@intel.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mika.j.penttila@gmail.com \
--cc=mingo@redhat.com \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=x86@kernel.org \
--cc=yasu.isimatu@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.