diff options
| author | Siluxsept <ronny.horn.rh@gmail.com> | 2024-02-06 04:37:40 +0100 |
|---|---|---|
| committer | Siluxsept <ronny.horn.rh@gmail.com> | 2024-02-06 04:38:56 +0100 |
| commit | 8e8137ac800bdc27181743ec73d0e90e28b4e8af (patch) | |
| tree | 7e2fbc9d9e305e46414c21d08eeaeb1d56ccb0f0 /kernel/livepatch/transition.c | |
| parent | 9c2f9bfc860f0cd6f2d3320b5f72a0f4adf24b25 (diff) | |
merge branch lineage-20 into t13.0t13.0
https: //github.com/LineageOS/android_kernel_google_redbull
Change-Id: I4a450eb794cc99abf711ad3b5b82946092be84ba
Diffstat (limited to 'kernel/livepatch/transition.c')
| -rw-r--r-- | kernel/livepatch/transition.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/kernel/livepatch/transition.c b/kernel/livepatch/transition.c index 5bc349805e03..20277ad6b7d2 100644 --- a/kernel/livepatch/transition.c +++ b/kernel/livepatch/transition.c @@ -563,9 +563,23 @@ void klp_reverse_transition(void) /* Called from copy_process() during fork */ void klp_copy_process(struct task_struct *child) { - child->patch_state = current->patch_state; - /* TIF_PATCH_PENDING gets copied in setup_thread_stack() */ + /* + * The parent process may have gone through a KLP transition since + * the thread flag was copied in setup_thread_stack earlier. Bring + * the task flag up to date with the parent here. + * + * The operation is serialized against all klp_*_transition() + * operations by the tasklist_lock. The only exception is + * klp_update_patch_state(current), but we cannot race with + * that because we are current. + */ + if (test_tsk_thread_flag(current, TIF_PATCH_PENDING)) + set_tsk_thread_flag(child, TIF_PATCH_PENDING); + else + clear_tsk_thread_flag(child, TIF_PATCH_PENDING); + + child->patch_state = current->patch_state; } /* |
