]> www.infradead.org Git - mtd-utils.git/commitdiff
mkfs.ubifs: Implement UBIFS_FLG_DOUBLE_HASH
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>
Thu, 18 Oct 2018 14:36:40 +0000 (16:36 +0200)
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>
Thu, 1 Nov 2018 11:32:29 +0000 (12:32 +0100)
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
ubifs-utils/mkfs.ubifs/mkfs.ubifs.c
ubifs-utils/mkfs.ubifs/mkfs.ubifs.h
ubifs-utils/mkfs.ubifs/ubifs.h

index fd6538c6d4e1aa7f6a67ce17becb5e03fae4b1a7..e7acf17f6c96be250e3a2a6ffe8d570bd02e16af 100644 (file)
@@ -1436,6 +1436,14 @@ static int add_symlink_inode(const char *path_name, struct stat *st, ino_t inum,
        return add_inode(st, inum, buf, len, flags, path_name);
 }
 
+static void set_dent_cookie(struct ubifs_dent_node *dent)
+{
+       if (c->double_hash)
+               RAND_bytes((void *)&dent->cookie, sizeof(dent->cookie));
+       else
+               dent->cookie = 0;
+}
+
 /**
  * add_dent_node - write a directory entry node.
  * @dir_inum: target inode number of directory
@@ -1469,6 +1477,7 @@ static int add_dent_node(ino_t dir_inum, const char *name, ino_t inum,
        dent->nlen = cpu_to_le16(dname.len);
        memcpy(dent->name, dname.name, dname.len);
        dent->name[dname.len] = '\0';
+       set_dent_cookie(dent);
 
        len = UBIFS_DENT_NODE_SZ + dname.len + 1;
 
@@ -2268,6 +2277,8 @@ static int write_super(void)
                sup.flags |= cpu_to_le32(UBIFS_FLG_BIGLPT);
        if (c->space_fixup)
                sup.flags |= cpu_to_le32(UBIFS_FLG_SPACE_FIXUP);
+       if (c->double_hash)
+               sup.flags |= cpu_to_le32(UBIFS_FLG_DOUBLE_HASH);
 
        return write_node(&sup, UBIFS_SB_NODE_SZ, UBIFS_SB_LNUM);
 }
@@ -2630,6 +2641,8 @@ int main(int argc, char *argv[])
        if (crypto_init())
                return -1;
 
+       RAND_poll();
+
        err = get_options(argc, argv);
        if (err)
                return err;
index 132119167fa5bb53b9ab292c24352b94fcb1ea0f..aa032392155bc772b97684dbabe07586e7ad4ee9 100644 (file)
@@ -46,6 +46,8 @@
 #include <uuid.h>
 #include <sys/file.h>
 
+#include <openssl/rand.h>
+
 #include <mtd/ubifs-media.h>
 
 /* common.h requires the PROGRAM_NAME macro */
index 2f080a8ce7086ebfbc947ce1f53de919b986d412..5a4af997e7bd1a3f0298e9bb0dc3208da88ad53c 100644 (file)
@@ -330,6 +330,7 @@ struct ubifs_znode
  * @nhead_offs: offset of LPT head
  * @big_lpt: flag that LPT is too big to write whole during commit
  * @space_fixup: flag indicating that free space in LEBs needs to be cleaned up
+ * @double_hash: flag indicating that we can do lookups by hash
  * @lpt_sz: LPT size
  *
  * @ltab_lnum: LEB number of LPT's own lprops table
@@ -408,6 +409,7 @@ struct ubifs_info
        int nhead_offs;
        int big_lpt;
        int space_fixup;
+       int double_hash;
        long long lpt_sz;
 
        int ltab_lnum;