hash db2 code breaks if st_blksize > 64k
authorKen Raeburn <raeburn@mit.edu>
Fri, 23 Jan 2009 18:04:08 +0000 (18:04 +0000)
committerKen Raeburn <raeburn@mit.edu>
Fri, 23 Jan 2009 18:04:08 +0000 (18:04 +0000)
The hash db code assumes in places that the block size is no larger
than 64K.  There's a range check in the case where you don't have a
file but provide initialization info.  The btree code will cap the
block size used at 64K.

Apparently Sun's ZFS can report back a block size of 128K, causing the
db2 tests to fail.

Add such a cap to the hash db creation code.

Note that our default configuration is to use the btree code when
creating a new database, so it's unlikely that this will cause
real-world problems unless someone went out of their way to specify
use of the hash format.

ticket: 6342

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21786 dc483132-0cff-0310-8789-dd5450dbe970

src/plugins/kdb/db2/libdb2/hash/hash.c

index b68b1dc9187f30e350422b7aad5281d3ec4a2dd2..c1a66088a0d28691a0e61477f5fdfed269287d8f 100644 (file)
@@ -328,6 +328,8 @@ init_hash(hashp, file, info)
                if (stat(file, &statbuf))
                        return (NULL);
                hashp->hdr.bsize = statbuf.st_blksize;
+               if (hashp->hdr.bsize > MAX_BSIZE)
+                   hashp->hdr.bsize = MAX_BSIZE;
                hashp->hdr.bshift = __log2(hashp->hdr.bsize);
        }
        if (info) {