Hi,

On Thu, Apr 8, 2010 at 12:33 AM, Wido den Hollander <[email protected]> wrote:
> Hi,
>
> I'm using the latest version (git revision) of Sheepdog, but when
> getting "obj" information, shepherd segfaults:
>
> r...@wido-desktop:~# shepherd info -t obj Wido
> 457951fcbfc62f1
> 0, 27ca81e942cd0eef, 3207b6b8f585c0b6, 457951fcbfc62f1
> 1, 3207b6b8f585c0b6, 4f5de28d9ad07d49, 457951fcbfc62f1
> 2, 4f5de28d9ad07d49, d3d995c9a4f4336a, 457951fcbfc62f1
> Looking for the inode object 0x80fe96ac00000000 with 4 nodes
>
> Segmentation fault

Thanks for your report!
Can you try the following patch?


diff --git a/shepherd/shepherd.c b/shepherd/shepherd.c
index 1949f13..087c397 100644
--- a/shepherd/shepherd.c
+++ b/shepherd/shepherd.c
@@ -777,9 +777,15 @@ static void parse_objs(uint64_t oid, obj_parser_func_t 
func, void *data)
 {
        char name[128];
        int i, fd, ret;
+       char *buf;
+
+       buf = zalloc(sizeof(struct sheepdog_inode));
+       if (!buf) {
+               fprintf(stderr, "out of memory\n");
+               return;
+       }
 
        for (i = 0; i < nr_nodes; i++) {
-               char buf[sizeof(struct sheepdog_inode)];
                unsigned wlen = 0, rlen = sizeof(buf);
                struct sd_obj_req hdr;
                struct sd_obj_rsp *rsp = (struct sd_obj_rsp *)&hdr;
@@ -808,6 +814,8 @@ static void parse_objs(uint64_t oid, obj_parser_func_t 
func, void *data)
                else
                        func(name, oid, rsp, buf, data);
        }
+
+       free(buf);
 }
 
 static void print_obj(char *vdiname, unsigned index)
-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to