aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/compiler/gen.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2022-01-04 15:29:10 +0100
committerDmitry Vyukov <dvyukov@google.com>2022-01-11 16:30:08 +0100
commitbad18a53de8fa8d3d097e3d701efb72a014661cb (patch)
tree2ff6cc1aa917897c643d2e4bc5e6ce2098d55a6d /pkg/compiler/gen.go
parenta19c1bce2eee5a1893b4ae9c8292b0f1b2630225 (diff)
pkg/compiler: require stricter resource constructors
Don't consider syscalls that return resources in unions/arrays as constructors. Unions and arrays are problematic because we don't have directed generation in prog.randGen.createResource() and can fail to generate a syscall that returns a particular resource (generate a wrong union option that does not contain the necessary resource). This leads to the following panics: panic: failed to create a resource ifindex with ioctl$sock_SIOCGIFCONF Require each resource to have a constructor syscall that returns the resource outside of unions/arrays.
Diffstat (limited to 'pkg/compiler/gen.go')
-rw-r--r--pkg/compiler/gen.go3
1 files changed, 2 insertions, 1 deletions
diff --git a/pkg/compiler/gen.go b/pkg/compiler/gen.go
index 89571c966..3d5517ae8 100644
--- a/pkg/compiler/gen.go
+++ b/pkg/compiler/gen.go
@@ -379,7 +379,8 @@ func (comp *compiler) layoutStructFields(t *prog.StructType, varlen, packed bool
t.Fields = comp.finalizeStructFields(t, newFields, varlen, structAlign, byteOffset, bitOffset)
}
-func (comp *compiler) finalizeStructFields(t *prog.StructType, fields []prog.Field, varlen bool, structAlign, byteOffset, bitOffset uint64) []prog.Field {
+func (comp *compiler) finalizeStructFields(t *prog.StructType, fields []prog.Field, varlen bool,
+ structAlign, byteOffset, bitOffset uint64) []prog.Field {
if bitOffset != 0 {
pad := roundup(bitOffset, 8) / 8
byteOffset += pad