Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934908AbcCOSt1 (ORCPT ); Tue, 15 Mar 2016 14:49:27 -0400 Received: from foss.arm.com ([217.140.101.70]:38087 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932212AbcCOStZ (ORCPT ); Tue, 15 Mar 2016 14:49:25 -0400 Message-ID: <56E858D8.8030300@arm.com> Date: Tue, 15 Mar 2016 18:47:52 +0000 From: James Morse User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.6.0 MIME-Version: 1.0 To: David Long CC: Catalin Marinas , Will Deacon , Sandeepa Prabhu , William Cohen , Pratyush Anand , Steve Capper , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marc Zyngier , Dave P Martin , Mark Rutland , Robin Murphy , Ard Biesheuvel , Jens Wiklander , Christoffer Dall , =?windows-1252?Q?Alex_?= =?windows-1252?Q?Benn=E9e?= , Yang Shi , Greg Kroah-Hartman , Viresh Kumar , "Suzuki K. Poulose" , Kees Cook , Zi Shen Lim , John Blackwood , Feng Kan , Balamurugan Shanmugam , Vladimir Murzin , Mark Salyzyn , Petr Mladek , Andrew Morton , Mark Brown Subject: Re: [PATCH v11 3/9] arm64: add copy_to/from_user to kprobes blacklist References: <1457501543-24197-1-git-send-email-dave.long@linaro.org> <1457501543-24197-4-git-send-email-dave.long@linaro.org> In-Reply-To: <1457501543-24197-4-git-send-email-dave.long@linaro.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1801 Lines: 53 Hi David, On 09/03/16 05:32, David Long wrote: > From: "David A. Long" > diff --git a/arch/arm64/lib/copy_from_user.S b/arch/arm64/lib/copy_from_user.S > index 4699cd7..0ac2131 100644 > --- a/arch/arm64/lib/copy_from_user.S > +++ b/arch/arm64/lib/copy_from_user.S > @@ -66,6 +66,7 @@ > .endm > > end .req x5 > + .section .kprobes.text,"ax",%progbits > ENTRY(__copy_from_user) > ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(0)), ARM64_HAS_PAN, \ > CONFIG_ARM64_PAN) > diff --git a/arch/arm64/lib/copy_to_user.S b/arch/arm64/lib/copy_to_user.S > index 7512bbb..e4eb84c 100644 > --- a/arch/arm64/lib/copy_to_user.S > +++ b/arch/arm64/lib/copy_to_user.S > @@ -65,6 +65,7 @@ > .endm > > end .req x5 > + .section .kprobes.text,"ax",%progbits > ENTRY(__copy_to_user) > ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(0)), ARM64_HAS_PAN, \ > CONFIG_ARM64_PAN) > If I understand this correctly - you can't kprobe these ldr/str instructions as the fault handler wouldn't find kprobe's out-of line version of the instruction in the exception table... but why only these two functions? (for library functions, we also have clear_user() and copy_in_user()...) The get_user()/put_user() stuff in uaccess.h gets inlined all over the kernel, I don't think its feasible to put all of these in a separate section. Is it feasible to search the exception table at runtime instead? If an address-to-be-kprobed appears in the list, we know it could generate exceptions, so we should report that we can't probe this address. That would catch all of the library functions, all the places uaccess.h was inlined, and anything new that gets invented in the future. > Currrently taking exceptions when accessing user data from a kprobe'd (Nit: Currently) Thanks, James