Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp3835291pxb; Mon, 30 Aug 2021 11:47:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwqFcKmCZiz69qV5EP0Mww6iuFSUqJPPU/yQH+xEL478qomiOAOotVwy1RqbJpq5gqXVzCj X-Received: by 2002:a05:6402:430d:: with SMTP id m13mr12540617edc.372.1630349242536; Mon, 30 Aug 2021 11:47:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630349242; cv=none; d=google.com; s=arc-20160816; b=zBsp5DI+TTNC1yve4ZRO161ot3ua3E2yaKJuSUGlVcjRsZL8acaK/zjI/RZ+42Cdd/ WjcHvxiOGRN4JU1xVAn4GKyLBesOR8dRPSHe3xK555gF8YjHFGR1uBVo17MVyPurLEK3 kGlyvm2G0QL+3gw6QXTEDcpDAGm/UJaVXRwC2aMQxa8XbdtAOVFKtYIISlMADfltLj77 XwblDnOTVFWr0tadR3kBLI6QuojlEYdlfwYlN3ncUzJ/2rZpCes4NmC2D5iLQd5zSKdQ B26bjO8Dlog82N4Qy/hlM0I9StYgmpDguqS/UvZr4oaPlKaLWggiYXY1MRaTtwIDN7rR NbZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=Okv5LnoDgVS4LKNVsDvlVi45GRnzsZgdz2be2LMqyxo=; b=rcDUE6i3IYHU+ojVQfXbz/f5QUPCiuXRJo68WJQSP+sbFaqqncSdKIuB/8BBBo4Xxo +9gF5Xt+J32UfXTml4Xgv8MAlSMm9dqYkorRoACAu8zLCxkaDy/NUDiwPNX1iJ1kqBT2 7oMUo7XN56i8fNK1TSLeAJ4wvhmBuKaggG+p7AvigVnjOsF2xpCU0OeInYNPpHnQ5Zjr E61Dm1adnsI6S8Z/WBMdFWo9i3HX53LS0Eg4TQBGCY5/XB7dhaA3FvbjMFYEhRcgWEFC IHuy0Gf/4OV4Ua9afIzK9AUa8ZAnlKynjVO0EtHwxIIp+Q9ccumgZZtnvGelVE6elSi0 wu0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=YIenoLLy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r24si244970edp.67.2021.08.30.11.46.55; Mon, 30 Aug 2021 11:47:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=YIenoLLy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231634AbhH3Spv (ORCPT + 99 others); Mon, 30 Aug 2021 14:45:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:54100 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229708AbhH3Spu (ORCPT ); Mon, 30 Aug 2021 14:45:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4C42B60F3A; Mon, 30 Aug 2021 18:44:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1630349096; bh=LtTJKZ/nDmnOgKVis3WLUMr+KoCayI+9HgyvZySnxLE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YIenoLLyVAS+i6cujE8l6cJwEIsV1bmiRG9P+prmjn8S3FUHfZsQHGb85HwQl8B0m oIY2XIuQjeED8yzmQct6OVY+ONatrINvelb5MVrmYo7KQVZ2ueShDTw/q20Io+nL7R J9K0oio3GJdul3pgs0LYMOqX8QGCqk8S5CH3kr/lFD78/MjxrGEI/eShnVuFMPYWWv Q4MfnMGtlP8dXMRjzoGDmNomJ83R6JFR6XjQww9S+QNbXk25lDD1nB8gmJQTus6Qso V5284apjrl4SKcuPigJcuuJbqp1jjd9y0K2peNgAbTn/tcG6c4ztN5JnpaZ97QWT5T 8WWy9t+6XNrWw== Date: Mon, 30 Aug 2021 11:44:54 -0700 From: Nathan Chancellor To: Kees Cook Cc: linux-kernel@vger.kernel.org, Arnd Bergmann , "Gustavo A. R. Silva" , Rasmus Villemoes , Keith Packard , Dan Williams , Daniel Vetter , 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 Message-ID: References: <20210827163015.3141722-1-keescook@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210827163015.3141722-1-keescook@chromium.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.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, ¤t->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