Disallow '_' in bpf source name
Current design: 1. The bpf compiled object name is derived from the source name (e.g. foo.c -> foo.o). 2. Full bpf program/map name are concatenated by object name + '_' + program/map name in run-time. (e.g. obj name: x.o; program name: y_z; full bpf program name will be x_y_z) Issue: x.o with map y_z and x_y.o with map z can cause naming collision in run-time, since both result in x_y_z. This commit prevents it from happening with a build-time check. Bug: 236706995 Test: m Change-Id: Ic03bfcf07a5748ed63246b71d5ae8de0405e658a
This commit is contained in:
@@ -17,6 +17,7 @@ package bpf
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"android/soong/android"
|
||||
@@ -154,6 +155,9 @@ func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
srcs := android.PathsForModuleSrc(ctx, bpf.properties.Srcs)
|
||||
|
||||
for _, src := range srcs {
|
||||
if strings.ContainsRune(filepath.Base(src.String()), '_') {
|
||||
ctx.ModuleErrorf("invalid character '_' in source name")
|
||||
}
|
||||
obj := android.ObjPathWithExt(ctx, "unstripped", src, "o")
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
|
@@ -30,8 +30,9 @@ var prepareForBpfTest = android.GroupFixturePreparers(
|
||||
cc.PrepareForTestWithCcDefaultModules,
|
||||
android.FixtureMergeMockFs(
|
||||
map[string][]byte{
|
||||
"bpf.c": nil,
|
||||
"BpfTest.cpp": nil,
|
||||
"bpf.c": nil,
|
||||
"bpf_invalid_name.c": nil,
|
||||
"BpfTest.cpp": nil,
|
||||
},
|
||||
),
|
||||
PrepareForTestWithBpf,
|
||||
@@ -58,3 +59,15 @@ func TestBpfDataDependency(t *testing.T) {
|
||||
// value is not available for testing from this package.
|
||||
// TODO(jungjw): Add a check for data or move this test to the cc package.
|
||||
}
|
||||
|
||||
func TestBpfSourceName(t *testing.T) {
|
||||
bp := `
|
||||
bpf {
|
||||
name: "bpf_invalid_name.o",
|
||||
srcs: ["bpf_invalid_name.c"],
|
||||
}
|
||||
`
|
||||
prepareForBpfTest.ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(
|
||||
`\QAndroid.bp:2:3: module "bpf_invalid_name.o" variant "android_common": invalid character '_' in source name\E`)).
|
||||
RunTestWithBp(t, bp)
|
||||
}
|
||||
|
Reference in New Issue
Block a user