summaryrefslogtreecommitdiffstats
path: root/lib/libdisk
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2003-06-07 20:02:56 +0000
committerscottl <scottl@FreeBSD.org>2003-06-07 20:02:56 +0000
commit6d40d0ca55c3229cfe6573b12376eba2ea0906df (patch)
treeedce4a90102aa4156fa73b8deab6017032f9d174 /lib/libdisk
parente9db84519cd856e5e747d37fcffca76e105de0f1 (diff)
downloadFreeBSD-src-6d40d0ca55c3229cfe6573b12376eba2ea0906df.zip
FreeBSD-src-6d40d0ca55c3229cfe6573b12376eba2ea0906df.tar.gz
Sanity check the list obtained from the kern.disks sysctl so that Disk_Names()
doesn't get fooled into returning a bogus list. This should fix sysinstall from segfaulting when no disk devices are present.
Diffstat (limited to 'lib/libdisk')
-rw-r--r--lib/libdisk/disk.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/libdisk/disk.c b/lib/libdisk/disk.c
index c750c2b..ae79d29 100644
--- a/lib/libdisk/disk.c
+++ b/lib/libdisk/disk.c
@@ -470,6 +470,9 @@ Disk_Names()
return NULL;
}
+ if (listsize == 0)
+ return (NULL);
+
disks = malloc(sizeof *disks * (1 + MAX_NO_DISKS));
if (disks == NULL)
return NULL;
@@ -481,7 +484,7 @@ Disk_Names()
memset(disks,0,sizeof *disks * (1 + MAX_NO_DISKS));
memset(disklist, 0, listsize + 1);
error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0);
- if (error) {
+ if (error || disklist[0] == 0) {
free(disklist);
free(disks);
return NULL;
OpenPOWER on IntegriCloud