You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
create-diff-object can omit patchable changed child functions #1525
create-diff-object can silently omit a changed, independently patchable
compiler-generated child function from the livepatch registration metadata.
The replacement code remains in the module, so the module builds and loads
successfully even though the affected execution path is not redirected.
This was observed on EL9 with GCC splitting snd_timer_interrupt() into:
unchanged parent wrapper: snd_timer_interrupt
changed child: snd_timer_interrupt.part.0
The child has its own __fentry__ call. Therefore kpatch_changed_child_needs_parent_profiling() deliberately does not promote
the unchanged parent. However, kpatch_create_patches_sections() later skips
all symbols with sym->parent, including this independently patchable child.
It did not contain a .kpatch.funcs record/string for snd_timer_interrupt.part.0. After loading, livepatch sysfs listed another
changed function from the same object, but not the changed child. There was no
build or module-load error.
Expected behaviour
A changed child should be registered directly when:
it has its own profiling/patchable function entry; and
no changed ancestor already carries its replacement code.
Children without a profiling entry should continue to be handled through the
promoted parent, and children of an already changed ancestor should not be
registered twice.
Impact
This creates a silent livepatch coverage gap: source-level selection and a
successful module load can both report success while the kernel continues
executing the vulnerable child function.
Activity