diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-01-23 11:38:53 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-01-23 11:38:53 +0100 |
| commit | 3d76cc40d99e9f984db1ecc9310a8ea2004ec901 (patch) | |
| tree | f80644ea1b67d6a9d9c5475c7d3737082c866102 | |
| parent | 14d1e424b6a582d021c73c88e1f0c5f0962ecc9d (diff) | |
pkg/compiler: fix len of parent template struct
Consider the following example:
type len_templ1[DATA1, DATA2] {
data DATA1
inner len_temp2[DATA2]
}
type len_temp2[DATA] {
data DATA
len len[len_templ1, int8]
}
Here len refers to a parent struct, but the struct is a template,
so it's actual name is something like "len_templ1[int8, int16]".
Currently this does not work as compiler barks at incorrect
len target.
Make this work.
| -rw-r--r-- | executor/syscalls_test.h | 10 | ||||
| -rw-r--r-- | pkg/compiler/check.go | 15 | ||||
| -rw-r--r-- | pkg/compiler/testdata/all.txt | 14 | ||||
| -rw-r--r-- | prog/size_test.go | 4 | ||||
| -rw-r--r-- | sys/test/32.go | 73 | ||||
| -rw-r--r-- | sys/test/64.go | 73 | ||||
| -rw-r--r-- | sys/test/test.txt | 12 |
7 files changed, 134 insertions, 67 deletions
diff --git a/executor/syscalls_test.h b/executor/syscalls_test.h index ef41f93e5..9dd549579 100644 --- a/executor/syscalls_test.h +++ b/executor/syscalls_test.h @@ -2,8 +2,8 @@ #if 0 #define GOARCH "32" -#define SYZ_REVISION "fc60324436788273405b8a20470b8bd1db88f8ef" -unsigned syscall_count = 81; +#define SYZ_REVISION "b9cbeaf95275aebd2bf6f299b1071f67344453a5" +unsigned syscall_count = 82; call_t syscalls[] = { {"mmap", 0, (syscall_t)mmap}, {"mutate0", 0, (syscall_t)mutate0}, @@ -57,6 +57,7 @@ call_t syscalls[] = { {"syz_test$length20", 0, (syscall_t)syz_test}, {"syz_test$length21", 0, (syscall_t)syz_test}, {"syz_test$length22", 0, (syscall_t)syz_test}, + {"syz_test$length23", 0, (syscall_t)syz_test}, {"syz_test$length3", 0, (syscall_t)syz_test}, {"syz_test$length4", 0, (syscall_t)syz_test}, {"syz_test$length5", 0, (syscall_t)syz_test}, @@ -92,8 +93,8 @@ call_t syscalls[] = { #if 0 #define GOARCH "64" -#define SYZ_REVISION "7fe3e225b3424934ecc51f978cbb1e9eca5c0649" -unsigned syscall_count = 81; +#define SYZ_REVISION "ed5cfa6417cbae5ddc998f597dcdbb96fea761c3" +unsigned syscall_count = 82; call_t syscalls[] = { {"mmap", 0, (syscall_t)mmap}, {"mutate0", 0, (syscall_t)mutate0}, @@ -147,6 +148,7 @@ call_t syscalls[] = { {"syz_test$length20", 0, (syscall_t)syz_test}, {"syz_test$length21", 0, (syscall_t)syz_test}, {"syz_test$length22", 0, (syscall_t)syz_test}, + {"syz_test$length23", 0, (syscall_t)syz_test}, {"syz_test$length3", 0, (syscall_t)syz_test}, {"syz_test$length4", 0, (syscall_t)syz_test}, {"syz_test$length5", 0, (syscall_t)syz_test}, diff --git a/pkg/compiler/check.go b/pkg/compiler/check.go index eb2a13e19..1954fded5 100644 --- a/pkg/compiler/check.go +++ b/pkg/compiler/check.go @@ -7,6 +7,7 @@ package compiler import ( "fmt" + "strings" "github.com/google/syzkaller/pkg/ast" "github.com/google/syzkaller/prog" @@ -268,14 +269,15 @@ func (comp *compiler) checkLenType(t *ast.Type, name string, fields []*ast.Field for i, arg := range args { argDesc := desc.Args[i] if argDesc.Type == typeArgLenTarget { - comp.checkLenTarget(t, name, arg.Ident, fields, parents) + comp.checkLenTarget(t, name, &arg.Ident, fields, parents) } else if argDesc.Type == typeArgType { comp.checkLenType(arg, name, fields, parents, checked, false) } } } -func (comp *compiler) checkLenTarget(t *ast.Type, name, target string, fields []*ast.Field, parents []*ast.Struct) { +func (comp *compiler) checkLenTarget(t *ast.Type, name string, targetp *string, fields []*ast.Field, parents []*ast.Struct) { + target := *targetp if target == name { comp.error(t.Pos, "%v target %v refer to itself", t.Ident, target) return @@ -311,7 +313,14 @@ func (comp *compiler) checkLenTarget(t *ast.Type, name, target string, fields [] return } for _, parent := range parents { - if target == parent.Name.Name { + parentName := parent.Name.Name + if pos := strings.IndexByte(parentName, '['); pos != -1 { + // For template parents name is "struct_name[ARG1, ARG2]", + // strip the part after '[' and update actual len target. + parentName = parentName[:pos] + } + if target == parentName { + *targetp = parent.Name.Name return } } diff --git a/pkg/compiler/testdata/all.txt b/pkg/compiler/testdata/all.txt index 88e45dba4..8bd81c7d4 100644 --- a/pkg/compiler/testdata/all.txt +++ b/pkg/compiler/testdata/all.txt @@ -29,6 +29,20 @@ proc_struct1 { f1 proc[C0, 8, int8] } +# Len/bytesize types. + +type len_templ1[DATA1, DATA2] { + data DATA1 + inner len_temp2[DATA2] +} + +type len_temp2[DATA] { + data DATA + len len[len_templ1, int8] +} + +foo$len_templ(a ptr[in, len_templ1[int8, int16]]) + # Void type. void0 { diff --git a/prog/size_test.go b/prog/size_test.go index 9c76d05f6..8f472491d 100644 --- a/prog/size_test.go +++ b/prog/size_test.go @@ -126,6 +126,10 @@ func TestAssignSize(t *testing.T) { "syz_test$length22(&(0x7f0000000000)='12345', 0x0)", "syz_test$length22(&(0x7f0000000000)='12345', 0x28)", }, + { + "syz_test$length23(&(0x7f0000000000)={0x1, {0x2, 0x0}})", + "syz_test$length23(&(0x7f0000000000)={0x1, {0x2, 0x6}})", + }, } for i, test := range tests { diff --git a/sys/test/32.go b/sys/test/32.go index 33704c79f..81e2bd184 100644 --- a/sys/test/32.go +++ b/sys/test/32.go @@ -14,6 +14,16 @@ var resources_32 = []*ResourceDesc{ } var structDescs_32 = []*KeyedStruct{ + {Key: StructKey{Name: "len_temp2[int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "len_temp2[int16]", TypeSize: 3}, Fields: []Type{ + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 1}}, Buf: "len_templ1[int8, int16]"}, + }}}, + {Key: StructKey{Name: "len_templ1[int8, int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "len_templ1[int8, int16]", TypeSize: 6}, Fields: []Type{ + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 1}}, IsPad: true}, + &StructType{Key: StructKey{Name: "len_temp2[int16]"}, FldName: "inner"}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 1}}, IsPad: true}, + }}}, {Key: StructKey{Name: "serialize0_struct"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "serialize0_struct", TypeSize: 15}, Fields: []Type{ &BufferType{TypeCommon: TypeCommon{TypeName: "string", FldName: "a", TypeSize: 10}, Kind: 2, SubKind: "serialize_strings", Values: []string{"aaa\x00\x00\x00\x00\x00\x00\x00", "bbb\x00\x00\x00\x00\x00\x00\x00"}}, &BufferType{TypeCommon: TypeCommon{TypeName: "string", FldName: "b", TypeSize: 5}, Kind: 2, SubKind: "serialize_strings", Values: []string{"aaa\x00\x00", "bbb\x00\x00"}}, @@ -551,91 +561,94 @@ var syscalls_32 = []*Syscall{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bitsize", FldName: "a1", TypeSize: 4}}, BitSize: 1, Buf: "a0"}, }}, - {ID: 52, Name: "syz_test$length3", CallName: "syz_test", Args: []Type{ + {ID: 52, Name: "syz_test$length23", CallName: "syz_test", Args: []Type{ + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "len_templ1[int8, int16]"}}}, + }}, + {ID: 53, Name: "syz_test$length3", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_len_struct"}}}, }}, - {ID: 53, Name: "syz_test$length4", CallName: "syz_test", Args: []Type{ + {ID: 54, Name: "syz_test$length4", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_len2_struct"}}}, }}, - {ID: 54, Name: "syz_test$length5", CallName: "syz_test", Args: []Type{ + {ID: 55, Name: "syz_test$length5", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_parent_struct"}}}, }}, - {ID: 55, Name: "syz_test$length6", CallName: "syz_test", Args: []Type{ + {ID: 56, Name: "syz_test$length6", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_array_struct"}}}, }}, - {ID: 56, Name: "syz_test$length7", CallName: "syz_test", Args: []Type{ + {ID: 57, Name: "syz_test$length7", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_array2_struct"}}}, }}, - {ID: 57, Name: "syz_test$length8", CallName: "syz_test", Args: []Type{ + {ID: 58, Name: "syz_test$length8", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_complex_struct"}}}, }}, - {ID: 58, Name: "syz_test$length9", CallName: "syz_test", Args: []Type{ + {ID: 59, Name: "syz_test$length9", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_length_vma_struct"}}}, }}, - {ID: 59, Name: "syz_test$missing_resource", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_missing_const_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, - {ID: 60, Name: "syz_test$opt0", CallName: "syz_test", Args: []Type{ + {ID: 60, Name: "syz_test$missing_resource", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_missing_const_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 61, Name: "syz_test$opt0", CallName: "syz_test", Args: []Type{ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "a0", TypeSize: 4, IsOptional: true}}}, }}, - {ID: 61, Name: "syz_test$opt1", CallName: "syz_test", Args: []Type{ + {ID: 62, Name: "syz_test$opt1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4, IsOptional: true}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", TypeSize: 4}}}}, }}, - {ID: 62, Name: "syz_test$opt2", CallName: "syz_test", Args: []Type{ + {ID: 63, Name: "syz_test$opt2", CallName: "syz_test", Args: []Type{ &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "a0", TypeSize: 4, IsOptional: true}}, }}, - {ID: 63, Name: "syz_test$opt3", CallName: "syz_test", Args: []Type{ + {ID: 64, Name: "syz_test$opt3", CallName: "syz_test", Args: []Type{ &ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "a0", TypeSize: 4, IsOptional: true}}, ValuesStart: 100, ValuesPerProc: 4}, }}, - {ID: 64, Name: "syz_test$recur0", CallName: "syz_test", Args: []Type{ + {ID: 65, Name: "syz_test$recur0", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_recur_0", Dir: 2}}}, }}, - {ID: 65, Name: "syz_test$recur1", CallName: "syz_test", Args: []Type{ + {ID: 66, Name: "syz_test$recur1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_recur_1", Dir: 2}}}, }}, - {ID: 66, Name: "syz_test$recur2", CallName: "syz_test", Args: []Type{ + {ID: 67, Name: "syz_test$recur2", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_recur_2", Dir: 2}}}, }}, - {ID: 67, Name: "syz_test$regression0", CallName: "syz_test", Args: []Type{ + {ID: 68, Name: "syz_test$regression0", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_regression0_struct", Dir: 2}}}, }}, - {ID: 68, Name: "syz_test$regression1", CallName: "syz_test", Args: []Type{ + {ID: 69, Name: "syz_test$regression1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a1", TypeSize: 4}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "syz_regression1_struct"}}}}, }}, - {ID: 69, Name: "syz_test$regression2", CallName: "syz_test", Args: []Type{ + {ID: 70, Name: "syz_test$regression2", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a1", TypeSize: 4}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 16}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: 1, RangeBegin: 4, RangeEnd: 4}}, }}, - {ID: 70, Name: "syz_test$res0", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, - {ID: 71, Name: "syz_test$res1", CallName: "syz_test", Args: []Type{ + {ID: 71, Name: "syz_test$res0", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 72, Name: "syz_test$res1", CallName: "syz_test", Args: []Type{ &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_res", FldName: "a0", TypeSize: 4}}, }}, - {ID: 72, Name: "syz_test$struct", CallName: "syz_test", Args: []Type{ + {ID: 73, Name: "syz_test$struct", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_struct0"}}}, }}, - {ID: 73, Name: "syz_test$text_x86_16", CallName: "syz_test", Args: []Type{ + {ID: 74, Name: "syz_test$text_x86_16", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4, Text: 1}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 4}}, Buf: "a0"}, }}, - {ID: 74, Name: "syz_test$text_x86_32", CallName: "syz_test", Args: []Type{ + {ID: 75, Name: "syz_test$text_x86_32", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4, Text: 2}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 4}}, Buf: "a0"}, }}, - {ID: 75, Name: "syz_test$text_x86_64", CallName: "syz_test", Args: []Type{ + {ID: 76, Name: "syz_test$text_x86_64", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4, Text: 3}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 4}}, Buf: "a0"}, }}, - {ID: 76, Name: "syz_test$text_x86_real", CallName: "syz_test", Args: []Type{ + {ID: 77, Name: "syz_test$text_x86_real", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 4}}, Buf: "a0"}, }}, - {ID: 77, Name: "syz_test$union0", CallName: "syz_test", Args: []Type{ + {ID: 78, Name: "syz_test$union0", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_union0_struct"}}}, }}, - {ID: 78, Name: "syz_test$union1", CallName: "syz_test", Args: []Type{ + {ID: 79, Name: "syz_test$union1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_union1_struct"}}}, }}, - {ID: 79, Name: "syz_test$union2", CallName: "syz_test", Args: []Type{ + {ID: 80, Name: "syz_test$union2", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_union2_struct"}}}, }}, - {ID: 80, Name: "syz_test$vma0", CallName: "syz_test", Args: []Type{ + {ID: 81, Name: "syz_test$vma0", CallName: "syz_test", Args: []Type{ &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "v0", TypeSize: 4}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "l0", TypeSize: 4}}, Buf: "v0"}, &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "v1", TypeSize: 4}, RangeBegin: 5, RangeEnd: 5}, @@ -652,4 +665,4 @@ var consts_32 = []ConstValue{ {Name: "ONLY_32BITS_CONST", Value: 1}, } -const revision_32 = "fc60324436788273405b8a20470b8bd1db88f8ef" +const revision_32 = "b9cbeaf95275aebd2bf6f299b1071f67344453a5" diff --git a/sys/test/64.go b/sys/test/64.go index 04a2dcb14..5bb5f68e5 100644 --- a/sys/test/64.go +++ b/sys/test/64.go @@ -14,6 +14,16 @@ var resources_64 = []*ResourceDesc{ } var structDescs_64 = []*KeyedStruct{ + {Key: StructKey{Name: "len_temp2[int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "len_temp2[int16]", TypeSize: 3}, Fields: []Type{ + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 1}}, Buf: "len_templ1[int8, int16]"}, + }}}, + {Key: StructKey{Name: "len_templ1[int8, int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "len_templ1[int8, int16]", TypeSize: 6}, Fields: []Type{ + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 1}}, IsPad: true}, + &StructType{Key: StructKey{Name: "len_temp2[int16]"}, FldName: "inner"}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 1}}, IsPad: true}, + }}}, {Key: StructKey{Name: "serialize0_struct"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "serialize0_struct", TypeSize: 15}, Fields: []Type{ &BufferType{TypeCommon: TypeCommon{TypeName: "string", FldName: "a", TypeSize: 10}, Kind: 2, SubKind: "serialize_strings", Values: []string{"aaa\x00\x00\x00\x00\x00\x00\x00", "bbb\x00\x00\x00\x00\x00\x00\x00"}}, &BufferType{TypeCommon: TypeCommon{TypeName: "string", FldName: "b", TypeSize: 5}, Kind: 2, SubKind: "serialize_strings", Values: []string{"aaa\x00\x00", "bbb\x00\x00"}}, @@ -550,91 +560,94 @@ var syscalls_64 = []*Syscall{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bitsize", FldName: "a1", TypeSize: 8}}, BitSize: 1, Buf: "a0"}, }}, - {ID: 52, Name: "syz_test$length3", CallName: "syz_test", Args: []Type{ + {ID: 52, Name: "syz_test$length23", CallName: "syz_test", Args: []Type{ + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "len_templ1[int8, int16]"}}}, + }}, + {ID: 53, Name: "syz_test$length3", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_len_struct"}}}, }}, - {ID: 53, Name: "syz_test$length4", CallName: "syz_test", Args: []Type{ + {ID: 54, Name: "syz_test$length4", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_len2_struct"}}}, }}, - {ID: 54, Name: "syz_test$length5", CallName: "syz_test", Args: []Type{ + {ID: 55, Name: "syz_test$length5", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_parent_struct"}}}, }}, - {ID: 55, Name: "syz_test$length6", CallName: "syz_test", Args: []Type{ + {ID: 56, Name: "syz_test$length6", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_array_struct"}}}, }}, - {ID: 56, Name: "syz_test$length7", CallName: "syz_test", Args: []Type{ + {ID: 57, Name: "syz_test$length7", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_array2_struct"}}}, }}, - {ID: 57, Name: "syz_test$length8", CallName: "syz_test", Args: []Type{ + {ID: 58, Name: "syz_test$length8", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_complex_struct"}}}, }}, - {ID: 58, Name: "syz_test$length9", CallName: "syz_test", Args: []Type{ + {ID: 59, Name: "syz_test$length9", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_length_vma_struct"}}}, }}, - {ID: 59, Name: "syz_test$missing_resource", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_missing_const_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, - {ID: 60, Name: "syz_test$opt0", CallName: "syz_test", Args: []Type{ + {ID: 60, Name: "syz_test$missing_resource", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_missing_const_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 61, Name: "syz_test$opt0", CallName: "syz_test", Args: []Type{ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "a0", TypeSize: 8, IsOptional: true}}}, }}, - {ID: 61, Name: "syz_test$opt1", CallName: "syz_test", Args: []Type{ + {ID: 62, Name: "syz_test$opt1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8, IsOptional: true}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", TypeSize: 8}}}}, }}, - {ID: 62, Name: "syz_test$opt2", CallName: "syz_test", Args: []Type{ + {ID: 63, Name: "syz_test$opt2", CallName: "syz_test", Args: []Type{ &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "a0", TypeSize: 8, IsOptional: true}}, }}, - {ID: 63, Name: "syz_test$opt3", CallName: "syz_test", Args: []Type{ + {ID: 64, Name: "syz_test$opt3", CallName: "syz_test", Args: []Type{ &ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "a0", TypeSize: 8, IsOptional: true}}, ValuesStart: 100, ValuesPerProc: 4}, }}, - {ID: 64, Name: "syz_test$recur0", CallName: "syz_test", Args: []Type{ + {ID: 65, Name: "syz_test$recur0", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_recur_0", Dir: 2}}}, }}, - {ID: 65, Name: "syz_test$recur1", CallName: "syz_test", Args: []Type{ + {ID: 66, Name: "syz_test$recur1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_recur_1", Dir: 2}}}, }}, - {ID: 66, Name: "syz_test$recur2", CallName: "syz_test", Args: []Type{ + {ID: 67, Name: "syz_test$recur2", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_recur_2", Dir: 2}}}, }}, - {ID: 67, Name: "syz_test$regression0", CallName: "syz_test", Args: []Type{ + {ID: 68, Name: "syz_test$regression0", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_regression0_struct", Dir: 2}}}, }}, - {ID: 68, Name: "syz_test$regression1", CallName: "syz_test", Args: []Type{ + {ID: 69, Name: "syz_test$regression1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a1", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "syz_regression1_struct"}}}}, }}, - {ID: 69, Name: "syz_test$regression2", CallName: "syz_test", Args: []Type{ + {ID: 70, Name: "syz_test$regression2", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a1", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 16}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: 1, RangeBegin: 4, RangeEnd: 4}}, }}, - {ID: 70, Name: "syz_test$res0", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, - {ID: 71, Name: "syz_test$res1", CallName: "syz_test", Args: []Type{ + {ID: 71, Name: "syz_test$res0", CallName: "syz_test", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_res", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 72, Name: "syz_test$res1", CallName: "syz_test", Args: []Type{ &ResourceType{TypeCommon: TypeCommon{TypeName: "syz_res", FldName: "a0", TypeSize: 4}}, }}, - {ID: 72, Name: "syz_test$struct", CallName: "syz_test", Args: []Type{ + {ID: 73, Name: "syz_test$struct", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_struct0"}}}, }}, - {ID: 73, Name: "syz_test$text_x86_16", CallName: "syz_test", Args: []Type{ + {ID: 74, Name: "syz_test$text_x86_16", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4, Text: 1}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 8}}, Buf: "a0"}, }}, - {ID: 74, Name: "syz_test$text_x86_32", CallName: "syz_test", Args: []Type{ + {ID: 75, Name: "syz_test$text_x86_32", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4, Text: 2}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 8}}, Buf: "a0"}, }}, - {ID: 75, Name: "syz_test$text_x86_64", CallName: "syz_test", Args: []Type{ + {ID: 76, Name: "syz_test$text_x86_64", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4, Text: 3}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 8}}, Buf: "a0"}, }}, - {ID: 76, Name: "syz_test$text_x86_real", CallName: "syz_test", Args: []Type{ + {ID: 77, Name: "syz_test$text_x86_real", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "text", IsVarlen: true}, Kind: 4}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "a1", TypeSize: 8}}, Buf: "a0"}, }}, - {ID: 77, Name: "syz_test$union0", CallName: "syz_test", Args: []Type{ + {ID: 78, Name: "syz_test$union0", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_union0_struct"}}}, }}, - {ID: 78, Name: "syz_test$union1", CallName: "syz_test", Args: []Type{ + {ID: 79, Name: "syz_test$union1", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_union1_struct"}}}, }}, - {ID: 79, Name: "syz_test$union2", CallName: "syz_test", Args: []Type{ + {ID: 80, Name: "syz_test$union2", CallName: "syz_test", Args: []Type{ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_union2_struct"}}}, }}, - {ID: 80, Name: "syz_test$vma0", CallName: "syz_test", Args: []Type{ + {ID: 81, Name: "syz_test$vma0", CallName: "syz_test", Args: []Type{ &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "v0", TypeSize: 8}}, &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "l0", TypeSize: 8}}, Buf: "v0"}, &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "v1", TypeSize: 8}, RangeBegin: 5, RangeEnd: 5}, @@ -650,4 +663,4 @@ var consts_64 = []ConstValue{ {Name: "IPPROTO_UDP", Value: 17}, } -const revision_64 = "7fe3e225b3424934ecc51f978cbb1e9eca5c0649" +const revision_64 = "ed5cfa6417cbae5ddc998f597dcdbb96fea761c3" diff --git a/sys/test/test.txt b/sys/test/test.txt index f8a1e4fba..051c17ce6 100644 --- a/sys/test/test.txt +++ b/sys/test/test.txt @@ -338,6 +338,18 @@ syz_length_parent2_struct { f2 len[syz_length_parent2_struct, int8] } +type len_templ1[DATA1, DATA2] { + data DATA1 + inner len_temp2[DATA2] +} + +type len_temp2[DATA] { + data DATA + len len[len_templ1, int8] +} + +syz_test$length23(a ptr[in, len_templ1[int8, int16]]) + # Big endian syz_test$end0(a0 ptr[in, syz_end_int_struct]) |
