From: Michal Hocko <mhocko@kernel.org>
To: zhe.he@windriver.com
Cc: akpm@linux-foundation.org, vbabka@suse.cz,
pasha.tatashin@oracle.com, mgorman@techsingularity.net,
aaron.lu@intel.com, osalvador@suse.de, iamjoonsoo.kim@lge.com,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/2] mm/page_alloc: Fix panic caused by passing debug_guardpage_minorder or kernelcore to command line
Date: Mon, 24 Sep 2018 16:24:08 +0200 [thread overview]
Message-ID: <20180924142408.GC18685@dhcp22.suse.cz> (raw)
In-Reply-To: <1537628013-243902-1-git-send-email-zhe.he@windriver.com>
On Sat 22-09-18 22:53:32, zhe.he@windriver.com wrote:
> From: He Zhe <zhe.he@windriver.com>
>
> debug_guardpage_minorder_setup and cmdline_parse_kernelcore do not check
> input argument before using it. The argument would be a NULL pointer if
> "debug_guardpage_minorder" or "kernelcore", without its value, is set in
> command line and thus causes the following panic.
>
> PANIC: early exception 0xe3 IP 10:ffffffffa08146f1 error 0 cr2 0x0
> [ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.0-rc4-yocto-standard+ #11
> [ 0.000000] RIP: 0010:parse_option_str+0x11/0x90
> ...
> [ 0.000000] Call Trace:
> [ 0.000000] cmdline_parse_kernelcore+0x19/0x41
> [ 0.000000] do_early_param+0x57/0x8e
> [ 0.000000] parse_args+0x208/0x320
> [ 0.000000] ? rdinit_setup+0x30/0x30
> [ 0.000000] parse_early_options+0x29/0x2d
> [ 0.000000] ? rdinit_setup+0x30/0x30
> [ 0.000000] parse_early_param+0x36/0x4d
> [ 0.000000] setup_arch+0x336/0x99e
> [ 0.000000] start_kernel+0x6f/0x4ee
> [ 0.000000] x86_64_start_reservations+0x24/0x26
> [ 0.000000] x86_64_start_kernel+0x6f/0x72
> [ 0.000000] secondary_startup_64+0xa4/0xb0
>
> This patch adds a check to prevent the panic
Is this something we deeply care about? The kernel command line
interface is to be used by admins who know what they are doing. Using
random or wrong values for these parameters can have detrimental effects
on the system. This particular case would blow up early, good. At least
it is visible immediately. This and many other parameters could have a
seemingly valid input (e.g. not a missing value) and subtle runtime
effect. You won't blow up immediately but the system is hardly usable
and the early checking cannot possible catch all those cases. Take a
mem=$N copied from one machine to another with a different memory
layout. While 2G can be perfectly fine on one a different machine might
result on a completely unusable system because the available RAM is
place higher.
So I am really wondering. Do we really want a lot of code to catch
kernel command line incorrect inputs? Does it really lead to better
quality overall? IMHO, we do have a proper documentation and we should
trust those starting the kernel.
> and adds KBUILD_MODNAME to prints.
This doesn't seem to be done in this patch. Probably a left over
from the previous version.
> Signed-off-by: He Zhe <zhe.he@windriver.com>
> Cc: stable@vger.kernel.org
> Cc: akpm@linux-foundation.org
> Cc: mhocko@suse.com
> Cc: vbabka@suse.cz
> Cc: pasha.tatashin@oracle.com
> Cc: mgorman@techsingularity.net
> Cc: aaron.lu@intel.com
> Cc: osalvador@suse.de
> Cc: iamjoonsoo.kim@lge.com
> ---
> v2:
> Use more clear error info
> Split the addition of KBUILD_MODNAME out
>
> mm/page_alloc.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 89d2a2a..f34cae1 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -630,6 +630,12 @@ static int __init debug_guardpage_minorder_setup(char *buf)
> {
> unsigned long res;
>
> + if (!buf) {
> + pr_err("kernel option debug_guardpage_minorder requires an \
> + argument\n");
> + return -EINVAL;
> + }
> +
> if (kstrtoul(buf, 10, &res) < 0 || res > MAX_ORDER / 2) {
> pr_err("Bad debug_guardpage_minorder value\n");
> return 0;
> @@ -6952,6 +6958,11 @@ static int __init cmdline_parse_core(char *p, unsigned long *core,
> */
> static int __init cmdline_parse_kernelcore(char *p)
> {
> + if (!p) {
> + pr_err("kernel option kernelcore requires an argument\n");
> + return -EINVAL;
> + }
> +
> /* parse kernelcore=mirror */
> if (parse_option_str(p, "mirror")) {
> mirrored_kernelcore = true;
> --
> 2.7.4
>
--
Michal Hocko
SUSE Labs
next prev parent reply other threads:[~2018-09-24 14:24 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-22 14:53 [PATCH v2 1/2] mm/page_alloc: Fix panic caused by passing debug_guardpage_minorder or kernelcore to command line zhe.he
2018-09-22 14:53 ` [PATCH v2 2/2] mm/page_alloc: Add KBUILD_MODNAME zhe.he
2018-09-24 14:26 ` Michal Hocko
2018-09-24 14:24 ` Michal Hocko [this message]
2018-09-24 21:42 ` [PATCH v2 1/2] mm/page_alloc: Fix panic caused by passing debug_guardpage_minorder or kernelcore to command line Andrew Morton
2018-09-25 5:59 ` Michal Hocko
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=20180924142408.GC18685@dhcp22.suse.cz \
--to=mhocko@kernel.org \
--cc=aaron.lu@intel.com \
--cc=akpm@linux-foundation.org \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=osalvador@suse.de \
--cc=pasha.tatashin@oracle.com \
--cc=vbabka@suse.cz \
--cc=zhe.he@windriver.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;
as well as URLs for NNTP newsgroup(s).