in mfg/verify.go [32:77]
func (m *Mfg) validateManFlashMap(man manifest.MfgManifest) error {
idAreaMap := map[int]flash.FlashArea{}
for _, area := range man.FlashAreas {
if _, dup := idAreaMap[area.Id]; dup {
return errors.Errorf(
"mfg manifest contains duplicate flash area: %d", area.Id)
}
idAreaMap[area.Id] = area
}
seen := map[int]struct{}{}
mmrHasFlash := man.Meta != nil && man.Meta.FlashMap
for _, t := range m.Tlvs() {
if t.Header.Type == META_TLV_TYPE_FLASH_AREA {
if !mmrHasFlash {
return errors.Errorf(
"mmr contains flash map; manifest indicates otherwise")
}
body, err := t.StructuredBody()
if err != nil {
return err
}
flashBody := body.(*MetaTlvBodyFlashArea)
if _, ok := idAreaMap[int(flashBody.Area)]; !ok {
return errors.Errorf(
"flash area %d missing from mfg manifest", flashBody.Area)
}
seen[int(flashBody.Area)] = struct{}{}
}
}
if mmrHasFlash {
for _, area := range man.FlashAreas {
if _, ok := seen[area.Id]; !ok {
return errors.Errorf("flash area %d missing from mmr", area.Id)
}
}
}
return nil
}