aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/cmd
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2017-11-24 10:45:33 +0000
committerAndriy Gapon <avg@FreeBSD.org>2017-11-24 10:45:33 +0000
commitfd74a38251af5be1cba4f135c2beba2cef30476d (patch)
tree95bb31371d8e25a4f7f4b7bf4d2a600d2cf4ee9a /cddl/contrib/opensolaris/cmd
parent814629dd64a35b829cc8f537b55b9c5d873f7bbf (diff)
downloadsrc-fd74a38251af5be1cba4f135c2beba2cef30476d.tar.gz
src-fd74a38251af5be1cba4f135c2beba2cef30476d.zip
zdb: use a heap allocation instead of a huge array on stack
SPA_MAXBLOCKSIZE is 16 MB and having such a large object on the stack is not nice in general and it could cause some confusing failures in the single-user mode where the default stack size of 8 MB is used. I expect that the upstream would make the same change. MFC after: 1 week
Notes
Notes: svn path=/head/; revision=326150
Diffstat (limited to 'cddl/contrib/opensolaris/cmd')
-rw-r--r--cddl/contrib/opensolaris/cmd/zdb/zdb.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/cddl/contrib/opensolaris/cmd/zdb/zdb.c b/cddl/contrib/opensolaris/cmd/zdb/zdb.c
index 6ca504783a19..f588caaf205b 100644
--- a/cddl/contrib/opensolaris/cmd/zdb/zdb.c
+++ b/cddl/contrib/opensolaris/cmd/zdb/zdb.c
@@ -3724,7 +3724,7 @@ zdb_embedded_block(char *thing)
{
blkptr_t bp = { 0 };
unsigned long long *words = (void *)&bp;
- char buf[SPA_MAXBLOCKSIZE];
+ char *buf;
int err;
err = sscanf(thing, "%llx:%llx:%llx:%llx:%llx:%llx:%llx:%llx:"
@@ -3738,12 +3738,15 @@ zdb_embedded_block(char *thing)
exit(1);
}
ASSERT3U(BPE_GET_LSIZE(&bp), <=, SPA_MAXBLOCKSIZE);
+ buf = malloc(SPA_MAXBLOCKSIZE);
err = decode_embedded_bp(&bp, buf, BPE_GET_LSIZE(&bp));
if (err != 0) {
(void) printf("decode failed: %u\n", err);
+ free(buf);
exit(1);
}
zdb_dump_block_raw(buf, BPE_GET_LSIZE(&bp), 0);
+ free(buf);
}
static boolean_t