|
|
Message-ID: <CAGXu5jKgQsg8e4N2oqZc6g6EdvcEA45hoK8Gu63=bwNuJwZrig@mail.gmail.com>
Date: Tue, 6 Mar 2018 21:46:02 -0800
From: Kees Cook <keescook@...omium.org>
To: "Tobin C. Harding" <me@...in.cc>
Cc: Kernel Hardening <kernel-hardening@...ts.openwall.com>, Tycho Andersen <tycho@...ho.ws>,
Oleg Drokin <oleg.drokin@...el.com>, Andreas Dilger <andreas.dilger@...el.com>,
James Simmons <jsimmons@...radead.org>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Subject: Re: [RFC 2/2] lustre: use VLA_SAFE
On Tue, Mar 6, 2018 at 9:27 PM, Tobin C. Harding <me@...in.cc> wrote:
> Currently lustre uses a VLA to store a string on the stack. We can use
> the newly define VLA_SAFE macro to make this declaration safer.
>
> Use VLA_SAFE to declare VLA.
VLA_SAFE implements a max, which is nice, but I think we're just
digging ourselves into a bigger hole with this, since now all the
maxes must be validated (which isn't done here, what happens if
VLA_DEFAULT_MAX is smaller than the strlen() math? We'll overflow the
stack buffer in the later sprintf).
>
> Signed-off-by: Tobin C. Harding <me@...in.cc>
> ---
> drivers/staging/lustre/lustre/llite/xattr.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c
> index 532384c91447..6f4099cd4afa 100644
> --- a/drivers/staging/lustre/lustre/llite/xattr.c
> +++ b/drivers/staging/lustre/lustre/llite/xattr.c
> @@ -36,6 +36,7 @@
> #include <linux/mm.h>
> #include <linux/xattr.h>
> #include <linux/selinux.h>
> +#include <linux/vla.h>
>
> #define DEBUG_SUBSYSTEM S_LLITE
>
> @@ -87,12 +88,13 @@ ll_xattr_set_common(const struct xattr_handler *handler,
> const char *name, const void *value, size_t size,
> int flags)
> {
> - char fullname[strlen(handler->prefix) + strlen(name) + 1];
> struct ll_sb_info *sbi = ll_i2sbi(inode);
> struct ptlrpc_request *req = NULL;
> const char *pv = value;
> __u64 valid;
> int rc;
> + int size = strlen(handler->prefix) + strlen(name) + 1;
> + VLA_SAFE(char, fullname, size, VLA_DEFAULT_MAX);
>
> if (flags == XATTR_REPLACE) {
> ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_REMOVEXATTR, 1);
In the lustre case, I think it's better to just remove the stack
allocation entirely. (See separate patch...)
-Kees
--
Kees Cook
Pixel Security
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.