Received: by 2002:a05:6358:a55:b0:ec:fcf4:3ecf with SMTP id 21csp5961267rwb; Tue, 17 Jan 2023 22:24:32 -0800 (PST) X-Google-Smtp-Source: AMrXdXuKvbzyZakxYPsJv4n0PFzVW6cxM5QbKcjlBSjcZe1y/W6IFuCPcxpw1pvd7jnoOV25Ddd8 X-Received: by 2002:a17:90b:2349:b0:226:7fcb:c215 with SMTP id ms9-20020a17090b234900b002267fcbc215mr6313742pjb.17.1674023072456; Tue, 17 Jan 2023 22:24:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674023072; cv=none; d=google.com; s=arc-20160816; b=MSaYNzvw1Kw5o8KjZzPHI6iBJvEZSQY9f9sGd9vSRk2WhyrG7u8QfzgbhQEg/bxJ6P DQ1ywvzGG7x//DgACev4P76TeGyacJ1shALozYA3MdjVRxgvVK+iTvBKp0a8Iobg2Yw/ AEa66WdzjDEXwDXZfdK0IcXceLj4pj6f0VGjx/U9kDSI03hIYHHm9+ow71+AQy8ode95 tdicH8IB0x5pNH74Vhh72cgKw6tNS8Ua/6LtNPISRl6BS9RKtiwRxTLg6lb8Cb3YsVzI ssTHa+5JrJkq+9S86lYJ1/bmK8MfadkYKLKfKc/UQKR1L2VlyqMUO8o/bKw6jU9J1hzb I2/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=zFtPZihTHsDQr4QocK1ZLeiSBRwrEN6ZHqls0oL9eDg=; b=N2yFrwKIOGnrRex+ccOUBaxzdrq29fwerSYDz5KhE83UmA29xudOefGEA0m+Rpo2hz S5KgMRWDRLsG9qwxdMNp2A06888Tbi2S0hDgnAiaDXD+J3CA6S3bhtlCJQNLe6DV9bgC PvF7/PZhUnnngLyCPGxhFnwvP6hCHj7dFCmNS2RIHm92Xa/n1TVnT2cz17g59Cz2rR5w nofodiJSrgZHCe55JIM7tGAAF75PKx1PF9Wd1TQJef/ff0DEGS5TP9WtJD1OwHX/akMO QsLKBq2NqoNTeuRM09fnXI+9vQsRnTWle6qQg2D2E1Yj2xeOjo4q6sCNm0qliRG5/9l6 ZvWg== ARC-Authentication-Results: i=1; mx.google.com; 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 a6-20020a17090a854600b002196cd830e6si1191725pjw.11.2023.01.17.22.24.26; Tue, 17 Jan 2023 22:24:32 -0800 (PST) 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; 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 S229649AbjARGWD (ORCPT + 46 others); Wed, 18 Jan 2023 01:22:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54116 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229739AbjARGTT (ORCPT ); Wed, 18 Jan 2023 01:19:19 -0500 Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3AF7B46158 for ; Tue, 17 Jan 2023 22:07:07 -0800 (PST) Received: from loongson.cn (unknown [111.9.175.10]) by gateway (Coremail) with SMTP id _____8BxZ+lBjMdj_UQCAA--.1648S3; Wed, 18 Jan 2023 14:05:53 +0800 (CST) Received: from [10.136.12.26] (unknown [111.9.175.10]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Bxb+Q+jMdjdisbAA--.16958S3; Wed, 18 Jan 2023 14:05:52 +0800 (CST) Subject: Re: [PATCH v12 4/5] LoongArch: Mark some assembler symbols as non-kprobe-able To: Tiezhu Yang , Huacai Chen Cc: WANG Xuerui , Masami Hiramatsu , loongarch@lists.linux.dev, linux-kernel@vger.kernel.org References: <1674007261-9198-1-git-send-email-yangtiezhu@loongson.cn> <1674007261-9198-5-git-send-email-yangtiezhu@loongson.cn> <48f0508f-3908-c6ca-c8ba-7c12dd6b3f11@loongson.cn> From: Jinyang He Message-ID: <7f518dec-fd72-a73c-3f23-6372a83d65c2@loongson.cn> Date: Wed, 18 Jan 2023 14:05:50 +0800 User-Agent: Mozilla/5.0 (X11; Linux loongarch64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <48f0508f-3908-c6ca-c8ba-7c12dd6b3f11@loongson.cn> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-CM-TRANSID: AQAAf8Bxb+Q+jMdjdisbAA--.16958S3 X-CM-SenderInfo: pkhmx0p1dqwqxorr0wxvrqhubq/ X-Coremail-Antispam: 1Uk129KBjvJXoWxXFW7Gr4UZr15Jr1xGr1kuFg_yoWrZFW5pr 1kAFs8trZ5Gr18Jry7tw18X34Utrn7G3Wjqw1jyFy8Jr47Xr1jgry0gr4q9FyxJw4xGr10 qF1rXrnrZF45Ja7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU bI8YFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_JrI_Jryl8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVW8JVW5JwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwA2z4 x0Y4vEx4A2jsIE14v26r4UJVWxJr1l84ACjcxK6I8E87Iv6xkF7I0E14v26r4UJVWxJr1l e2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44I27wAqx4xG64xvF2 IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_JrI_JrylYx0Ex4A2jsIE14v26r1j6r4U McvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvEwIxGrwCYjI0SjxkI62AI1cAE67vIY487Mx AIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_ Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0EwI xGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWUJVW8 JwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcV C2z280aVCY1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxUzZ2-UUUUU X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,NICE_REPLY_A, SPF_HELO_PASS,SPF_PASS 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 2023-01-18 12:23, Tiezhu Yang wrote: > > > On 01/18/2023 12:14 PM, Huacai Chen wrote: >> If memcpy should be blacklisted, then what about memset and memmove? > > According to the test results, there are no problems to probe > memset and memmove, so no need to blacklist them for now, > blacklist memcpy is because it may cause recursive exceptions, > there is a detailed discussion in the following link: > > https://lore.kernel.org/lkml/20230114143859.7ccc45c1c5d9ce302113ab0a@kernel.org/ > Hi, Tiezhu, I cannot reproduce the results when kprobe memcpy. Could you please give some details. Emm, I just replace "kernel_clone" with "memcpy" in kprobe_example.c. And for your call trace,  handler_pre()    pr_info()      printk()       _printk()         vprintk()           vprintk_store()             memcpy() I think when we should skip this time kprobe which triggered in handler_{pre, post}. That means this time kprobe will not call handler_{pre, post} agian, and not cause recursion. I remember your codes had done this skip action. So, that's so strange if recursion in handler_{pre, post}. Thanks, Jinyang > > Thanks, > Tiezhu > >> >> Huacai >> >> On Wed, Jan 18, 2023 at 10:01 AM Tiezhu Yang >> wrote: >>> >>> Some assembler symbols are not kprobe safe, such as handle_syscall >>> (used as syscall exception handler), *memcpy* (may cause recursive >>> exceptions), they can not be instrumented, just blacklist them for >>> kprobing. >>> >>> Here is a related problem and discussion: >>> Link: >>> https://lore.kernel.org/lkml/20230114143859.7ccc45c1c5d9ce302113ab0a@kernel.org/ >>> >>> Signed-off-by: Tiezhu Yang >>> --- >>>  arch/loongarch/include/asm/asm.h | 10 ++++++++++ >>>  arch/loongarch/kernel/entry.S    |  1 + >>>  arch/loongarch/lib/memcpy.S      |  3 +++ >>>  3 files changed, 14 insertions(+) >>> >>> diff --git a/arch/loongarch/include/asm/asm.h >>> b/arch/loongarch/include/asm/asm.h >>> index 40eea6a..f591b32 100644 >>> --- a/arch/loongarch/include/asm/asm.h >>> +++ b/arch/loongarch/include/asm/asm.h >>> @@ -188,4 +188,14 @@ >>>  #define PTRLOG         3 >>>  #endif >>> >>> +/* Annotate a function as being unsuitable for kprobes. */ >>> +#ifdef CONFIG_KPROBES >>> +#define _ASM_NOKPROBE(name)                            \ >>> +       .pushsection "_kprobe_blacklist", "aw";         \ >>> +       .quad   name;                                   \ >>> +       .popsection >>> +#else >>> +#define _ASM_NOKPROBE(name) >>> +#endif >>> + >>>  #endif /* __ASM_ASM_H */ >>> diff --git a/arch/loongarch/kernel/entry.S >>> b/arch/loongarch/kernel/entry.S >>> index d53b631..55e23b1 100644 >>> --- a/arch/loongarch/kernel/entry.S >>> +++ b/arch/loongarch/kernel/entry.S >>> @@ -67,6 +67,7 @@ SYM_FUNC_START(handle_syscall) >>> >>>         RESTORE_ALL_AND_RET >>>  SYM_FUNC_END(handle_syscall) >>> +_ASM_NOKPROBE(handle_syscall) >>> >>>  SYM_CODE_START(ret_from_fork) >>>         bl      schedule_tail           # a0 = struct task_struct *prev >>> diff --git a/arch/loongarch/lib/memcpy.S b/arch/loongarch/lib/memcpy.S >>> index 7c07d59..3b7e1de 100644 >>> --- a/arch/loongarch/lib/memcpy.S >>> +++ b/arch/loongarch/lib/memcpy.S >>> @@ -17,6 +17,7 @@ SYM_FUNC_START(memcpy) >>>         ALTERNATIVE     "b __memcpy_generic", \ >>>                         "b __memcpy_fast", CPU_FEATURE_UAL >>>  SYM_FUNC_END(memcpy) >>> +_ASM_NOKPROBE(memcpy) >>> >>>  EXPORT_SYMBOL(memcpy) >>> >>> @@ -41,6 +42,7 @@ SYM_FUNC_START(__memcpy_generic) >>>  2:     move    a0, a3 >>>         jr      ra >>>  SYM_FUNC_END(__memcpy_generic) >>> +_ASM_NOKPROBE(__memcpy_generic) >>> >>>  /* >>>   * void *__memcpy_fast(void *dst, const void *src, size_t n) >>> @@ -93,3 +95,4 @@ SYM_FUNC_START(__memcpy_fast) >>>  3:     move    a0, a3 >>>         jr      ra >>>  SYM_FUNC_END(__memcpy_fast) >>> +_ASM_NOKPROBE(__memcpy_fast) >>> -- >>> 2.1.0 >>> >