summaryrefslogtreecommitdiff
path: root/testing/mdadm/segfault-3.2.1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mdadm/segfault-3.2.1.patch')
-rw-r--r--testing/mdadm/segfault-3.2.1.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/testing/mdadm/segfault-3.2.1.patch b/testing/mdadm/segfault-3.2.1.patch
new file mode 100644
index 000000000..6042d86c2
--- /dev/null
+++ b/testing/mdadm/segfault-3.2.1.patch
@@ -0,0 +1,68 @@
+From 4019ad07013a5d8618b867f724d1c4a13c5cb05d Mon Sep 17 00:00:00 2001
+From: Jonathan Liu <net147@gmail.com>
+Date: Tue, 12 Apr 2011 18:28:01 +1000
+Subject: [PATCH] Monitor: avoid NULL dereference with 0.90 metadata
+
+0.90 array do not report the metadata type in /proc/mdstat, so
+we cannot assume that mse->metadata_version is non-NULL.
+
+So add an appropriate check.
+
+This adds an additional check missed by commit
+eb28e119b03fd5149886ed516fa4bb006ad3602e.
+
+Signed-off-by: NeilBrown <neilb@suse.de>
+---
+ Monitor.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/Monitor.c b/Monitor.c
+index a3ea724..55aebeb 100644
+--- a/Monitor.c
++++ b/Monitor.c
+@@ -577,7 +577,8 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
+ info[i].major = info[i].minor = 0;
+ }
+
+- if (strncmp(mse->metadata_version, "external:", 9) == 0 &&
++ if (mse->metadata_version &&
++ strncmp(mse->metadata_version, "external:", 9) == 0 &&
+ is_subarray(mse->metadata_version+9))
+ st->parent_dev =
+ devname2devnum(mse->metadata_version+10);
+--
+1.7.2.3
+
+From eb28e119b03fd5149886ed516fa4bb006ad3602e Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.de>
+Date: Tue, 5 Apr 2011 09:16:57 +1000
+Subject: [PATCH] Monitor: avoid NULL dereference with 0.90 metadata
+
+0.90 array do not report the metadata type in /proc/mdstat, so
+we cannot assume that mse->metadata_version is non-NULL.
+
+So add an appropriate check.
+
+Reported-by: Eugene <hdejin@yahoo.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+---
+ Monitor.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/Monitor.c b/Monitor.c
+index 291e465..337785d 100644
+--- a/Monitor.c
++++ b/Monitor.c
+@@ -688,7 +688,8 @@ static int add_new_arrays(struct mdstat_ent *mdstat, struct state **statelist,
+ st->devnum = mse->devnum;
+ st->percent = -2;
+ st->expected_spares = -1;
+- if (strncmp(mse->metadata_version, "external:", 9) == 0 &&
++ if (mse->metadata_version &&
++ strncmp(mse->metadata_version, "external:", 9) == 0 &&
+ is_subarray(mse->metadata_version+9))
+ st->parent_dev =
+ devname2devnum(mse->metadata_version+10);
+--
+1.7.2.3
+