Reland "Device manifest > T must not set kernel level."
Test: libvintf_test
Bug: 188939851
Change-Id: I0fa9badc7cc27ca1ce2f4c2329593d688679177d
diff --git a/AssembleVintf.cpp b/AssembleVintf.cpp
index cf427dc..7b01c8d 100644
--- a/AssembleVintf.cpp
+++ b/AssembleVintf.cpp
@@ -31,6 +31,7 @@
#include <vintf/KernelConfigParser.h>
#include <vintf/parse_string.h>
#include <vintf/parse_xml.h>
+#include "constants-private.h"
#include "utils.h"
#define BUFFER_SIZE sysconf(_SC_PAGESIZE)
@@ -345,7 +346,19 @@
std::cerr << error << "\n";
return false;
}
+ return true;
+ }
+ bool checkDeviceManifestNoKernelLevel(const HalManifest& manifest) {
+ if (manifest.level() != Level::UNSPECIFIED &&
+ manifest.level() >= details::kEnforceDeviceManifestNoKernelLevel &&
+ // Use manifest.kernel()->level() directly because inferredKernelLevel()
+ // reads manifest.level().
+ manifest.kernel().has_value() && manifest.kernel()->level() != Level::UNSPECIFIED) {
+ std::cerr << "Error: Device manifest with level " << manifest.level()
+ << " must not set kernel level " << manifest.kernel()->level() << std::endl;
+ return false;
+ }
return true;
}
@@ -387,6 +400,10 @@
if (!setDeviceManifestKernel(halManifest)) {
return false;
}
+
+ if (!checkDeviceManifestNoKernelLevel(*halManifest)) {
+ return false;
+ }
}
if (halManifest->mType == SchemaType::FRAMEWORK) {