Re: [PATCH 0.5/3] livepatch: Convert stack entries array to percpu

From: Josh Poimboeuf
Date: Tue Mar 14 2023 - 20:26:18 EST


On Tue, Mar 14, 2023 at 11:50:21AM +0100, Petr Mladek wrote:
> > static int klp_check_stack(struct task_struct *task, const char **oldname)
> > {
> > - static unsigned long entries[MAX_STACK_ENTRIES];
> > + unsigned long *entries = this_cpu_ptr(klp_stack_entries);
> > struct klp_object *obj;
> > struct klp_func *func;
> > int ret, nr_entries;
> >
> > - ret = stack_trace_save_tsk_reliable(task, entries, ARRAY_SIZE(entries));
> > + /* Protect 'klp_stack_entries' */
> > + lockdep_assert_preemption_disabled();
>
> I think about adding:
>
> /*
> * Stay on the safe side even when cond_resched() is called from
> * an IRQ context by mistake.
> */
> if (!in_task())
> return -EINVAL;
>
> Or is this prevented another way, please?

An IRQ handler trying to schedule would be a pretty major bug, no?

I think there are already several different checks for that. For
example, the __might_resched() call in cond_resched().

--
Josh