Received: by 10.192.165.148 with SMTP id m20csp318997imm; Thu, 3 May 2018 21:17:31 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrL+t4nrgwKLHJE4O3LwtxjsbPZxueLFeq3USFdOTbKXQn6sIo9Nw1C475tbVfqTXJIsw1w X-Received: by 2002:a17:902:8d8b:: with SMTP id v11-v6mr27111007plo.9.1525407451879; Thu, 03 May 2018 21:17:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525407451; cv=none; d=google.com; s=arc-20160816; b=BLYbZCnzhQVEzh06GGQrr91oWmSR5yKZi84HJLxJ6+F01sL307ye2R5haDj0CBVmea egGTznTWC0WMPO/n2gz2OYttgAdTXBJO6KNRVaFvs12jZ8g4BU+FKVgI1IAyseNpG+uc ecsKwEVHlrLkZ5eRe0XxlKiL6s79MgVgWz3Aeej5U3BMwxE7s2kPUKAiuRrqQm56qz3I nkpQDIpxlwxBwkJWg0+9uEyuuRi1rM4k9mjhl/ww9e5+GLsVj0t41VZfsIusYQ3Sr3UN TGwIh2JyQVxX5uZ6tQGOp/Ip+xIDFAxpvrzmasjXznCmeonUHZX+DSessDkpbz5HRLq2 pnsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-authentication-results; bh=DjuVfEogpdgQSyMRRy/18fOfcCEiWQOePuzGmkMwgHc=; b=yRj6UL0DnfTCUY8hOeFnvuOJXEC2fWIMtVInaTV3OitWPz+IUXjkBKNd4rJ2kqZNt5 8ZndsM60eCC0NpotX8sJMwpspl5Zvujrlf8w/Jfew+lEvj9pmg5j8WxgICulMvnsx+6W GXEUFzGTA2L/Y4Eb7tNXAhVNfW2gj4fagJrFujuLRwTxsukeTqHgiHVsQLyh2v9rlwxM zCl4buRz+lbHHRvIgivJHKgPZ8wWbDalfyGbcTQzJv8t832cUpBUQ9Emk8hpsODEeyyV g9XtDiAcHiSj6KOebi3jo2mYtN9xkJ/VsIFROYen43tkX0zmU7pKPwLe3VZ3Ja4WDcVx UVgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VGEeltiS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r7-v6si15406646plo.486.2018.05.03.21.17.17; Thu, 03 May 2018 21:17:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VGEeltiS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751432AbeEDEQw (ORCPT + 99 others); Fri, 4 May 2018 00:16:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:42844 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750820AbeEDEQu (ORCPT ); Fri, 4 May 2018 00:16:50 -0400 Received: from localhost.localdomain (NE2965lan1.rev.em-net.ne.jp [210.141.244.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D14AF21716; Fri, 4 May 2018 04:16:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1525407410; bh=4LACn5y8ujM/wnpkjEJi78gFk9xbP91feScBR2kcV5Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VGEeltiSjyMEw3oGb7JbX8WJ2SCtYQy83jsKoyF6DpOVx7WJT93hheetYhizIUH2l CC0VWk5M/6qDs9DrGvfrKxAdTAsBLJwwiocxFexbXUkaGnNGHYcwYRZTZhqX0fi3It z6+ZDrNg//peKPpzEqbBfYtm32jTSWqeYq5Di8Kw= From: Masami Hiramatsu To: Russell King Cc: Wang Nan , Will Deacon , Jon Medhurst , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, mhiramat@kernel.org, David Long , stable@vger.kernel.org Subject: [BUGFIX PATCH v3 4/4] arm: kprobes: Prohibit kprobes on get_user functions Date: Fri, 4 May 2018 13:16:27 +0900 Message-Id: <152540738682.29650.10638462666953783065.stgit@devbox> X-Mailer: git-send-email 2.13.6 In-Reply-To: <152540727123.29650.13679359124038587629.stgit@devbox> References: <152540727123.29650.13679359124038587629.stgit@devbox> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since do_undefinstr() uses get_user to get the undefined instruction, it can be called before kprobes processes recursive check. This can cause an infinit recursive exception. Prohibit probing on get_user functions. Fixes: 24ba613c9d6c ("ARM kprobes: core code") Signed-off-by: Masami Hiramatsu Cc: stable@vger.kernel.org --- Changes in v2: - Fix to add _ASM_NOKPROBE() definition for !CONFIG_KPROBES. --- arch/arm/include/asm/assembler.h | 10 ++++++++++ arch/arm/lib/getuser.S | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index bc8d4bbd82e2..9342904cccca 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h @@ -536,4 +536,14 @@ THUMB( orr \reg , \reg , #PSR_T_BIT ) #endif .endm +#ifdef CONFIG_KPROBES +#define _ASM_NOKPROBE(entry) \ + .pushsection "_kprobe_blacklist", "aw" ; \ + .balign 4 ; \ + .long entry; \ + .popsection +#else +#define _ASM_NOKPROBE(entry) +#endif + #endif /* __ASM_ASSEMBLER_H__ */ diff --git a/arch/arm/lib/getuser.S b/arch/arm/lib/getuser.S index df73914e81c8..746e7801dcdf 100644 --- a/arch/arm/lib/getuser.S +++ b/arch/arm/lib/getuser.S @@ -38,6 +38,7 @@ ENTRY(__get_user_1) mov r0, #0 ret lr ENDPROC(__get_user_1) +_ASM_NOKPROBE(__get_user_1) ENTRY(__get_user_2) check_uaccess r0, 2, r1, r2, __get_user_bad @@ -58,6 +59,7 @@ rb .req r0 mov r0, #0 ret lr ENDPROC(__get_user_2) +_ASM_NOKPROBE(__get_user_2) ENTRY(__get_user_4) check_uaccess r0, 4, r1, r2, __get_user_bad @@ -65,6 +67,7 @@ ENTRY(__get_user_4) mov r0, #0 ret lr ENDPROC(__get_user_4) +_ASM_NOKPROBE(__get_user_4) ENTRY(__get_user_8) check_uaccess r0, 8, r1, r2, __get_user_bad8 @@ -78,6 +81,7 @@ ENTRY(__get_user_8) mov r0, #0 ret lr ENDPROC(__get_user_8) +_ASM_NOKPROBE(__get_user_8) #ifdef __ARMEB__ ENTRY(__get_user_32t_8) @@ -91,6 +95,7 @@ ENTRY(__get_user_32t_8) mov r0, #0 ret lr ENDPROC(__get_user_32t_8) +_ASM_NOKPROBE(__get_user_32t_8) ENTRY(__get_user_64t_1) check_uaccess r0, 1, r1, r2, __get_user_bad8 @@ -98,6 +103,7 @@ ENTRY(__get_user_64t_1) mov r0, #0 ret lr ENDPROC(__get_user_64t_1) +_ASM_NOKPROBE(__get_user_64t_1) ENTRY(__get_user_64t_2) check_uaccess r0, 2, r1, r2, __get_user_bad8 @@ -114,6 +120,7 @@ rb .req r0 mov r0, #0 ret lr ENDPROC(__get_user_64t_2) +_ASM_NOKPROBE(__get_user_64t_2) ENTRY(__get_user_64t_4) check_uaccess r0, 4, r1, r2, __get_user_bad8 @@ -121,6 +128,7 @@ ENTRY(__get_user_64t_4) mov r0, #0 ret lr ENDPROC(__get_user_64t_4) +_ASM_NOKPROBE(__get_user_64t_4) #endif __get_user_bad8: @@ -131,6 +139,8 @@ __get_user_bad: ret lr ENDPROC(__get_user_bad) ENDPROC(__get_user_bad8) +_ASM_NOKPROBE(__get_user_bad) +_ASM_NOKPROBE(__get_user_bad8) .pushsection __ex_table, "a" .long 1b, __get_user_bad