Messages in this thread | | | Date | Wed, 20 Jun 2012 19:15:59 +0200 | From | Oleg Nesterov <> | Subject | Re: [PATCH v2 1/2] uprobes: Pass probed vaddr to arch_uprobe_analyze_insn() |
| |
On 06/18, Srikar Dronamraju wrote: > > > My concern is, are you sure an evil user can't confuse uprobes and > > do something bad? > > > > Just to explain what I mean. For example, we certainly do not want > > to allow to probe the "syscall" insn, at least with the current > > implementation. So I assume that validate_insn_64bits("syscall") > > must fail. > > > > Are you sure that validate_insn_32bits("syscall") will fail too? > > > > Of course, I am not asking about "syscall" in particular. In general, > > suppose that, say, validate_insn_64bits() returns true. Are you sure > > this insn can't do something different and harmful if it is executed > > by __USER32_CS task? > > > > validate_insn_64bits can return fail for two cases. > 1. Few opcodes that uprobes refuses to place probes. > 2. opcodes that are invalid from a 64 perspective. > > validate_insn_32bits() can return fail for similar reasons. > > The first set is a common set between validate_insn_64bits / > validate_insn_32bits. This includes the syscall, lock prefix, etc. > > Coming to the second set, there can be an instruction that is valid for > 64 bit and not valid for 32 bit. > > If the instruction is valid for 32 bit set but invalid instruction for > 64 bit, and is part of a 32 bit executable file but was mapped by a 64 > bit process. We would allow it to be probed since we only check for 32 > bit set. [Assuming it runs till a breakpoint hit;] I assume singlestep > should generate a SIGILL signal since its not a valid 64 bit > instruction. However this behaviour is on par with the behaviour if the > probe was not hit too. i.e Once this invalid instruction was executed, > It would have generated SIGILL. The same should hold true for a 32 bit > invalid instruction in a 64 bit executable mapped into 32 bit process.
SIGILL (invalid insn) is fine, I was worried about the possibility to allow to execute the valid (from CPU pov) but "dangerous" (from uprobes pov) insn.
> Please do let me know if my understanding is incorrect or if there are > loopholes
Well, you understand this indefinitely better than me ;) If you do not see any hole then everything should be fine, I think.
> Again, this is all dependent on the ability to detect the executable > type from the inode.
Yes... I am still not sure about this. But again, I am not arguing, just I do not know.
Oleg.
| |