aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/livepatch/core.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index 47402b8b3990..b9628e43c78f 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -151,7 +151,10 @@ static int klp_find_object_symbol(const char *objname, const char *name,
151 }; 151 };
152 152
153 mutex_lock(&module_mutex); 153 mutex_lock(&module_mutex);
154 kallsyms_on_each_symbol(klp_find_callback, &args); 154 if (objname)
155 module_kallsyms_on_each_symbol(klp_find_callback, &args);
156 else
157 kallsyms_on_each_symbol(klp_find_callback, &args);
155 mutex_unlock(&module_mutex); 158 mutex_unlock(&module_mutex);
156 159
157 /* 160 /*
@@ -202,7 +205,7 @@ static int klp_resolve_symbols(Elf_Shdr *relasec, struct module *pmod)
202 for (i = 0; i < relasec->sh_size / sizeof(Elf_Rela); i++) { 205 for (i = 0; i < relasec->sh_size / sizeof(Elf_Rela); i++) {
203 sym = pmod->core_kallsyms.symtab + ELF_R_SYM(relas[i].r_info); 206 sym = pmod->core_kallsyms.symtab + ELF_R_SYM(relas[i].r_info);
204 if (sym->st_shndx != SHN_LIVEPATCH) { 207 if (sym->st_shndx != SHN_LIVEPATCH) {
205 pr_err("symbol %s is not marked as a livepatch symbol", 208 pr_err("symbol %s is not marked as a livepatch symbol\n",
206 strtab + sym->st_name); 209 strtab + sym->st_name);
207 return -EINVAL; 210 return -EINVAL;
208 } 211 }
@@ -212,7 +215,7 @@ static int klp_resolve_symbols(Elf_Shdr *relasec, struct module *pmod)
212 ".klp.sym.%55[^.].%127[^,],%lu", 215 ".klp.sym.%55[^.].%127[^,],%lu",
213 objname, symname, &sympos); 216 objname, symname, &sympos);
214 if (cnt != 3) { 217 if (cnt != 3) {
215 pr_err("symbol %s has an incorrectly formatted name", 218 pr_err("symbol %s has an incorrectly formatted name\n",
216 strtab + sym->st_name); 219 strtab + sym->st_name);
217 return -EINVAL; 220 return -EINVAL;
218 } 221 }
@@ -257,7 +260,7 @@ static int klp_write_object_relocations(struct module *pmod,
257 */ 260 */
258 cnt = sscanf(secname, ".klp.rela.%55[^.]", sec_objname); 261 cnt = sscanf(secname, ".klp.rela.%55[^.]", sec_objname);
259 if (cnt != 1) { 262 if (cnt != 1) {
260 pr_err("section %s has an incorrectly formatted name", 263 pr_err("section %s has an incorrectly formatted name\n",
261 secname); 264 secname);
262 ret = -EINVAL; 265 ret = -EINVAL;
263 break; 266 break;
@@ -805,7 +808,7 @@ int klp_register_patch(struct klp_patch *patch)
805 return -EINVAL; 808 return -EINVAL;
806 809
807 if (!is_livepatch_module(patch->mod)) { 810 if (!is_livepatch_module(patch->mod)) {
808 pr_err("module %s is not marked as a livepatch module", 811 pr_err("module %s is not marked as a livepatch module\n",
809 patch->mod->name); 812 patch->mod->name);
810 return -EINVAL; 813 return -EINVAL;
811 } 814 }