linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Petr Mladek <pmladek@suse.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	"Tobin C . Harding" <me@tobin.cc>, Joe Perches <joe@perches.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Michal Hocko <mhocko@suse.cz>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Subject: Re: [PATCH v3] vsprintf: Prevent crash when dereferencing invalid pointers
Date: Thu, 15 Mar 2018 18:35:10 -0700	[thread overview]
Message-ID: <CA+55aFzLQvPCB-A2ZN9h86pBDbNC1RXwzB=URRKFcJpXFzanig@mail.gmail.com> (raw)
In-Reply-To: <20180316011852.GA5139@jagdpanzerIV>

On Thu, Mar 15, 2018 at 6:18 PM, Sergey Senozhatsky
<sergey.senozhatsky.work@gmail.com> wrote:
>
> Hm, may be sizeof(ptr) still won't suffice. It would be great if we
> could always look at spec.field_width, which can be up to 2 * sizeof(void *),
> and then just probe_kernel_read(spec.field_width). E.g., %b/%bl prints out a
> bitmap, accessing max_t(int, spec.field_width, 0) bits, which is good. But,
> for instance, %U (uuid printout) doesn't look at spec.field_width, and reads
> in 16 bytes from the given memory address. Then we have ipv4/ipv6, mac, etc.
> So I think that checking just 1 byte or sizeof(ptr) is not really enough if
> we want to fix vsprintf. What do you think?

Honestly, I think it would be better to move the whole logic to the
functions that actually do the printout.

Then you can do it right, and you don't need to have the strchr() either.

There really isn't any commonality between the different versions.
field_width is meaningless, since it's about the size of the _printed_
field, not the size in memory.

Would it be a few more lines? Yes. But it would also clarify the code
and get all the cases right. Look at hex_string() for example, and
imagine fetching a byte at a time and just getting the corner cases
automatically right.

And if you don't care, just do a

       const char *err = check_pointer_access(ptr);
       if (err)
                return string(buf, end, err, spec);

