Merge "system/vold: check return value of PKCS5_PBKDF2_HMAC_SHA1." am: 0a7e668ebf am: cd6d8e3fb6
am: 03b10c268b

* commit '03b10c268b810c06e31f20fab00ee9bb93d09d01':
  system/vold: check return value of PKCS5_PBKDF2_HMAC_SHA1.
diff --git a/CommandListener.cpp b/CommandListener.cpp
index a9a8031..3a87741 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -44,8 +44,6 @@
 #include "Process.h"
 #include "Loop.h"
 #include "Devmapper.h"
-#include "Ext4Crypt.h"
-#include "cryptfs.h"
 #include "MoveTask.h"
 #include "TrimTask.h"
 
diff --git a/CryptCommandListener.cpp b/CryptCommandListener.cpp
index 3132a82..575ec90 100644
--- a/CryptCommandListener.cpp
+++ b/CryptCommandListener.cpp
@@ -358,6 +358,16 @@
         SLOGD("cryptfs deleteuserkey");
         dumpArgs(argc, argv, -1);
         rc = e4crypt_delete_user_key(argv[2]);
+    } else if (!strcmp(argv[1], "isConvertibleToFBE")) {
+        if (argc != 2) {
+            cli->sendMsg(ResponseCode::CommandSyntaxError,
+                "Usage: cryptfs isConvertibleToFBE", false);
+            return 0;
+        }
+        // ext4enc:TODO: send a CommandSyntaxError if argv[2] not an integer
+        SLOGD("cryptfs isConvertibleToFBE");
+        dumpArgs(argc, argv, -1);
+        rc = cryptfs_isConvertibleToFBE();
     } else {
         dumpArgs(argc, argv, -1);
         cli->sendMsg(ResponseCode::CommandSyntaxError, "Unknown cryptfs cmd", false);
diff --git a/VolumeManager.cpp b/VolumeManager.cpp
old mode 100755
new mode 100644
diff --git a/cryptfs.c b/cryptfs.c
index 1f70847..d036eb2 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -3710,6 +3710,12 @@
     return e4crypt_enable(DATA_MNT_POINT);
 }
 
+int cryptfs_isConvertibleToFBE()
+{
+    struct fstab_rec* rec = fs_mgr_get_entry_for_mount_point(fstab, DATA_MNT_POINT);
+    return fs_mgr_is_convertible_to_fbe(rec) ? 1 : 0;
+}
+
 int cryptfs_create_default_ftr(struct crypt_mnt_ftr* crypt_ftr, __attribute__((unused))int key_length)
 {
     if (cryptfs_init_crypt_mnt_ftr(crypt_ftr)) {
diff --git a/cryptfs.h b/cryptfs.h
index fd6f3da..1320bfe 100644
--- a/cryptfs.h
+++ b/cryptfs.h
@@ -231,6 +231,7 @@
   int cryptfs_get_password_type(void);
   const char* cryptfs_get_password(void);
   void cryptfs_clear_password(void);
+  int cryptfs_isConvertibleToFBE(void);
 
   // Functions for file encryption to use to inherit our encryption logic
   int cryptfs_create_default_ftr(struct crypt_mnt_ftr* ftr, int key_length);
@@ -238,6 +239,7 @@
                              unsigned char* master_key);
   int cryptfs_set_password(struct crypt_mnt_ftr* ftr, const char* password,
                            const unsigned char* master_key);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/fs/F2fs.cpp b/fs/F2fs.cpp
index b947822..87b131e 100644
--- a/fs/F2fs.cpp
+++ b/fs/F2fs.cpp
@@ -43,7 +43,7 @@
 status_t Check(const std::string& source) {
     std::vector<std::string> cmd;
     cmd.push_back(kFsckPath);
-    cmd.push_back("-f");
+    cmd.push_back("-a");
     cmd.push_back(source);
 
     // f2fs devices are currently always trusted