Merge "Remove broken code for mounting encrypted OBB files" am: 74d9fb9757
Original change: https://android-review.googlesource.com/c/platform/system/vold/+/2003210 Change-Id: Iebc830bc01a54ce1292cf98f5c7905adcea55b5f
This commit is contained in:
commit
b643247502
10 changed files with 12 additions and 180 deletions
|
@ -115,7 +115,6 @@ cc_library_static {
|
|||
"Benchmark.cpp",
|
||||
"Checkpoint.cpp",
|
||||
"CryptoType.cpp",
|
||||
"Devmapper.cpp",
|
||||
"EncryptInplace.cpp",
|
||||
"FileDeviceUtils.cpp",
|
||||
"FsCrypt.cpp",
|
||||
|
|
100
Devmapper.cpp
100
Devmapper.cpp
|
@ -1,100 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define ATRACE_TAG ATRACE_TAG_PACKAGE_MANAGER
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <linux/kdev_t.h>
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/stringprintf.h>
|
||||
#include <android-base/strings.h>
|
||||
#include <libdm/dm.h>
|
||||
#include <utils/Trace.h>
|
||||
|
||||
#include "Devmapper.h"
|
||||
|
||||
using android::base::StringPrintf;
|
||||
using namespace android::dm;
|
||||
|
||||
static const char* kVoldPrefix = "vold:";
|
||||
|
||||
int Devmapper::create(const char* name_raw, const char* loopFile, const char* key,
|
||||
unsigned long numSectors, char* ubuffer, size_t len) {
|
||||
auto& dm = DeviceMapper::Instance();
|
||||
auto name_string = StringPrintf("%s%s", kVoldPrefix, name_raw);
|
||||
|
||||
DmTable table;
|
||||
table.Emplace<DmTargetCrypt>(0, numSectors, "twofish", key, 0, loopFile, 0);
|
||||
|
||||
if (!dm.CreateDevice(name_string, table)) {
|
||||
LOG(ERROR) << "Failed to create device-mapper device " << name_string;
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::string path;
|
||||
if (!dm.GetDmDevicePathByName(name_string, &path)) {
|
||||
LOG(ERROR) << "Failed to get device-mapper device path for " << name_string;
|
||||
return -1;
|
||||
}
|
||||
snprintf(ubuffer, len, "%s", path.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Devmapper::destroy(const char* name_raw) {
|
||||
auto& dm = DeviceMapper::Instance();
|
||||
|
||||
auto name_string = StringPrintf("%s%s", kVoldPrefix, name_raw);
|
||||
if (!dm.DeleteDevice(name_string)) {
|
||||
if (errno != ENXIO) {
|
||||
PLOG(ERROR) << "Failed DM_DEV_REMOVE";
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Devmapper::destroyAll() {
|
||||
ATRACE_NAME("Devmapper::destroyAll");
|
||||
|
||||
auto& dm = DeviceMapper::Instance();
|
||||
std::vector<DeviceMapper::DmBlockDevice> devices;
|
||||
if (!dm.GetAvailableDevices(&devices)) {
|
||||
LOG(ERROR) << "Failed to get dm devices";
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (const auto& device : devices) {
|
||||
if (android::base::StartsWith(device.name(), kVoldPrefix)) {
|
||||
LOG(DEBUG) << "Tearing down stale dm device named " << device.name();
|
||||
if (!dm.DeleteDevice(device.name())) {
|
||||
if (errno != ENXIO) {
|
||||
PLOG(WARNING) << "Failed to destroy dm device named " << device.name();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
31
Devmapper.h
31
Devmapper.h
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _DEVMAPPER_H
|
||||
#define _DEVMAPPER_H
|
||||
|
||||
#include <linux/dm-ioctl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
class Devmapper {
|
||||
public:
|
||||
static int create(const char* name, const char* loopFile, const char* key,
|
||||
unsigned long numSectors, char* buffer, size_t len);
|
||||
static int destroy(const char* name);
|
||||
static int destroyAll();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -414,16 +414,13 @@ binder::Status VoldNativeService::fixupAppDir(const std::string& path, int32_t a
|
|||
return translate(VolumeManager::Instance()->fixupAppDir(path, appUid));
|
||||
}
|
||||
|
||||
binder::Status VoldNativeService::createObb(const std::string& sourcePath,
|
||||
const std::string& sourceKey, int32_t ownerGid,
|
||||
binder::Status VoldNativeService::createObb(const std::string& sourcePath, int32_t ownerGid,
|
||||
std::string* _aidl_return) {
|
||||
ENFORCE_SYSTEM_OR_ROOT;
|
||||
CHECK_ARGUMENT_PATH(sourcePath);
|
||||
CHECK_ARGUMENT_HEX(sourceKey);
|
||||
ACQUIRE_LOCK;
|
||||
|
||||
return translate(
|
||||
VolumeManager::Instance()->createObb(sourcePath, sourceKey, ownerGid, _aidl_return));
|
||||
return translate(VolumeManager::Instance()->createObb(sourcePath, ownerGid, _aidl_return));
|
||||
}
|
||||
|
||||
binder::Status VoldNativeService::destroyObb(const std::string& volId) {
|
||||
|
|
|
@ -73,8 +73,8 @@ class VoldNativeService : public BinderService<VoldNativeService>, public os::Bn
|
|||
binder::Status setupAppDir(const std::string& path, int32_t appUid);
|
||||
binder::Status fixupAppDir(const std::string& path, int32_t appUid);
|
||||
|
||||
binder::Status createObb(const std::string& sourcePath, const std::string& sourceKey,
|
||||
int32_t ownerGid, std::string* _aidl_return);
|
||||
binder::Status createObb(const std::string& sourcePath, int32_t ownerGid,
|
||||
std::string* _aidl_return);
|
||||
binder::Status destroyObb(const std::string& volId);
|
||||
|
||||
binder::Status createStubVolume(const std::string& sourcePath, const std::string& mountPath,
|
||||
|
|
|
@ -55,7 +55,6 @@
|
|||
#include <fscrypt/fscrypt.h>
|
||||
|
||||
#include "AppFuseUtil.h"
|
||||
#include "Devmapper.h"
|
||||
#include "FsCrypt.h"
|
||||
#include "Loop.h"
|
||||
#include "NetlinkManager.h"
|
||||
|
@ -179,7 +178,6 @@ int VolumeManager::start() {
|
|||
// directories that we own, in case we crashed.
|
||||
unmountAll();
|
||||
|
||||
Devmapper::destroyAll();
|
||||
Loop::destroyAll();
|
||||
|
||||
// Assume that we always have an emulated volume on internal
|
||||
|
@ -1075,8 +1073,8 @@ int VolumeManager::fixupAppDir(const std::string& path, int32_t appUid) {
|
|||
return setupAppDir(path, appUid, true /* fixupExistingOnly */);
|
||||
}
|
||||
|
||||
int VolumeManager::createObb(const std::string& sourcePath, const std::string& sourceKey,
|
||||
int32_t ownerGid, std::string* outVolId) {
|
||||
int VolumeManager::createObb(const std::string& sourcePath, int32_t ownerGid,
|
||||
std::string* outVolId) {
|
||||
int id = mNextObbId++;
|
||||
|
||||
std::string lowerSourcePath;
|
||||
|
@ -1114,7 +1112,7 @@ int VolumeManager::createObb(const std::string& sourcePath, const std::string& s
|
|||
}
|
||||
|
||||
auto vol = std::shared_ptr<android::vold::VolumeBase>(
|
||||
new android::vold::ObbVolume(id, lowerSourcePath, sourceKey, ownerGid));
|
||||
new android::vold::ObbVolume(id, lowerSourcePath, ownerGid));
|
||||
vol->create();
|
||||
|
||||
mObbVolumes.push_back(vol);
|
||||
|
|
|
@ -186,8 +186,7 @@ class VolumeManager {
|
|||
// Called before zygote starts to ensure dir exists so zygote can bind mount them.
|
||||
int ensureAppDirsCreated(const std::vector<std::string>& paths, int32_t appUid);
|
||||
|
||||
int createObb(const std::string& path, const std::string& key, int32_t ownerGid,
|
||||
std::string* outVolId);
|
||||
int createObb(const std::string& path, int32_t ownerGid, std::string* outVolId);
|
||||
int destroyObb(const std::string& volId);
|
||||
|
||||
int createStubVolume(const std::string& sourcePath, const std::string& mountPath,
|
||||
|
|
|
@ -60,8 +60,7 @@ interface IVold {
|
|||
void fixupAppDir(@utf8InCpp String path, int appUid);
|
||||
void ensureAppDirsCreated(in @utf8InCpp String[] paths, int appUid);
|
||||
|
||||
@utf8InCpp String createObb(@utf8InCpp String sourcePath, @utf8InCpp String sourceKey,
|
||||
int ownerGid);
|
||||
@utf8InCpp String createObb(@utf8InCpp String sourcePath, int ownerGid);
|
||||
void destroyObb(@utf8InCpp String volId);
|
||||
|
||||
void fstrim(int fstrimFlags, IVoldTaskListener listener);
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
*/
|
||||
|
||||
#include "ObbVolume.h"
|
||||
#include "Devmapper.h"
|
||||
#include "Loop.h"
|
||||
#include "Utils.h"
|
||||
#include "VoldUtil.h"
|
||||
|
@ -39,12 +38,10 @@ using android::base::StringPrintf;
|
|||
namespace android {
|
||||
namespace vold {
|
||||
|
||||
ObbVolume::ObbVolume(int id, const std::string& sourcePath, const std::string& sourceKey,
|
||||
gid_t ownerGid)
|
||||
ObbVolume::ObbVolume(int id, const std::string& sourcePath, gid_t ownerGid)
|
||||
: VolumeBase(Type::kObb) {
|
||||
setId(StringPrintf("obb:%d", id));
|
||||
mSourcePath = sourcePath;
|
||||
mSourceKey = sourceKey;
|
||||
mOwnerGid = ownerGid;
|
||||
}
|
||||
|
||||
|
@ -55,36 +52,13 @@ status_t ObbVolume::doCreate() {
|
|||
PLOG(ERROR) << getId() << " failed to create loop";
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mSourceKey.empty()) {
|
||||
uint64_t nr_sec = 0;
|
||||
if (GetBlockDev512Sectors(mLoopPath, &nr_sec) != OK) {
|
||||
PLOG(ERROR) << getId() << " failed to get loop size";
|
||||
return -1;
|
||||
}
|
||||
|
||||
char tmp[PATH_MAX];
|
||||
if (Devmapper::create(getId().c_str(), mLoopPath.c_str(), mSourceKey.c_str(), nr_sec, tmp,
|
||||
PATH_MAX)) {
|
||||
PLOG(ERROR) << getId() << " failed to create dm";
|
||||
return -1;
|
||||
}
|
||||
mDmPath = tmp;
|
||||
mMountPath = mDmPath;
|
||||
} else {
|
||||
mMountPath = mLoopPath;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
status_t ObbVolume::doDestroy() {
|
||||
if (!mDmPath.empty() && Devmapper::destroy(getId().c_str())) {
|
||||
PLOG(WARNING) << getId() << " failed to destroy dm";
|
||||
}
|
||||
if (!mLoopPath.empty() && Loop::destroyByDevice(mLoopPath.c_str())) {
|
||||
PLOG(WARNING) << getId() << " failed to destroy loop";
|
||||
}
|
||||
mDmPath.clear();
|
||||
mLoopPath.clear();
|
||||
return OK;
|
||||
}
|
||||
|
@ -98,7 +72,7 @@ status_t ObbVolume::doMount() {
|
|||
return -1;
|
||||
}
|
||||
// clang-format off
|
||||
if (android::vold::vfat::Mount(mMountPath, path, true, false, true,
|
||||
if (android::vold::vfat::Mount(mLoopPath, path, true, false, true,
|
||||
0, mOwnerGid, 0227, false)) {
|
||||
// clang-format on
|
||||
PLOG(ERROR) << getId() << " failed to mount";
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace vold {
|
|||
*/
|
||||
class ObbVolume : public VolumeBase {
|
||||
public:
|
||||
ObbVolume(int id, const std::string& sourcePath, const std::string& sourceKey, gid_t ownerGid);
|
||||
ObbVolume(int id, const std::string& sourcePath, gid_t ownerGid);
|
||||
virtual ~ObbVolume();
|
||||
|
||||
protected:
|
||||
|
@ -40,12 +40,9 @@ class ObbVolume : public VolumeBase {
|
|||
|
||||
private:
|
||||
std::string mSourcePath;
|
||||
std::string mSourceKey;
|
||||
gid_t mOwnerGid;
|
||||
|
||||
std::string mLoopPath;
|
||||
std::string mDmPath;
|
||||
std::string mMountPath;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ObbVolume);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue