LinuxPPC-Dev Archive on lore.kernel.org
 help / color / Atom feed
From: Christophe Leroy <christophe.leroy@c-s.fr>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
	Paul Mackerras <paulus@samba.org>,
	stable@kernel.vger.org,
	"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>,
	linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>,
	Larry Finger <Larry.Finger@lwfinger.net>
Subject: Re: [PATCH] powerpc/kprobes: Fix trap address when trap happened in real mode
Date: Sat, 15 Feb 2020 11:28:49 +0100
Message-ID: <e09d3c42-542e-48c1-2f1e-cfe605b05bec@c-s.fr> (raw)
In-Reply-To: <20200214225434.464ec467ad9094961abb8ddc@kernel.org>

Hi,

Le 14/02/2020 à 14:54, Masami Hiramatsu a écrit :
> Hi,
> 
> On Fri, 14 Feb 2020 12:47:49 +0000 (UTC)
> Christophe Leroy <christophe.leroy@c-s.fr> wrote:
> 
>> When a program check exception happens while MMU translation is
>> disabled, following Oops happens in kprobe_handler() in the following
>> test:
>>
>> 		} else if (*addr != BREAKPOINT_INSTRUCTION) {
> 
> Thanks for the report and patch. I'm not so sure about powerpc implementation
> but at where the MMU translation is disabled, can the handler work correctly?
> (And where did you put the probe on?)
> 
> Your fix may fix this Oops, but if the handler needs special care, it is an
> option to blacklist such place (if possible).

I guess that's another story. Here we are not talking about a place 
where kprobe has been illegitimately activated, but a place where there 
is a valid trap, which generated a valid 'program check exception'. And 
kprobe was off at that time.

As any 'program check exception' due to a trap (ie a BUG_ON, a WARN_ON, 
a debugger breakpoint, a perf breakpoint, etc...) calls 
kprobe_handler(), kprobe_handler() must be prepared to handle the case 
where the MMU translation is disabled, even if probes are not supposed 
to be set for functions running with MMU translation disabled.

Christophe

> 
> Anyway, Naveen, can you review it?
> 
> Thank you,
> 
>>
>> [   33.098554] BUG: Unable to handle kernel data access on read at 0x0000e268
>> [   33.105091] Faulting instruction address: 0xc000ec34
>> [   33.110010] Oops: Kernel access of bad area, sig: 11 [#1]
>> [   33.115348] BE PAGE_SIZE=16K PREEMPT CMPC885
>> [   33.119540] Modules linked in:
>> [   33.122591] CPU: 0 PID: 429 Comm: cat Not tainted 5.6.0-rc1-s3k-dev-00824-g84195dc6c58a #3267
>> [   33.131005] NIP:  c000ec34 LR: c000ecd8 CTR: c019cab8
>> [   33.136002] REGS: ca4d3b58 TRAP: 0300   Not tainted  (5.6.0-rc1-s3k-dev-00824-g84195dc6c58a)
>> [   33.144324] MSR:  00001032 <ME,IR,DR,RI>  CR: 2a4d3c52  XER: 00000000
>> [   33.150699] DAR: 0000e268 DSISR: c0000000
>> [   33.150699] GPR00: c000b09c ca4d3c10 c66d0620 00000000 ca4d3c60 00000000 00009032 00000000
>> [   33.150699] GPR08: 00020000 00000000 c087de44 c000afe0 c66d0ad0 100d3dd6 fffffff3 00000000
>> [   33.150699] GPR16: 00000000 00000041 00000000 ca4d3d70 00000000 00000000 0000416d 00000000
>> [   33.150699] GPR24: 00000004 c53b6128 00000000 0000e268 00000000 c07c0000 c07bb6fc ca4d3c60
>> [   33.188015] NIP [c000ec34] kprobe_handler+0x128/0x290
>> [   33.192989] LR [c000ecd8] kprobe_handler+0x1cc/0x290
>> [   33.197854] Call Trace:
>> [   33.200340] [ca4d3c30] [c000b09c] program_check_exception+0xbc/0x6fc
>> [   33.206590] [ca4d3c50] [c000e43c] ret_from_except_full+0x0/0x4
>> [   33.212392] --- interrupt: 700 at 0xe268
>> [   33.270401] Instruction dump:
>> [   33.273335] 913e0008 81220000 38600001 3929ffff 91220000 80010024 bb410008 7c0803a6
>> [   33.280992] 38210020 4e800020 38600000 4e800020 <813b0000> 6d2a7fe0 2f8a0008 419e0154
>> [   33.288841] ---[ end trace 5b9152d4cdadd06d ]---
>>
>> Check MSR and convert regs->nip to virtual address if the trap
>> happened with MSR_IR cleared.
>>
>> Reported-by: Larry Finger <Larry.Finger@lwfinger.net>
>> Fixes: 6cc89bad60a6 ("powerpc/kprobes: Invoke handlers directly")
>> Cc: stable@kernel.vger.org
>> Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
>> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
>>
>> ---
>> The bug might have existed even before that commit from Naveen.
>>
>> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
>> ---
>>   arch/powerpc/kernel/kprobes.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
>> index 2d27ec4feee4..f8b848aa65bd 100644
>> --- a/arch/powerpc/kernel/kprobes.c
>> +++ b/arch/powerpc/kernel/kprobes.c
>> @@ -23,6 +23,7 @@
>>   #include <asm/cacheflush.h>
>>   #include <asm/sstep.h>
>>   #include <asm/sections.h>
>> +#include <asm/io.h>
>>   #include <linux/uaccess.h>
>>   
>>   DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
>> @@ -264,6 +265,9 @@ int kprobe_handler(struct pt_regs *regs)
>>   	if (user_mode(regs))
>>   		return 0;
>>   
>> +	if (!(regs->msr & MSR_IR))
>> +		addr = phys_to_virt(regs->nip);
>> +
>>   	/*
>>   	 * We don't want to be preempted for the entire
>>   	 * duration of kprobe processing
>> -- 
>> 2.25.0
>>
> 
> 

  reply index

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-14 12:47 Christophe Leroy
2020-02-14 13:54 ` Masami Hiramatsu
2020-02-15 10:28   ` Christophe Leroy [this message]
2020-02-16 12:34     ` Masami Hiramatsu
2020-02-17  9:03       ` Christophe Leroy
2020-02-17 10:27         ` Masami Hiramatsu
2020-02-17 15:38           ` Christophe Leroy
2020-02-17 17:41             ` Christophe Leroy
2020-02-18  0:44             ` Masami Hiramatsu
2020-02-18  5:58               ` Christophe Leroy
2020-02-15 10:19 ` Christophe Leroy

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e09d3c42-542e-48c1-2f1e-cfe605b05bec@c-s.fr \
    --to=christophe.leroy@c-s.fr \
    --cc=Larry.Finger@lwfinger.net \
    --cc=anil.s.keshavamurthy@intel.com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mhiramat@kernel.org \
    --cc=naveen.n.rao@linux.vnet.ibm.com \
    --cc=paulus@samba.org \
    --cc=stable@kernel.vger.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

LinuxPPC-Dev Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linuxppc-dev/0 linuxppc-dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linuxppc-dev linuxppc-dev/ https://lore.kernel.org/linuxppc-dev \
		linuxppc-dev@lists.ozlabs.org linuxppc-dev@ozlabs.org
	public-inbox-index linuxppc-dev

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.ozlabs.lists.linuxppc-dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git