diff options
| author | Shankara Pailoor <shankarapailoor@gmail.com> | 2019-01-10 06:31:57 -0800 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-01-10 17:24:09 +0100 |
| commit | 80dde1721ecdfcb34aeb0cf7b8ded466d8664ed8 (patch) | |
| tree | c46ab3fc67b4eb336ac8165f52455b0c7f7255dd /tools | |
| parent | da53282acc8fcdec3666ce8e9f4cea5e4be9502e (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.go | 22 | ||||
| -rw-r--r-- | tools/syz-trace2syz/proggen/proggen_test.go | 6 |
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",` + |
