On Tue, Oct 10, 2017 at 12:02:01PM +0100, Julien Thierry wrote: [snip]
> >--- a/kernel/kexec_file.c > >+++ b/kernel/kexec_file.c > >@@ -26,30 +26,79 @@ > > #include <linux/vmalloc.h> > > #include "kexec_internal.h" > > > >+const __weak struct kexec_file_ops * const kexec_file_loaders[] = {NULL}; > >+ > > static int kexec_calculate_store_digests(struct kimage *image); > > > >+int _kexec_kernel_image_probe(struct kimage *image, void *buf, > >+ unsigned long buf_len) > >+{ > >+ const struct kexec_file_ops *fops; > >+ int ret = -ENOEXEC; > >+ > >+ for (fops = kexec_file_loaders[0]; fops && fops->probe; ++fops) { > > Hmm, that's not gonna work (and I see that what I said in the previous > patch was not 100% correct either). Can you elaborate this a bit more? I'm sure that, with my code, any member of fops, cannot be changed; "const struct kexec_file_ops *fops" means that fops is a pointer to "constant sturct kexec_file_ops," while "struct kexec_file_ops * const kexec_file_loaders[]" means that kexec_file_loaders is a "constant array" of pointers to "constant struct kexec_file_ops." Thanks, -Takahiro AKASHI > 'fops' should be of type 'const struct kexec_file_ops **', and the loop > should be: > > for (fops = &kexec_file_loaders[0]; *fops && (*fops)->probe; ++fops) > > With some additional dereferences in the body of the loop. > > Unless you prefer the previous state of the loop (with i and the break > inside), but I still think this looks better. > > Cheers, > > -- > Julien Thierry > IMPORTANT NOTICE: The contents of this email and any attachments are > confidential and may also be privileged. If you are not the intended > recipient, please notify the sender immediately and do not disclose the > contents to any other person, use it for any purpose, or store or copy the > information in any medium. Thank you. _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec