Check for g_read_data(9) errors properly:
o The only indication of error condition is NULL value returned by the function; o value pointed to by error argument is undefined in the case when operation completes successfully. Discussed with: phk
This commit is contained in:
parent
6dfb88de83
commit
8a4a44b5aa
@ -576,7 +576,7 @@ g_eli_read_metadata(struct g_class *mp, struct g_provider *pp,
|
||||
buf = g_read_data(cp, pp->mediasize - pp->sectorsize, pp->sectorsize,
|
||||
&error);
|
||||
g_topology_lock();
|
||||
if (error != 0)
|
||||
if (buf == NULL)
|
||||
goto end;
|
||||
eli_metadata_decode(buf, md);
|
||||
end:
|
||||
|
@ -300,7 +300,7 @@ g_aes_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
|
||||
sectorsize = cp->provider->sectorsize;
|
||||
mediasize = cp->provider->mediasize;
|
||||
buf = g_read_data(cp, 0, sectorsize, &error);
|
||||
if (buf == NULL || error != 0) {
|
||||
if (buf == NULL) {
|
||||
break;
|
||||
}
|
||||
sc = g_malloc(sizeof(struct g_aes_softc), M_WAITOK | M_ZERO);
|
||||
|
@ -166,7 +166,7 @@ g_apple_taste(struct g_class *mp, struct g_provider *pp, int insist)
|
||||
break;
|
||||
|
||||
buf = g_read_data(cp, 0, sectorsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
|
||||
/*
|
||||
@ -188,7 +188,7 @@ g_apple_taste(struct g_class *mp, struct g_provider *pp, int insist)
|
||||
* Read in the first partition map
|
||||
*/
|
||||
buf = g_read_data(cp, sectorsize, sectorsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
|
||||
/*
|
||||
@ -206,7 +206,7 @@ g_apple_taste(struct g_class *mp, struct g_provider *pp, int insist)
|
||||
|
||||
buf = g_read_data(cp, 2 * sectorsize,
|
||||
(NAPMPART - 1) * sectorsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
|
||||
for (i = 1; i < NAPMPART; i++) {
|
||||
|
@ -207,7 +207,7 @@ g_bsd_try(struct g_geom *gp, struct g_slicer *gsp, struct g_consumer *cp, int se
|
||||
error = 0;
|
||||
secoff = offset % secsize;
|
||||
buf = g_read_data(cp, offset - secoff, secsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
return (ENOENT);
|
||||
|
||||
/* Decode into our native format. */
|
||||
@ -248,7 +248,7 @@ g_bsd_writelabel(struct g_geom *gp, u_char *bootcode)
|
||||
secoff = ms->labeloffset % secsize;
|
||||
if (bootcode == NULL) {
|
||||
buf = g_read_data(cp, ms->labeloffset - secoff, secsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
return (error);
|
||||
bcopy(ms->label, buf + secoff, sizeof(ms->label));
|
||||
} else {
|
||||
|
@ -373,7 +373,7 @@ g_fox_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
|
||||
g_topology_unlock();
|
||||
buf = g_read_data(cp, 0, sectorsize, &error);
|
||||
g_topology_lock();
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
if (memcmp(buf, FOX_MAGIC, strlen(FOX_MAGIC)))
|
||||
break;
|
||||
|
@ -300,7 +300,7 @@ g_gpt_has_pmbr(struct g_consumer *cp, int *error)
|
||||
uint16_t magic;
|
||||
|
||||
buf = g_read_data(cp, 0L, cp->provider->sectorsize, error);
|
||||
if (*error != 0)
|
||||
if (buf == NULL)
|
||||
return (0);
|
||||
|
||||
pmbr = 0;
|
||||
@ -826,14 +826,14 @@ g_gpt_taste(struct g_class *mp, struct g_provider *pp, int insist __unused)
|
||||
* there's a GPT, including whether recovery is appropriate.
|
||||
*/
|
||||
buf = g_read_data(cp, pp->sectorsize, pp->sectorsize, &error);
|
||||
if (error != 0)
|
||||
if (buf == NULL)
|
||||
goto fail;
|
||||
g_gpt_load_hdr(softc, pp, GPT_HDR_PRIMARY, buf);
|
||||
g_free(buf);
|
||||
|
||||
buf = g_read_data(cp, pp->mediasize - pp->sectorsize, pp->sectorsize,
|
||||
&error);
|
||||
if (error != 0)
|
||||
if (buf == NULL)
|
||||
goto fail;
|
||||
g_gpt_load_hdr(softc, pp, GPT_HDR_SECONDARY, buf);
|
||||
g_free(buf);
|
||||
@ -915,7 +915,7 @@ g_gpt_taste(struct g_class *mp, struct g_provider *pp, int insist __unused)
|
||||
|
||||
ofs = hdr->hdr_lba_table * pp->sectorsize;
|
||||
buf = g_read_data(cp, ofs, nbytes, &error);
|
||||
if (error != 0)
|
||||
if (buf == NULL)
|
||||
goto fail;
|
||||
|
||||
/*
|
||||
@ -934,7 +934,7 @@ g_gpt_taste(struct g_class *mp, struct g_provider *pp, int insist __unused)
|
||||
hdr = softc->hdr + GPT_HDR_SECONDARY;
|
||||
ofs = hdr->hdr_lba_table * pp->sectorsize;
|
||||
buf = g_read_data(cp, ofs, nbytes, &error);
|
||||
if (error != 0)
|
||||
if (buf == NULL)
|
||||
goto fail;
|
||||
|
||||
if (!g_gpt_tbl_ok(hdr, buf)) {
|
||||
|
@ -284,7 +284,7 @@ g_mbr_taste(struct g_class *mp, struct g_provider *pp, int insist)
|
||||
break;
|
||||
ms->sectorsize = sectorsize;
|
||||
buf = g_read_data(cp, 0, sectorsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
|
||||
/*
|
||||
@ -454,7 +454,7 @@ g_mbrext_taste(struct g_class *mp, struct g_provider *pp, int insist __unused)
|
||||
break;
|
||||
for (;;) {
|
||||
buf = g_read_data(cp, off, sectorsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
if (buf[0x1fe] != 0x55 && buf[0x1ff] != 0xaa) {
|
||||
g_free(buf);
|
||||
|
@ -289,7 +289,7 @@ g_pc98_taste(struct g_class *mp, struct g_provider *pp, int flags)
|
||||
if (sectorsize % 512 != 0)
|
||||
break;
|
||||
buf = g_read_data(cp, 0, 8192, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
ms->fwsectors = fwsectors;
|
||||
ms->fwheads = fwheads;
|
||||
|
@ -278,7 +278,7 @@ g_sunlabel_taste(struct g_class *mp, struct g_provider *pp, int flags)
|
||||
g_topology_unlock();
|
||||
buf = g_read_data(cp, 0, ms->sectorsize, &error);
|
||||
g_topology_lock();
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
break;
|
||||
|
||||
/*
|
||||
|
@ -100,7 +100,7 @@ g_vol_ffs_taste(struct g_class *mp, struct g_provider *pp, int flags)
|
||||
|
||||
fs = (struct fs *) g_read_data(cp, superblock,
|
||||
SBLOCKSIZE, &error);
|
||||
if (fs == NULL || error != 0)
|
||||
if (fs == NULL)
|
||||
continue;
|
||||
/* Check for magic and make sure things are the right size */
|
||||
if (fs->fs_magic == FS_UFS1_MAGIC) {
|
||||
|
@ -57,7 +57,7 @@ g_label_iso9660_taste(struct g_consumer *cp, char *label, size_t size)
|
||||
return;
|
||||
sector = (char *)g_read_data(cp, ISO9660_OFFSET, pp->sectorsize,
|
||||
&error);
|
||||
if (sector == NULL || error != 0)
|
||||
if (sector == NULL)
|
||||
return;
|
||||
if (bcmp(sector, ISO9660_MAGIC, sizeof(ISO9660_MAGIC) - 1) != 0) {
|
||||
g_free(sector);
|
||||
|
@ -56,7 +56,7 @@ g_label_msdosfs_taste(struct g_consumer *cp, char *label, size_t size)
|
||||
label[0] = '\0';
|
||||
|
||||
sector = (char *)g_read_data(cp, 0, pp->sectorsize, &error);
|
||||
if (sector == NULL || error != 0)
|
||||
if (sector == NULL)
|
||||
return;
|
||||
if (strncmp(sector + 0x36, FAT12, strlen(FAT12)) == 0) {
|
||||
G_LABEL_DEBUG(1, "MSDOS (FAT12) file system detected on %s.",
|
||||
|
@ -72,7 +72,7 @@ g_label_ufs_taste(struct g_consumer *cp, char *label, size_t size)
|
||||
|
||||
fs = (struct fs *)g_read_data(cp, superblock, SBLOCKSIZE,
|
||||
&error);
|
||||
if (fs == NULL || error != 0)
|
||||
if (fs == NULL)
|
||||
continue;
|
||||
/* Check for magic and make sure things are the right size */
|
||||
if (fs->fs_magic == FS_UFS1_MAGIC) {
|
||||
|
@ -2346,7 +2346,7 @@ g_mirror_read_metadata(struct g_consumer *cp, struct g_mirror_metadata *md)
|
||||
&error);
|
||||
g_topology_lock();
|
||||
g_access(cp, -1, 0, 0);
|
||||
if (error != 0) {
|
||||
if (buf == NULL) {
|
||||
G_MIRROR_DEBUG(1, "Cannot read metadata from %s (error=%d).",
|
||||
cp->provider->name, error);
|
||||
if (buf != NULL)
|
||||
|
@ -2571,7 +2571,7 @@ g_raid3_read_metadata(struct g_consumer *cp, struct g_raid3_metadata *md)
|
||||
&error);
|
||||
g_topology_lock();
|
||||
g_access(cp, -1, 0, 0);
|
||||
if (error != 0) {
|
||||
if (buf == NULL) {
|
||||
G_RAID3_DEBUG(1, "Cannot read metadata from %s (error=%d).",
|
||||
cp->provider->name, error);
|
||||
if (buf != NULL)
|
||||
|
@ -380,7 +380,7 @@ g_uzip_taste(struct g_class *mp, struct g_provider *pp, int flags)
|
||||
DPRINTF(("%s: media sectorsize %u, mediasize %lld\n",
|
||||
gp->name, pp->sectorsize, pp->mediasize));
|
||||
buf = g_read_data(cp, 0, pp->sectorsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
goto err;
|
||||
header = (struct cloop_header *) buf;
|
||||
if (strncmp(header->magic, CLOOP_MAGIC_START,
|
||||
@ -430,7 +430,7 @@ g_uzip_taste(struct g_class *mp, struct g_provider *pp, int flags)
|
||||
free(buf, M_GEOM);
|
||||
buf = g_read_data(
|
||||
cp, blk * pp->sectorsize, pp->sectorsize, &error);
|
||||
if (buf == NULL || error != 0)
|
||||
if (buf == NULL)
|
||||
goto err;
|
||||
nread = MIN(total_offsets - offsets_read,
|
||||
pp->sectorsize / sizeof(uint64_t));
|
||||
|
@ -453,7 +453,7 @@ gv_drive_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
|
||||
/* Now check if the provided slice is a valid vinum drive. */
|
||||
do {
|
||||
vhdr = g_read_data(cp, GV_HDR_OFFSET, pp->sectorsize, &error);
|
||||
if (vhdr == NULL || error != 0)
|
||||
if (vhdr == NULL)
|
||||
break;
|
||||
if (vhdr->magic != GV_MAGIC) {
|
||||
g_free(vhdr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user