hastd segfaults reading metadata from not initialized provider

Mikolaj Golub to.my.trociny at gmail.com
Mon Apr 26 20:07:38 UTC 2010


Hi,

When configuring a new provider if one forgets to do 

hastctl create tank

before 

hastctl role primary tank

the worker core dumps on reading metadata:

(gdb) bt
#0  strcmp () at /usr/src/lib/libc/i386/string/strcmp.S:61
#1  0x0804fa18 in metadata_read (res=0x284cb600, openrw=true) at /usr/src/sbin/hastd/metadata.c:120
#2  0x080570ac in init_local (res=0x284cb600) at /usr/src/sbin/hastd/primary.c:425
#3  0x08057f88 in hastd_primary (res=0x284cb600) at /usr/src/sbin/hastd/primary.c:754
#4  0x0804e270 in child_exit () at /usr/src/sbin/hastd/hastd.c:145
#5  0x0804edd1 in main_loop () at /usr/src/sbin/hastd/hastd.c:389
#6  0x0804f3d8 in main (argc=0, argv=0xbfbfed84) at /usr/src/sbin/hastd/hastd.c:520
Current language:  auto; currently asm
(gdb) fr 1
#1  0x0804fa18 in metadata_read (res=0x284cb600, openrw=true) at /usr/src/sbin/hastd/metadata.c:120
120             if (strcmp(str, res->hr_name) != 0) {
Current language:  auto; currently c
(gdb) list
115                     ebuf_free(eb);
116                     goto fail;
117             }
118
119             str = nv_get_string(nv, "resource");
120             if (strcmp(str, res->hr_name) != 0) {
121                     pjdlog_error("Provider %s is not part of resource %s.",
122                         res->hr_localpath, res->hr_name);
123                     nv_free(nv);
124                     goto fail;
(gdb) p str
$1 = 0x0

In the attached patch the check for str is added so we would have a
termination with the error message instead of a core dump:

Apr 26 22:46:06 hasta hastd: [tank] (primary) Metadata read from /dev/ad6 is invalid.
Apr 26 22:46:06 hasta hastd: [tank] (primary) Worker process failed (pid=6196, status=66).

-- 
Mikolaj Golub

-------------- next part --------------
A non-text attachment was scrubbed...
Name: hastd.metadata.c.patch
Type: text/x-diff
Size: 574 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20100426/5d3e3fa7/hastd.metadata.c.bin


More information about the freebsd-fs mailing list