Skip to content

Commit b525fca

Browse files
petrpavlujpoimboe
authored andcommitted
livepatch: Free klp_{object,func}_ext data after initialization
The klp_object_ext and klp_func_ext data, which are stored in the __klp_objects and __klp_funcs sections, respectively, are not needed after they are used to create the actual klp_object and klp_func instances. This operation is implemented by the init function in scripts/livepatch/init.c. Prefix the two sections with ".init" so they are freed after the module is initializated. Signed-off-by: Petr Pavlu <petr.pavlu@suse.com> Acked-by: Joe Lawrence <joe.lawrence@redhat.com> Acked-by: Miroslav Benes <mbenes@suse.cz> Reviewed-by: Aaron Tomlin <atomlin@atomlin.com> Link: https://patch.msgid.link/20260123102825.3521961-3-petr.pavlu@suse.com Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
1 parent ab10815 commit b525fca

5 files changed

Lines changed: 10 additions & 10 deletions

File tree

scripts/livepatch/init.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ static int __init livepatch_mod_init(void)
1919
unsigned int nr_objs;
2020
int ret;
2121

22-
obj_exts = klp_find_section_by_name(THIS_MODULE, "__klp_objects",
22+
obj_exts = klp_find_section_by_name(THIS_MODULE, ".init.klp_objects",
2323
&obj_exts_sec_size);
2424
nr_objs = obj_exts_sec_size / sizeof(*obj_exts);
2525
if (!nr_objs) {

scripts/module.lds.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ SECTIONS {
3434

3535
__patchable_function_entries : { *(__patchable_function_entries) }
3636

37-
__klp_funcs 0: ALIGN(8) { KEEP(*(__klp_funcs)) }
38-
__klp_objects 0: ALIGN(8) { KEEP(*(__klp_objects)) }
37+
.init.klp_funcs 0 : ALIGN(8) { KEEP(*(.init.klp_funcs)) }
38+
.init.klp_objects 0 : ALIGN(8) { KEEP(*(.init.klp_objects)) }
3939

4040
#ifdef CONFIG_ARCH_USES_CFI_TRAPS
4141
__kcfi_traps : { KEEP(*(.kcfi_traps)) }

tools/objtool/check.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4761,7 +4761,7 @@ static int validate_ibt(struct objtool_file *file)
47614761
!strcmp(sec->name, "__bug_table") ||
47624762
!strcmp(sec->name, "__ex_table") ||
47634763
!strcmp(sec->name, "__jump_table") ||
4764-
!strcmp(sec->name, "__klp_funcs") ||
4764+
!strcmp(sec->name, ".init.klp_funcs") ||
47654765
!strcmp(sec->name, "__mcount_loc") ||
47664766
!strcmp(sec->name, ".llvm.call-graph-profile") ||
47674767
!strcmp(sec->name, ".llvm_bb_addr_map") ||

tools/objtool/include/objtool/klp.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
#define SHN_LIVEPATCH 0xff20
77

88
/*
9-
* __klp_objects and __klp_funcs are created by klp diff and used by the patch
10-
* module init code to build the klp_patch, klp_object and klp_func structs
11-
* needed by the livepatch API.
9+
* .init.klp_objects and .init.klp_funcs are created by klp diff and used by the
10+
* patch module init code to build the klp_patch, klp_object and klp_func
11+
* structs needed by the livepatch API.
1212
*/
13-
#define KLP_OBJECTS_SEC "__klp_objects"
14-
#define KLP_FUNCS_SEC "__klp_funcs"
13+
#define KLP_OBJECTS_SEC ".init.klp_objects"
14+
#define KLP_FUNCS_SEC ".init.klp_funcs"
1515

1616
/*
1717
* __klp_relocs is an intermediate section which are created by klp diff and

tools/objtool/klp-diff.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1436,7 +1436,7 @@ static int clone_special_sections(struct elfs *e)
14361436
}
14371437

14381438
/*
1439-
* Create __klp_objects and __klp_funcs sections which are intermediate
1439+
* Create .init.klp_objects and .init.klp_funcs sections which are intermediate
14401440
* sections provided as input to the patch module's init code for building the
14411441
* klp_patch, klp_object and klp_func structs for the livepatch API.
14421442
*/

0 commit comments

Comments
 (0)