svn commit: r220207 - projects/graid/head/sys/geom/raid
Alexander Motin
mav at FreeBSD.org
Thu Mar 31 15:27:03 UTC 2011
Author: mav
Date: Thu Mar 31 15:27:03 2011
New Revision: 220207
URL: http://svn.freebsd.org/changeset/base/220207
Log:
Add check to prevent division by zero if user specified all disks as NONE
in `graid label`.
Found with: Clang Static Analyzer
Modified:
projects/graid/head/sys/geom/raid/md_intel.c
projects/graid/head/sys/geom/raid/md_jmicron.c
projects/graid/head/sys/geom/raid/md_nvidia.c
projects/graid/head/sys/geom/raid/md_promise.c
projects/graid/head/sys/geom/raid/md_sii.c
Modified: projects/graid/head/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 15:23:32 2011 (r220206)
+++ projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 15:27:03 2011 (r220207)
@@ -1431,7 +1431,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj
gctl_error(req, "Can't open disk '%s'.",
diskname);
g_topology_unlock();
- error = -4;
+ error = -7;
break;
}
pp = cp->provider;
@@ -1481,6 +1481,11 @@ g_raid_md_ctl_intel(struct g_raid_md_obj
if (error != 0)
return (error);
+ if (sectorsize <= 0) {
+ gctl_error(req, "Can't get sector size.");
+ return (-8);
+ }
+
/* Reserve some space for metadata. */
size -= ((4096 + sectorsize - 1) / sectorsize) * sectorsize;
Modified: projects/graid/head/sys/geom/raid/md_jmicron.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 15:23:32 2011 (r220206)
+++ projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 15:27:03 2011 (r220207)
@@ -1129,6 +1129,11 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o
if (error != 0)
return (error);
+ if (sectorsize <= 0) {
+ gctl_error(req, "Can't get sector size.");
+ return (-8);
+ }
+
/* Reserve space for metadata. */
size -= sectorsize;
Modified: projects/graid/head/sys/geom/raid/md_nvidia.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 15:23:32 2011 (r220206)
+++ projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 15:27:03 2011 (r220207)
@@ -1137,6 +1137,11 @@ g_raid_md_ctl_nvidia(struct g_raid_md_ob
if (error != 0)
return (error);
+ if (sectorsize <= 0) {
+ gctl_error(req, "Can't get sector size.");
+ return (-8);
+ }
+
/* Reserve space for metadata. */
size -= 2 * sectorsize;
Modified: projects/graid/head/sys/geom/raid/md_promise.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 15:23:32 2011 (r220206)
+++ projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 15:27:03 2011 (r220207)
@@ -1343,6 +1343,11 @@ g_raid_md_ctl_promise(struct g_raid_md_o
return (error);
}
+ if (sectorsize <= 0) {
+ gctl_error(req, "Can't get sector size.");
+ return (-8);
+ }
+
/* Handle size argument. */
len = sizeof(*sizearg);
sizearg = gctl_get_param(req, "size", &len);
Modified: projects/graid/head/sys/geom/raid/md_sii.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 15:23:32 2011 (r220206)
+++ projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 15:27:03 2011 (r220207)
@@ -1215,6 +1215,11 @@ g_raid_md_ctl_sii(struct g_raid_md_objec
if (error != 0)
return (error);
+ if (sectorsize <= 0) {
+ gctl_error(req, "Can't get sector size.");
+ return (-8);
+ }
+
/* Reserve space for metadata. */
size -= 0x800 * sectorsize;
More information about the svn-src-projects
mailing list