|
@@ -151,8 +151,10 @@ static int do_kimage_alloc(struct kimage **rimage, unsigned long entry,
|
|
image->nr_segments = nr_segments;
|
|
image->nr_segments = nr_segments;
|
|
segment_bytes = nr_segments * sizeof(*segments);
|
|
segment_bytes = nr_segments * sizeof(*segments);
|
|
result = copy_from_user(image->segment, segments, segment_bytes);
|
|
result = copy_from_user(image->segment, segments, segment_bytes);
|
|
- if (result)
|
|
|
|
|
|
+ if (result) {
|
|
|
|
+ result = -EFAULT;
|
|
goto out;
|
|
goto out;
|
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
/*
|
|
* Verify we have good destination addresses. The caller is
|
|
* Verify we have good destination addresses. The caller is
|
|
@@ -827,7 +829,7 @@ static int kimage_load_normal_segment(struct kimage *image,
|
|
result = copy_from_user(ptr, buf, uchunk);
|
|
result = copy_from_user(ptr, buf, uchunk);
|
|
kunmap(page);
|
|
kunmap(page);
|
|
if (result) {
|
|
if (result) {
|
|
- result = (result < 0) ? result : -EIO;
|
|
|
|
|
|
+ result = -EFAULT;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
ubytes -= uchunk;
|
|
ubytes -= uchunk;
|
|
@@ -882,7 +884,7 @@ static int kimage_load_crash_segment(struct kimage *image,
|
|
kexec_flush_icache_page(page);
|
|
kexec_flush_icache_page(page);
|
|
kunmap(page);
|
|
kunmap(page);
|
|
if (result) {
|
|
if (result) {
|
|
- result = (result < 0) ? result : -EIO;
|
|
|
|
|
|
+ result = -EFAULT;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
ubytes -= uchunk;
|
|
ubytes -= uchunk;
|