Re: [RFC PATCH v3 00/22] arm64: livepatch: Use ORC for dynamic frame pointer validation

From: Petr Mladek
Date: Thu Mar 02 2023 - 11:23:33 EST


On Wed 2023-03-01 03:12:08, Tomohiro Misono (Fujitsu) wrote:
> <snip>
> > Testing
> > =======
> >
> > - I have run all of the livepatch selftests successfully. I have written a
> > couple of extra selftests myself which I will be posting separately
> Hi,
>
> What test configuration/environment you are using for test?
> When I tried kselftest with fedora based config on VM, I got errors
> because livepatch transition won't finish until signal is sent
> (i.e. it takes 15s for every transition).
>
> [excerpt from test result]
> ```
> $ sudo ./test-livepatch.sh
> TEST: basic function patching ... not ok
>
> --- expected
> +++ result
> @@ -2,11 +2,13 @@
> livepatch: enabling patch 'test_klp_livepatch'
> livepatch: 'test_klp_livepatch': initializing patching transition
> livepatch: 'test_klp_livepatch': starting patching transition
> +livepatch: signaling remaining tasks
> livepatch: 'test_klp_livepatch': completing patching transition
> ```

It might be interesting to see what process is blocking the
transition. The transition state is visible in
/proc/<pid>/patch_state.

The transition is blocked when a process is in KLP_UNPATCHED state.
It is defined in include/linux/livepatch.h:

#define KLP_UNPATCHED 0

Well, the timing against the transition is important. The following
might help to see the blocking processes:

$> modprobe livepatch-sample ; \
sleep 1; \
for proc_path in \
`grep "\-1" /proc/*/patch_state | cut -d '/' -f-3` ; \
do \
cat $proc_path/comm ; \
cat $proc_path/stack ; \
echo === ; \
done

After this the livepatch has to be manualy disabled and removed

$> echo 0 >/sys/kernel/livepatch/livepatch_sample/enabled
$> rmmod livepatch_sample

Best Regards,
Petr