Lines Matching full:image

42 static bool check_ima_segment_index(struct kimage *image, int i)
44 if (image->is_ima_segment_index_set && i == image->ima_segment_index)
50 static bool check_ima_segment_index(struct kimage *image, int i)
56 static int kexec_calculate_store_digests(struct kimage *image);
66 int kexec_image_probe_default(struct kimage *image, void *buf,
75 image->fops = *fops;
83 static void *kexec_image_load_default(struct kimage *image)
85 if (!image->fops || !image->fops->load)
88 return image->fops->load(image, image->kernel_buf,
89 image->kernel_buf_len, image->initrd_buf,
90 image->initrd_buf_len, image->cmdline_buf,
91 image->cmdline_buf_len);
94 int kexec_image_post_load_cleanup_default(struct kimage *image)
96 if (!image->fops || !image->fops->cleanup)
99 return image->fops->cleanup(image->image_loader_data);
107 void kimage_file_post_load_cleanup(struct kimage *image)
109 struct purgatory_info *pi = &image->purgatory_info;
111 vfree(image->kernel_buf);
112 image->kernel_buf = NULL;
114 vfree(image->initrd_buf);
115 image->initrd_buf = NULL;
117 kfree(image->cmdline_buf);
118 image->cmdline_buf = NULL;
127 vfree(image->ima_buffer);
128 image->ima_buffer = NULL;
132 arch_kimage_file_post_load_cleanup(image);
139 kfree(image->image_loader_data);
140 image->image_loader_data = NULL;
163 static int kexec_image_verify_sig(struct kimage *image, void *buf,
166 if (!image->fops || !image->fops->verify_sig) {
171 return image->fops->verify_sig(buf, buf_len);
175 kimage_validate_signature(struct kimage *image)
179 ret = kexec_image_verify_sig(image, image->kernel_buf,
180 image->kernel_buf_len);
190 * image, permit it even if the kernel is otherwise locked
204 static int kexec_post_load(struct kimage *image, unsigned long flags)
208 ima_kexec_post_load(image);
210 return machine_kexec_post_load(image);
218 kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd,
225 ret = kernel_read_file_from_fd(kernel_fd, 0, &image->kernel_buf,
230 image->kernel_buf_len = ret;
232 image->kernel_buf, image->kernel_buf_len);
234 /* Call arch image probe handlers */
235 ret = arch_kexec_kernel_image_probe(image, image->kernel_buf,
236 image->kernel_buf_len);
241 ret = kimage_validate_signature(image);
248 ret = kernel_read_file_from_fd(initrd_fd, 0, &image->initrd_buf,
253 image->initrd_buf_len = ret;
257 image->no_cma = !!(flags & KEXEC_FILE_NO_CMA);
258 image->force_dtb = flags & KEXEC_FILE_FORCE_DTB;
261 image->cmdline_buf = memdup_user(cmdline_ptr, cmdline_len);
262 if (IS_ERR(image->cmdline_buf)) {
263 ret = PTR_ERR(image->cmdline_buf);
264 image->cmdline_buf = NULL;
268 image->cmdline_buf_len = cmdline_len;
271 if (image->cmdline_buf[cmdline_len - 1] != '\0') {
276 ima_kexec_cmdline(kernel_fd, image->cmdline_buf,
277 image->cmdline_buf_len - 1);
281 ima_add_kexec_buffer(image);
284 ret = kho_fill_kimage(image);
288 /* Call image load handler */
289 ldata = kexec_image_load_default(image);
296 image->image_loader_data = ldata;
300 kimage_file_post_load_cleanup(image);
310 struct kimage *image;
313 image = do_kimage_alloc_init();
314 if (!image)
318 image->file_mode = 1;
323 image->control_page = crashk_res.start;
324 image->type = KEXEC_TYPE_CRASH;
328 ret = kimage_file_prepare_segments(image, kernel_fd, initrd_fd,
333 ret = sanity_check_segment_list(image);
338 image->control_code_page = kimage_alloc_control_pages(image,
340 if (!image->control_code_page) {
346 image->swap_page = kimage_alloc_control_pages(image, 0);
347 if (!image->swap_page) {
353 *rimage = image;
356 kimage_free_page_list(&image->control_pages);
358 kimage_file_post_load_cleanup(image);
360 kfree(image);
370 struct kimage **dest_image, *image;
381 image = NULL;
406 ret = kimage_file_alloc_init(&image, kernel_fd, initrd_fd, cmdline_ptr,
412 if ((flags & KEXEC_FILE_ON_CRASH) && arch_crash_hotplug_support(image, flags))
413 image->hotplug_support = 1;
416 ret = machine_kexec_prepare(image);
424 ret = kimage_crash_copy_vmcoreinfo(image);
428 ret = kexec_calculate_store_digests(image);
432 kexec_dprintk("nr_segments = %lu\n", image->nr_segments);
433 for (i = 0; i < image->nr_segments; i++) {
436 ksegment = &image->segment[i];
441 ret = kimage_load_segment(image, i);
446 kimage_terminate(image);
448 ret = kexec_post_load(image, flags);
453 image->type, image->start, image->head, flags);
456 * after image has been loaded
458 kimage_file_post_load_cleanup(image);
460 image = xchg(dest_image, image);
468 kimage_free(image);
475 struct kimage *image = kbuf->image;
495 if (kimage_is_destination_range(image, temp_start, temp_end)) {
501 if (arch_check_excluded_range(image, temp_start, temp_end)) {
520 struct kimage *image = kbuf->image;
537 if (kimage_is_destination_range(image, temp_start, temp_end)) {
543 if (arch_check_excluded_range(image, temp_start, temp_end)) {
596 if (kbuf->image->type == KEXEC_TYPE_CRASH)
658 if (kbuf->image->type == KEXEC_TYPE_CRASH)
677 if (kbuf->image->no_cma)
681 if (kbuf->image->type == KEXEC_TYPE_CRASH)
692 if (kimage_is_destination_range(kbuf->image, mem, mem + kbuf->memsz)) {
762 if (!kbuf->image->file_mode)
765 if (kbuf->image->nr_segments >= KEXEC_SEGMENT_MAX)
775 if (!list_empty(&kbuf->image->control_pages)) {
791 ksegment = &kbuf->image->segment[kbuf->image->nr_segments];
796 kbuf->image->segment_cma[kbuf->image->nr_segments] = kbuf->cma;
797 kbuf->image->nr_segments++;
802 static int kexec_calculate_store_digests(struct kimage *image)
810 struct purgatory_info *pi = &image->purgatory_info;
825 for (j = i = 0; i < image->nr_segments; i++) {
830 if (i == image->elfcorehdr_index)
834 ksegment = &image->segment[i];
846 if (check_ima_segment_index(image, i))
872 ret = kexec_purgatory_get_set_symbol(image, "purgatory_sha_regions",
877 ret = kexec_purgatory_get_set_symbol(image, "purgatory_sha256_digest",
1036 kbuf->image->start = pi->ehdr->e_entry;
1064 kbuf->image->start = kbuf->mem + offset + entry_off;
1070 * calculate the value of image->start based on it.
1074 * image->start. So do not re-calculate image->start if it
1082 kbuf->image->start == pi->ehdr->e_entry) {
1083 kbuf->image->start -= sechdrs[i].sh_addr;
1084 kbuf->image->start += kbuf->mem + offset;
1100 static int kexec_apply_relocations(struct kimage *image)
1103 struct purgatory_info *pi = &image->purgatory_info;
1162 * @image: Image to add the purgatory to.
1165 * Allocates the memory needed for image->purgatory_info.sechdrs and
1166 * image->purgatory_info.purgatory_buf/kbuf->buffer. Caller is responsible
1171 int kexec_load_purgatory(struct kimage *image, struct kexec_buf *kbuf)
1173 struct purgatory_info *pi = &image->purgatory_info;
1189 ret = kexec_apply_relocations(image);
1203 void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name)
1205 struct purgatory_info *pi = &image->purgatory_info;
1226 int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
1229 struct purgatory_info *pi = &image->purgatory_info;