Lines Matching +full:loc +full:- +full:code

1 // SPDX-License-Identifier: GPL-2.0
3 * s390 code for kexec_file_load system call
31 const unsigned long marker_len = sizeof(MODULE_SIG_STRING) - 1; in s390_verify_sig()
41 return -EKEYREJECTED; in s390_verify_sig()
43 if (memcmp(kernel + kernel_len - marker_len, MODULE_SIG_STRING, in s390_verify_sig()
45 return -EKEYREJECTED; in s390_verify_sig()
46 kernel_len -= marker_len; in s390_verify_sig()
48 ms = (void *)kernel + kernel_len - sizeof(*ms); in s390_verify_sig()
49 kernel_len -= sizeof(*ms); in s390_verify_sig()
51 sig_len = be32_to_cpu(ms->sig_len); in s390_verify_sig()
53 return -EKEYREJECTED; in s390_verify_sig()
54 kernel_len -= sig_len; in s390_verify_sig()
56 if (ms->id_type != PKEY_ID_PKCS7) in s390_verify_sig()
57 return -EKEYREJECTED; in s390_verify_sig()
59 if (ms->algo != 0 || in s390_verify_sig()
60 ms->hash != 0 || in s390_verify_sig()
61 ms->signer_len != 0 || in s390_verify_sig()
62 ms->key_id_len != 0 || in s390_verify_sig()
63 ms->__pad[0] != 0 || in s390_verify_sig()
64 ms->__pad[1] != 0 || in s390_verify_sig()
65 ms->__pad[2] != 0) { in s390_verify_sig()
66 return -EBADMSG; in s390_verify_sig()
74 if (ret == -ENOKEY && IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING)) in s390_verify_sig()
90 if (image->type == KEXEC_TYPE_CRASH) { in kexec_file_update_purgatory()
109 if (image->type == KEXEC_TYPE_CRASH) { in kexec_file_update_purgatory()
119 crash_size = crashk_res.end - crashk_res.start + 1; in kexec_file_update_purgatory()
137 data->memsz = ALIGN(data->memsz, PAGE_SIZE); in kexec_file_add_purgatory()
138 buf.mem = data->memsz; in kexec_file_add_purgatory()
140 if (image->type == KEXEC_TYPE_CRASH) in kexec_file_add_purgatory()
147 data->memsz += buf.memsz; in kexec_file_add_purgatory()
160 buf.buffer = image->initrd_buf; in kexec_file_add_initrd()
161 buf.bufsz = image->initrd_buf_len; in kexec_file_add_initrd()
163 data->memsz = ALIGN(data->memsz, PAGE_SIZE); in kexec_file_add_initrd()
164 buf.mem = data->memsz; in kexec_file_add_initrd()
166 if (image->type == KEXEC_TYPE_CRASH) in kexec_file_add_initrd()
171 data->parm->initrd_start = data->memsz; in kexec_file_add_initrd()
172 data->parm->initrd_size = buf.memsz; in kexec_file_add_initrd()
173 data->memsz += buf.memsz; in kexec_file_add_initrd()
179 return ipl_report_add_component(data->report, &buf, 0, 0); in kexec_file_add_initrd()
194 data->memsz = ALIGN(data->memsz, PAGE_SIZE); in kexec_file_add_ipl_report()
195 buf.mem = data->memsz; in kexec_file_add_ipl_report()
207 addr = data->memsz + data->report->size; in kexec_file_add_ipl_report()
213 ipl_report_add_certificate(data->report, ptr, addr, len); in kexec_file_add_ipl_report()
218 ret = -ENOMEM; in kexec_file_add_ipl_report()
219 buf.buffer = ipl_report_finish(data->report); in kexec_file_add_ipl_report()
222 buf.bufsz = data->report->size; in kexec_file_add_ipl_report()
224 image->arch.ipl_buf = buf.buffer; in kexec_file_add_ipl_report()
226 data->memsz += buf.memsz; in kexec_file_add_ipl_report()
229 data->kernel_buf + offsetof(struct lowcore, ipl_parmblock_ptr); in kexec_file_add_ipl_report()
233 if (image->type == KEXEC_TYPE_CRASH) in kexec_file_add_ipl_report()
259 ret = -EINVAL; in kexec_file_add_components()
261 if (image->kernel_buf_len < minsize) in kexec_file_add_components()
264 if (data.parm->max_command_line_size) in kexec_file_add_components()
265 max_command_line_size = data.parm->max_command_line_size; in kexec_file_add_components()
270 if (image->kernel_buf_len < minsize + max_command_line_size) in kexec_file_add_components()
273 if (image->cmdline_buf_len >= max_command_line_size) in kexec_file_add_components()
276 memcpy(data.parm->command_line, image->cmdline_buf, in kexec_file_add_components()
277 image->cmdline_buf_len); in kexec_file_add_components()
280 if (image->type == KEXEC_TYPE_CRASH) { in kexec_file_add_components()
281 data.parm->oldmem_base = crashk_res.start; in kexec_file_add_components()
282 data.parm->oldmem_size = crashk_res.end - crashk_res.start + 1; in kexec_file_add_components()
286 if (image->initrd_buf) { in kexec_file_add_components()
298 restart_psw += image->start; in kexec_file_add_components()
300 image->start = 0; in kexec_file_add_components()
321 sechdrs = (void *)pi->ehdr + pi->ehdr->e_shoff; in arch_kexec_apply_relocations_add()
322 strtab = (char *)pi->ehdr + sechdrs[symtab->sh_link].sh_offset; in arch_kexec_apply_relocations_add()
323 shstrtab = (char *)pi->ehdr + sechdrs[pi->ehdr->e_shstrndx].sh_offset; in arch_kexec_apply_relocations_add()
325 relas = (void *)pi->ehdr + relsec->sh_offset; in arch_kexec_apply_relocations_add()
327 for (i = 0; i < relsec->sh_size / sizeof(*relas); i++) { in arch_kexec_apply_relocations_add()
331 void *loc; /* tmp location to modify */ in arch_kexec_apply_relocations_add() local
333 sym = (void *)pi->ehdr + symtab->sh_offset; in arch_kexec_apply_relocations_add()
336 if (sym->st_name) in arch_kexec_apply_relocations_add()
337 name = strtab + sym->st_name; in arch_kexec_apply_relocations_add()
339 name = shstrtab + sechdrs[sym->st_shndx].sh_name; in arch_kexec_apply_relocations_add()
341 if (sym->st_shndx == SHN_UNDEF) { in arch_kexec_apply_relocations_add()
343 return -ENOEXEC; in arch_kexec_apply_relocations_add()
346 if (sym->st_shndx == SHN_COMMON) { in arch_kexec_apply_relocations_add()
348 return -ENOEXEC; in arch_kexec_apply_relocations_add()
351 if (sym->st_shndx >= pi->ehdr->e_shnum && in arch_kexec_apply_relocations_add()
352 sym->st_shndx != SHN_ABS) { in arch_kexec_apply_relocations_add()
354 sym->st_shndx, name); in arch_kexec_apply_relocations_add()
355 return -ENOEXEC; in arch_kexec_apply_relocations_add()
358 loc = pi->purgatory_buf; in arch_kexec_apply_relocations_add()
359 loc += section->sh_offset; in arch_kexec_apply_relocations_add()
360 loc += relas[i].r_offset; in arch_kexec_apply_relocations_add()
362 val = sym->st_value; in arch_kexec_apply_relocations_add()
363 if (sym->st_shndx != SHN_ABS) in arch_kexec_apply_relocations_add()
364 val += pi->sechdrs[sym->st_shndx].sh_addr; in arch_kexec_apply_relocations_add()
367 addr = section->sh_addr + relas[i].r_offset; in arch_kexec_apply_relocations_add()
374 ret = arch_kexec_do_relocs(r_type, loc, val, addr); in arch_kexec_apply_relocations_add()
377 return -ENOEXEC; in arch_kexec_apply_relocations_add()
385 vfree(image->arch.ipl_buf); in arch_kimage_file_post_load_cleanup()
386 image->arch.ipl_buf = NULL; in arch_kimage_file_post_load_cleanup()