diff options
Diffstat (limited to 'kernel/kexec.c')
| -rw-r--r-- | kernel/kexec.c | 8 | 
1 files changed, 5 insertions, 3 deletions
| diff --git a/kernel/kexec.c b/kernel/kexec.c index 131b1703936f..c0613f7d6730 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
| @@ -151,8 +151,10 @@ static int do_kimage_alloc(struct kimage **rimage, unsigned long entry, | |||
| 151 | image->nr_segments = nr_segments; | 151 | image->nr_segments = nr_segments; | 
| 152 | segment_bytes = nr_segments * sizeof(*segments); | 152 | segment_bytes = nr_segments * sizeof(*segments); | 
| 153 | result = copy_from_user(image->segment, segments, segment_bytes); | 153 | result = copy_from_user(image->segment, segments, segment_bytes); | 
| 154 | if (result) | 154 | if (result) { | 
| 155 | result = -EFAULT; | ||
| 155 | goto out; | 156 | goto out; | 
| 157 | } | ||
| 156 | 158 | ||
| 157 | /* | 159 | /* | 
| 158 | * Verify we have good destination addresses. The caller is | 160 | * Verify we have good destination addresses. The caller is | 
| @@ -827,7 +829,7 @@ static int kimage_load_normal_segment(struct kimage *image, | |||
| 827 | result = copy_from_user(ptr, buf, uchunk); | 829 | result = copy_from_user(ptr, buf, uchunk); | 
| 828 | kunmap(page); | 830 | kunmap(page); | 
| 829 | if (result) { | 831 | if (result) { | 
| 830 | result = (result < 0) ? result : -EIO; | 832 | result = -EFAULT; | 
| 831 | goto out; | 833 | goto out; | 
| 832 | } | 834 | } | 
| 833 | ubytes -= uchunk; | 835 | ubytes -= uchunk; | 
| @@ -882,7 +884,7 @@ static int kimage_load_crash_segment(struct kimage *image, | |||
| 882 | kexec_flush_icache_page(page); | 884 | kexec_flush_icache_page(page); | 
| 883 | kunmap(page); | 885 | kunmap(page); | 
| 884 | if (result) { | 886 | if (result) { | 
| 885 | result = (result < 0) ? result : -EIO; | 887 | result = -EFAULT; | 
| 886 | goto out; | 888 | goto out; | 
| 887 | } | 889 | } | 
| 888 | ubytes -= uchunk; | 890 | ubytes -= uchunk; | 
