vendor apex: label apex_manifest as vendor_apex_metadata_file
Since vendor APEXes are installed in vendor partition, there shouldn't
be system_file according to Treble. Instead, we can force-label / and
/apex_manifest.pb as vendor_apex_metadata_file so that apexd (and other
system components) can still read them.
Bug: 285075529
Test: m nothing (soong test)
Change-Id: Idb36b8c4c68b29e2235dbda38ee323d4b781e1d5
diff --git a/apex/builder.go b/apex/builder.go
index 7c6522d..4132954 100644
--- a/apex/builder.go
+++ b/apex/builder.go
@@ -314,7 +314,7 @@
// buildFileContexts create build rules to append an entry for apex_manifest.pb to the file_contexts
// file for this APEX which is either from /systme/sepolicy/apex/<apexname>-file_contexts or from
// the file_contexts property of this APEX. This is to make sure that the manifest file is correctly
-// labeled as system_file.
+// labeled as system_file or vendor_apex_metadata_file.
func (a *apexBundle) buildFileContexts(ctx android.ModuleContext) android.OutputPath {
var fileContexts android.Path
var fileContextsDir string
@@ -346,6 +346,13 @@
output := android.PathForModuleOut(ctx, "file_contexts")
rule := android.NewRuleBuilder(pctx, ctx)
+ forceLabel := "u:object_r:system_file:s0"
+ if a.SocSpecific() && !a.vndkApex {
+ // APEX on /vendor should label ./ and ./apex_manifest.pb as vendor_apex_metadata_file.
+ // The reason why we skip VNDK APEX is that aosp_{pixel device} targets install VNDK APEX on /vendor
+ // even though VNDK APEX is supposed to be installed on /system. (See com.android.vndk.current.on_vendor)
+ forceLabel = "u:object_r:vendor_apex_metadata_file:s0"
+ }
switch a.properties.ApexType {
case imageApex:
// remove old file
@@ -355,9 +362,9 @@
// new line
rule.Command().Text("echo").Text(">>").Output(output)
if !useFileContextsAsIs {
- // force-label /apex_manifest.pb and / as system_file so that apexd can read them
- rule.Command().Text("echo").Flag("/apex_manifest\\\\.pb u:object_r:system_file:s0").Text(">>").Output(output)
- rule.Command().Text("echo").Flag("/ u:object_r:system_file:s0").Text(">>").Output(output)
+ // force-label /apex_manifest.pb and /
+ rule.Command().Text("echo").Text("/apex_manifest\\\\.pb").Text(forceLabel).Text(">>").Output(output)
+ rule.Command().Text("echo").Text("/").Text(forceLabel).Text(">>").Output(output)
}
case flattenedApex:
// For flattened apexes, install path should be prepended.
@@ -372,9 +379,9 @@
// new line
rule.Command().Text("echo").Text(">>").Output(output)
if !useFileContextsAsIs {
- // force-label /apex_manifest.pb and / as system_file so that apexd can read them
- rule.Command().Text("echo").Flag(apexPath + `/apex_manifest\\.pb u:object_r:system_file:s0`).Text(">>").Output(output)
- rule.Command().Text("echo").Flag(apexPath + "/ u:object_r:system_file:s0").Text(">>").Output(output)
+ // force-label /apex_manifest.pb and /
+ rule.Command().Text("echo").Text(apexPath + "/apex_manifest\\\\.pb").Text(forceLabel).Text(">>").Output(output)
+ rule.Command().Text("echo").Text(apexPath + "/").Text(forceLabel).Text(">>").Output(output)
}
default:
panic(fmt.Errorf("unsupported type %v", a.properties.ApexType))