diff options
Diffstat (limited to 'fsgen/vbmeta_partitions.go')
| -rw-r--r-- | fsgen/vbmeta_partitions.go | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/fsgen/vbmeta_partitions.go b/fsgen/vbmeta_partitions.go deleted file mode 100644 index f5b5f1cf0..000000000 --- a/fsgen/vbmeta_partitions.go +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright (C) 2024 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package fsgen - -import ( - "android/soong/android" - "android/soong/filesystem" - "slices" - "strconv" - - "github.com/google/blueprint/proptools" -) - -type vbmetaModuleInfo struct { - // The name of the generated vbmeta module - moduleName string - // The name of the module that avb understands. This is the name passed to --chain_partition, - // and also the basename of the output file. (the output file is called partitionName + ".img") - partitionName string -} - -// Creates the vbmeta partition and the chained vbmeta partitions. Returns the list of module names -// that the function created. May return nil if the product isn't using avb. -// -// AVB is Android Verified Boot: https://source.android.com/docs/security/features/verifiedboot -// It works by signing all the partitions, but then also including an extra metadata paritition -// called vbmeta that depends on all the other signed partitions. This creates a requirement -// that you update all those partitions and the vbmeta partition together, so in order to relax -// that requirement products can set up "chained" vbmeta partitions, where a chained partition -// like vbmeta_system might contain the avb metadata for just a few products. In cuttlefish -// vbmeta_system contains metadata about product, system, and system_ext. Using chained partitions, -// that group of partitions can be updated independently from the other signed partitions. -func createVbmetaPartitions(ctx android.LoadHookContext, generatedPartitionTypes []string) []vbmetaModuleInfo { - partitionVars := ctx.Config().ProductVariables().PartitionVarsForSoongMigrationOnlyDoNotUse - // Some products seem to have BuildingVbmetaImage as true even when BoardAvbEnable is false - if !partitionVars.BuildingVbmetaImage || !partitionVars.BoardAvbEnable { - return nil - } - - var result []vbmetaModuleInfo - - var chainedPartitions []filesystem.ChainedPartitionProperties - var partitionTypesHandledByChainedPartitions []string - for chainedName, props := range partitionVars.ChainedVbmetaPartitions { - chainedName = "vbmeta_" + chainedName - if len(props.Partitions) == 0 { - continue - } - if len(props.Key) == 0 { - ctx.ModuleErrorf("No key found for chained avb partition %s", chainedName) - continue - } - if len(props.Algorithm) == 0 { - ctx.ModuleErrorf("No algorithm found for chained avb partition %s", chainedName) - continue - } - if len(props.RollbackIndex) == 0 { - ctx.ModuleErrorf("No rollback index found for chained avb partition %s", chainedName) - continue - } - ril, err := strconv.ParseInt(props.RollbackIndexLocation, 10, 32) - if err != nil { - ctx.ModuleErrorf("Rollback index location must be an int, got %s", props.RollbackIndexLocation) - continue - } - // The default is to use the PlatformSecurityPatch, and a lot of product config files - // just set it to the platform security patch, so detect that and don't set the property - // in soong. - var rollbackIndex *int64 - if props.RollbackIndex != ctx.Config().PlatformSecurityPatch() { - i, err := strconv.ParseInt(props.RollbackIndex, 10, 32) - if err != nil { - ctx.ModuleErrorf("Rollback index must be an int, got %s", props.RollbackIndex) - continue - } - rollbackIndex = &i - } - - var partitionModules []string - for _, partition := range props.Partitions { - partitionTypesHandledByChainedPartitions = append(partitionTypesHandledByChainedPartitions, partition) - if !slices.Contains(generatedPartitionTypes, partition) { - // The partition is probably unsupported. - continue - } - partitionModules = append(partitionModules, generatedModuleNameForPartition(ctx.Config(), partition)) - } - - name := generatedModuleName(ctx.Config(), chainedName) - ctx.CreateModuleInDirectory( - filesystem.VbmetaFactory, - ".", // Create in the root directory for now so its easy to get the key - &filesystem.VbmetaProperties{ - Partition_name: proptools.StringPtr(chainedName), - Stem: proptools.StringPtr(chainedName + ".img"), - Private_key: proptools.StringPtr(props.Key), - Algorithm: &props.Algorithm, - Rollback_index: rollbackIndex, - Rollback_index_location: &ril, - Partitions: proptools.NewSimpleConfigurable(partitionModules), - }, &struct { - Name *string - }{ - Name: &name, - }, - ).HideFromMake() - - chainedPartitions = append(chainedPartitions, filesystem.ChainedPartitionProperties{ - Name: &chainedName, - Rollback_index_location: &ril, - Private_key: &props.Key, - }) - - result = append(result, vbmetaModuleInfo{ - moduleName: name, - partitionName: chainedName, - }) - } - - vbmetaModuleName := generatedModuleName(ctx.Config(), "vbmeta") - - var algorithm *string - if len(partitionVars.BoardAvbAlgorithm) > 0 { - algorithm = proptools.StringPtr(partitionVars.BoardAvbAlgorithm) - } - ril, err := strconv.ParseInt(partitionVars.BoardAvbRollbackIndex, 10, 32) - if err != nil { - ctx.ModuleErrorf("Rollback index location must be an int, got %s", partitionVars.BoardAvbRollbackIndex) - } - - var partitionModules []string - for _, partitionType := range generatedPartitionTypes { - if slices.Contains(partitionTypesHandledByChainedPartitions, partitionType) { - // Already handled by a chained vbmeta partition - continue - } - partitionModules = append(partitionModules, generatedModuleNameForPartition(ctx.Config(), partitionType)) - } - - ctx.CreateModuleInDirectory( - filesystem.VbmetaFactory, - ".", // Create in the root directory for now so its easy to get the key - &filesystem.VbmetaProperties{ - Stem: proptools.StringPtr("vbmeta.img"), - Algorithm: algorithm, - Private_key: proptools.StringPtr(partitionVars.BoardAvbKeyPath), - Rollback_index_location: &ril, - Chained_partitions: chainedPartitions, - Partitions: proptools.NewSimpleConfigurable(partitionModules), - }, &struct { - Name *string - }{ - Name: &vbmetaModuleName, - }, - ).HideFromMake() - - result = append(result, vbmetaModuleInfo{ - moduleName: vbmetaModuleName, - partitionName: "vbmeta", - }) - return result -} |