lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 13 Jun 2016 15:50:17 +0900
From:	Masami Hiramatsu <mhiramat@...nel.org>
To:	David Long <dave.long@...aro.org>
Cc:	Catalin Marinas <catalin.marinas@....com>,
	Huang Shijie <shijie.huang@....com>,
	James Morse <james.morse@....com>,
	Marc Zyngier <marc.zyngier@....com>,
	Pratyush Anand <panand@...hat.com>,
	Sandeepa Prabhu <sandeepa.s.prabhu@...il.com>,
	Will Deacon <will.deacon@....com>,
	William Cohen <wcohen@...hat.com>,
	linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
	Steve Capper <steve.capper@...aro.org>,
	Li Bin <huawei.libin@...wei.com>,
	Adam Buchbinder <adam.buchbinder@...il.com>,
	Alex Bennée <alex.bennee@...aro.org>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Andrey Ryabinin <ryabinin.a.a@...il.com>,
	Ard Biesheuvel <ard.biesheuvel@...aro.org>,
	Christoffer Dall <christoffer.dall@...aro.org>,
	Daniel Thompson <daniel.thompson@...aro.org>,
	Dave P Martin <Dave.Martin@....com>,
	Jens Wiklander <jens.wiklander@...aro.org>,
	Jisheng Zhang <jszhang@...vell.com>,
	John Blackwood <john.blackwood@...r.com>,
	Mark Rutland <mark.rutland@....com>,
	Petr Mladek <pmladek@...e.com>,
	Robin Murphy <robin.murphy@....com>,
	Suzuki K Poulose <suzuki.poulose@....com>,
	Vladimir Murzin <Vladimir.Murzin@....com>,
	Yang Shi <yang.shi@...aro.org>,
	Zi Shen Lim <zlim.lnx@...il.com>,
	yalin wang <yalin.wang2010@...il.com>,
	Mark Brown <broonie@...nel.org>
Subject: Re: [PATCH v13 05/10] arm64: Kprobes with single stepping support

On Mon, 13 Jun 2016 00:10:29 -0400
David Long <dave.long@...aro.org> wrote:

> >> ---
> >>   arch/arm64/Kconfig                      |   1 +
> >>   arch/arm64/include/asm/debug-monitors.h |   5 +
> >>   arch/arm64/include/asm/insn.h           |   4 +-
> >>   arch/arm64/include/asm/kprobes.h        |  60 ++++
> >>   arch/arm64/include/asm/probes.h         |  44 +++
> >>   arch/arm64/kernel/Makefile              |   1 +
> >>   arch/arm64/kernel/debug-monitors.c      |  18 +-
> >>   arch/arm64/kernel/kprobes-arm64.c       | 144 +++++++++
> >>   arch/arm64/kernel/kprobes-arm64.h       |  35 +++
> >>   arch/arm64/kernel/kprobes.c             | 526 ++++++++++++++++++++++++++++++++
> >
> > Not sure why kprobes.c and kprobes-arm64.c are splitted.
> >
> >
> 
> This comes from the model of the arm32 kprobes code where handling of 
> the low-level instruction simulation is implemented in separate files 
> for 32-bit vs. thumb instructions.  It should make a little more sense 
> in the future when additional instruction simulation code will hopefully 
> be added for those instructions we cannot currently single-step 
> out-of-line.  It also probably *could* be merged into one file.

Hmm, at least the name of arch/arm64/kernel/kprobes-arm64.c is
meaningless. As we've done in x86, I think we can make it 
arch/arm64/kernel/kprobes/decode-insn.{c,h}


[..]
> >> +
> >> +/* Return:
> >> + *   INSN_REJECTED     If instruction is one not allowed to kprobe,
> >> + *   INSN_GOOD         If instruction is supported and uses instruction slot,
> >> + *   INSN_GOOD_NO_SLOT If instruction is supported but doesn't use its slot.
> >
> > Is there any chance to return INSN_GOOD_NO_SLOT?
> >
> 
> Ah, that gets used later when simulation support is added.  I've removed 
> this enum value from this commit and will add it to the later one. 
> Please no one complain about using an enum instead of a bool, it will 
> eventually have three possible values.

OK :)

[..]
> >> +enum kprobe_insn __kprobes
> >> +arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
> >> +{
> >> +	enum kprobe_insn decoded;
> >> +	kprobe_opcode_t insn = le32_to_cpu(*addr);
> >> +	kprobe_opcode_t *scan_start = addr - 1;
> >> +	kprobe_opcode_t *scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
> >> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
> >> +	struct module *mod;
> >> +#endif
> >> +
> >> +	if (addr >= (kprobe_opcode_t *)_text &&
> >> +	    scan_end < (kprobe_opcode_t *)_text)
> >> +		scan_end = (kprobe_opcode_t *)_text;
> >> +#if defined(CONFIG_MODULES) && defined(MODULES_VADDR)
> >> +	else {
> >> +		preempt_disable();
> >> +		mod = __module_address((unsigned long)addr);
> >> +		if (mod && within_module_init((unsigned long)addr, mod) &&
> >> +			!within_module_init((unsigned long)scan_end, mod))
> >> +			scan_end = (kprobe_opcode_t *)mod->init_layout.base;
> >> +		else if (mod && within_module_core((unsigned long)addr, mod) &&
> >> +			!within_module_core((unsigned long)scan_end, mod))
> >> +			scan_end = (kprobe_opcode_t *)mod->core_layout.base;
> >
> > What happen if mod == NULL? it should be return error, isn't it?
> >
> 
> No, it should be fine.  It just means it didn't have to do either of the 
> extra checks to limit the end of the search through the code to the 
> boundary of one of the corresponding module text sections. It means the 
> instruction is in the regular kernel (non-module) text segment.

Ah, I see. It is OK then. :)

Thank you,


-- 
Masami Hiramatsu <mhiramat@...nel.org>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