Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp3486945iog; Mon, 27 Jun 2022 17:45:16 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s3OqA0RA3vk/bRDEUKNNVhNi0XmEVGb7FH6Yxf4o+wLBg/Zo0FHDrn41SHURP/43SrEjBP X-Received: by 2002:a17:90a:fd17:b0:1ec:9737:b23d with SMTP id cv23-20020a17090afd1700b001ec9737b23dmr18835691pjb.156.1656377115796; Mon, 27 Jun 2022 17:45:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656377115; cv=none; d=google.com; s=arc-20160816; b=RCse6tJ/MG/p+ZNPXK7vvYtKkq7ig3MyO/2KTKoDmu89hCnFcb0Ja4Ifpx9mBaHRd3 WyNaTLkb8GiiS8tcG7Nit7e+pGQmJK2mT7iV28o6H5A/Gpyy0pUOC0JB6ICFRWfU2nU7 HOu4oN7mfoAUIXnkEiJXprflj2HgmoL9sXuy2pntBeyaR/TqWYLabn0djfaHDHRXVl2R rGgNHAxjf24/Hq/C1X4BayEY3jjtu9tDS7NDmYLMjY6vdEgYMm9mN7QPKE8UJrbJL+sL luXY0TMfey/n9G8wTt3fYJRLmFf8/n9rQGtSPeYAlegrJwdZx95PIjiFC/XEIpQJ1yC1 FysQ== 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-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=nrCjPCGAs4MTUiLBt7Ijf/MJPuIyH6lM8yqPhdyhJD8=; b=zS8iHYLHFPFnJk81ayNUeQ2fLBFCwKCwh8oTMhYWBlsMx0S0t1aan0SkMziLbVgLE5 KcabVOOvTg6WvL7y/+cqs4rGlwPTvtBnAQOqRP0fH3y4Pdzrn509ftfPX+6y1VQwS5Rg vkyfhQVGDZfZOrlOK4DP1k+Mu0kXeT3lmydWMP+LtUCtDANWLw7Cp/Wl1O4ecTZVGjVh k0JlVqj8cI9fBI682rXefhzk+7VxO3mmNp1pT6OIZ/yDEHAQ6lCuS9NysCMFr865CAmj Wa+zOuF/EGDRjwt6jClOKAm3QaSdTaQkHywlm+d5XJFAskW2RQ/Epl0OAR3BLu6PeoF4 cCXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ziepe.ca header.s=google header.b=QGfGz2Xe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v6-20020a63b946000000b0040c499ef469si15878752pgo.318.2022.06.27.17.45.02; Mon, 27 Jun 2022 17:45:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ziepe.ca header.s=google header.b=QGfGz2Xe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241721AbiF1AlG (ORCPT + 99 others); Mon, 27 Jun 2022 20:41:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38676 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241779AbiF1Ak7 (ORCPT ); Mon, 27 Jun 2022 20:40:59 -0400 Received: from mail-qk1-x72b.google.com (mail-qk1-x72b.google.com [IPv6:2607:f8b0:4864:20::72b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2716CDED2 for ; Mon, 27 Jun 2022 17:40:56 -0700 (PDT) Received: by mail-qk1-x72b.google.com with SMTP id b133so8573351qkc.6 for ; Mon, 27 Jun 2022 17:40:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ziepe.ca; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=nrCjPCGAs4MTUiLBt7Ijf/MJPuIyH6lM8yqPhdyhJD8=; b=QGfGz2XeyaJLxS6IycR7jteyzbs2f9vu4fQQcftWhoNW5sUtbyuMKwRS5XXshn3Hg2 yZubOZXW72TGsXoMKBc9lhqncUYMSH0Z6bymz383cNPRRHeF7rKM5RXMNm4Eaw5tsGTg BQX0bHWNlf6m2F5J4oWG32dxQT2CTBmnGX6tl+1lipYgts8fc/1uUmHwN5t3zZzoA6Qn DTeDwoNVOxWo0hy32OR9hFE/UO0/97qh5eo+5ewqu/iIRVMFQ1AIctopaFBuZOm9BPLs HAx/pGMXLvvVO6Cb9sesF2T5smUMb44u7gsx78px69APS8fFzY4PmSgo/WM3D328ZbRr X/FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=nrCjPCGAs4MTUiLBt7Ijf/MJPuIyH6lM8yqPhdyhJD8=; b=XIP4GYhisiklp2hUHIcfwu6eN0tHz6enUROSgZZS3bZRxIjeeidMTwjX0QqSVBDlp5 H10Wi/xIPX1C631py59DmPAoOk0kOY6tv6sinRW49iwotsi+CNCdOMYxbXqSWa9jZ6sZ M252ykdWM9ow6PDkOioxaqsUj+oxjLSvnxXMtwGGQH2owtOgN77J++1c/th7olhLe4bj fNKtC2IQ+jG99zxNealC2jTU7nKMNmcnvTw+qhkertHpoyY+WzhUPmTZgaya7ivOVbT/ tejrtRcOMF8WBQ1ZwW/UfzAEHi/CY8FSDzK6IGlWvCmr62Z6R4cyqRWGRzzi8Go28Wvp BTDQ== X-Gm-Message-State: AJIora/CrA5V6MiUnMQ5l+YDGsIwoTuoFtplAdk/A0lqu7/sX/XZxyVD TeU1wgNY1nmKEb0SF/ModQ1V9A== X-Received: by 2002:a05:620a:1450:b0:6af:1999:5f4c with SMTP id i16-20020a05620a145000b006af19995f4cmr7538467qkl.301.1656376854703; Mon, 27 Jun 2022 17:40:54 -0700 (PDT) Received: from ziepe.ca (hlfxns017vw-142-162-113-129.dhcp-dynamic.fibreop.ns.bellaliant.net. [142.162.113.129]) by smtp.gmail.com with ESMTPSA id x11-20020a05620a448b00b006a768c699adsm10335849qkp.125.2022.06.27.17.40.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jun 2022 17:40:53 -0700 (PDT) Received: from jgg by mlx with local (Exim 4.94) (envelope-from ) id 1o5zHg-002iu4-9Z; Mon, 27 Jun 2022 21:40:52 -0300 Date: Mon, 27 Jun 2022 21:40:52 -0300 From: Jason Gunthorpe To: Daniel Borkmann Cc: "Gustavo A. R. Silva" , Kees Cook , linux-kernel@vger.kernel.org, x86@kernel.org, dm-devel@redhat.com, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, netdev@vger.kernel.org, bpf@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-can@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux1394-devel@lists.sourceforge.net, io-uring@vger.kernel.org, lvs-devel@vger.kernel.org, linux-mtd@lists.infradead.org, kasan-dev@googlegroups.com, linux-mmc@vger.kernel.org, nvdimm@lists.linux.dev, netfilter-devel@vger.kernel.org, coreteam@netfilter.org, linux-perf-users@vger.kernel.org, linux-raid@vger.kernel.org, linux-sctp@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-scsi@vger.kernel.org, target-devel@vger.kernel.org, linux-usb@vger.kernel.org, virtualization@lists.linux-foundation.org, v9fs-developer@lists.sourceforge.net, linux-rdma@vger.kernel.org, alsa-devel@alsa-project.org, linux-hardening@vger.kernel.org Subject: Re: [PATCH][next] treewide: uapi: Replace zero-length arrays with flexible-array members Message-ID: <20220628004052.GM23621@ziepe.ca> References: <20220627180432.GA136081@embeddedor> <6bc1e94c-ce1d-a074-7d0c-8dbe6ce22637@iogearbox.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <6bc1e94c-ce1d-a074-7d0c-8dbe6ce22637@iogearbox.net> X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 27, 2022 at 08:27:37PM +0200, Daniel Borkmann wrote: > On 6/27/22 8:04 PM, Gustavo A. R. Silva wrote: > > There is a regular need in the kernel to provide a way to declare > > having a dynamically sized set of trailing elements in a structure. > > Kernel code should always use “flexible array members”[1] for these > > cases. The older style of one-element or zero-length arrays should > > no longer be used[2]. > > > > This code was transformed with the help of Coccinelle: > > (linux-5.19-rc2$ spatch --jobs $(getconf _NPROCESSORS_ONLN) --sp-file script.cocci --include-headers --dir . > output.patch) > > > > @@ > > identifier S, member, array; > > type T1, T2; > > @@ > > > > struct S { > > ... > > T1 member; > > T2 array[ > > - 0 > > ]; > > }; > > > > -fstrict-flex-arrays=3 is coming and we need to land these changes > > to prevent issues like these in the short future: > > > > ../fs/minix/dir.c:337:3: warning: 'strcpy' will always overflow; destination buffer has size 0, > > but the source string has length 2 (including NUL byte) [-Wfortify-source] > > strcpy(de3->name, "."); > > ^ > > > > Since these are all [0] to [] changes, the risk to UAPI is nearly zero. If > > this breaks anything, we can use a union with a new member name. > > > > [1] https://en.wikipedia.org/wiki/Flexible_array_member > > [2] https://www.kernel.org/doc/html/v5.16/process/deprecated.html#zero-length-and-one-element-arrays > > > > Link: https://github.com/KSPP/linux/issues/78 > > Build-tested-by: https://lore.kernel.org/lkml/62b675ec.wKX6AOZ6cbE71vtF%25lkp@intel.com/ > > Signed-off-by: Gustavo A. R. Silva > > --- > > Hi all! > > > > JFYI: I'm adding this to my -next tree. :) > > Fyi, this breaks BPF CI: > > https://github.com/kernel-patches/bpf/runs/7078719372?check_suite_focus=true > > [...] > progs/map_ptr_kern.c:314:26: error: field 'trie_key' with variable sized type 'struct bpf_lpm_trie_key' not at the end of a struct or class is a GNU extension [-Werror,-Wgnu-variable-sized-type-not-at-end] > struct bpf_lpm_trie_key trie_key; > ^ This will break the rdma-core userspace as well, with a similar error: /usr/bin/clang-13 -DVERBS_DEBUG -Dibverbs_EXPORTS -Iinclude -I/usr/include/libnl3 -I/usr/include/drm -g -O2 -fdebug-prefix-map=/__w/1/s=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wmissing-prototypes -Wmissing-declarations -Wwrite-strings -Wformat=2 -Wcast-function-type -Wformat-nonliteral -Wdate-time -Wnested-externs -Wshadow -Wstrict-prototypes -Wold-style-definition -Werror -Wredundant-decls -g -fPIC -std=gnu11 -MD -MT libibverbs/CMakeFiles/ibverbs.dir/cmd_flow.c.o -MF libibverbs/CMakeFiles/ibverbs.dir/cmd_flow.c.o.d -o libibverbs/CMakeFiles/ibverbs.dir/cmd_flow.c.o -c ../libibverbs/cmd_flow.c In file included from ../libibverbs/cmd_flow.c:33: In file included from include/infiniband/cmd_write.h:36: In file included from include/infiniband/cmd_ioctl.h:41: In file included from include/infiniband/verbs.h:48: In file included from include/infiniband/verbs_api.h:66: In file included from include/infiniband/ib_user_ioctl_verbs.h:38: include/rdma/ib_user_verbs.h:436:34: error: field 'base' with variable sized type 'struct ib_uverbs_create_cq_resp' not at the end of a struct or class is a GNU extension [-Werror,-Wgnu-variable-sized-type-not-at-end] struct ib_uverbs_create_cq_resp base; ^ include/rdma/ib_user_verbs.h:644:34: error: field 'base' with variable sized type 'struct ib_uverbs_create_qp_resp' not at the end of a struct or class is a GNU extension [-Werror,-Wgnu-variable-sized-type-not-at-end] struct ib_uverbs_create_qp_resp base; Which is why I gave up trying to change these.. Though maybe we could just switch off -Wgnu-variable-sized-type-not-at-end during configuration ? Jason