Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp514938rwe; Fri, 26 Aug 2022 09:04:22 -0700 (PDT) X-Google-Smtp-Source: AA6agR7SIA74GvHG/ULMAX1rhqhIVIJPzs4eGAw4003OsOvDBYrOzIBNzvqGyRKsDKGcz2PrYYx2 X-Received: by 2002:a05:6a00:2395:b0:536:8296:51d5 with SMTP id f21-20020a056a00239500b00536829651d5mr4570442pfc.84.1661529861725; Fri, 26 Aug 2022 09:04:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661529861; cv=none; d=google.com; s=arc-20160816; b=S/Sf57N8/EFi/Xhze8+XDJiqIztCC8pHTXzXyBMYsg9LXBjfQfbhwS9PfQtfK/prff rk/ABb/4KbXACV9V1A/JgcDoZ7eLo/L22c+WZya4iVdO+zxNmvYAWuMjps6/5ndjViZ4 m9Xr9iYgLdhJvh16rGoEWS1DeRk3/ZuGVAG0rbMo+YRa67zec5l2uoAKx8VlYLbxbnJB HgCfwGh0xxB4vMYHFxrsWmNTYQ3AbJkNAC1RCTgj8y6LKGo3IRNSEuSxo7ctqYW0gGz9 dA0qt5dh/ZdYQO21mbCsmjtw4Zt55K/FWMYAg0UYjbum8Mpwd2Hh+jWdi5YVFHTPGUJY S6Eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=wnBRr6RijpcrZwDY4IvPeedZIJ4FbGOivCI4jGGTq68=; b=TkYeX6jh5NjjYcpG+JRa3xan60Mj4u558OMeD/f9Y0oWPX/FyE9rAa1a+GHEfj83Mc +3Uju6oP0kuBtL4uj75T3StAnnNlpal5fGLj4AVENELaPSIfdzt7xb5zROMtyiSA+zsT fwdt7vlzMsHICRHKhAsWEgX/3pggivCsM4LAGjY2q6QxZzxR2Rw9Cm9syJvEN2sYne4G QWstM0ZrswgiTEcmokC67SWEPko8CUe88WaaXuCilAg6UHs/aMoZXE0hdm15IAWymd1R ZRw3asFtJ2Cna1P8iu9SbNDYU8ITWpPT8te4XmEOiusUUdlPxo/d7E6AUDqT40gDtuwD wEug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Q2dLT3h7; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r10-20020a170902c7ca00b0016dd2643111si1676740pla.311.2022.08.26.09.04.09; Fri, 26 Aug 2022 09:04:21 -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=@google.com header.s=20210112 header.b=Q2dLT3h7; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242796AbiHZPOy (ORCPT + 99 others); Fri, 26 Aug 2022 11:14:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343764AbiHZPNl (ORCPT ); Fri, 26 Aug 2022 11:13:41 -0400 Received: from mail-ej1-x64a.google.com (mail-ej1-x64a.google.com [IPv6:2a00:1450:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 445C0DEFD for ; Fri, 26 Aug 2022 08:09:47 -0700 (PDT) Received: by mail-ej1-x64a.google.com with SMTP id hb37-20020a170907162500b0073d7f7fbbbfso725540ejc.17 for ; Fri, 26 Aug 2022 08:09:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc; bh=wnBRr6RijpcrZwDY4IvPeedZIJ4FbGOivCI4jGGTq68=; b=Q2dLT3h7TWqrdhr9cKJaZHS7iaLiqYTtydJ8WFBafxLMcKO+tWNvB/c1oHlNA44pJ7 /OXz8Sr59WCHZVNiYq5ZO1SudMDbRYsAoPTTGJZwqRehknAE2rlYQmFGjPCW+F59/jA8 4CGBdHbeqGVMdW2YUIUBHbdr0K3ckRBLlyr7LkOy1/yf2HWblMEVwWDcc4r9h7xID/vX XMqQsXajhwumZ46fKGFKaccQ9fQsrPuYa0ruT4rNz0CxhrMmw4c71iIpLPuYx4UZ7eQv mqdpWuXSHPVCrwsBJhHLWeKUt/81aDaMfsn199V9hC6WQQ+JcGqn5dar3vI5lIw7PM1Z VyHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc; bh=wnBRr6RijpcrZwDY4IvPeedZIJ4FbGOivCI4jGGTq68=; b=luXe1OUtwO59MaVgQQ1GzRya3rEJDPbejPrEeScdKIDoBbFa9oPT+JNvtgIhGidMvx T3UqJV1fzet95uzzYrdqTaShphiFqt/v3dpTwxI3x+u3RpgxRlfuDkb8hQJBkMAXWzRA YNykwn1SwT+ZjNTHRIFqldbH6xweMa/2c+QRW2hU5AgCRwuUWjDDtKKr5SehYN0pJ5KC hnPknlD3Y73uM0xHE59V7GqEI92scFbovENSr0IADQ0w+dRTBHbEizHFAZNxQHqIV8qW fBKsAqdoE6TPdOmTByffqIm0+ZuyWbw+naOjAbdeUKpB24rUncluXobPQ9wxqChMmCys xjwA== X-Gm-Message-State: ACgBeo311ehU5ZnRfxG5zHb3RTYpa0OvvodK4Bed98alaqvehCBXh02x Dmnwyl3DLGhRSc/4lcjLOnylmPTmINA= X-Received: from glider.muc.corp.google.com ([2a00:79e0:9c:201:5207:ac36:fdd3:502d]) (user=glider job=sendgmr) by 2002:a05:6402:268d:b0:43d:b9d0:9efc with SMTP id w13-20020a056402268d00b0043db9d09efcmr7340129edd.92.1661526582428; Fri, 26 Aug 2022 08:09:42 -0700 (PDT) Date: Fri, 26 Aug 2022 17:07:55 +0200 In-Reply-To: <20220826150807.723137-1-glider@google.com> Mime-Version: 1.0 References: <20220826150807.723137-1-glider@google.com> X-Mailer: git-send-email 2.37.2.672.g94769d06f0-goog Message-ID: <20220826150807.723137-33-glider@google.com> Subject: [PATCH v5 32/44] objtool: kmsan: list KMSAN API functions as uaccess-safe From: Alexander Potapenko To: glider@google.com Cc: Alexander Viro , 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@googlegroups.com, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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 KMSAN inserts API function calls in a lot of places (function entries and exits, local variables, memory accesses), so they may get called from the uaccess regions as well. KMSAN API functions are used to update the metadata (shadow/origin pages) for kernel memory accesses. The metadata pages for kernel pointers are also located in the kernel memory, so touching them is not a problem. For userspace pointers, no metadata is allocated. If an API function is supposed to read or modify the metadata, it does so for kernel pointers and ignores userspace pointers. If an API function is supposed to return a pair of metadata pointers for the instrumentation to use (like all __msan_metadata_ptr_for_TYPE_SIZE() functions do), it returns the allocated metadata for kernel pointers and special dummy buffers residing in the kernel memory for userspace pointers. As a result, none of KMSAN API functions perform userspace accesses, but since they might be called from UACCESS regions they use user_access_save/restore(). Signed-off-by: Alexander Potapenko --- v3: -- updated the patch description v4: -- add kmsan_unpoison_entry_regs() Link: https://linux-review.googlesource.com/id/I242bc9816273fecad4ea3d977393784396bb3c35 --- tools/objtool/check.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 91678252a9b67..577dfdca635e8 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -1060,6 +1060,26 @@ static const char *uaccess_safe_builtin[] = { "__sanitizer_cov_trace_cmp4", "__sanitizer_cov_trace_cmp8", "__sanitizer_cov_trace_switch", + /* KMSAN */ + "kmsan_copy_to_user", + "kmsan_report", + "kmsan_unpoison_entry_regs", + "kmsan_unpoison_memory", + "__msan_chain_origin", + "__msan_get_context_state", + "__msan_instrument_asm_store", + "__msan_metadata_ptr_for_load_1", + "__msan_metadata_ptr_for_load_2", + "__msan_metadata_ptr_for_load_4", + "__msan_metadata_ptr_for_load_8", + "__msan_metadata_ptr_for_load_n", + "__msan_metadata_ptr_for_store_1", + "__msan_metadata_ptr_for_store_2", + "__msan_metadata_ptr_for_store_4", + "__msan_metadata_ptr_for_store_8", + "__msan_metadata_ptr_for_store_n", + "__msan_poison_alloca", + "__msan_warning", /* UBSAN */ "ubsan_type_mismatch_common", "__ubsan_handle_type_mismatch", -- 2.37.2.672.g94769d06f0-goog