aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorShankara Pailoor <shankarapailoor@gmail.com>2019-01-10 06:31:57 -0800
committerDmitry Vyukov <dvyukov@google.com>2019-01-10 17:24:09 +0100
commit80dde1721ecdfcb34aeb0cf7b8ded466d8664ed8 (patch)
treec46ab3fc67b4eb336ac8165f52455b0c7f7255dd /tools
parentda53282acc8fcdec3666ce8e9f4cea5e4be9502e (diff)
tools/syz-trace2syz/proggen.go: delete reorderStructFields()
strace incorrectly printed sin6_addr before sin6_flowinfo. To fix this, trace2syz added reorderStructFields() which swapped back the order. Incorrect orderings of structs is a bug in strace or in our descriptions so we should fix the source rather than work around. We have submitted a patch to fix the sockaddr_in6 decoding in strace so we can safely delete this function.
Diffstat (limited to 'tools')
-rw-r--r--tools/syz-trace2syz/proggen/proggen.go22
-rw-r--r--tools/syz-trace2syz/proggen/proggen_test.go6
2 files changed, 4 insertions, 24 deletions
diff --git a/tools/syz-trace2syz/proggen/proggen.go b/tools/syz-trace2syz/proggen/proggen.go
index c094edec1..f1adf43c3 100644
--- a/tools/syz-trace2syz/proggen/proggen.go
+++ b/tools/syz-trace2syz/proggen/proggen.go
@@ -203,7 +203,6 @@ func (ctx *context) genStruct(syzType *prog.StructType, traceType parser.IrType)
switch a := traceType.(type) {
case *parser.GroupType:
j := 0
- ctx.reorderStructFields(syzType, a)
for i := range syzType.Fields {
if prog.IsPad(syzType.Fields[i]) {
args = append(args, syzType.Fields[i].DefaultArg())
@@ -421,27 +420,6 @@ func (ctx *context) addr(syzType prog.Type, size uint64, data prog.Arg) prog.Arg
return prog.MakePointerArg(syzType, ctx.builder.Allocate(size), data)
}
-func (ctx *context) reorderStructFields(syzType *prog.StructType, traceType *parser.GroupType) {
- // Sometimes strace reports struct fields out of order compared to our descriptions
- // Example: 5704 bind(3, {sa_family=AF_INET6,
- // sin6_port=htons(8888),
- // inet_pton(AF_INET6, "::", &sin6_addr),
- // sin6_flowinfo=htonl(2206138368),
- // sin6_scope_id=2049825634}, 128) = 0
- // The flow_info and pton fields are switched in our description
-
- switch syzType.TypeName {
- case "sockaddr_in6":
- log.Logf(5, "reordering in6. trace struct has %d elems", len(traceType.Elems))
- if len(traceType.Elems) < 4 {
- return
- }
- field2 := traceType.Elems[2]
- traceType.Elems[2] = traceType.Elems[3]
- traceType.Elems[3] = field2
- }
-}
-
func shouldSkip(c *parser.Syscall) bool {
switch c.CallName {
case "write":
diff --git a/tools/syz-trace2syz/proggen/proggen_test.go b/tools/syz-trace2syz/proggen/proggen_test.go
index e572ec564..d7f32e282 100644
--- a/tools/syz-trace2syz/proggen/proggen_test.go
+++ b/tools/syz-trace2syz/proggen/proggen_test.go
@@ -193,8 +193,9 @@ connect$inet(r0, &(0x7f0000000000)={0x2, 0x1f90}, 0x10)
`,
}, {`
connect(-1, {sa_family=0xa, sin6_port="\x30\x39",` +
+ `sin6_flowinfo="\x07\x5b\xcd\x7a",` +
`sin6_addr="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01",` +
- ` sin6_flowinfo="\x07\x5b\xcd\x7a", sin6_scope_id=4207869677}, 28) = -1
+ `sin6_scope_id=4207869677}, 28) = -1
`, `
connect(0xffffffffffffffff, &(0x7f0000000000)=` +
`@in6={0xa, 0x3039, 0x75bcd7a, @rand_addr="00000000000000000000000000000001",` +
@@ -202,8 +203,9 @@ connect(0xffffffffffffffff, &(0x7f0000000000)=` +
`,
}, {`
connect(-1, {sa_family=0xa, sin6_port="\x30\x39",` +
+ ` sin6_flowinfo="\x07\x5b\xcd\x7a",` +
` sin6_addr="\x00\x12\x00\x34\x00\x56\x00\x78\x00\x90\x00\xab\x00\xcd\x00\xef",` +
- ` sin6_flowinfo="\x07\x5b\xcd\x7a", sin6_scope_id=4207869677}, 28) = -1
+ ` sin6_scope_id=4207869677}, 28) = -1
`, `
connect(0xffffffffffffffff, &(0x7f0000000000)=` +
`@in6={0xa, 0x3039, 0x75bcd7a, @rand_addr="0012003400560078009000ab00cd00ef",` +