@ -29,7 +29,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
int (*_machine_kexec_prepare)(struct kimage *) = NULL;
int (*_machine_kexec_prepare)(struct kimage *) = NULL;
void (*_machine_kexec_shutdown)(void) = NULL;
void (*_machine_kexec_shutdown)(void) = NULL;
@@ -28,6 +25, 99 @@ atomic_t kexec_ready_to_reboot = ATOMIC_
@@ -28,6 +25, 101 @@ atomic_t kexec_ready_to_reboot = ATOMIC_
void (*_crash_smp_send_stop)(void) = NULL;
void (*_crash_smp_send_stop)(void) = NULL;
#endif
#endif
@ -81,7 +81,9 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
+ pr_warn("kexec command line truncated to %zd bytes\n", size);
+ pr_warn("kexec command line truncated to %zd bytes\n", size);
+
+
+ /* Copy to kernel space */
+ /* Copy to kernel space */
+ copy_from_user(kexec_argv_buf, buf, size);
+ if (copy_from_user(kexec_argv_buf, buf, size))
+ pr_warn("kexec command line copy to kernel space failed\n");
+
+ kexec_argv_buf[size - 1] = 0;
+ kexec_argv_buf[size - 1] = 0;
+}
+}
+
+
@ -129,7 +131,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
static void kexec_image_info(const struct kimage *kimage)
static void kexec_image_info(const struct kimage *kimage)
{
{
unsigned long i;
unsigned long i;
@@ -52,6 +14 2 ,18 @@ int
@@ -52,6 +14 4 ,18 @@ int
machine_kexec_prepare(struct kimage *kimage)
machine_kexec_prepare(struct kimage *kimage)
{
{
kexec_image_info(kimage);
kexec_image_info(kimage);
@ -148,7 +150,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
if (_machine_kexec_prepare)
if (_machine_kexec_prepare)
return _machine_kexec_prepare(kimage);
return _machine_kexec_prepare(kimage);
@@ -89,10 +19 1 ,12 @@ machine_kexec(struct kimage *image)
@@ -89,10 +19 3 ,12 @@ machine_kexec(struct kimage *image)
unsigned long *ptr;
unsigned long *ptr;
reboot_code_buffer =
reboot_code_buffer =
@ -162,7 +164,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
if (image->type == KEXEC_TYPE_DEFAULT) {
if (image->type == KEXEC_TYPE_DEFAULT) {
kexec_indirection_page =
kexec_indirection_page =
@@ -100,9 +20 4 ,19 @@ machine_kexec(struct kimage *image)
@@ -100,9 +20 6 ,19 @@ machine_kexec(struct kimage *image)
} else {
} else {
kexec_indirection_page = (unsigned long)&image->head;
kexec_indirection_page = (unsigned long)&image->head;
}
}
@ -184,7 +186,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
/*
/*
* The generic kexec code builds a page list with physical
* The generic kexec code builds a page list with physical
@@ -124,15 +2 38 ,16 @@ machine_kexec(struct kimage *image)
@@ -124,15 +2 40 ,16 @@ machine_kexec(struct kimage *image)
/*
/*
* we do not want to be bothered.
* we do not want to be bothered.
*/
*/