diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-07-28 14:26:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-07-28 14:26:13 -0400 |
commit | d61be4b3f2684b6d76ef8c1d28ecdeb9bb20fa8f (patch) | |
tree | d87c3b49ecaf4fb2c567b8aca6a6738728d70fa1 | |
parent | 67eb890e5e132b56d9af7adf407e7c2a6ed248dc (diff) | |
parent | f91b1feada0b6f0a4d33648155b3ded2c4e0707e (diff) |
Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull arm64 fix from Catalin Marinas:
"Fix buffer overflow when UTF-16 UEFI vendor string is copied from the
system table into a char array with a size of 100 bytes"
* tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
arm64/efi: map the entire UEFI vendor string before reading it
-rw-r--r-- | arch/arm64/kernel/efi.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 9d4aa18f2a82..e8ca6eaedd02 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c | |||
@@ -122,12 +122,12 @@ static int __init uefi_init(void) | |||
122 | 122 | ||
123 | /* Show what we know for posterity */ | 123 | /* Show what we know for posterity */ |
124 | c16 = early_memremap(efi_to_phys(efi.systab->fw_vendor), | 124 | c16 = early_memremap(efi_to_phys(efi.systab->fw_vendor), |
125 | sizeof(vendor)); | 125 | sizeof(vendor) * sizeof(efi_char16_t)); |
126 | if (c16) { | 126 | if (c16) { |
127 | for (i = 0; i < (int) sizeof(vendor) - 1 && *c16; ++i) | 127 | for (i = 0; i < (int) sizeof(vendor) - 1 && *c16; ++i) |
128 | vendor[i] = c16[i]; | 128 | vendor[i] = c16[i]; |
129 | vendor[i] = '\0'; | 129 | vendor[i] = '\0'; |
130 | early_memunmap(c16, sizeof(vendor)); | 130 | early_memunmap(c16, sizeof(vendor) * sizeof(efi_char16_t)); |
131 | } | 131 | } |
132 | 132 | ||
133 | pr_info("EFI v%u.%.02u by %s\n", | 133 | pr_info("EFI v%u.%.02u by %s\n", |