]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Fix null-dereference in set_member_info
authorNeilBrown <neilb@suse.de>
Thu, 1 Oct 2009 02:51:04 +0000 (12:51 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 1 Oct 2009 02:51:04 +0000 (12:51 +1000)
set_member_info would try to dereference ->metadata_version, without
checking that it isn't NULL.

Signed-off-by: NeilBrown <neilb@suse.de>
mapfile.c

index a3038be55bdd3264fb8589cee9a05ad73dc53b5f..ed59db5fe62df9c4db2807906743f4bd7f740f19 100644 (file)
--- a/mapfile.c
+++ b/mapfile.c
@@ -303,19 +303,22 @@ struct map_ent *map_by_name(struct map_ent **map, char *name)
  */
 static void set_member_info(struct supertype *st, struct mdstat_ent *ent)
 {
-       char version[strlen(ent->metadata_version)+1];
 
        st->subarray[0] = '\0';
 
-       if (strncmp(ent->metadata_version, "external:", 9) != 0)
+       if (ent->metadata_version == NULL ||
+           strncmp(ent->metadata_version, "external:", 9) != 0)
                return;
 
-       strcpy(version, ent->metadata_version);
-
-       if (is_subarray(&version[9])) {
-               char *subarray = strrchr(version, '/');
+       if (is_subarray(&ent->metadata_version[9])) {
+               char version[strlen(ent->metadata_version)+1];
+               char *subarray;
                char *name = &version[10];
 
+               strcpy(version, ent->metadata_version);
+               subarray = strrchr(version, '/');
+               name = &version[10];
+
                if (!subarray)
                        return;
                *subarray++ = '\0';