fix the file corruption after applying ext4 encryption.
initialize key array to prevent garbage value get in.
Change-Id: I83e0195793e0dc98b889e0fad747d39467da110b
Signed-off-by: yeji01kim <yeji01.kim@samsung.com>
return;
}
ext4Key.mode = EXT4_ENCRYPTION_MODE_AES_256_XTS;
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(),
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)
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)
+ throw runtime::Exception(runtime::GetSystemErrorMessage());
/* progress bar update */
curSize += st.st_size;
/* progress bar update */
curSize += st.st_size;
-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)
{
struct ext4_encryption_policy policy;
int fd, rc;
fd = ::open(dirName.c_str(), O_DIRECTORY);
if (fd == -1)
rc = ::ioctl(fd, EXT4_IOC_GET_ENCRYPTION_POLICY, &policy);
close(fd);
if (rc) {
ERROR("ioctl error");
rc = ::ioctl(fd, EXT4_IOC_GET_ENCRYPTION_POLICY, &policy);
close(fd);
if (rc) {
ERROR("ioctl error");
}
Ext4Engine::Ext4Engine(const std::string& src, const std::string& dest, const ProgressBar &prgsBar) :
}
Ext4Engine::Ext4Engine(const std::string& src, const std::string& dest, const ProgressBar &prgsBar) :
{
std::string destDir = getDestination();
{
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);
addKeyToKeyring(key);
preScanDir(bindMountPoint);