From f76c98b79eabccd1bdbd0d7c2763e09aa1e58e06 Mon Sep 17 00:00:00 2001
From: Vladimir Serbinenko <phcoder@gmail.com>
Date: Thu, 26 Feb 2015 22:06:19 +0100
Subject: [PATCH 338/506] dmraid_nvidia: Fix division by 0 and missing
byte-swap.
---
grub-core/disk/dmraid_nvidia.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/grub-core/disk/dmraid_nvidia.c b/grub-core/disk/dmraid_nvidia.c
index fc02f57..881508c 100644
--- a/grub-core/disk/dmraid_nvidia.c
+++ b/grub-core/disk/dmraid_nvidia.c
@@ -99,6 +99,8 @@ grub_dmraid_nv_detect (grub_disk_t disk,
struct grub_nv_super sb;
int level;
grub_uint64_t disk_size;
+ grub_uint32_t capacity;
+ grub_uint8_t total_volumes;
char *uuid;
if (disk->partition)
@@ -124,14 +126,17 @@ grub_dmraid_nv_detect (grub_disk_t disk,
return NULL;
}
+ capacity = grub_le_to_cpu32 (sb.capacity);
+ total_volumes = sb.array.total_volumes;
+
switch (sb.array.raid_level)
{
case NV_LEVEL_0:
level = 0;
- disk_size = sb.capacity / sb.array.total_volumes;
- if (sb.array.total_volumes == 0)
+ if (total_volumes == 0)
/* Not RAID. */
return NULL;
+ disk_size = capacity / total_volumes;
break;
case NV_LEVEL_1:
@@ -141,10 +146,10 @@ grub_dmraid_nv_detect (grub_disk_t disk,
case NV_LEVEL_5:
level = 5;
- disk_size = sb.capacity / (sb.array.total_volumes - 1);
- if (sb.array.total_volumes == 0 || sb.array.total_volumes == 1)
+ if (total_volumes == 0 || total_volumes == 1)
/* Not RAID. */
return NULL;
+ disk_size = capacity / (total_volumes - 1);
break;
default:
--
2.4.3