All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Kees Cook <keescook@chromium.org>
Cc: linux-kernel@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
	"Gustavo A. R. Silva" <gustavoars@kernel.org>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Keith Packard <keithp@keithp.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Daniel Vetter <daniel.vetter@ffwll.ch>,
	clang-built-linux@googlegroups.com,
	linux-hardening@vger.kernel.org, llvm@lists.linux.dev
Subject: Re: [PATCH v3 0/5] Enable -Warray-bounds and -Wzero-length-bounds
Date: Mon, 30 Aug 2021 11:44:54 -0700	[thread overview]
Message-ID: <YS0nJtNDCwfbaubZ@Ryzen-9-3900X.localdomain> (raw)
In-Reply-To: <20210827163015.3141722-1-keescook@chromium.org>

On Fri, Aug 27, 2021 at 09:30:10AM -0700, Kees Cook wrote:
> v3:
> - fix typo in treewide conversion (u8 should have been __u8)
> - improve changelog for DECLARE_FLEX_ARRAY patch
> - add acks/reviews
> v2: https://lore.kernel.org/lkml/20210826050458.1540622-1-keescook@chromium.org/
> v1: https://lore.kernel.org/lkml/20210818081118.1667663-1-keescook@chromium.org/
> 
> Hi,
> 
> In support of the improved buffer overflow detection for memcpy(),
> this enables -Warray-bounds and -Wzero-length-bounds globally. Mostly
> it involves some struct member tricks with the new DECLARE_FLEX_ARRAY()
> macro. Everything else is just replacing stacked 0-element arrays
> with actual unions in two related treewide patches. There is one set of
> special cases that were fixed separately[1] and are needed as well.
> 
> I'm expecting to carry this series with the memcpy() series in my
> "overflow" tree. Reviews appreciated! :)

Hi Kees,

I ran this series through my local build tests and uncovered two
warnings in the same file that appear to be unhandled as of
next-20210830. This is from ARCH=powerpc pseries_defconfig with
clang-14, I did not try earlier versions of clang.

arch/powerpc/kernel/signal_32.c:780:2: error: array index 3 is past the end of the array (which contains 1 element) [-Werror,-Warray-bounds]
        unsafe_put_sigset_t(&frame->uc.uc_sigmask, oldset, failed);
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/kernel/signal_32.c:85:29: note: expanded from macro 'unsafe_put_sigset_t'
#define unsafe_put_sigset_t     unsafe_put_compat_sigset
                                ^
./include/linux/compat.h:455:19: note: expanded from macro 'unsafe_put_compat_sigset'
                unsafe_put_user(__s->sig[3] >> 32, &__c->sig[7], label);        \
                                ^        ~
./arch/powerpc/include/asm/uaccess.h:426:42: note: expanded from macro 'unsafe_put_user'
        __put_user_size_goto((__typeof__(*(p)))(x), (p), sizeof(*(p)), e)
                                                ^
./arch/powerpc/include/asm/uaccess.h:114:30: note: expanded from macro '__put_user_size_goto'
        case 1: __put_user_asm_goto(x, __pus_addr, label, "stb"); break;        \
                                    ^
./arch/powerpc/include/asm/uaccess.h:89:10: note: expanded from macro '__put_user_asm_goto'
                : "r" (x), "m"UPD_CONSTR (*addr)                \
                       ^
./include/linux/compiler_types.h:254:42: note: expanded from macro 'asm_volatile_goto'
#define asm_volatile_goto(x...) asm goto(x)
                                         ^
./arch/powerpc/include/uapi/asm/signal.h:18:2: note: array 'sig' declared here
        unsigned long sig[_NSIG_WORDS];
        ^
arch/powerpc/kernel/signal_32.c:1044:3: error: array index 2 is past the end of the array (which contains 1 element) [-Werror,-Warray-bounds]
                unsafe_put_sigset_t(&old_ctx->uc_sigmask, &current->blocked, failed);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/powerpc/kernel/signal_32.c:85:29: note: expanded from macro 'unsafe_put_sigset_t'
#define unsafe_put_sigset_t     unsafe_put_compat_sigset
                                ^
./include/linux/compat.h:459:19: note: expanded from macro 'unsafe_put_compat_sigset'
                unsafe_put_user(__s->sig[2] >> 32, &__c->sig[5], label);        \
                                ^        ~
./arch/powerpc/include/asm/uaccess.h:426:42: note: expanded from macro 'unsafe_put_user'
        __put_user_size_goto((__typeof__(*(p)))(x), (p), sizeof(*(p)), e)
                                                ^
./arch/powerpc/include/asm/uaccess.h:116:30: note: expanded from macro '__put_user_size_goto'
        case 4: __put_user_asm_goto(x, __pus_addr, label, "stw"); break;        \
                                    ^
./arch/powerpc/include/asm/uaccess.h:89:10: note: expanded from macro '__put_user_asm_goto'
                : "r" (x), "m"UPD_CONSTR (*addr)                \
                       ^
./include/linux/compiler_types.h:254:42: note: expanded from macro 'asm_volatile_goto'
#define asm_volatile_goto(x...) asm goto(x)
                                         ^
./arch/powerpc/include/uapi/asm/signal.h:18:2: note: array 'sig' declared here
        unsigned long sig[_NSIG_WORDS];
        ^

Cheers,
Nathan

  parent reply	other threads:[~2021-08-30 18:44 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-27 16:30 [PATCH v3 0/5] Enable -Warray-bounds and -Wzero-length-bounds Kees Cook
2021-08-27 16:30 ` [PATCH v3 1/5] stddef: Introduce DECLARE_FLEX_ARRAY() helper Kees Cook
2021-08-27 16:30 ` [PATCH v3 2/5] treewide: Replace open-coded flex arrays in unions Kees Cook
2021-08-27 16:30   ` Kees Cook
2021-08-28  7:51   ` Vincent MAILHOL
2021-08-28  7:51     ` Vincent MAILHOL
2021-08-27 16:30 ` [PATCH v3 3/5] treewide: Replace 0-element memcpy() destinations with flexible arrays Kees Cook
2021-08-27 16:30   ` Kees Cook
2021-08-27 16:30 ` [PATCH v3 4/5] Makefile: Enable -Warray-bounds Kees Cook
2021-08-31  4:31   ` Guenter Roeck
2021-08-31 17:46     ` Kees Cook
2021-08-31 19:40       ` Guenter Roeck
2021-08-31 20:18         ` Kees Cook
2021-08-31 20:49           ` Guenter Roeck
2021-08-27 16:30 ` [PATCH v3 5/5] Makefile: Enable -Wzero-length-bounds Kees Cook
2021-08-30 18:44 ` Nathan Chancellor [this message]
2021-08-30 20:12   ` [PATCH v3 0/5] Enable -Warray-bounds and -Wzero-length-bounds Kees Cook
2021-08-30 20:16   ` Kees Cook
2021-08-30 22:34     ` Nathan Chancellor

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=YS0nJtNDCwfbaubZ@Ryzen-9-3900X.localdomain \
    --to=nathan@kernel.org \
    --cc=arnd@arndb.de \
    --cc=clang-built-linux@googlegroups.com \
    --cc=dan.j.williams@intel.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=gustavoars@kernel.org \
    --cc=keescook@chromium.org \
    --cc=keithp@keithp.com \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=llvm@lists.linux.dev \
    /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.