kexec: move some memembers and definitions within the scope of CONFIG_KEXEC_FILE
Move the stuff currently only used by the kexec file code within CONFIG_KEXEC_FILE (and CONFIG_KEXEC_VERIFY_SIG). Also move internal "struct kexec_sha_region" and "struct kexec_buf" into "kexec_internal.h". Signed-off-by: Xunlei Pang <xlpang@redhat.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Dave Young <dyoung@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
2b24692b92
commit
978e30c9b4
4 changed files with 50 additions and 37 deletions
|
@ -385,6 +385,7 @@ int arch_kimage_file_post_load_cleanup(struct kimage *image)
|
|||
return image->fops->cleanup(image->image_loader_data);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_KEXEC_VERIFY_SIG
|
||||
int arch_kexec_kernel_verify_sig(struct kimage *image, void *kernel,
|
||||
unsigned long kernel_len)
|
||||
{
|
||||
|
@ -395,6 +396,7 @@ int arch_kexec_kernel_verify_sig(struct kimage *image, void *kernel,
|
|||
|
||||
return image->fops->verify_sig(kernel, kernel_len);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Apply purgatory relocations.
|
||||
|
|
|
@ -109,11 +109,7 @@ struct compat_kexec_segment {
|
|||
};
|
||||
#endif
|
||||
|
||||
struct kexec_sha_region {
|
||||
unsigned long start;
|
||||
unsigned long len;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_KEXEC_FILE
|
||||
struct purgatory_info {
|
||||
/* Pointer to elf header of read only purgatory */
|
||||
Elf_Ehdr *ehdr;
|
||||
|
@ -130,6 +126,28 @@ struct purgatory_info {
|
|||
unsigned long purgatory_load_addr;
|
||||
};
|
||||
|
||||
typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
|
||||
typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
|
||||
unsigned long kernel_len, char *initrd,
|
||||
unsigned long initrd_len, char *cmdline,
|
||||
unsigned long cmdline_len);
|
||||
typedef int (kexec_cleanup_t)(void *loader_data);
|
||||
|
||||
#ifdef CONFIG_KEXEC_VERIFY_SIG
|
||||
typedef int (kexec_verify_sig_t)(const char *kernel_buf,
|
||||
unsigned long kernel_len);
|
||||
#endif
|
||||
|
||||
struct kexec_file_ops {
|
||||
kexec_probe_t *probe;
|
||||
kexec_load_t *load;
|
||||
kexec_cleanup_t *cleanup;
|
||||
#ifdef CONFIG_KEXEC_VERIFY_SIG
|
||||
kexec_verify_sig_t *verify_sig;
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
struct kimage {
|
||||
kimage_entry_t head;
|
||||
kimage_entry_t *entry;
|
||||
|
@ -161,6 +179,7 @@ struct kimage {
|
|||
struct kimage_arch arch;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KEXEC_FILE
|
||||
/* Additional fields for file based kexec syscall */
|
||||
void *kernel_buf;
|
||||
unsigned long kernel_buf_len;
|
||||
|
@ -179,38 +198,7 @@ struct kimage {
|
|||
|
||||
/* Information for loading purgatory */
|
||||
struct purgatory_info purgatory_info;
|
||||
};
|
||||
|
||||
/*
|
||||
* Keeps track of buffer parameters as provided by caller for requesting
|
||||
* memory placement of buffer.
|
||||
*/
|
||||
struct kexec_buf {
|
||||
struct kimage *image;
|
||||
char *buffer;
|
||||
unsigned long bufsz;
|
||||
unsigned long mem;
|
||||
unsigned long memsz;
|
||||
unsigned long buf_align;
|
||||
unsigned long buf_min;
|
||||
unsigned long buf_max;
|
||||
bool top_down; /* allocate from top of memory hole */
|
||||
};
|
||||
|
||||
typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
|
||||
typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
|
||||
unsigned long kernel_len, char *initrd,
|
||||
unsigned long initrd_len, char *cmdline,
|
||||
unsigned long cmdline_len);
|
||||
typedef int (kexec_cleanup_t)(void *loader_data);
|
||||
typedef int (kexec_verify_sig_t)(const char *kernel_buf,
|
||||
unsigned long kernel_len);
|
||||
|
||||
struct kexec_file_ops {
|
||||
kexec_probe_t *probe;
|
||||
kexec_load_t *load;
|
||||
kexec_cleanup_t *cleanup;
|
||||
kexec_verify_sig_t *verify_sig;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* kexec interface functions */
|
||||
|
|
|
@ -109,11 +109,13 @@ int __weak arch_kimage_file_post_load_cleanup(struct kimage *image)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_KEXEC_VERIFY_SIG
|
||||
int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
|
||||
unsigned long buf_len)
|
||||
{
|
||||
return -EKEYREJECTED;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Apply relocations of type RELA */
|
||||
int __weak
|
||||
|
|
|
@ -15,6 +15,27 @@ int kimage_is_destination_range(struct kimage *image,
|
|||
extern struct mutex kexec_mutex;
|
||||
|
||||
#ifdef CONFIG_KEXEC_FILE
|
||||
struct kexec_sha_region {
|
||||
unsigned long start;
|
||||
unsigned long len;
|
||||
};
|
||||
|
||||
/*
|
||||
* Keeps track of buffer parameters as provided by caller for requesting
|
||||
* memory placement of buffer.
|
||||
*/
|
||||
struct kexec_buf {
|
||||
struct kimage *image;
|
||||
char *buffer;
|
||||
unsigned long bufsz;
|
||||
unsigned long mem;
|
||||
unsigned long memsz;
|
||||
unsigned long buf_align;
|
||||
unsigned long buf_min;
|
||||
unsigned long buf_max;
|
||||
bool top_down; /* allocate from top of memory hole */
|
||||
};
|
||||
|
||||
void kimage_file_post_load_cleanup(struct kimage *image);
|
||||
#else /* CONFIG_KEXEC_FILE */
|
||||
static inline void kimage_file_post_load_cleanup(struct kimage *image) { }
|
||||
|
|
Loading…
Reference in a new issue