OSDN Git Service

ANDROID: Add kconfig to make dm-verity check_at_most_once default enabled
authorPatrik Torstensson <totte@google.com>
Fri, 13 Apr 2018 22:34:48 +0000 (15:34 -0700)
committerAmit Pundir <amit.pundir@linaro.org>
Tue, 14 Aug 2018 12:17:11 +0000 (17:47 +0530)
This change adds a kernel config for default enable
the check_at_most_once dm-verity option. This is to give us
the ability to enforce the usage of at_most_once
for entry-level phones.

Change-Id: Id40416672c4c2209a9866997d8c164b5de5dc7dc
Signed-off-by: Patrik Torstensson <totte@google.com>
Bug: 72664474

drivers/md/Kconfig
drivers/md/dm-verity-target.c

index 44d56f4..8a258c6 100644 (file)
@@ -591,4 +591,24 @@ config DM_ANDROID_VERITY
          of the metadata contents are verified against the key included
          in the system keyring. Upon success, the underlying verity
          target is setup.
+
+config DM_ANDROID_VERITY_AT_MOST_ONCE_DEFAULT_ENABLED
+       bool "Verity will validate blocks at most once"
+   depends on DM_VERITY
+   ---help---
+         Default enables at_most_once option for dm-verity
+
+         Verify data blocks only the first time they are read from the
+         data device, rather than every time.  This reduces the overhead
+         of dm-verity so that it can be used on systems that are memory
+         and/or CPU constrained.  However, it provides a reduced level
+         of security because only offline tampering of the data device's
+         content will be detected, not online tampering.
+
+         Hash blocks are still verified each time they are read from the
+         hash device, since verification of hash blocks is less performance
+         critical than data blocks, and a hash block will not be verified
+         any more after all the data blocks it covers have been verified anyway.
+
+         If unsure, say N.
 endif # MD
index e6997ca..04e9acc 100644 (file)
@@ -1082,6 +1082,14 @@ int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)
                        goto bad;
        }
 
+#ifdef CONFIG_DM_ANDROID_VERITY_AT_MOST_ONCE_DEFAULT_ENABLED
+       if (!v->validated_blocks) {
+               r = verity_alloc_most_once(v);
+               if (r)
+                       goto bad;
+       }
+#endif
+
        v->hash_per_block_bits =
                __fls((1 << v->hash_dev_block_bits) / v->digest_size);