[PATCH 4/6] efi_runtime: refactor the success and error path

Ivan Hu ivan.hu at canonical.com
Fri Aug 19 02:57:38 UTC 2016


Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
 efi_runtime/efi_runtime.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
index 5dead14..ceb655d 100644
--- a/efi_runtime/efi_runtime.c
+++ b/efi_runtime/efi_runtime.c
@@ -218,32 +218,32 @@ static long efi_runtime_get_variable(unsigned long arg)
 	status = efi.get_variable(name, vd, at, dz, data);
 	kfree(name);
 
-	if (data) {
-		if (status == EFI_SUCCESS && prev_datasize >= datasize)
-			rv = copy_to_user(getvariable.data, data,
-				datasize);
-		kfree(data);
-	}
-
-	if (rv)
-		return rv;
-
 	if (put_user(status, getvariable.status))
 		return -EFAULT;
-	if (status == EFI_SUCCESS && prev_datasize >= datasize) {
-		if (at && put_user(attr, getvariable.attributes))
-			return -EFAULT;
-		if (dz && put_user(datasize, getvariable.data_size))
-			return -EFAULT;
-		return 0;
-	} else if (status == EFI_BUFFER_TOO_SMALL) {
-		if (dz && put_user(datasize, getvariable.data_size))
-			return -EFAULT;
+
+	if (status != EFI_SUCCESS) {
+		if (status == EFI_BUFFER_TOO_SMALL) {
+			if (dz && put_user(datasize, getvariable.data_size))
+				return -EFAULT;
+		}
 		return -EINVAL;
-	} else {
+	}
+
+	if (prev_datasize < datasize)
 		return -EINVAL;
+
+	if (data) {
+		rv = copy_to_user(getvariable.data, data, datasize);
+		kfree(data);
+		if (rv)
+			return rv;
 	}
 
+	if (at && put_user(attr, getvariable.attributes))
+		return -EFAULT;
+	if (dz && put_user(datasize, getvariable.data_size))
+		return -EFAULT;
+
 	return 0;
 }
 
-- 
1.9.1




More information about the fwts-devel mailing list