Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1401938pxj; Fri, 21 May 2021 13:22:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkYdUu/Ic9Nl6K8k/yZVcAiMG7odaIn3awQyWpfP91Bc8FCj6o1zwm+kG8qfLFsno8XBkX X-Received: by 2002:a6b:7901:: with SMTP id i1mr630412iop.41.1621628532950; Fri, 21 May 2021 13:22:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621628532; cv=none; d=google.com; s=arc-20160816; b=CxsVuta8WYgytKFG1RXBSuYadG9CkQ3aMxFNcpTepVNHuWZHvoMAFxOKQPNFACe1gR fXfYK9kP2aJ74xvDsvN5cY1ALWY0Pi77qrbY/svOFDi5MmzA0T3UAKzfJ9ZrtxK1NeHA e+MCKG2EJUF2qoWYMnMOzJGx0rqwilx7Zz/QUN8R+nPdKa1lDcUmT+m3kIcQ5TLmoTzK icsCIanGHBrqGHGbgx5wy6o6cFYrrFL9mPfx+xJW2FKZaIVYTtQA6MDCaMNFkHGgXRTw y2WvU1vHaGGZVLlrgiEJoPWaKrI/7xZrVdSDfOU3Iv2OBaYyy8iCygvReT5ERP8CHodr QRyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=PpKwvjbA34GT8TUG22JN9qkVwoh1EUba8E0GHkNoJmQ=; b=UxT16QdXRxqyfNU2Q2pztYqOaCBrbFycOhHKFLdoY8xBLCHrvsk4Ixbob/Zs2GKuIY 0+mJ8+oTgSgDxjHnIt2UhVztlbje6TTHc8FOJcfNMas7rzTZTp9Ro3mbfoWdeX6uuLUL 4E71qd3Iy1GvbNwEG/Vdta32NUeZUFRYMpGX0xzR25Ub34TuWqEoOJlHtt2TCO1n2WOO XrYbNOPa+A92LsciXSzZgmd9nBo0klCKVSewPTOgU4D5XpPhXX+uor02tyauW4ZepjQX nqyutopC6Hy2s3MebiNtlWJu2ZOC1v9YXCAiD5ybNR736UpSyEdO6YcSFP7RUn3ZWIoS V4fA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=em0mpm2y; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v1si8557827iof.80.2021.05.21.13.21.59; Fri, 21 May 2021 13:22:12 -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=@google.com header.s=20161025 header.b=em0mpm2y; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236382AbhEUQhs (ORCPT + 99 others); Fri, 21 May 2021 12:37:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235890AbhEUQhs (ORCPT ); Fri, 21 May 2021 12:37:48 -0400 Received: from mail-yb1-xb2f.google.com (mail-yb1-xb2f.google.com [IPv6:2607:f8b0:4864:20::b2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C53C6C061574 for ; Fri, 21 May 2021 09:36:23 -0700 (PDT) Received: by mail-yb1-xb2f.google.com with SMTP id g38so28230563ybi.12 for ; Fri, 21 May 2021 09:36:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=PpKwvjbA34GT8TUG22JN9qkVwoh1EUba8E0GHkNoJmQ=; b=em0mpm2yxRHrbVKZJHw81smO2VkQ9WjqoJopTyCk4SqJWcGpmTNpP78rSdPKRktyoY lOeRxGxmCvDkgoJ0IipkVaeIOja96VuOBZ8sFpBRc/EAZhB1V6YN7d9FOSgagx9aAc2R hJEVKM9bvGL6/DEAuW8p85sv67hEzppiQbZJkx4QKUBI4p8L2Va050y3NU6xyyZrTAzG Jw/s6+Y9fAo3ktpu0WkF4KtK32uK9B+K1RNeWhCxiHgxbK1EWSv6yLNiqRaD6ejq8okz vyfclJXdfFdoYBnaoB/fk4h0K5/YrDzUADdT9edoHnhIOx36C43X8jNl8R+AbJ+IG9Op 5BrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=PpKwvjbA34GT8TUG22JN9qkVwoh1EUba8E0GHkNoJmQ=; b=JXsVX2tJei6CA+JWpZ7vP8xuqhsajJX0nL6K+HNXTDzIfUQkYGE8kUcB75ub2Z2IBN behNLcfzpS7Lw6hhMOuMCeGqFGFFGtzdPHy7pnta1MQlJ+MTB2eMnJGmq9q2LkFRFyBP AZ51CQTKwEXkmRdKuXj0id4lb19DDjuYCHqrJz0P1NL0p1tHhEYYPhmzhfCLI9noGTd/ VApuHeVfzqZya4SO1M/xJnYS8r29gEo12moqh8m4B2EsALBtjsJPd7N2xVlx0shqJThv eTzA7sYQ/BFdw+Ov8bmtvZsq94UGSIcNsbGv4iEH3nCfIwms2LXkPOTCWYY1I0TGNSBm jUoA== X-Gm-Message-State: AOAM530wWe+qRyF1MJKejxYRathLpOPyt4ChjiQg38u6xNLrpuQSbRCW P77AUMGL+3ge4uxQEalddUGneh1DFO0mbPxJiUSDm70Ovr0= X-Received: by 2002:a5b:386:: with SMTP id k6mr16200616ybp.235.1621614982594; Fri, 21 May 2021 09:36:22 -0700 (PDT) MIME-Version: 1.0 References: <20210521072610.2880286-1-elver@google.com> In-Reply-To: <20210521072610.2880286-1-elver@google.com> From: Sami Tolvanen Date: Fri, 21 May 2021 09:36:11 -0700 Message-ID: Subject: Re: [PATCH] init: verify that function is initcall_t at compile-time To: Marco Elver Cc: LKML , Kees Cook , ojeda@kernel.org, johan@kernel.org, Andrew Morton , Masahiro Yamada , Joe Perches , Arnd Bergmann , "Paul E. McKenney" , Nathan Chancellor Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Marco, On Fri, May 21, 2021 at 12:26 AM Marco Elver wrote: > > In the spirit of making it hard to misuse an interface, add a > compile-time assertion in the CONFIG_HAVE_ARCH_PREL32_RELOCATIONS case > to verify the initcall function matches initcall_t, because the inline > asm bypasses any type-checking the compiler would otherwise do. This > will help developers catch incorrect API use in all configurations. > > A recent example of this is: > https://lkml.kernel.org/r/20210514140015.2944744-1-arnd@kernel.org > > Signed-off-by: Marco Elver > Reviewed-by: Miguel Ojeda > Reviewed-by: Nathan Chancellor > Tested-by: Nathan Chancellor > --- > include/linux/init.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/include/linux/init.h b/include/linux/init.h > index 045ad1650ed1..d82b4b2e1d25 100644 > --- a/include/linux/init.h > +++ b/include/linux/init.h > @@ -242,7 +242,8 @@ extern bool initcall_debug; > asm(".section \"" __sec "\", \"a\" \n" \ > __stringify(__name) ": \n" \ > ".long " __stringify(__stub) " - . \n" \ > - ".previous \n"); > + ".previous \n"); \ > + static_assert(__same_type(initcall_t, &fn)); > #else > #define ____define_initcall(fn, __unused, __name, __sec) \ > static initcall_t __name __used \ This looks like a nice improvement, thank you for sending the patch! Reviewed-by: Sami Tolvanen Sami