aboutsummaryrefslogtreecommitdiffstats
path: root/block/partitions
diff options
context:
space:
mode:
authorAntti P Miettinen <amiettinen@nvidia.com>2013-11-21 17:32:05 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-21 19:42:27 -0500
commit49204c116a9ee24536d371be02a2f05e6493c949 (patch)
treef212b1a3d8b8fef05f570658f6acd9efe596ad26 /block/partitions
parent51a0d036f995585e8c5c30797d5bce28645d9dd7 (diff)
block/partitions/efi.c: fix bound check
Use ARRAY_SIZE instead of sizeof to get proper max for label length. Since this is just a read out of bounds it's not that bad, but the problem becomes user-visible eg if one tries to use DEBUG_PAGEALLOC and DEBUG_RODATA, at least with some enhancements from Hiroshi. Of course the destination array can contain garbage when we read beyond the end of source array so that would be another user-visible problem. Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> Reviewed-by: Hiroshi Doyu <hdoyu@nvidia.com> Tested-by: Hiroshi Doyu <hdoyu@nvidia.com> Cc: Will Drewry <wad@chromium.org> Cc: Matt Fleming <matt.fleming@intel.com> Acked-by: Davidlohr Bueso <davidlohr@hp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'block/partitions')
-rw-r--r--block/partitions/efi.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/block/partitions/efi.c b/block/partitions/efi.c
index a8287b49d062..dc51f467a560 100644
--- a/block/partitions/efi.c
+++ b/block/partitions/efi.c
@@ -96,6 +96,7 @@
96 * - Code works, detects all the partitions. 96 * - Code works, detects all the partitions.
97 * 97 *
98 ************************************************************/ 98 ************************************************************/
99#include <linux/kernel.h>
99#include <linux/crc32.h> 100#include <linux/crc32.h>
100#include <linux/ctype.h> 101#include <linux/ctype.h>
101#include <linux/math64.h> 102#include <linux/math64.h>
@@ -715,8 +716,8 @@ int efi_partition(struct parsed_partitions *state)
715 efi_guid_unparse(&ptes[i].unique_partition_guid, info->uuid); 716 efi_guid_unparse(&ptes[i].unique_partition_guid, info->uuid);
716 717
717 /* Naively convert UTF16-LE to 7 bits. */ 718 /* Naively convert UTF16-LE to 7 bits. */
718 label_max = min(sizeof(info->volname) - 1, 719 label_max = min(ARRAY_SIZE(info->volname) - 1,
719 sizeof(ptes[i].partition_name)); 720 ARRAY_SIZE(ptes[i].partition_name));
720 info->volname[label_max] = 0; 721 info->volname[label_max] = 0;
721 while (label_count < label_max) { 722 while (label_count < label_max) {
722 u8 c = ptes[i].partition_name[label_count] & 0xff; 723 u8 c = ptes[i].partition_name[label_count] & 0xff;