aboutsummaryrefslogtreecommitdiff
path: root/sys/geom
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2021-07-13 21:46:02 +0000
committerMark Johnston <markj@FreeBSD.org>2021-07-13 21:46:02 +0000
commit39552dff7bb5463a74e5195d65a3252c583d9414 (patch)
tree7999a4c3d8b8f74d8c2847e8ada254014dbfb108 /sys/geom
parent0f09ab89cc444e468837c23cd9855689114769d4 (diff)
downloadsrc-39552dff7bb5463a74e5195d65a3252c583d9414.tar.gz
src-39552dff7bb5463a74e5195d65a3252c583d9414.zip
graid3: Zero the metadata block before writing
Ensure that string buffers and pad bytes are zero-filled before writing graid3 metadata. Reported by: KMSAN MFC after: 2 weeks Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/raid3/g_raid3.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/sys/geom/raid3/g_raid3.c b/sys/geom/raid3/g_raid3.c
index 5fe67c00068d..159eff990892 100644
--- a/sys/geom/raid3/g_raid3.c
+++ b/sys/geom/raid3/g_raid3.c
@@ -743,6 +743,7 @@ g_raid3_fill_metadata(struct g_raid3_disk *disk, struct g_raid3_metadata *md)
struct g_raid3_softc *sc;
struct g_provider *pp;
+ bzero(md, sizeof(*md));
sc = disk->d_softc;
strlcpy(md->md_magic, G_RAID3_MAGIC, sizeof(md->md_magic));
md->md_version = G_RAID3_VERSION;
@@ -756,9 +757,7 @@ g_raid3_fill_metadata(struct g_raid3_disk *disk, struct g_raid3_metadata *md)
md->md_no = disk->d_no;
md->md_syncid = disk->d_sync.ds_syncid;
md->md_dflags = (disk->d_flags & G_RAID3_DISK_FLAG_MASK);
- if (disk->d_state != G_RAID3_DISK_STATE_SYNCHRONIZING)
- md->md_sync_offset = 0;
- else {
+ if (disk->d_state == G_RAID3_DISK_STATE_SYNCHRONIZING) {
md->md_sync_offset =
disk->d_sync.ds_offset_done / (sc->sc_ndisks - 1);
}
@@ -768,12 +767,8 @@ g_raid3_fill_metadata(struct g_raid3_disk *disk, struct g_raid3_metadata *md)
pp = NULL;
if ((disk->d_flags & G_RAID3_DISK_FLAG_HARDCODED) != 0 && pp != NULL)
strlcpy(md->md_provider, pp->name, sizeof(md->md_provider));
- else
- bzero(md->md_provider, sizeof(md->md_provider));
if (pp != NULL)
md->md_provsize = pp->mediasize;
- else
- md->md_provsize = 0;
}
void