[PATCH 4/5] efi_runtime: get_nextvariable: copy only the needed name bytes
Ricardo Neri
ricardo.neri-calderon at linux.intel.com
Fri Feb 6 03:50:45 UTC 2015
We trust the name_size passed by the user_space. Thus, there is not
need to copy from user more bytes than specified.
Furthermore, this behavior could mask potential problems in the
firmware: to start traversing the list of variable names, some firmware
implementations may just blindly check if name[0] is '\0' without
even checking if the size of the buffer passed by the operating system
is at least 2 bytes (UEFI variable names are stored in strings of 2-byte
characters). This behaviour is wrong as the firmware must not access
memory beyond the name buffer. By providing a 1024-bytes buffer of
zeroes we allow the name[0] == '\0' to pass, regardless of the size
of the buffer.
Signed-off-by: Ricardo Neri <ricardo.neri-calderon at linux.intel.com>
---
efi_runtime/efi_runtime.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
index 4ef1754..786a1df 100644
--- a/efi_runtime/efi_runtime.c
+++ b/efi_runtime/efi_runtime.c
@@ -457,7 +457,7 @@ static long efi_runtime_get_nextvariablename(unsigned long arg)
rv = copy_ucs2_from_user_len(&name,
pgetnextvariablename_local.VariableName,
- 1024);
+ name_size);
if (rv)
return rv;
--
1.9.1
More information about the fwts-devel
mailing list