]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix zdb -E segfault
authorChunwei Chen <david.chen@nutanix.com>
Fri, 2 Feb 2018 00:28:11 +0000 (16:28 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 9 Feb 2018 18:11:19 +0000 (10:11 -0800)
SPA_MAXBLOCKSIZE is too large for stack.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Signed-off-by: Chunwei Chen <david.chen@nutanix.com>
Closes #7099

cmd/zdb/zdb.c

index 4c0a8245fb9e4ceea70e6b45e29f7417aed6bf2d..7f2cab382500b40aff35ffe5edd3259f61682370 100644 (file)
@@ -4235,9 +4235,11 @@ zdb_embedded_block(char *thing)
 {
        blkptr_t bp;
        unsigned long long *words = (void *)&bp;
-       char buf[SPA_MAXBLOCKSIZE];
+       char *buf;
        int err;
 
+       buf = umem_alloc(SPA_MAXBLOCKSIZE, UMEM_NOFAIL);
+
        bzero(&bp, sizeof (bp));
        err = sscanf(thing, "%llx:%llx:%llx:%llx:%llx:%llx:%llx:%llx:"
            "%llx:%llx:%llx:%llx:%llx:%llx:%llx:%llx",
@@ -4256,6 +4258,7 @@ zdb_embedded_block(char *thing)
                exit(1);
        }
        zdb_dump_block_raw(buf, BPE_GET_LSIZE(&bp), 0);
+       umem_free(buf, SPA_MAXBLOCKSIZE);
 }
 
 int