at the top of each function that dereferences things. Some of them
already have the equivalent of that (the afore-mentioned hex_string:

        if (ZERO_OR_NULL_PTR(addr))
                /* NULL pointer */
                return string(buf, end, NULL, spec);

and it certainly is neither a lot of extra code, nor subtle or complex
to just do that (except using "err = check_pointer_access(ptr);").

               Linus

  reply	other threads:[~2018-03-16  1:35 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-16 21:07 [PATCH v2 1/9] lib/test_printf: Mark big constant with ULL Andy Shevchenko
2018-02-16 21:07 ` [PATCH v2 2/9] lib/vsprintf: Make dec_spec global Andy Shevchenko
2018-04-11  9:44   ` Petr Mladek
2018-02-16 21:07 ` [PATCH v2 3/9] lib/vsprintf: Make strspec global Andy Shevchenko
2018-04-11  9:44   ` Petr Mladek
2018-02-16 21:07 ` [PATCH v2 4/9] lib/vsprintf: Make flag_spec global Andy Shevchenko
2018-04-11  9:45   ` Petr Mladek
2018-02-16 21:07 ` [PATCH v2 5/9] lib/vsprintf: Move pointer_string() upper Andy Shevchenko
2018-04-11  9:45   ` Petr Mladek
2018-02-16 21:07 ` [PATCH v2 6/9] lib/vsprintf: Deduplicate pointer_string() Andy Shevchenko
2018-04-11  9:46   ` Petr Mladek
2018-02-16 21:07 ` [PATCH v2 7/9] lib/vsprintf: Replace space with '_' before crng is ready Andy Shevchenko
2018-02-20  2:57   ` [此邮件可能存在风险] " Yang, Shunyong
2018-04-11  9:47   ` Petr Mladek
2018-02-16 21:07 ` [PATCH v2 8/9] lib/vsprintf: Remove useless NULL checks Andy Shevchenko
2018-02-27 15:50   ` Petr Mladek
2018-02-27 17:35     ` Andy Shevchenko
2018-02-28 10:04       ` Petr Mladek
2018-02-28 10:42         ` Andy Shevchenko
2018-03-02 12:51           ` Petr Mladek
2018-03-02 12:53             ` [PATCH] vsprintf: Make "null" pointer dereference more robust Petr Mladek
2018-03-02 14:17               ` Andy Shevchenko
2018-03-05 14:53                 ` Petr Mladek
2018-03-29 15:13                 ` Petr Mladek
2018-03-29 16:11                   ` Joe Perches
2018-03-05 15:16               ` Rasmus Villemoes
2018-03-05 15:25                 ` Andy Shevchenko
2018-03-06  9:25                 ` Petr Mladek
2018-03-06  9:56                   ` Andy Shevchenko
2018-03-07 15:52                     ` Petr Mladek
2018-03-07 18:18                       ` Andy Shevchenko
2018-03-07 18:34                       ` Linus Torvalds
2018-03-08 14:18                         ` Petr Mladek
2018-03-08 16:45                           ` Linus Torvalds
2018-03-08 17:26                             ` Linus Torvalds
2018-03-09 15:01                               ` Petr Mladek
2018-03-09 19:05                                 ` Linus Torvalds
2018-03-14 14:09                                   ` [PATCH v3] vsprintf: Prevent crash when dereferencing invalid pointers Petr Mladek
2018-03-14 22:12                                     ` Rasmus Villemoes
2018-03-15 15:07                                       ` Petr Mladek
2018-03-15 17:07                                         ` Steven Rostedt
2018-03-15 17:06                                       ` Steven Rostedt
2018-03-15  0:57                                     ` Sergey Senozhatsky
2018-03-15  7:58                                     ` Sergey Senozhatsky
2018-03-15  8:03                                       ` Sergey Senozhatsky
2018-03-15 17:01                                         ` Steven Rostedt
2018-03-16  1:18                                           ` Sergey Senozhatsky
2018-03-16  1:35                                             ` Linus Torvalds [this message]
2018-03-16  5:53                                               ` Sergey Senozhatsky
2018-03-16  8:55                                                 ` Petr Mladek
2018-03-16 14:32                                                   ` Steven Rostedt
2018-03-17  1:29                                                   ` Sergey Senozhatsky
2018-03-15 13:07                                       ` Andy Shevchenko
2018-03-15 13:09                                     ` Andy Shevchenko
2018-03-15 15:26                                       ` Petr Mladek
2018-03-16 18:19                                         ` Andy Shevchenko
2018-03-29 14:53                                           ` Petr Mladek
2018-04-02 14:15                                             ` Andy Shevchenko
2018-04-03  1:12                                               ` Sergey Senozhatsky
2018-04-03 11:52                                                 ` Petr Mladek
2018-04-03 11:56                                                   ` Andy Shevchenko
2018-04-03 13:57                                                   ` Sergey Senozhatsky
2018-04-03 11:46                                               ` Petr Mladek
2018-04-03 11:54                                                 ` Andy Shevchenko
2018-04-03 13:13                                                   ` Petr Mladek
2018-04-03 13:40                                                     ` Andy Shevchenko
2018-04-03 14:50                                                       ` Petr Mladek
2018-03-15 14:48                                     ` kbuild test robot
2018-03-15 20:26                                     ` kbuild test robot
2018-03-06 18:11                   ` [PATCH 1/2] vsprintf: distinguish between (null), (err) and (invalid) pointer derefs Adam Borowski
2018-03-06 18:11                     ` [PATCH 2/2] vsprintf: don't dereference pointers to the first or last page Adam Borowski
2018-03-07 13:22                       ` Andy Shevchenko
2018-03-07 13:17                     ` [PATCH 1/2] vsprintf: distinguish between (null), (err) and (invalid) pointer derefs Andy Shevchenko
2018-03-07 13:42                       ` Adam Borowski
2018-03-07 13:29                     ` Andy Shevchenko
2018-03-02 14:15             ` [PATCH v2 8/9] lib/vsprintf: Remove useless NULL checks Andy Shevchenko
2018-03-05 14:57               ` Petr Mladek
2018-02-28 10:44         ` Andy Shevchenko
2018-03-01 14:56         ` Andy Shevchenko
2018-02-16 21:07 ` [PATCH v2 9/9] lib/vsprintf: Mark expected switch fall-through Andy Shevchenko
2018-04-11  9:47   ` Petr Mladek
2018-02-18 12:58 ` [PATCH v2 1/9] lib/test_printf: Mark big constant with ULL Luc Van Oostenryck
2018-02-18 14:20   ` Andy Shevchenko
2018-02-19 15:24   ` Andy Shevchenko
2018-04-11  9:41     ` Petr Mladek
2018-02-18 21:52 ` Tobin C. Harding
2018-02-18 23:55   ` Andy Shevchenko

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='CA+55aFzLQvPCB-A2ZN9h86pBDbNC1RXwzB=URRKFcJpXFzanig@mail.gmail.com' \
    --to=torvalds@linux-foundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=joe@perches.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=me@tobin.cc \
    --cc=mhocko@suse.cz \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=sergey.senozhatsky.work@gmail.com \
    --cc=sergey.senozhatsky@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 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).