Lines Matching full:image
32 static int kexec_calculate_store_digests(struct kimage *image);
39 int kexec_image_probe_default(struct kimage *image, void *buf, in kexec_image_probe_default() argument
48 image->fops = *fops; in kexec_image_probe_default()
57 int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf, in arch_kexec_kernel_image_probe() argument
60 return kexec_image_probe_default(image, buf, buf_len); in arch_kexec_kernel_image_probe()
63 static void *kexec_image_load_default(struct kimage *image) in kexec_image_load_default() argument
65 if (!image->fops || !image->fops->load) in kexec_image_load_default()
68 return image->fops->load(image, image->kernel_buf, in kexec_image_load_default()
69 image->kernel_buf_len, image->initrd_buf, in kexec_image_load_default()
70 image->initrd_buf_len, image->cmdline_buf, in kexec_image_load_default()
71 image->cmdline_buf_len); in kexec_image_load_default()
74 void * __weak arch_kexec_kernel_image_load(struct kimage *image) in arch_kexec_kernel_image_load() argument
76 return kexec_image_load_default(image); in arch_kexec_kernel_image_load()
79 int kexec_image_post_load_cleanup_default(struct kimage *image) in kexec_image_post_load_cleanup_default() argument
81 if (!image->fops || !image->fops->cleanup) in kexec_image_post_load_cleanup_default()
84 return image->fops->cleanup(image->image_loader_data); in kexec_image_post_load_cleanup_default()
87 int __weak arch_kimage_file_post_load_cleanup(struct kimage *image) in arch_kimage_file_post_load_cleanup() argument
89 return kexec_image_post_load_cleanup_default(image); in arch_kimage_file_post_load_cleanup()
93 static int kexec_image_verify_sig_default(struct kimage *image, void *buf, in kexec_image_verify_sig_default() argument
96 if (!image->fops || !image->fops->verify_sig) { in kexec_image_verify_sig_default()
101 return image->fops->verify_sig(buf, buf_len); in kexec_image_verify_sig_default()
104 int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, in arch_kexec_kernel_verify_sig() argument
107 return kexec_image_verify_sig_default(image, buf, buf_len); in arch_kexec_kernel_verify_sig()
150 void kimage_file_post_load_cleanup(struct kimage *image) in kimage_file_post_load_cleanup() argument
152 struct purgatory_info *pi = &image->purgatory_info; in kimage_file_post_load_cleanup()
154 vfree(image->kernel_buf); in kimage_file_post_load_cleanup()
155 image->kernel_buf = NULL; in kimage_file_post_load_cleanup()
157 vfree(image->initrd_buf); in kimage_file_post_load_cleanup()
158 image->initrd_buf = NULL; in kimage_file_post_load_cleanup()
160 kfree(image->cmdline_buf); in kimage_file_post_load_cleanup()
161 image->cmdline_buf = NULL; in kimage_file_post_load_cleanup()
170 vfree(image->ima_buffer); in kimage_file_post_load_cleanup()
171 image->ima_buffer = NULL; in kimage_file_post_load_cleanup()
175 arch_kimage_file_post_load_cleanup(image); in kimage_file_post_load_cleanup()
182 kfree(image->image_loader_data); in kimage_file_post_load_cleanup()
183 image->image_loader_data = NULL; in kimage_file_post_load_cleanup()
188 kimage_validate_signature(struct kimage *image) in kimage_validate_signature() argument
192 ret = arch_kexec_kernel_verify_sig(image, image->kernel_buf, in kimage_validate_signature()
193 image->kernel_buf_len); in kimage_validate_signature()
203 * image, permit it even if the kernel is otherwise locked in kimage_validate_signature()
222 kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, in kimage_file_prepare_segments() argument
229 ret = kernel_read_file_from_fd(kernel_fd, 0, &image->kernel_buf, in kimage_file_prepare_segments()
233 image->kernel_buf_len = ret; in kimage_file_prepare_segments()
235 /* Call arch image probe handlers */ in kimage_file_prepare_segments()
236 ret = arch_kexec_kernel_image_probe(image, image->kernel_buf, in kimage_file_prepare_segments()
237 image->kernel_buf_len); in kimage_file_prepare_segments()
242 ret = kimage_validate_signature(image); in kimage_file_prepare_segments()
249 ret = kernel_read_file_from_fd(initrd_fd, 0, &image->initrd_buf, in kimage_file_prepare_segments()
254 image->initrd_buf_len = ret; in kimage_file_prepare_segments()
259 image->cmdline_buf = memdup_user(cmdline_ptr, cmdline_len); in kimage_file_prepare_segments()
260 if (IS_ERR(image->cmdline_buf)) { in kimage_file_prepare_segments()
261 ret = PTR_ERR(image->cmdline_buf); in kimage_file_prepare_segments()
262 image->cmdline_buf = NULL; in kimage_file_prepare_segments()
266 image->cmdline_buf_len = cmdline_len; in kimage_file_prepare_segments()
269 if (image->cmdline_buf[cmdline_len - 1] != '\0') { in kimage_file_prepare_segments()
274 ima_kexec_cmdline(kernel_fd, image->cmdline_buf, in kimage_file_prepare_segments()
275 image->cmdline_buf_len - 1); in kimage_file_prepare_segments()
279 ima_add_kexec_buffer(image); in kimage_file_prepare_segments()
281 /* Call arch image load handlers */ in kimage_file_prepare_segments()
282 ldata = arch_kexec_kernel_image_load(image); in kimage_file_prepare_segments()
289 image->image_loader_data = ldata; in kimage_file_prepare_segments()
293 kimage_file_post_load_cleanup(image); in kimage_file_prepare_segments()
303 struct kimage *image; in kimage_file_alloc_init() local
306 image = do_kimage_alloc_init(); in kimage_file_alloc_init()
307 if (!image) in kimage_file_alloc_init()
310 image->file_mode = 1; in kimage_file_alloc_init()
314 image->control_page = crashk_res.start; in kimage_file_alloc_init()
315 image->type = KEXEC_TYPE_CRASH; in kimage_file_alloc_init()
318 ret = kimage_file_prepare_segments(image, kernel_fd, initrd_fd, in kimage_file_alloc_init()
323 ret = sanity_check_segment_list(image); in kimage_file_alloc_init()
328 image->control_code_page = kimage_alloc_control_pages(image, in kimage_file_alloc_init()
330 if (!image->control_code_page) { in kimage_file_alloc_init()
336 image->swap_page = kimage_alloc_control_pages(image, 0); in kimage_file_alloc_init()
337 if (!image->swap_page) { in kimage_file_alloc_init()
343 *rimage = image; in kimage_file_alloc_init()
346 kimage_free_page_list(&image->control_pages); in kimage_file_alloc_init()
348 kimage_file_post_load_cleanup(image); in kimage_file_alloc_init()
350 kfree(image); in kimage_file_alloc_init()
359 struct kimage **dest_image, *image; in SYSCALL_DEFINE5() local
369 image = NULL; in SYSCALL_DEFINE5()
392 ret = kimage_file_alloc_init(&image, kernel_fd, initrd_fd, cmdline_ptr, in SYSCALL_DEFINE5()
397 ret = machine_kexec_prepare(image); in SYSCALL_DEFINE5()
405 ret = kimage_crash_copy_vmcoreinfo(image); in SYSCALL_DEFINE5()
409 ret = kexec_calculate_store_digests(image); in SYSCALL_DEFINE5()
413 for (i = 0; i < image->nr_segments; i++) { in SYSCALL_DEFINE5()
416 ksegment = &image->segment[i]; in SYSCALL_DEFINE5()
421 ret = kimage_load_segment(image, &image->segment[i]); in SYSCALL_DEFINE5()
426 kimage_terminate(image); in SYSCALL_DEFINE5()
428 ret = machine_kexec_post_load(image); in SYSCALL_DEFINE5()
434 * after image has been loaded in SYSCALL_DEFINE5()
436 kimage_file_post_load_cleanup(image); in SYSCALL_DEFINE5()
438 image = xchg(dest_image, image); in SYSCALL_DEFINE5()
444 kimage_free(image); in SYSCALL_DEFINE5()
451 struct kimage *image = kbuf->image; in locate_mem_hole_top_down() local
470 if (kimage_is_destination_range(image, temp_start, temp_end)) { in locate_mem_hole_top_down()
489 struct kimage *image = kbuf->image; in locate_mem_hole_bottom_up() local
504 if (kimage_is_destination_range(image, temp_start, temp_end)) { in locate_mem_hole_bottom_up()
556 if (kbuf->image->type == KEXEC_TYPE_CRASH) in kexec_walk_memblock()
611 if (kbuf->image->type == KEXEC_TYPE_CRASH) in kexec_walk_resources()
673 if (!kbuf->image->file_mode) in kexec_add_buffer()
676 if (kbuf->image->nr_segments >= KEXEC_SEGMENT_MAX) in kexec_add_buffer()
686 if (!list_empty(&kbuf->image->control_pages)) { in kexec_add_buffer()
701 ksegment = &kbuf->image->segment[kbuf->image->nr_segments]; in kexec_add_buffer()
706 kbuf->image->nr_segments++; in kexec_add_buffer()
711 static int kexec_calculate_store_digests(struct kimage *image) in kexec_calculate_store_digests() argument
720 struct purgatory_info *pi = &image->purgatory_info; in kexec_calculate_store_digests()
760 for (j = i = 0; i < image->nr_segments; i++) { in kexec_calculate_store_digests()
763 ksegment = &image->segment[i]; in kexec_calculate_store_digests()
804 ret = kexec_purgatory_get_set_symbol(image, "purgatory_sha_regions", in kexec_calculate_store_digests()
809 ret = kexec_purgatory_get_set_symbol(image, "purgatory_sha256_digest", in kexec_calculate_store_digests()
920 kbuf->image->start = pi->ehdr->e_entry; in kexec_purgatory_setup_sechdrs()
942 kbuf->image->start -= sechdrs[i].sh_addr; in kexec_purgatory_setup_sechdrs()
943 kbuf->image->start += kbuf->mem + offset; in kexec_purgatory_setup_sechdrs()
958 static int kexec_apply_relocations(struct kimage *image) in kexec_apply_relocations() argument
961 struct purgatory_info *pi = &image->purgatory_info; in kexec_apply_relocations()
1020 * @image: Image to add the purgatory to.
1023 * Allocates the memory needed for image->purgatory_info.sechdrs and
1024 * image->purgatory_info.purgatory_buf/kbuf->buffer. Caller is responsible
1029 int kexec_load_purgatory(struct kimage *image, struct kexec_buf *kbuf) in kexec_load_purgatory() argument
1031 struct purgatory_info *pi = &image->purgatory_info; in kexec_load_purgatory()
1047 ret = kexec_apply_relocations(image); in kexec_load_purgatory()
1116 void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name) in kexec_purgatory_get_symbol_addr() argument
1118 struct purgatory_info *pi = &image->purgatory_info; in kexec_purgatory_get_symbol_addr()
1139 int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name, in kexec_purgatory_get_set_symbol() argument
1142 struct purgatory_info *pi = &image->purgatory_info; in kexec_purgatory_get_set_symbol()