|
@@ -25,7 +25,8 @@ Table of Contents
|
|
3.3.2 Required name format
|
|
3.3.2 Required name format
|
|
3.3.3 Example livepatch symbol names
|
|
3.3.3 Example livepatch symbol names
|
|
3.3.4 Example `readelf --symbols` output
|
|
3.3.4 Example `readelf --symbols` output
|
|
-4. Symbol table and Elf section access
|
|
|
|
|
|
+4. Architecture-specific sections
|
|
|
|
+5. Symbol table and Elf section access
|
|
|
|
|
|
----------------------------
|
|
----------------------------
|
|
0. Background and motivation
|
|
0. Background and motivation
|
|
@@ -46,7 +47,7 @@ architecture.
|
|
|
|
|
|
Since apply_relocate_add() requires access to a module's section header
|
|
Since apply_relocate_add() requires access to a module's section header
|
|
table, symbol table, and relocation section indices, Elf information is
|
|
table, symbol table, and relocation section indices, Elf information is
|
|
-preserved for livepatch modules (see section 4). Livepatch manages its own
|
|
|
|
|
|
+preserved for livepatch modules (see section 5). Livepatch manages its own
|
|
relocation sections and symbols, which are described in this document. The
|
|
relocation sections and symbols, which are described in this document. The
|
|
Elf constants used to mark livepatch symbols and relocation sections were
|
|
Elf constants used to mark livepatch symbols and relocation sections were
|
|
selected from OS-specific ranges according to the definitions from glibc.
|
|
selected from OS-specific ranges according to the definitions from glibc.
|
|
@@ -117,7 +118,7 @@ also possible for a livepatch module to have no livepatch relocation
|
|
sections, as in the case of the sample livepatch module (see
|
|
sections, as in the case of the sample livepatch module (see
|
|
samples/livepatch).
|
|
samples/livepatch).
|
|
|
|
|
|
-Since Elf information is preserved for livepatch modules (see Section 4), a
|
|
|
|
|
|
+Since Elf information is preserved for livepatch modules (see Section 5), a
|
|
livepatch relocation section can be applied simply by passing in the
|
|
livepatch relocation section can be applied simply by passing in the
|
|
appropriate section index to apply_relocate_add(), which then uses it to
|
|
appropriate section index to apply_relocate_add(), which then uses it to
|
|
access the relocation section and apply the relocations.
|
|
access the relocation section and apply the relocations.
|
|
@@ -292,8 +293,19 @@ Symbol table '.symtab' contains 127 entries:
|
|
[*] Note that the 'Ndx' (Section index) for these symbols is SHN_LIVEPATCH (0xff20).
|
|
[*] Note that the 'Ndx' (Section index) for these symbols is SHN_LIVEPATCH (0xff20).
|
|
"OS" means OS-specific.
|
|
"OS" means OS-specific.
|
|
|
|
|
|
|
|
+---------------------------------
|
|
|
|
+4. Architecture-specific sections
|
|
|
|
+---------------------------------
|
|
|
|
+Architectures may override arch_klp_init_object_loaded() to perform
|
|
|
|
+additional arch-specific tasks when a target module loads, such as applying
|
|
|
|
+arch-specific sections. On x86 for example, we must apply per-object
|
|
|
|
+.altinstructions and .parainstructions sections when a target module loads.
|
|
|
|
+These sections must be prefixed with ".klp.arch.$objname." so that they can
|
|
|
|
+be easily identified when iterating through a patch module's Elf sections
|
|
|
|
+(See arch/x86/kernel/livepatch.c for a complete example).
|
|
|
|
+
|
|
--------------------------------------
|
|
--------------------------------------
|
|
-4. Symbol table and Elf section access
|
|
|
|
|
|
+5. Symbol table and Elf section access
|
|
--------------------------------------
|
|
--------------------------------------
|
|
A livepatch module's symbol table is accessible through module->symtab.
|
|
A livepatch module's symbol table is accessible through module->symtab.
|
|
|
|
|