47 lines
1.3 KiB
Diff
47 lines
1.3 KiB
Diff
|
From: NeilBrown <neilb@suse.de>
|
||
|
Date: Thu, 1 Oct 2009 02:51:04 +0000 (+1000)
|
||
|
Subject: Fix null-dereference in set_member_info
|
||
|
X-Git-Url: http://neil.brown.name/git?p=mdadm;a=commitdiff_plain;h=2b9aa337af7291d3f141322da96c9f667c99d53c
|
||
|
|
||
|
Fix null-dereference in set_member_info
|
||
|
|
||
|
set_member_info would try to dereference ->metadata_version, without
|
||
|
checking that it isn't NULL.
|
||
|
|
||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||
|
---
|
||
|
|
||
|
diff --git a/mapfile.c b/mapfile.c
|
||
|
index a3038be..ed59db5 100644
|
||
|
--- 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';
|