Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2012 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | #ifndef __CORE_FS_MGR_PRIV_H |
| 18 | #define __CORE_FS_MGR_PRIV_H |
| 19 | |
Jinguang Dong | 9d34496 | 2017-06-13 10:20:34 +0800 | [diff] [blame] | 20 | #include <chrono> |
| 21 | #include <string> |
| 22 | |
bowgotsai | 47878de | 2017-01-23 14:04:34 +0800 | [diff] [blame] | 23 | #include <android-base/logging.h> |
Jinguang Dong | 9d34496 | 2017-06-13 10:20:34 +0800 | [diff] [blame] | 24 | |
| 25 | #include "fs_mgr.h" |
Sandeep Patil | 9de748f | 2017-02-16 19:15:29 -0800 | [diff] [blame] | 26 | #include "fs_mgr_priv_boot_config.h" |
Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 27 | |
bowgotsai | b51722b | 2017-01-11 22:21:38 +0800 | [diff] [blame] | 28 | /* The CHECK() in logging.h will use program invocation name as the tag. |
| 29 | * Thus, the log will have prefix "init: " when libfs_mgr is statically |
| 30 | * linked in the init process. This might be opaque when debugging. |
| 31 | * Appends "in libfs_mgr" at the end of the abort message to explicitly |
| 32 | * indicate the check happens in fs_mgr. |
| 33 | */ |
| 34 | #define FS_MGR_CHECK(x) CHECK(x) << "in libfs_mgr " |
bowgotsai | 47878de | 2017-01-23 14:04:34 +0800 | [diff] [blame] | 35 | |
| 36 | #define FS_MGR_TAG "[libfs_mgr]" |
| 37 | |
| 38 | // Logs a message to kernel |
| 39 | #define LINFO LOG(INFO) << FS_MGR_TAG |
| 40 | #define LWARNING LOG(WARNING) << FS_MGR_TAG |
| 41 | #define LERROR LOG(ERROR) << FS_MGR_TAG |
| 42 | |
| 43 | // Logs a message with strerror(errno) at the end |
| 44 | #define PINFO PLOG(INFO) << FS_MGR_TAG |
| 45 | #define PWARNING PLOG(WARNING) << FS_MGR_TAG |
| 46 | #define PERROR PLOG(ERROR) << FS_MGR_TAG |
bowgotsai | b51722b | 2017-01-11 22:21:38 +0800 | [diff] [blame] | 47 | |
JP Abgrall | e29cbd3 | 2014-06-27 02:20:20 -0700 | [diff] [blame] | 48 | #define CRYPTO_TMPFS_OPTIONS "size=256m,mode=0771,uid=1000,gid=1000" |
Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 49 | |
Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 50 | /* fstab has the following format: |
| 51 | * |
| 52 | * Any line starting with a # is a comment and ignored |
| 53 | * |
| 54 | * Any blank line is ignored |
| 55 | * |
| 56 | * All other lines must be in this format: |
| 57 | * <source> <mount_point> <fs_type> <mount_flags> <fs_options> <fs_mgr_options> |
| 58 | * |
| 59 | * <mount_flags> is a comma separated list of flags that can be passed to the |
| 60 | * mount command. The list includes noatime, nosuid, nodev, nodiratime, |
| 61 | * ro, rw, remount, defaults. |
| 62 | * |
| 63 | * <fs_options> is a comma separated list of options accepted by the filesystem being |
| 64 | * mounted. It is passed directly to mount without being parsed |
| 65 | * |
| 66 | * <fs_mgr_options> is a comma separated list of flags that control the operation of |
| 67 | * the fs_mgr program. The list includes "wait", which will wait till |
Wei Wang | 254f443 | 2016-08-23 11:58:09 -0700 | [diff] [blame] | 68 | * the <source> file exists, and "check", which requests that the fs_mgr |
Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 69 | * run an fscheck program on the <source> before mounting the filesystem. |
| 70 | * If check is specifed on a read-only filesystem, it is ignored. |
| 71 | * Also, "encryptable" means that filesystem can be encrypted. |
Ken Sumrall | ab6b852 | 2013-02-13 12:58:40 -0800 | [diff] [blame] | 72 | * The "encryptable" flag _MUST_ be followed by a = and a string which |
| 73 | * is the location of the encryption keys. It can either be a path |
Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 74 | * to a file or partition which contains the keys, or the word "footer" |
| 75 | * which means the keys are in the last 16 Kbytes of the partition |
| 76 | * containing the filesystem. |
| 77 | * |
| 78 | * When the fs_mgr is requested to mount all filesystems, it will first mount all the |
| 79 | * filesystems that do _NOT_ specify check (including filesystems that are read-only and |
| 80 | * specify check, because check is ignored in that case) and then it will check and mount |
| 81 | * filesystem marked with check. |
| 82 | * |
| 83 | */ |
| 84 | |
Jeff Sharkey | 6d89610 | 2016-12-14 12:00:51 -0700 | [diff] [blame] | 85 | #define MF_WAIT 0x1 |
| 86 | #define MF_CHECK 0x2 |
| 87 | #define MF_CRYPT 0x4 |
| 88 | #define MF_NONREMOVABLE 0x8 |
| 89 | #define MF_VOLDMANAGED 0x10 |
| 90 | #define MF_LENGTH 0x20 |
| 91 | #define MF_RECOVERYONLY 0x40 |
| 92 | #define MF_SWAPPRIO 0x80 |
| 93 | #define MF_ZRAMSIZE 0x100 |
| 94 | #define MF_VERIFY 0x200 |
| 95 | #define MF_FORCECRYPT 0x400 |
| 96 | #define MF_NOEMULATEDSD 0x800 /* no emulated sdcard daemon, sd card is the only |
| 97 | external storage */ |
| 98 | #define MF_NOTRIM 0x1000 |
| 99 | #define MF_FILEENCRYPTION 0x2000 |
| 100 | #define MF_FORMATTABLE 0x4000 |
| 101 | #define MF_SLOTSELECT 0x8000 |
| 102 | #define MF_FORCEFDEORFBE 0x10000 |
| 103 | #define MF_LATEMOUNT 0x20000 |
| 104 | #define MF_NOFAIL 0x40000 |
| 105 | #define MF_VERIFYATBOOT 0x80000 |
Jin Qian | 0067e03 | 2016-11-18 16:37:53 -0800 | [diff] [blame] | 106 | #define MF_MAX_COMP_STREAMS 0x100000 |
Jeff Sharkey | 6d89610 | 2016-12-14 12:00:51 -0700 | [diff] [blame] | 107 | #define MF_RESERVEDSIZE 0x200000 |
| 108 | #define MF_QUOTA 0x400000 |
Connor O'Brien | 46fec48 | 2017-01-24 17:50:39 -0800 | [diff] [blame] | 109 | #define MF_ERASEBLKSIZE 0x800000 |
| 110 | #define MF_LOGICALBLKSIZE 0X1000000 |
bowgotsai | b51722b | 2017-01-11 22:21:38 +0800 | [diff] [blame] | 111 | #define MF_AVB 0X2000000 |
Paul Lawrence | 9dbe97b | 2017-04-21 12:41:48 -0700 | [diff] [blame] | 112 | #define MF_KEYDIRECTORY 0X4000000 |
Geremy Condra | 3ad3d1c | 2013-02-22 18:11:41 -0800 | [diff] [blame] | 113 | |
| 114 | #define DM_BUF_SIZE 4096 |
Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 115 | |
Jinguang Dong | 9d34496 | 2017-06-13 10:20:34 +0800 | [diff] [blame] | 116 | using namespace std::chrono_literals; |
| 117 | |
Sami Tolvanen | 214f33b | 2014-12-18 16:15:30 +0000 | [diff] [blame] | 118 | int fs_mgr_set_blk_ro(const char *blockdev); |
Jinguang Dong | 9d34496 | 2017-06-13 10:20:34 +0800 | [diff] [blame] | 119 | bool fs_mgr_wait_for_file(const std::string& filename, |
| 120 | const std::chrono::milliseconds relative_timeout); |
Bowgo Tsai | 87d0836 | 2017-04-05 00:02:33 +0800 | [diff] [blame] | 121 | bool fs_mgr_update_for_slotselect(struct fstab *fstab); |
Bowgo Tsai | d1fe3bd | 2017-07-05 15:37:15 +0800 | [diff] [blame] | 122 | bool fs_mgr_is_device_unlocked(); |
Yu Ning | c01022a | 2017-07-26 17:54:08 +0800 | [diff] [blame] | 123 | const std::string& get_android_dt_dir(); |
Sandeep Patil | e396c60 | 2017-02-24 11:04:49 -0800 | [diff] [blame] | 124 | bool is_dt_compatible(); |
Bowgo Tsai | aaf70e7 | 2017-03-02 00:03:56 +0800 | [diff] [blame] | 125 | int load_verity_state(struct fstab_rec* fstab, int* mode); |
Sami Tolvanen | 214f33b | 2014-12-18 16:15:30 +0000 | [diff] [blame] | 126 | |
Ken Sumrall | 7574c03 | 2012-01-06 19:09:42 -0800 | [diff] [blame] | 127 | #endif /* __CORE_FS_MGR_PRIV_H */ |