1*f40fafd4SAndroid Build Coastguard Worker /* 2*f40fafd4SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 3*f40fafd4SAndroid Build Coastguard Worker * 4*f40fafd4SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*f40fafd4SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*f40fafd4SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*f40fafd4SAndroid Build Coastguard Worker * 8*f40fafd4SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*f40fafd4SAndroid Build Coastguard Worker * 10*f40fafd4SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*f40fafd4SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*f40fafd4SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f40fafd4SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*f40fafd4SAndroid Build Coastguard Worker * limitations under the License. 15*f40fafd4SAndroid Build Coastguard Worker */ 16*f40fafd4SAndroid Build Coastguard Worker 17*f40fafd4SAndroid Build Coastguard Worker #ifndef ANDROID_VOLD_PRIVATE_VOLUME_H 18*f40fafd4SAndroid Build Coastguard Worker #define ANDROID_VOLD_PRIVATE_VOLUME_H 19*f40fafd4SAndroid Build Coastguard Worker 20*f40fafd4SAndroid Build Coastguard Worker #include "VolumeBase.h" 21*f40fafd4SAndroid Build Coastguard Worker 22*f40fafd4SAndroid Build Coastguard Worker #include <cutils/multiuser.h> 23*f40fafd4SAndroid Build Coastguard Worker 24*f40fafd4SAndroid Build Coastguard Worker namespace android { 25*f40fafd4SAndroid Build Coastguard Worker namespace vold { 26*f40fafd4SAndroid Build Coastguard Worker 27*f40fafd4SAndroid Build Coastguard Worker /* 28*f40fafd4SAndroid Build Coastguard Worker * Private storage provided by an encrypted partition. 29*f40fafd4SAndroid Build Coastguard Worker * 30*f40fafd4SAndroid Build Coastguard Worker * Given a raw block device, it knows how to wrap it in dm-crypt and 31*f40fafd4SAndroid Build Coastguard Worker * format as ext4/f2fs. EmulatedVolume can be stacked above it. 32*f40fafd4SAndroid Build Coastguard Worker * 33*f40fafd4SAndroid Build Coastguard Worker * This volume is designed to behave much like the internal /data 34*f40fafd4SAndroid Build Coastguard Worker * partition, both in layout and function. For example, apps and 35*f40fafd4SAndroid Build Coastguard Worker * private app data can be safely stored on this volume because the 36*f40fafd4SAndroid Build Coastguard Worker * keys are tightly tied to this device. 37*f40fafd4SAndroid Build Coastguard Worker */ 38*f40fafd4SAndroid Build Coastguard Worker class PrivateVolume : public VolumeBase { 39*f40fafd4SAndroid Build Coastguard Worker public: 40*f40fafd4SAndroid Build Coastguard Worker PrivateVolume(dev_t device, const KeyBuffer& keyRaw); 41*f40fafd4SAndroid Build Coastguard Worker virtual ~PrivateVolume(); getFsType()42*f40fafd4SAndroid Build Coastguard Worker const std::string& getFsType() const { return mFsType; }; getRawDevPath()43*f40fafd4SAndroid Build Coastguard Worker const std::string& getRawDevPath() const { return mRawDevPath; }; getRawDmDevPath()44*f40fafd4SAndroid Build Coastguard Worker const std::string& getRawDmDevPath() const { return mDmDevPath; }; getFsUuid()45*f40fafd4SAndroid Build Coastguard Worker const std::string& getFsUuid() const { return mFsUuid; }; getRawDevice()46*f40fafd4SAndroid Build Coastguard Worker dev_t getRawDevice() const { return mRawDevice; }; 47*f40fafd4SAndroid Build Coastguard Worker 48*f40fafd4SAndroid Build Coastguard Worker protected: 49*f40fafd4SAndroid Build Coastguard Worker status_t doCreate() override; 50*f40fafd4SAndroid Build Coastguard Worker status_t doDestroy() override; 51*f40fafd4SAndroid Build Coastguard Worker status_t doMount() override; 52*f40fafd4SAndroid Build Coastguard Worker void doPostMount() override; 53*f40fafd4SAndroid Build Coastguard Worker status_t doUnmount() override; 54*f40fafd4SAndroid Build Coastguard Worker status_t doFormat(const std::string& fsType) override; 55*f40fafd4SAndroid Build Coastguard Worker 56*f40fafd4SAndroid Build Coastguard Worker status_t readMetadata(); 57*f40fafd4SAndroid Build Coastguard Worker 58*f40fafd4SAndroid Build Coastguard Worker private: 59*f40fafd4SAndroid Build Coastguard Worker /* Kernel device of raw, encrypted partition */ 60*f40fafd4SAndroid Build Coastguard Worker dev_t mRawDevice; 61*f40fafd4SAndroid Build Coastguard Worker /* Path to raw, encrypted block device */ 62*f40fafd4SAndroid Build Coastguard Worker std::string mRawDevPath; 63*f40fafd4SAndroid Build Coastguard Worker /* Path to decrypted block device */ 64*f40fafd4SAndroid Build Coastguard Worker std::string mDmDevPath; 65*f40fafd4SAndroid Build Coastguard Worker /* Path where decrypted device is mounted */ 66*f40fafd4SAndroid Build Coastguard Worker std::string mPath; 67*f40fafd4SAndroid Build Coastguard Worker 68*f40fafd4SAndroid Build Coastguard Worker /* Encryption key as raw bytes */ 69*f40fafd4SAndroid Build Coastguard Worker KeyBuffer mKeyRaw; 70*f40fafd4SAndroid Build Coastguard Worker 71*f40fafd4SAndroid Build Coastguard Worker /* Filesystem type */ 72*f40fafd4SAndroid Build Coastguard Worker std::string mFsType; 73*f40fafd4SAndroid Build Coastguard Worker /* Filesystem UUID */ 74*f40fafd4SAndroid Build Coastguard Worker std::string mFsUuid; 75*f40fafd4SAndroid Build Coastguard Worker /* User-visible filesystem label */ 76*f40fafd4SAndroid Build Coastguard Worker std::string mFsLabel; 77*f40fafd4SAndroid Build Coastguard Worker 78*f40fafd4SAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(PrivateVolume); 79*f40fafd4SAndroid Build Coastguard Worker }; 80*f40fafd4SAndroid Build Coastguard Worker 81*f40fafd4SAndroid Build Coastguard Worker } // namespace vold 82*f40fafd4SAndroid Build Coastguard Worker } // namespace android 83*f40fafd4SAndroid Build Coastguard Worker 84*f40fafd4SAndroid Build Coastguard Worker #endif 85