From: Kees Cook <keescook@chromium.org>
To: Alexander Popov <alex.popov@linux.com>
Cc: Jann Horn <jannh@google.com>,
Elena Reshetova <elena.reshetova@intel.com>,
Emese Revfy <re.emese@gmail.com>,
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>,
Masahiro Yamada <masahiroy@kernel.org>,
Michal Marek <michal.lkml@markovi.net>,
Andrew Morton <akpm@linux-foundation.org>,
Masahiro Yamada <yamada.masahiro@socionext.com>,
Thiago Jung Bauermann <bauerman@linux.ibm.com>,
Luis Chamberlain <mcgrof@kernel.org>,
Jessica Yu <jeyu@kernel.org>,
Sven Schnelle <svens@stackframe.org>,
Iurii Zaikin <yzaikin@google.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Collingbourne <pcc@google.com>,
Naohiro Aota <naohiro.aota@wdc.com>,
Alexander Monakov <amonakov@ispras.ru>,
Mathias Krause <minipli@googlemail.com>,
PaX Team <pageexec@freemail.hu>,
Brad Spengler <spender@grsecurity.net>,
Laura Abbott <labbott@redhat.com>,
Florian Weimer <fweimer@redhat.com>,
Kernel Hardening <kernel-hardening@lists.openwall.com>,
linux-kbuild@vger.kernel.org,
the arch/x86 maintainers <x86@kernel.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
kernel list <linux-kernel@vger.kernel.org>,
gcc@gcc.gnu.org, notify@kernel.org
Subject: Re: [PATCH 1/5] gcc-plugins/stackleak: Exclude alloca() from the instrumentation logic
Date: Tue, 9 Jun 2020 11:39:11 -0700 [thread overview]
Message-ID: <202006091133.412F0E89@keescook> (raw)
In-Reply-To: <70319f78-2c7c-8141-d751-07f28203db7c@linux.com>
On Thu, Jun 04, 2020 at 06:23:38PM +0300, Alexander Popov wrote:
> On 04.06.2020 17:01, Jann Horn wrote:
> > On Thu, Jun 4, 2020 at 3:51 PM Alexander Popov <alex.popov@linux.com> wrote:
> >> Some time ago Variable Length Arrays (VLA) were removed from the kernel.
> >> The kernel is built with '-Wvla'. Let's exclude alloca() from the
> >> instrumentation logic and make it simpler. The build-time assertion
> >> against alloca() is added instead.
> > [...]
> >> + /* Variable Length Arrays are forbidden in the kernel */
> >> + gcc_assert(!is_alloca(stmt));
> >
> > There is a patch series from Elena and Kees on the kernel-hardening
> > list that deliberately uses __builtin_alloca() in the syscall entry
> > path to randomize the stack pointer per-syscall - see
> > <https://lore.kernel.org/kernel-hardening/20200406231606.37619-4-keescook@chromium.org/>.
>
> Thanks, Jann.
>
> At first glance, leaving alloca() handling in stackleak instrumentation logic
> would allow to integrate stackleak and this version of random_kstack_offset.
Right, it seems there would be a need for this coverage to remain,
otherwise the depth of stack erasure might be incorrect.
It doesn't seem like the other patches strictly depend on alloca()
support being removed, though?
> Kees, Elena, did you try random_kstack_offset with upstream stackleak?
I didn't try that combination yet, no. It seemed there would likely
still be further discussion about the offset series first (though the
thread has been silent -- I'll rebase and resend it after rc2).
> It looks to me that without stackleak erasing random_kstack_offset can be
> weaker. I mean, if next syscall has a bigger stack randomization gap, the data
> on thread stack from the previous syscall is not overwritten and can be used. Am
> I right?
That's correct. I think the combination is needed, but I don't think
they need to be strictly tied together.
> Another aspect: CONFIG_STACKLEAK_METRICS can be used for guessing kernel stack
> offset, which is bad. It should be disabled if random_kstack_offset is on.
Agreed.
--
Kees Cook
WARNING: multiple messages have this Message-ID (diff)
From: Kees Cook <keescook@chromium.org>
To: Alexander Popov <alex.popov@linux.com>
Cc: the arch/x86 maintainers <x86@kernel.org>,
Kernel Hardening <kernel-hardening@lists.openwall.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Masahiro Yamada <yamada.masahiro@socionext.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Will Deacon <will@kernel.org>,
Elena Reshetova <elena.reshetova@intel.com>,
Naohiro Aota <naohiro.aota@wdc.com>,
Sven Schnelle <svens@stackframe.org>,
Masahiro Yamada <masahiroy@kernel.org>,
linux-kbuild@vger.kernel.org, Emese Revfy <re.emese@gmail.com>,
PaX Team <pageexec@freemail.hu>,
Iurii Zaikin <yzaikin@google.com>,
Mathias Krause <minipli@googlemail.com>,
Jann Horn <jannh@google.com>,
Alexander Monakov <amonakov@ispras.ru>,
Brad Spengler <spender@grsecurity.net>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Collingbourne <pcc@google.com>,
Laura Abbott <labbott@redhat.com>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
notify@kernel.org, Florian Weimer <fweimer@redhat.com>,
gcc@gcc.gnu.org, Michal Marek <michal.lkml@markovi.net>,
kernel list <linux-kernel@vger.kernel.org>,
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>,
Luis Chamberlain <mcgrof@kernel.org>,
Jessica Yu <jeyu@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thiago Jung Bauermann <bauerman@linux.ibm.com>
Subject: Re: [PATCH 1/5] gcc-plugins/stackleak: Exclude alloca() from the instrumentation logic
Date: Tue, 9 Jun 2020 11:39:11 -0700 [thread overview]
Message-ID: <202006091133.412F0E89@keescook> (raw)
In-Reply-To: <70319f78-2c7c-8141-d751-07f28203db7c@linux.com>
On Thu, Jun 04, 2020 at 06:23:38PM +0300, Alexander Popov wrote:
> On 04.06.2020 17:01, Jann Horn wrote:
> > On Thu, Jun 4, 2020 at 3:51 PM Alexander Popov <alex.popov@linux.com> wrote:
> >> Some time ago Variable Length Arrays (VLA) were removed from the kernel.
> >> The kernel is built with '-Wvla'. Let's exclude alloca() from the
> >> instrumentation logic and make it simpler. The build-time assertion
> >> against alloca() is added instead.
> > [...]
> >> + /* Variable Length Arrays are forbidden in the kernel */
> >> + gcc_assert(!is_alloca(stmt));
> >
> > There is a patch series from Elena and Kees on the kernel-hardening
> > list that deliberately uses __builtin_alloca() in the syscall entry
> > path to randomize the stack pointer per-syscall - see
> > <https://lore.kernel.org/kernel-hardening/20200406231606.37619-4-keescook@chromium.org/>.
>
> Thanks, Jann.
>
> At first glance, leaving alloca() handling in stackleak instrumentation logic
> would allow to integrate stackleak and this version of random_kstack_offset.
Right, it seems there would be a need for this coverage to remain,
otherwise the depth of stack erasure might be incorrect.
It doesn't seem like the other patches strictly depend on alloca()
support being removed, though?
> Kees, Elena, did you try random_kstack_offset with upstream stackleak?
I didn't try that combination yet, no. It seemed there would likely
still be further discussion about the offset series first (though the
thread has been silent -- I'll rebase and resend it after rc2).
> It looks to me that without stackleak erasing random_kstack_offset can be
> weaker. I mean, if next syscall has a bigger stack randomization gap, the data
> on thread stack from the previous syscall is not overwritten and can be used. Am
> I right?
That's correct. I think the combination is needed, but I don't think
they need to be strictly tied together.
> Another aspect: CONFIG_STACKLEAK_METRICS can be used for guessing kernel stack
> offset, which is bad. It should be disabled if random_kstack_offset is on.
Agreed.
--
Kees Cook
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-06-09 18:39 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-04 13:49 [PATCH 0/5] Improvements of the stackleak gcc plugin Alexander Popov
2020-06-04 13:49 ` Alexander Popov
2020-06-04 13:49 ` [PATCH 1/5] gcc-plugins/stackleak: Exclude alloca() from the instrumentation logic Alexander Popov
2020-06-04 13:49 ` Alexander Popov
2020-06-04 14:01 ` Jann Horn
2020-06-04 14:01 ` Jann Horn
2020-06-04 15:23 ` Alexander Popov
2020-06-04 15:23 ` Alexander Popov
2020-06-09 18:39 ` Kees Cook [this message]
2020-06-09 18:39 ` Kees Cook
2020-06-10 15:24 ` Alexander Popov
2020-06-10 15:24 ` Alexander Popov
2020-06-04 13:49 ` [PATCH 2/5] gcc-plugins/stackleak: Use asm instrumentation to avoid useless register saving Alexander Popov
2020-06-04 13:49 ` Alexander Popov
2020-06-04 15:05 ` Miguel Ojeda
2020-06-04 15:05 ` Miguel Ojeda
2020-06-09 18:46 ` Kees Cook
2020-06-09 18:46 ` Kees Cook
2020-06-10 15:47 ` Alexander Popov
2020-06-10 15:47 ` Alexander Popov
2020-06-10 20:03 ` Kees Cook
2020-06-10 20:03 ` Kees Cook
2020-06-11 23:45 ` Alexander Popov
2020-06-11 23:45 ` Alexander Popov
2020-06-04 13:49 ` [PATCH 3/5] gcc-plugins/stackleak: Add 'verbose' plugin parameter Alexander Popov
2020-06-04 13:49 ` Alexander Popov
2020-06-09 18:47 ` Kees Cook
2020-06-09 18:47 ` Kees Cook
2020-06-10 15:52 ` Alexander Popov
2020-06-10 15:52 ` Alexander Popov
2020-06-10 20:04 ` Kees Cook
2020-06-10 20:04 ` Kees Cook
2020-06-04 13:49 ` [PATCH 4/5] gcc-plugins/stackleak: Don't instrument itself Alexander Popov
2020-06-04 13:49 ` Alexander Popov
2020-06-09 18:48 ` Kees Cook
2020-06-09 18:48 ` Kees Cook
2020-06-04 13:49 ` [PATCH 5/5] gcc-plugins/stackleak: Don't instrument vgettimeofday.c in arm64 VDSO Alexander Popov
2020-06-04 13:49 ` Alexander Popov
2020-06-04 13:58 ` Will Deacon
2020-06-04 13:58 ` Will Deacon
2020-06-04 14:14 ` Jann Horn
2020-06-04 14:14 ` Jann Horn
2020-06-04 14:20 ` Alexander Popov
2020-06-04 14:20 ` Alexander Popov
2020-06-04 14:25 ` Jann Horn
2020-06-04 14:25 ` Jann Horn
2020-06-04 14:44 ` Alexander Popov
2020-06-04 14:44 ` Alexander Popov
2020-06-09 19:09 ` Kees Cook
2020-06-09 19:09 ` Kees Cook
2020-06-10 7:30 ` Will Deacon
2020-06-10 7:30 ` Will Deacon
2020-06-10 15:18 ` Alexander Popov
2020-06-10 15:18 ` Alexander Popov
2020-06-23 10:16 ` Alexander Popov
2020-06-04 21:39 ` [PATCH 0/5] Improvements of the stackleak gcc plugin Kees Cook
2020-06-04 21:39 ` Kees Cook
2020-06-09 19:15 ` Kees Cook
2020-06-09 19:15 ` Kees Cook
2020-06-10 15:14 ` Alexander Popov
2020-06-10 15:14 ` Alexander Popov
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=202006091133.412F0E89@keescook \
--to=keescook@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=alex.popov@linux.com \
--cc=amonakov@ispras.ru \
--cc=bauerman@linux.ibm.com \
--cc=catalin.marinas@arm.com \
--cc=elena.reshetova@intel.com \
--cc=fweimer@redhat.com \
--cc=gcc@gcc.gnu.org \
--cc=jannh@google.com \
--cc=jeyu@kernel.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=labbott@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masahiroy@kernel.org \
--cc=mcgrof@kernel.org \
--cc=michal.lkml@markovi.net \
--cc=miguel.ojeda.sandonis@gmail.com \
--cc=minipli@googlemail.com \
--cc=naohiro.aota@wdc.com \
--cc=notify@kernel.org \
--cc=pageexec@freemail.hu \
--cc=pcc@google.com \
--cc=re.emese@gmail.com \
--cc=spender@grsecurity.net \
--cc=svens@stackframe.org \
--cc=tglx@linutronix.de \
--cc=vincenzo.frascino@arm.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=yamada.masahiro@socionext.com \
--cc=yzaikin@google.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.