Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1577662

Re: [PATCH] block: sed-opal: reduce stack size of ioctl handler

From Arnd Bergmann <arnd@arndb.de>
Newsgroups linux.kernel
Subject Re: [PATCH] block: sed-opal: reduce stack size of ioctl handler
Date 2017-02-09 16:00 +0100
Message-ID <t8Ymt-7qf-11@gated-at.bofh.it> (permalink)
References <t8HOG-5t6-7@gated-at.bofh.it> <t8IUq-67n-25@gated-at.bofh.it> <t8IUq-67n-23@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Wed, Feb 8, 2017 at 11:12 PM, Scott Bauer <scott.bauer@intel.com> wrote:
> On Wed, Feb 08, 2017 at 02:58:28PM -0700, Scott Bauer wrote:
>> Thank you for the report. We want to keep the function calls agnostic to userland.
>> In the future we will have in-kernel callers and I don't want to have to do any
>> get_fs(KERNEL_DS) wizardry.
>>
>> Instead I think we can use a union to lessen the stack burden. I tested this patch just now
>> with config_ksasan and was able to build.
>
> Nack on this patch, it only really masks the issue. Keith pointed out we have a call chain
> up to this ioctl then deeper down into nvme then the block layer. If we use 25% of the stack
> just for this function it's still too dangerous and we'll run into corruption later on and not
> remember this fix. I'll come up with another solution.

I think there are two issues that cause the stack frame to explode
with KASAN, and
your patch addresses one but not the other:

1. checks for variables being accessed after they go out of scope.
This is solved by the
   union at the start of the function, as they never go out of scope now.

2. checks for array overflows when passing a local variable by
reference to another
   function that is not inlined.

To solve the second problem while keeping the in-kernel interface, the
approach that
David suggesteed would work, or you could have a wrapper around each function to
do the copy_from_user in a more obvious but verbose way as I had in my version.

With David's approach, you could actually replace the switch() with a
lookup table
as well.

    Arnd

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH] block: sed-opal: reduce stack size of ioctl handler Arnd Bergmann <arnd@arndb.de> - 2017-02-08 22:20 +0100
  Re: [PATCH] block: sed-opal: reduce stack size of ioctl handler Scott Bauer <scott.bauer@intel.com> - 2017-02-08 23:30 +0100
    Re: [PATCH] block: sed-opal: reduce stack size of ioctl handler Arnd Bergmann <arnd@arndb.de> - 2017-02-09 16:00 +0100
  Re: [PATCH] block: sed-opal: reduce stack size of ioctl handler Scott Bauer <scott.bauer@intel.com> - 2017-02-08 23:40 +0100
  RE: [PATCH] block: sed-opal: reduce stack size of ioctl handler David Laight <David.Laight@ACULAB.COM> - 2017-02-09 15:30 +0100

csiph-web