[PATCH 3/4] efi_runtime: move the checking status forward
Ivan Hu
ivan.hu at canonical.com
Mon Aug 22 09:08:39 UTC 2016
Move the checking status forward, no need to copy the invalid data to user,
when firmware return not EFI_SUCCESS.
Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
efi_runtime/efi_runtime.c | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
index ee159ff..563f782 100644
--- a/efi_runtime/efi_runtime.c
+++ b/efi_runtime/efi_runtime.c
@@ -395,8 +395,10 @@ static long efi_runtime_get_waketime(unsigned long arg)
if (put_user(status, getwakeuptime.status))
return -EFAULT;
+
if (status != EFI_SUCCESS)
return -EINVAL;
+
if (getwakeuptime.enabled && put_user(enabled,
getwakeuptime.enabled))
return -EFAULT;
@@ -565,13 +567,13 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg)
if (put_user(status, getnexthighmonocount.status))
return -EFAULT;
+ if (status != EFI_SUCCESS)
+ return -EINVAL;
+
if (getnexthighmonocount.high_count &&
put_user(count, getnexthighmonocount.high_count))
return -EFAULT;
- if (status != EFI_SUCCESS)
- return -EINVAL;
-
return 0;
}
@@ -593,6 +595,12 @@ static long efi_runtime_query_variableinfo(unsigned long arg)
status = efi.query_variable_info(queryvariableinfo.attributes,
&max_storage, &remaining, &max_size);
+ if (put_user(status, queryvariableinfo.status))
+ return -EFAULT;
+
+ if (status != EFI_SUCCESS)
+ return -EINVAL;
+
if (put_user(max_storage,
queryvariableinfo.maximum_variable_storage_size))
return -EFAULT;
@@ -604,11 +612,6 @@ static long efi_runtime_query_variableinfo(unsigned long arg)
if (put_user(max_size, queryvariableinfo.maximum_variable_size))
return -EFAULT;
- if (put_user(status, queryvariableinfo.status))
- return -EFAULT;
- if (status != EFI_SUCCESS)
- return -EINVAL;
-
return 0;
}
@@ -662,20 +665,18 @@ static long efi_runtime_query_capsulecaps(unsigned long arg)
goto out;
}
- if (put_user(max_size, qcaps.maximum_capsule_size)) {
- rv = -EFAULT;
+ if (status != EFI_SUCCESS) {
+ rv = -EINVAL;
goto out;
}
- if (put_user(reset_type, qcaps.reset_type)) {
+ if (put_user(max_size, qcaps.maximum_capsule_size)) {
rv = -EFAULT;
goto out;
}
- if (status != EFI_SUCCESS) {
- rv = -EINVAL;
- goto out;
- }
+ if (put_user(reset_type, qcaps.reset_type))
+ rv = -EFAULT;
out:
kfree(capsules);
--
1.9.1
More information about the fwts-devel
mailing list