aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-03-05 12:07:51 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-03-05 12:10:27 +0100
commitbd5df8f49be704519466f7165c3e8fef85b3f566 (patch)
treea31d6d330d62987ca8e67a1fcfb88656f4201db3 /sys
parentf027f1a3f7c45bafd7f99776548ef73ba3cc22ec (diff)
prog: handle excessive args and fields during program parsing
Tolerate excessive args and fields during program parsing. This is useful after description changes to not lose corpus.
Diffstat (limited to 'sys')
-rw-r--r--sys/test/32.go12
-rw-r--r--sys/test/64.go12
-rw-r--r--sys/test/test.txt8
3 files changed, 30 insertions, 2 deletions
diff --git a/sys/test/32.go b/sys/test/32.go
index 50611b0dd..1816cb45e 100644
--- a/sys/test/32.go
+++ b/sys/test/32.go
@@ -50,6 +50,9 @@ var structDescs_32 = []*KeyedStruct{
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "i8", TypeSize: 1}}},
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "i32", TypeSize: 4}}},
}}},
+ {Key: StructKey{Name: "excessive_fields"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "excessive_fields", TypeSize: 1}, Fields: []Type{
+ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "f1", TypeSize: 1}}},
+ }}},
{Key: StructKey{Name: "explicitly_sized"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "explicitly_sized", TypeSize: 42}, Fields: []Type{
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "f1", TypeSize: 1}}},
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 41}}, IsPad: true},
@@ -606,6 +609,13 @@ var syscalls_32 = []*Syscall{
{Name: "syz_test$end1", CallName: "syz_test", Args: []Type{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "syz_end_var_struct"}}},
}},
+ {Name: "syz_test$excessive_args1", CallName: "syz_test"},
+ {Name: "syz_test$excessive_args2", CallName: "syz_test", Args: []Type{
+ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "a1", TypeSize: 1}}},
+ }},
+ {Name: "syz_test$excessive_fields1", CallName: "syz_test", Args: []Type{
+ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a1", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "excessive_fields"}}},
+ }},
{Name: "syz_test$hint_data", CallName: "syz_test", Args: []Type{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
}},
@@ -807,4 +817,4 @@ var consts_32 = []ConstValue{
{Name: "ONLY_32BITS_CONST", Value: 1},
}
-const revision_32 = "154a7d4ae122c9736177396c2a2e6c0b506b77d2"
+const revision_32 = "2ab86a8beeba1b75df587c05981b40d6b8761273"
diff --git a/sys/test/64.go b/sys/test/64.go
index 3c4cf8281..7ae8541a2 100644
--- a/sys/test/64.go
+++ b/sys/test/64.go
@@ -50,6 +50,9 @@ var structDescs_64 = []*KeyedStruct{
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "i8", TypeSize: 1}}},
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "i32", TypeSize: 4}}},
}}},
+ {Key: StructKey{Name: "excessive_fields"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "excessive_fields", TypeSize: 1}, Fields: []Type{
+ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "f1", TypeSize: 1}}},
+ }}},
{Key: StructKey{Name: "explicitly_sized"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "explicitly_sized", TypeSize: 42}, Fields: []Type{
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "f1", TypeSize: 1}}},
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 41}}, IsPad: true},
@@ -605,6 +608,13 @@ var syscalls_64 = []*Syscall{
{Name: "syz_test$end1", CallName: "syz_test", Args: []Type{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "syz_end_var_struct"}}},
}},
+ {Name: "syz_test$excessive_args1", CallName: "syz_test"},
+ {Name: "syz_test$excessive_args2", CallName: "syz_test", Args: []Type{
+ &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "a1", TypeSize: 1}}},
+ }},
+ {Name: "syz_test$excessive_fields1", CallName: "syz_test", Args: []Type{
+ &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a1", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "excessive_fields"}}},
+ }},
{Name: "syz_test$hint_data", CallName: "syz_test", Args: []Type{
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "a0", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
}},
@@ -805,4 +815,4 @@ var consts_64 = []ConstValue{
{Name: "IPPROTO_UDP", Value: 17},
}
-const revision_64 = "07f96db2fe414280f7b2c908e79f44d3d134b8f8"
+const revision_64 = "23d45e5a436efcf4d413c5828f0337e9125d2e0e"
diff --git a/sys/test/test.txt b/sys/test/test.txt
index 9c074d217..ae0c5cd20 100644
--- a/sys/test/test.txt
+++ b/sys/test/test.txt
@@ -471,6 +471,14 @@ syz_regression1_struct {
syz_test$regression2(a1 ptr[in, array[int32, 4]])
+excessive_fields {
+ f1 int8
+}
+
+syz_test$excessive_args1()
+syz_test$excessive_args2(a1 int8)
+syz_test$excessive_fields1(a1 ptr[in, excessive_fields])
+
# Bitfields
syz_bf_flags = 0, 1, 2