return;
}
ext4Key.mode = EXT4_ENCRYPTION_MODE_AES_256_XTS;
- ::memcpy(ext4Key.raw, key.data(), EXT4_MAX_KEY_SIZE);
- std::string ext4KeyRaw = ext4Key.raw;
+ ::memset(ext4Key.raw, 0, EXT4_MAX_KEY_SIZE);
+ ::memcpy(ext4Key.raw, key.data(), key.size());
ext4Key.size = EXT4_MAX_KEY_SIZE;
ret = ::syscall(__NR_add_key, ext4KeyringType.c_str(), keyRefFull.c_str(),
if (::chown(dest.c_str(), st.st_uid, st.st_gid) == -1)
throw runtime::Exception(dest + runtime::GetSystemErrorMessage());
if (::sendfile(writeFd, readFd, 0, st.st_size) == -1)
- return 1;
+ throw runtime::Exception(runtime::GetSystemErrorMessage());
/* progress bar update */
curSize += st.st_size;
return true;
}
-static bool getPolicy(const std::string& dirName)
+static int getPolicy(const std::string& dirName)
{
struct ext4_encryption_policy policy;
int fd, rc;
fd = ::open(dirName.c_str(), O_DIRECTORY);
if (fd == -1)
- return false;
+ return 0;
rc = ::ioctl(fd, EXT4_IOC_GET_ENCRYPTION_POLICY, &policy);
close(fd);
if (rc) {
ERROR("ioctl error");
- return false;
+ return 0;
}
- return true;
+ return 1;
}
Ext4Engine::Ext4Engine(const std::string& src, const std::string& dest, const ProgressBar &prgsBar) :
{
std::string destDir = getDestination();
- if (!getPolicy(bindMountPoint))
- throw runtime::Exception("directory isn't encrypted");
+ if (getPolicy(bindMountPoint) != 1)
+ throw runtime::Exception("failed get policy");
addKeyToKeyring(key);
preScanDir(bindMountPoint);