Author: avg
Date: Fri Nov 24 10:45:33 2017
New Revision: 326150
URL: https://svnweb.freebsd.org/changeset/base/326150

Log:
  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

Modified:
  head/cddl/contrib/opensolaris/cmd/zdb/zdb.c

Modified: head/cddl/contrib/opensolaris/cmd/zdb/zdb.c
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Nov 24 09:55:20 2017        
(r326149)
+++ head/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Nov 24 10:45:33 2017        
(r326150)
@@ -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
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to