>  > ...
>  > segfault at 0000000000000000 rip 0000000000412d2c rsp 00007fffa08b5b70 
> error 4
>  > segfault at 0000000000000000 rip 0000000000412d2c rsp 00007fff78944c00 
> error 4
>  > segfault at 0000000000000000 rip 0000000000412d2c rsp 00007fffc0bf9eb0 
> error 4
>
>  If this is at all repeatable, then it would be great if you can run it under 
> 'gdb' and get a stack trace.

It repeats just fine, I just haven't managed to trigger it manually :(

Might just be this, though (abridged):

---
from: Dan Williams <[EMAIL PROTECTED]>
to:      [EMAIL PROTECTED],
date    Fri, Apr 4, 2008 at 6:01 PM
subject Re: segfault in mdadm v2.6.4

There is a known issue with arrays in the "read-auto" state and "mdadm
--monitor".  The attached patch addresses this.
---

I have attached said patch, maybe it should be included in the Debian package?

Cheers,

C.
mdadm: fix segfault, /proc/mdstat parsing of 'level'

From: Dan Williams <[EMAIL PROTECTED]>

If the array is in 'read-auto' mode /proc/mdstat will have a string
like:

	"active(auto-read-only)"

The parsing code does not recognize this as "active" so it does not set
->level.  This leads to a segfault in --monitor mode (Monitor.c:405).

Signed-off-by: Dan Williams <[EMAIL PROTECTED]>
---

 mdstat.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)


diff --git a/mdstat.c b/mdstat.c
index 335e1e5..1dcd709 100644
--- a/mdstat.c
+++ b/mdstat.c
@@ -165,7 +165,8 @@ struct mdstat_ent *mdstat_read(int hold, int start)
 		for (w=dl_next(line); w!= line ; w=dl_next(w)) {
 			int l = strlen(w);
 			char *eq;
-			if (strcmp(w, "active")==0)
+			if (strncmp(w, "active", strlen("active"))==0)
+			/* strncmp to catch the "active(auto-read-only)" case */
 				ent->active = 1;
 			else if (strcmp(w, "inactive")==0)
 				ent->active = 0;

Reply via email to