diff options
author | scottl <scottl@FreeBSD.org> | 2003-06-07 20:02:56 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2003-06-07 20:02:56 +0000 |
commit | 6d40d0ca55c3229cfe6573b12376eba2ea0906df (patch) | |
tree | edce4a90102aa4156fa73b8deab6017032f9d174 /lib/libdisk/disk.c | |
parent | e9db84519cd856e5e747d37fcffca76e105de0f1 (diff) | |
download | FreeBSD-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/disk.c')
-rw-r--r-- | lib/libdisk/disk.c | 5 |
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; |