linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Jane Chu <jane.chu@oracle.com>
Cc: pmladek@suse.com, rostedt@goodmis.org, senozhatsky@chromium.org,
	linux@rasmusvillemoes.dk, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, wangkefeng.wang@huawei.com,
	konrad.wilk@oracle.com, haakon.bugge@oracle.com,
	john.haxby@oracle.com
Subject: Re: [PATCH v3 1/1] vsprintf: protect kernel from panic due to non-canonical pointer dereference
Date: Wed, 19 Oct 2022 23:33:47 +0300	[thread overview]
Message-ID: <Y1BfK6LpDJDlUYKp@smile.fi.intel.com> (raw)
In-Reply-To: <20221019194159.2923873-1-jane.chu@oracle.com>

On Wed, Oct 19, 2022 at 01:41:59PM -0600, Jane Chu wrote:
> Having stepped on a local kernel bug where reading sysfs has led to
> out-of-bound pointer dereference by vsprintf() which led to GPF panic.
> And the reason for GPF is that the OOB pointer was turned to a
> non-canonical address such as 0x7665645f63616465.
> 
> vsprintf() already has this line of defense
> 	if ((unsigned long)ptr < PAGE_SIZE || IS_ERR_VALUE(ptr))
>                 return "(efault)";
> Since a non-canonical pointer can be detected by kern_addr_valid()
> on architectures that present VM holes as well as meaningful
> implementation of kern_addr_valid() that detects the non-canonical
> addresses, this patch adds a check on non-canonical string pointer by
> kern_addr_valid() and "(efault)" to alert user that something
> is wrong instead of unecessarily panic the server.
> 
> On the other hand, if the non-canonical string pointer is dereferenced
> else where in the kernel, by virtue of being non-canonical, a crash
> is expected to be immediate.

What if there is no other dereference except the one happened in printf()?

Just to point out here, that I formally NAKed this on the basis that NULL
and error pointers are special, for the bogus pointers we need crash ASAP,
no matter what the code issues it. I.o.w. printf() is not special for that
kind of pointers (i.e. bogus pointers, but not special).

-- 
With Best Regards,
Andy Shevchenko




  reply	other threads:[~2022-10-19 20:33 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-19 19:41 Jane Chu
2022-10-19 20:33 ` Andy Shevchenko [this message]
2022-10-20 14:52   ` Konrad Rzeszutek Wilk
2022-10-20 16:03     ` Andy Shevchenko
2022-10-25  8:40       ` Petr Mladek
2022-10-25  9:13         ` Andy Shevchenko
2022-10-19 21:00 ` Rasmus Villemoes
2022-10-20  9:28 ` Petr Mladek
  -- strict thread matches above, loose matches on Subject: below --
2022-10-19 19:34 [PATCH v3 0/1] vsprintf: check non-canonical pointer by kern_addr_valid() Jane Chu
2022-10-19 19:34 ` [PATCH v3 1/1] vsprintf: protect kernel from panic due to non-canonical pointer dereference Jane Chu
2022-10-20 11:41   ` kernel test robot

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=Y1BfK6LpDJDlUYKp@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=haakon.bugge@oracle.com \
    --cc=jane.chu@oracle.com \
    --cc=john.haxby@oracle.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=senozhatsky@chromium.org \
    --cc=wangkefeng.wang@huawei.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