Add support for serialized property contexts
This adds support for reading a serialized
/dev/__properties__/property_info file, which contains a
serialized trie that maps property names to the SELinux context to
which they belong.
Performance wise on walleye, this change reduces the start up cost in
libc from ~3000us to ~430us. On a benchmark that calls
__system_property_find() for each property set on the system, it
reduces the time per iteration from ~650us to ~292us.
Bug: 36001741
Test: Boot bullhead, walleye, run unit tests
Test: Benchmark initialization and lookup performance
Change-Id: I0887a3a7da88eb51b6d1bd494fa5bce593423599
diff --git a/libc/system_properties/context_node.h b/libc/system_properties/context_node.h
index 1c6cbbb..769b853 100644
--- a/libc/system_properties/context_node.h
+++ b/libc/system_properties/context_node.h
@@ -41,9 +41,16 @@
~ContextNode() {
Unmap();
}
+
+ ContextNode(const ContextNode&) = delete;
+ ContextNode(ContextNode&&) = delete;
+ void operator=(const ContextNode&) = delete;
+ void operator=(const ContextNode&&) = delete;
+
bool Open(bool access_rw, bool* fsetxattr_failed);
bool CheckAccessAndOpen();
void ResetAccess();
+ void Unmap();
const char* context() const {
return context_;
@@ -54,7 +61,6 @@
private:
bool CheckAccess();
- void Unmap();
Lock lock_;
const char* context_;