Re: [RFC PATCH v3 2/4] arm64: Check the return PC against unreliable code sections
From: Madhavan T. Venkataraman <hidden>
Date: 2021-05-05 17:52:17
Also in:
live-patching, lkml
On 5/5/21 11:34 AM, Mark Brown wrote:
On Tue, May 04, 2021 at 02:03:14PM -0500, Madhavan T. Venkataraman wrote:quoted
On 5/4/21 11:05 AM, Mark Brown wrote:quoted
quoted
quoted
@@ -118,9 +160,21 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame) return -EINVAL; frame->pc = ret_stack->ret; frame->pc = ptrauth_strip_insn_pac(frame->pc); + return 0; }quoted
quoted
Do we not need to look up the range of the restored pc and validate what's being pointed to here? It's not immediately obvious why we do the lookup before handling the function graph tracer, especially given that we never look at the result and there's now a return added skipping further reliability checks. At the very least I think this needs some additional comments so the code is more obvious.quoted
I want sym_code_ranges[] to contain both unwindable and non-unwindable ranges. Unwindable ranges will be special ranges such as the return_to_handler() and kretprobe_trampoline() functions for which the unwinder has (or will have) special code to unwind. So, the lookup_range() has to happen before the function graph code. Please look at the last patch in the series for the fix for the above function graph code.That sounds reasonable but like I say should probably be called out in the code so it's clear to people working with it.
OK. To make this better, I will do the lookup_range() after the function graph code to begin with. Then, in the last patch for the function graph code, I will move it up. This way, the code is clear and your comment is addressed.
quoted
On the question of "should the original return address be checked against sym_code_ranges[]?" - I assumed that if there is a function graph trace on a function, it had to be an ftraceable function. It would not be a part of sym_code_ranges[]. Is that a wrong assumption on my part?I can't think of any cases where it wouldn't be right now, but it seems easier to just do a redundant check than to have the assumption in the code and have to think about if it's missing.
Agreed. Will do the check. Madhavan _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel