Merge "dmctl: add report of IMA" into main
This commit is contained in:
commit
0b671f4432
4 changed files with 30 additions and 0 deletions
|
@ -39,6 +39,9 @@
|
|||
#ifndef DM_DEFERRED_REMOVE
|
||||
#define DM_DEFERRED_REMOVE (1 << 17)
|
||||
#endif
|
||||
#ifndef DM_IMA_MEASUREMENT_FLAG
|
||||
#define DM_IMA_MEASUREMENT_FLAG (1 << 19)
|
||||
#endif
|
||||
|
||||
namespace android {
|
||||
namespace dm {
|
||||
|
@ -540,6 +543,10 @@ bool DeviceMapper::GetTableStatus(const std::string& name, std::vector<TargetInf
|
|||
return GetTable(name, 0, table);
|
||||
}
|
||||
|
||||
bool DeviceMapper::GetTableStatusIma(const std::string& name, std::vector<TargetInfo>* table) {
|
||||
return GetTable(name, DM_IMA_MEASUREMENT_FLAG, table);
|
||||
}
|
||||
|
||||
bool DeviceMapper::GetTableInfo(const std::string& name, std::vector<TargetInfo>* table) {
|
||||
return GetTable(name, DM_STATUS_TABLE_FLAG, table);
|
||||
}
|
||||
|
|
|
@ -78,6 +78,7 @@ class IDeviceMapper {
|
|||
virtual bool LoadTable(const std::string& name, const DmTable& table) = 0;
|
||||
virtual bool GetTableInfo(const std::string& name, std::vector<TargetInfo>* table) = 0;
|
||||
virtual bool GetTableStatus(const std::string& name, std::vector<TargetInfo>* table) = 0;
|
||||
virtual bool GetTableStatusIma(const std::string& name, std::vector<TargetInfo>* table) = 0;
|
||||
virtual bool GetDmDevicePathByName(const std::string& name, std::string* path) = 0;
|
||||
virtual bool GetDeviceString(const std::string& name, std::string* dev) = 0;
|
||||
virtual bool DeleteDeviceIfExists(const std::string& name) = 0;
|
||||
|
@ -267,6 +268,12 @@ class DeviceMapper final : public IDeviceMapper {
|
|||
// false.
|
||||
bool GetTableStatus(const std::string& name, std::vector<TargetInfo>* table) override;
|
||||
|
||||
// Query the status of a table, given a device name. The output vector will
|
||||
// contain IMA TargetInfo for each target in the table. If the device does
|
||||
// not exist, or there were too many targets, the call will fail and return
|
||||
// false.
|
||||
bool GetTableStatusIma(const std::string& name, std::vector<TargetInfo>* table) override;
|
||||
|
||||
// Identical to GetTableStatus, except also retrives the active table for the device
|
||||
// mapper device from the kernel.
|
||||
bool GetTableInfo(const std::string& name, std::vector<TargetInfo>* table) override;
|
||||
|
|
|
@ -155,6 +155,9 @@ class DeviceMapperWrapper : public android::dm::IDeviceMapper {
|
|||
virtual bool GetTableStatus(const std::string& name, std::vector<TargetInfo>* table) {
|
||||
return impl_.GetTableStatus(name, table);
|
||||
}
|
||||
virtual bool GetTableStatusIma(const std::string& name, std::vector<TargetInfo>* table) {
|
||||
return impl_.GetTableStatusIma(name, table);
|
||||
}
|
||||
virtual bool GetDmDevicePathByName(const std::string& name, std::string* path) {
|
||||
return impl_.GetDmDevicePathByName(name, path);
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ static int Usage(void) {
|
|||
std::cerr << " list <devices | targets> [-v]" << std::endl;
|
||||
std::cerr << " getpath <dm-name>" << std::endl;
|
||||
std::cerr << " getuuid <dm-name>" << std::endl;
|
||||
std::cerr << " ima <dm-name>" << std::endl;
|
||||
std::cerr << " info <dm-name>" << std::endl;
|
||||
std::cerr << " replace <dm-name> <targets...>" << std::endl;
|
||||
std::cerr << " status <dm-name>" << std::endl;
|
||||
|
@ -508,7 +509,14 @@ static int DumpTable(const std::string& mode, int argc, char** argv) {
|
|||
<< std::endl;
|
||||
return -EINVAL;
|
||||
}
|
||||
} else if (mode == "ima") {
|
||||
if (!dm.GetTableStatusIma(argv[0], &table)) {
|
||||
std::cerr << "Could not query table status of device \"" << argv[0] << "\"."
|
||||
<< std::endl;
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Targets in the device-mapper table for " << argv[0] << ":" << std::endl;
|
||||
for (const auto& target : table) {
|
||||
std::cout << target.spec.sector_start << "-"
|
||||
|
@ -530,6 +538,10 @@ static int StatusCmdHandler(int argc, char** argv) {
|
|||
return DumpTable("status", argc, argv);
|
||||
}
|
||||
|
||||
static int ImaCmdHandler(int argc, char** argv) {
|
||||
return DumpTable("ima", argc, argv);
|
||||
}
|
||||
|
||||
static int ResumeCmdHandler(int argc, char** argv) {
|
||||
if (argc != 1) {
|
||||
std::cerr << "Invalid arguments, see \'dmctl help\'" << std::endl;
|
||||
|
@ -570,6 +582,7 @@ static std::map<std::string, std::function<int(int, char**)>> cmdmap = {
|
|||
{"info", InfoCmdHandler},
|
||||
{"table", TableCmdHandler},
|
||||
{"status", StatusCmdHandler},
|
||||
{"ima", ImaCmdHandler},
|
||||
{"resume", ResumeCmdHandler},
|
||||
{"suspend", SuspendCmdHandler},
|
||||
// clang-format on
|
||||
|
|
Loading…
Reference in a new issue