diff options
author | Andriy Gapon <avg@FreeBSD.org> | 2017-11-24 10:45:33 +0000 |
---|---|---|
committer | Andriy Gapon <avg@FreeBSD.org> | 2017-11-24 10:45:33 +0000 |
commit | fd74a38251af5be1cba4f135c2beba2cef30476d (patch) | |
tree | 95bb31371d8e25a4f7f4b7bf4d2a600d2cf4ee9a /cddl/contrib/opensolaris/cmd | |
parent | 814629dd64a35b829cc8f537b55b9c5d873f7bbf (diff) | |
download | src-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.c | 5 |
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 |