Lines Matching refs:image

41 static int kexec_calculate_store_digests(struct kimage *image);
51 int kexec_image_probe_default(struct kimage *image, void *buf,
60 image->fops = *fops;
68 static void *kexec_image_load_default(struct kimage *image)
70 if (!image->fops || !image->fops->load)
73 return image->fops->load(image, image->kernel_buf,
74 image->kernel_buf_len, image->initrd_buf,
75 image->initrd_buf_len, image->cmdline_buf,
76 image->cmdline_buf_len);
79 int kexec_image_post_load_cleanup_default(struct kimage *image)
81 if (!image->fops || !image->fops->cleanup)
84 return image->fops->cleanup(image->image_loader_data);
92 void kimage_file_post_load_cleanup(struct kimage *image)
94 struct purgatory_info *pi = &image->purgatory_info;
96 vfree(image->kernel_buf);
97 image->kernel_buf = NULL;
99 vfree(image->initrd_buf);
100 image->initrd_buf = NULL;
102 kfree(image->cmdline_buf);
103 image->cmdline_buf = NULL;
112 vfree(image->ima_buffer);
113 image->ima_buffer = NULL;
117 arch_kimage_file_post_load_cleanup(image);
124 kfree(image->image_loader_data);
125 image->image_loader_data = NULL;
148 static int kexec_image_verify_sig(struct kimage *image, void *buf,
151 if (!image->fops || !image->fops->verify_sig) {
156 return image->fops->verify_sig(buf, buf_len);
160 kimage_validate_signature(struct kimage *image)
164 ret = kexec_image_verify_sig(image, image->kernel_buf,
165 image->kernel_buf_len);
175 * image, permit it even if the kernel is otherwise locked
194 kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd,
201 ret = kernel_read_file_from_fd(kernel_fd, 0, &image->kernel_buf,
206 image->kernel_buf_len = ret;
208 image->kernel_buf, image->kernel_buf_len);
210 /* Call arch image probe handlers */
211 ret = arch_kexec_kernel_image_probe(image, image->kernel_buf,
212 image->kernel_buf_len);
217 ret = kimage_validate_signature(image);
224 ret = kernel_read_file_from_fd(initrd_fd, 0, &image->initrd_buf,
229 image->initrd_buf_len = ret;
234 image->cmdline_buf = memdup_user(cmdline_ptr, cmdline_len);
235 if (IS_ERR(image->cmdline_buf)) {
236 ret = PTR_ERR(image->cmdline_buf);
237 image->cmdline_buf = NULL;
241 image->cmdline_buf_len = cmdline_len;
244 if (image->cmdline_buf[cmdline_len - 1] != '\0') {
249 ima_kexec_cmdline(kernel_fd, image->cmdline_buf,
250 image->cmdline_buf_len - 1);
254 ima_add_kexec_buffer(image);
256 /* Call image load handler */
257 ldata = kexec_image_load_default(image);
264 image->image_loader_data = ldata;
268 kimage_file_post_load_cleanup(image);
278 struct kimage *image;
281 image = do_kimage_alloc_init();
282 if (!image)
286 image->file_mode = 1;
291 image->control_page = crashk_res.start;
292 image->type = KEXEC_TYPE_CRASH;
296 ret = kimage_file_prepare_segments(image, kernel_fd, initrd_fd,
301 ret = sanity_check_segment_list(image);
306 image->control_code_page = kimage_alloc_control_pages(image,
308 if (!image->control_code_page) {
314 image->swap_page = kimage_alloc_control_pages(image, 0);
315 if (!image->swap_page) {
321 *rimage = image;
324 kimage_free_page_list(&image->control_pages);
326 kimage_file_post_load_cleanup(image);
328 kfree(image);
338 struct kimage **dest_image, *image;
349 image = NULL;
374 ret = kimage_file_alloc_init(&image, kernel_fd, initrd_fd, cmdline_ptr,
379 ret = machine_kexec_prepare(image);
387 ret = kimage_crash_copy_vmcoreinfo(image);
391 ret = kexec_calculate_store_digests(image);
395 kexec_dprintk("nr_segments = %lu\n", image->nr_segments);
396 for (i = 0; i < image->nr_segments; i++) {
399 ksegment = &image->segment[i];
404 ret = kimage_load_segment(image, &image->segment[i]);
409 kimage_terminate(image);
411 ret = machine_kexec_post_load(image);
416 image->type, image->start, image->head, flags);
419 * after image has been loaded
421 kimage_file_post_load_cleanup(image);
423 image = xchg(dest_image, image);
431 kimage_free(image);
438 struct kimage *image = kbuf->image;
457 if (kimage_is_destination_range(image, temp_start, temp_end)) {
476 struct kimage *image = kbuf->image;
491 if (kimage_is_destination_range(image, temp_start, temp_end)) {
544 if (kbuf->image->type == KEXEC_TYPE_CRASH)
606 if (kbuf->image->type == KEXEC_TYPE_CRASH)
658 if (!kbuf->image->file_mode)
661 if (kbuf->image->nr_segments >= KEXEC_SEGMENT_MAX)
671 if (!list_empty(&kbuf->image->control_pages)) {
686 ksegment = &kbuf->image->segment[kbuf->image->nr_segments];
691 kbuf->image->nr_segments++;
696 static int kexec_calculate_store_digests(struct kimage *image)
705 struct purgatory_info *pi = &image->purgatory_info;
745 for (j = i = 0; i < image->nr_segments; i++) {
750 if (j == image->elfcorehdr_index)
754 ksegment = &image->segment[i];
795 ret = kexec_purgatory_get_set_symbol(image, "purgatory_sha_regions",
800 ret = kexec_purgatory_get_set_symbol(image, "purgatory_sha256_digest",
912 kbuf->image->start = pi->ehdr->e_entry;
933 * calculate the value of image->start based on it.
937 * image->start. So do not re-calculate image->start if it
945 !WARN_ON(kbuf->image->start != pi->ehdr->e_entry)) {
946 kbuf->image->start -= sechdrs[i].sh_addr;
947 kbuf->image->start += kbuf->mem + offset;
962 static int kexec_apply_relocations(struct kimage *image)
965 struct purgatory_info *pi = &image->purgatory_info;
1024 * @image: Image to add the purgatory to.
1027 * Allocates the memory needed for image->purgatory_info.sechdrs and
1028 * image->purgatory_info.purgatory_buf/kbuf->buffer. Caller is responsible
1033 int kexec_load_purgatory(struct kimage *image, struct kexec_buf *kbuf)
1035 struct purgatory_info *pi = &image->purgatory_info;
1051 ret = kexec_apply_relocations(image);
1120 void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name)
1122 struct purgatory_info *pi = &image->purgatory_info;
1143 int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
1146 struct purgatory_info *pi = &image->purgatory_info;