Index: sbin/geom/class/cache/geom_cache.c =================================================================== --- sbin/geom/class/cache/geom_cache.c +++ sbin/geom/class/cache/geom_cache.c @@ -132,7 +132,7 @@ cache_label(struct gctl_req *req) { struct g_cache_metadata md; - u_char sector[512]; + u_char sector[sizeof(struct g_cache_metadata)]; const char *name; int error, nargs; intmax_t val; Index: sbin/geom/class/concat/geom_concat.c =================================================================== --- sbin/geom/class/concat/geom_concat.c +++ sbin/geom/class/concat/geom_concat.c @@ -115,7 +115,7 @@ concat_label(struct gctl_req *req) { struct g_concat_metadata md; - u_char sector[512]; + u_char sector[sizeof(struct g_concat_metadata)]; const char *name; int error, i, hardcode, nargs; Index: sbin/geom/class/journal/geom_journal.c =================================================================== --- sbin/geom/class/journal/geom_journal.c +++ sbin/geom/class/journal/geom_journal.c @@ -140,7 +140,7 @@ { struct g_journal_metadata md; const char *data, *journal, *str; - u_char sector[512]; + u_char sector[sizeof(struct g_journal_metadata)]; intmax_t jsize, msize, ssize; int error, force, i, nargs, checksum, hardcode; Index: sbin/geom/class/label/geom_label.c =================================================================== --- sbin/geom/class/label/geom_label.c +++ sbin/geom/class/label/geom_label.c @@ -122,7 +122,7 @@ { struct g_label_metadata md; const char *name, *label; - u_char sector[512]; + u_char sector[sizeof(struct g_label_metadata)]; int error, nargs; nargs = gctl_get_int(req, "nargs"); @@ -145,6 +145,8 @@ strlcpy(md.md_magic, G_LABEL_MAGIC, sizeof(md.md_magic)); md.md_version = G_LABEL_VERSION; label = gctl_get_ascii(req, "arg0"); + /*bzero(md.md_label, sizeof(md.md_label));*/ + memset(md.md_label, 0, sizeof(md.md_label)); strlcpy(md.md_label, label, sizeof(md.md_label)); md.md_provsize = g_get_mediasize(name); if (md.md_provsize == 0) { Index: sbin/geom/class/mirror/geom_mirror.c =================================================================== --- sbin/geom/class/mirror/geom_mirror.c +++ sbin/geom/class/mirror/geom_mirror.c @@ -181,7 +181,7 @@ mirror_label(struct gctl_req *req) { struct g_mirror_metadata md; - u_char sector[512]; + u_char sector[sizeof(struct g_mirror_metadata)]; const char *str; unsigned sectorsize; off_t mediasize; Index: sbin/geom/class/raid3/geom_raid3.c =================================================================== --- sbin/geom/class/raid3/geom_raid3.c +++ sbin/geom/class/raid3/geom_raid3.c @@ -144,7 +144,7 @@ raid3_label(struct gctl_req *req) { struct g_raid3_metadata md; - u_char sector[512]; + u_char sector[sizeof(struct g_raid3_metadata)]; const char *str; unsigned sectorsize, ssize; off_t mediasize, msize; Index: sbin/geom/class/shsec/geom_shsec.c =================================================================== --- sbin/geom/class/shsec/geom_shsec.c +++ sbin/geom/class/shsec/geom_shsec.c @@ -107,7 +107,7 @@ { struct g_shsec_metadata md; off_t compsize, msize; - u_char sector[512]; + u_char sector[sizeof(struct g_shsec_metadata)]; unsigned ssize, secsize; const char *name; int error, i, nargs, hardcode; Index: sbin/geom/class/stripe/geom_stripe.c =================================================================== --- sbin/geom/class/stripe/geom_stripe.c +++ sbin/geom/class/stripe/geom_stripe.c @@ -125,7 +125,7 @@ struct g_stripe_metadata md; intmax_t stripesize; off_t compsize, msize; - u_char sector[512]; + u_char sector[sizeof(struct g_stripe_metadata)]; unsigned ssize, secsize; const char *name; int error, i, nargs, hardcode; Index: sbin/geom/misc/subr.c =================================================================== --- sbin/geom/misc/subr.c +++ sbin/geom/misc/subr.c @@ -273,6 +273,13 @@ return (error); } +/* + * Actually write the GEOM label to the provider + * + * @param name GEOM provider's name (ie "ada0") + * @param md Pointer to the label data to write + * @param size Size of the data pointed to by md + */ int g_metadata_store(const char *name, const unsigned char *md, size_t size) { Index: sys/geom/virstor/g_virstor.c =================================================================== --- sys/geom/virstor/g_virstor.c +++ sys/geom/virstor/g_virstor.c @@ -1042,6 +1042,7 @@ pp = cp->provider; buf = malloc(pp->sectorsize, M_GVIRSTOR, M_WAITOK); + bzero(buf, pp->sectorsize); virstor_metadata_encode(md, buf); g_topology_unlock(); error = g_write_data(cp, pp->mediasize - pp->sectorsize, buf,