Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp186223imw; Mon, 4 Jul 2022 07:24:50 -0700 (PDT) X-Google-Smtp-Source: AGRyM1v4jsdAZ2U4JeQLA8Xkxn2Zr9JtdMFih1EYv3e7RS2yhj1E6MtuSxCdBE6QWN929699Pr1l X-Received: by 2002:a05:6402:4386:b0:437:6450:b41f with SMTP id o6-20020a056402438600b004376450b41fmr39199848edc.97.1656944690749; Mon, 04 Jul 2022 07:24:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656944690; cv=none; d=google.com; s=arc-20160816; b=ERsb4DVM4gyo9Zjr4tv6Zfq2dwdD64eswIU3mVnDd1L5ToxzlF5HCIMeGZlaQsIx2k kh7A4giNp91GNUjT/53a27Y9MUofLinVSym1A4LB/O9ht2CEgdIz5PICaUFOlrZ6P5s+ 8SNXNPKI6E3PmaMnGSzTIdThSYpcf/Mvd5e5N4kFULNGkTYByaAFXgZnTdLlFtqdGQlL Dv4IKMVPSmWKUXN3zAntC572lUp5oQEA2FKbBGck6l1pzRCLSFDSI3s36qrzvZDayjV7 t7b4uieK2DZmZ1XiV4ZhSlhpq93yRHrT+paZ7yf8Ey5kULlcxoAcF3Ncwvn5x/o9Dbre kWmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=L6wSaDv21i8IBXuOCFtPFoc5AHwc9orKajt9IjPXWew=; b=rvOsIKDcWR1pmNrwITIWLCZNPpQOl5nl80c369gXpmxvks2LqqfIEObcFQrKzo51sg rRZ6awOzNJ5ol+rwMPNiXHgqLdKbfwMoLsAI8mXdFnQZhhtwbFF9FinA/GjuwrKK6C5g W+f0Sz0RYN9zS5ooALWSl/ZY49R3LHVAYKfsMM5q/ty538aBdvRKZulZBdVGdUB1UVSQ dRrviVHVIWM+YOLJxviLI4fMfqIJkuYFBL6iPzKYxgmovEspCc/pcKCz39sAb4EbclPj XO5OksnrXXJOPEyeH98SMMhXswVJOqYUaWuLaP/+Ad3IfZ/iL5JnXmdV+0/NQGRUsulR uZTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.org.uk header.s=zeniv-20220401 header.b="nQ/NIdPX"; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b6-20020a056402138600b00437e084327dsi17232288edv.278.2022.07.04.07.24.25; Mon, 04 Jul 2022 07:24:50 -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=@linux.org.uk header.s=zeniv-20220401 header.b="nQ/NIdPX"; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233742AbiGDNoy (ORCPT + 99 others); Mon, 4 Jul 2022 09:44:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51666 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232773AbiGDNox (ORCPT ); Mon, 4 Jul 2022 09:44:53 -0400 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [IPv6:2a03:a000:7:0:5054:ff:fe1c:15ff]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40464271C; Mon, 4 Jul 2022 06:44:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=L6wSaDv21i8IBXuOCFtPFoc5AHwc9orKajt9IjPXWew=; b=nQ/NIdPXtNBa1KvneVnc6Ud5sy AWLprlY/lSUgAqO/wXcXY7jfFsKYSz3fHXyccL9RtCWjtEfSm/s389xh5h+jkRKIi1FdiCXhliL0f 8sz0JSaY9hIoeOYx+y5zBxWytVcq9KL7lCgnnw9faFOMcHEwPXGsB/i5Nty53v4nQ/imEIX8YU+K8 1st3oS9326bC1Q/y4IN6KDj9ND8o2Dcrclvc9TRD+Yf0/Y2NjQ2J6VpfAeIVwIEEKtKUGP/FJiDmR LxPuicJhlwu/sL0iqNdztvcSN2PT86QPnT85mshLE0+o7ec+5Xb83LQmN8e7I+IlqHyY67Q7B1jfs bmA/A14g==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.95 #2 (Red Hat Linux)) id 1o8MMq-0081dA-Ie; Mon, 04 Jul 2022 13:44:00 +0000 Date: Mon, 4 Jul 2022 14:44:00 +0100 From: Al Viro To: Alexander Potapenko Cc: Linus Torvalds , Alexei Starovoitov , Andrew Morton , Andrey Konovalov , Andy Lutomirski , Arnd Bergmann , Borislav Petkov , Christoph Hellwig , Christoph Lameter , David Rientjes , Dmitry Vyukov , Eric Dumazet , Greg Kroah-Hartman , Herbert Xu , Ilya Leoshkevich , Ingo Molnar , Jens Axboe , Joonsoo Kim , Kees Cook , Marco Elver , Mark Rutland , Matthew Wilcox , "Michael S. Tsirkin" , Pekka Enberg , Peter Zijlstra , Petr Mladek , Steven Rostedt , Thomas Gleixner , Vasily Gorbik , Vegard Nossum , Vlastimil Babka , kasan-dev , Linux-MM , linux-arch , Linux Kernel Mailing List , Evgenii Stepanov , Nathan Chancellor , Nick Desaulniers , Segher Boessenkool , Vitaly Buka , linux-toolchains Subject: Re: [PATCH v4 43/45] namei: initialize parameters passed to step_into() Message-ID: References: <20220701142310.2188015-1-glider@google.com> <20220701142310.2188015-44-glider@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: Al Viro X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham 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, Jul 04, 2022 at 10:20:53AM +0200, Alexander Potapenko wrote: > What makes you think they are false positives? Is the scenario I > described above: > > """ > In particular, if the call to lookup_fast() in walk_component() > returns NULL, and lookup_slow() returns a valid dentry, then the > `seq` and `inode` will remain uninitialized until the call to > step_into() > """ > > impossible? Suppose step_into() has been called in non-RCU mode. The first thing it does is int err = handle_mounts(nd, dentry, &path, &seq); if (err < 0) return ERR_PTR(err); And handle_mounts() in non-RCU mode is path->mnt = nd->path.mnt; path->dentry = dentry; if (nd->flags & LOOKUP_RCU) { [unreachable code] } [code not touching seqp] if (unlikely(ret)) { [code not touching seqp] } else { *seqp = 0; /* out of RCU mode, so the value doesn't matter */ } return ret; In other words, the value seq argument of step_into() used to have ends up being never fetched and, in case step_into() gets past that if (err < 0) that value is replaced with zero before any further accesses. So it's a false positive; yes, strictly speaking compiler is allowd to do anything whatsoever if it manages to prove that the value is uninitialized. Realistically, though, especially since unsigned int is not allowed any trapping representations... If you want an test stripped of VFS specifics, consider this: int g(int n, _Bool flag) { if (!flag) n = 0; return n + 1; } int f(int n, _Bool flag) { int x; if (flag) x = n + 2; return g(x, flag); } Do your tools trigger on it?