From patchwork Mon Jul 4 01:40:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haibo Li X-Patchwork-Id: 12904556 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 49CB3C43334 for ; Mon, 4 Jul 2022 01:41:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:CC:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=uD8rOMAs/3M4Oxt72ySbbZE8Pt6ja3hIhLbbcO0+n7M=; b=2RlGrrnhcKakiaDg7QSkIa634U 2Zl1QMdxZggh10/aPPtjRYJz8lzlake/CYPiSTcBDpp/jjEU/1VZWoNBpvQmKjvedjErNXza5LhDj DagO3g/iyRnG3P/DrTylKoL9vuiZy77fWIV0WRBdOlSvmKhyscv9X0l5PagbsSzr4oTZ83jhac4cM qzQuXyZBIdh7R6yMfj7U6/GHTzuAfx0v0X337L3zSWqT203rp3tsOwFwtCZhG5dg+6WOAyE3saJk8 78iGAYPhRCZ4ZIofcWBNRMuBhftUhyGxLRrmnh5Y7aShf6lDpr8Yk263d2GnAbC0joIWb3JTR9SpD /iUfHElA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8B5q-002yHk-Se; Mon, 04 Jul 2022 01:41:42 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8B5n-002yCB-ET; Mon, 04 Jul 2022 01:41:42 +0000 X-UUID: da95c9edd0984c748bab43707b41757a-20220703 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.7,REQID:71aa4620-7783-4ef0-ac95-4b67316b8a21,OB:0,LO B:0,IP:0,URL:5,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,RULE:Release_Ham,ACTI ON:release,TS:5 X-CID-META: VersionHash:87442a2,CLOUDID:97b94b63-0b3f-4b2c-b3a6-ed5c044366a0,C OID:IGNORED,Recheck:0,SF:nil,TC:nil,Content:0,EDM:-3,IP:nil,URL:1,File:nil ,QS:nil,BEC:nil,COL:0 X-UUID: da95c9edd0984c748bab43707b41757a-20220703 Received: from mtkmbs11n2.mediatek.inc [(172.21.101.187)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1211450749; Sun, 03 Jul 2022 18:41:25 -0700 Received: from mtkmbs11n1.mediatek.inc (172.21.101.186) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.15; Mon, 4 Jul 2022 09:40:52 +0800 Received: from mszsdtcf10.gcn.mediatek.inc (10.16.4.60) by mtkmbs11n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.792.3 via Frontend Transport; Mon, 4 Jul 2022 09:40:51 +0800 From: Haibo Li To: Sami Tolvanen CC: , Kees Cook , "Nathan Chancellor" , Nick Desaulniers , Matthias Brugger , Peter Zijlstra , Masami Hiramatsu , "Christophe Leroy" , =?utf-8?q?Andr=C3=A9_Alme?= =?utf-8?q?ida?= , Luis Chamberlain , Juergen Gross , Haibo Li , Tiezhu Yang , Aaron Tomlin , Dmitry Torokhov , , , , , Lecopzer Chen Subject: [PATCH v2 1/2] cfi: enable sanitize for cfi.c Date: Mon, 4 Jul 2022 09:40:45 +0800 Message-ID: <20220704014046.34596-2-haibo.li@mediatek.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220704014046.34596-1-haibo.li@mediatek.com> References: <20220704014046.34596-1-haibo.li@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220703_184139_518304_018AFFFE X-CRM114-Status: GOOD ( 11.86 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org currenly,cfi.c is excluded from cfi sanitize because of cfi handler. The side effect is that we can not transfer function pointer to other files which enable cfi sanitize. Enable cfi sanitize for cfi.c and bypass cfi check for __cfi_slowpath_diag Signed-off-by: Haibo Li Signed-off-by: Lecopzer Chen --- kernel/Makefile | 3 --- kernel/cfi.c | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/kernel/Makefile b/kernel/Makefile index a7e1f49ab2b3..a997bef1a200 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -40,9 +40,6 @@ KCSAN_SANITIZE_kcov.o := n UBSAN_SANITIZE_kcov.o := n CFLAGS_kcov.o := $(call cc-option, -fno-conserve-stack) -fno-stack-protector -# Don't instrument error handlers -CFLAGS_REMOVE_cfi.o := $(CC_FLAGS_CFI) - obj-y += sched/ obj-y += locking/ obj-y += power/ diff --git a/kernel/cfi.c b/kernel/cfi.c index 08102d19ec15..6c8ae07b5835 100644 --- a/kernel/cfi.c +++ b/kernel/cfi.c @@ -311,7 +311,7 @@ static inline cfi_check_fn find_check_fn(unsigned long ptr) return fn; } -void __cfi_slowpath_diag(uint64_t id, void *ptr, void *diag) +void __nocfi __cfi_slowpath_diag(u64 id, void *ptr, void *diag) { cfi_check_fn fn = find_check_fn((unsigned long)ptr); From patchwork Mon Jul 4 01:40:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haibo Li X-Patchwork-Id: 12904599 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C13F6C433EF for ; Mon, 4 Jul 2022 02:42:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:CC:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=LLWfj/1AFzRsQguCrF5ML3U/L2tUaWfj1hwjgP5BBDE=; b=H8b3oHLEmI+A5899g4SKchshON 3pupgPK6G2/FUcfjWT58ztcG+QInhUaaLkRzwapNo7Lrz7Xb6OVTSj61ck+A5ebtI/zjCAUO+7lUd UMugq3wZya9z2IVB+VPzmhgl8wMO5CV9De3XApkglTiJWJin3s8gccm0DN10sJaKqK99EBuFbDkUS HbSSJbHHAUxTvhnPmBuy9yJ1FFfrpyZjb/dlWAQ4+5rBGI8JqHYB+isuMqHdQodJpSHcJx3E0Kzse Cncg4pWWzAFuroyzgQSBVZYQHYrzky7bf7guBo4oNTWK861eb4DQ/JPDuwww/0wzFXtJLXlQJGUnM GzBGQhOg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8C2J-003iiP-6B; Mon, 04 Jul 2022 02:42:07 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8C2G-003icX-AL; Mon, 04 Jul 2022 02:42:05 +0000 X-UUID: 5063bae16b22404ab8e0e94c09ca734b-20220703 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.7,REQID:11f36f51-44f8-45a9-b7cd-9088794e0af7,OB:0,LO B:0,IP:0,URL:5,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,RULE:Release_Ham,ACTI ON:release,TS:5 X-CID-META: VersionHash:87442a2,CLOUDID:f9b77086-57f0-47ca-ba27-fe8c57fbf305,C OID:IGNORED,Recheck:0,SF:nil,TC:nil,Content:0,EDM:-3,IP:nil,URL:1,File:nil ,QS:nil,BEC:nil,COL:0 X-UUID: 5063bae16b22404ab8e0e94c09ca734b-20220703 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 998403312; Sun, 03 Jul 2022 19:41:58 -0700 Received: from mtkmbs11n1.mediatek.inc (172.21.101.185) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.3; Mon, 4 Jul 2022 09:40:56 +0800 Received: from mszsdtcf10.gcn.mediatek.inc (10.16.4.60) by mtkmbs11n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.792.3 via Frontend Transport; Mon, 4 Jul 2022 09:40:55 +0800 From: Haibo Li To: Sami Tolvanen CC: , Kees Cook , Nathan Chancellor , Nick Desaulniers , Matthias Brugger , Peter Zijlstra , Masami Hiramatsu , Christophe Leroy , =?utf-8?q?Andr=C3=A9_Almeid?= =?utf-8?q?a?= , Luis Chamberlain , Juergen Gross , Haibo Li , Tiezhu Yang , Aaron Tomlin , Dmitry Torokhov , , , , , Lecopzer Chen Subject: [PATCH v2 2/2] cfi: free old cfi shadow asynchronously Date: Mon, 4 Jul 2022 09:40:46 +0800 Message-ID: <20220704014046.34596-3-haibo.li@mediatek.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220704014046.34596-1-haibo.li@mediatek.com> References: <20220704014046.34596-1-haibo.li@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220703_194204_409301_27CD2A3D X-CRM114-Status: GOOD ( 14.35 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Currenly, it uses synchronize_rcu() to wait old rcu reader to go away in update_shadow.In embedded platform like ARM CA7X, load_module blocks 40~50ms in update_shadow. When there are more than one hundred kernel modules, it blocks several seconds. To accelerate load_module,change synchronize_rcu to call_rcu. Signed-off-by: Haibo Li Signed-off-by: Lecopzer Chen --- kernel/cfi.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/cfi.c b/kernel/cfi.c index 6c8ae07b5835..f61439392bf8 100644 --- a/kernel/cfi.c +++ b/kernel/cfi.c @@ -43,6 +43,8 @@ typedef u16 shadow_t; struct cfi_shadow { /* Page index for the beginning of the shadow */ unsigned long base; + /* rcu to free old cfi_shadow asynchronously */ + struct rcu_head rcu; /* An array of __cfi_check locations (as indices to the shadow) */ shadow_t shadow[1]; } __packed; @@ -182,6 +184,13 @@ static void remove_module_from_shadow(struct cfi_shadow *s, struct module *mod, } } +static void free_shadow(struct rcu_head *rcu) +{ + struct cfi_shadow *old = container_of(rcu, struct cfi_shadow, rcu); + + vfree(old); +} + typedef void (*update_shadow_fn)(struct cfi_shadow *, struct module *, unsigned long min_addr, unsigned long max_addr); @@ -211,11 +220,10 @@ static void update_shadow(struct module *mod, unsigned long base_addr, rcu_assign_pointer(cfi_shadow, next); mutex_unlock(&shadow_update_lock); - synchronize_rcu(); if (prev) { set_memory_rw((unsigned long)prev, SHADOW_PAGES); - vfree(prev); + call_rcu(&prev->rcu, free_shadow); } }