diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2016-11-29 16:51:56 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-11-29 16:51:56 +0100 |
| commit | 72e9b239f4d6b71e43acee4ca76de04e893400e8 (patch) | |
| tree | 738f4d5b78ecf30aa6bb4b9f800c76029eb9bdac | |
| parent | 4278c63e64234425ea1655e3207d85b627fc17f2 (diff) | |
| parent | 2429a7b0340cfbc809470c0c124be7c471ac3eb1 (diff) | |
Merge pull request #97 from xairy/inaddr-template
Move inaddr and sockaddr descriptions to templates
| -rw-r--r-- | prog/mutation.go | 2 | ||||
| -rw-r--r-- | prog/prio.go | 4 | ||||
| -rw-r--r-- | prog/rand.go | 84 | ||||
| -rw-r--r-- | sys/decl.go | 2 | ||||
| -rw-r--r-- | sys/socket.txt | 16 | ||||
| -rw-r--r-- | sys/sys.txt | 46 | ||||
| -rw-r--r-- | sysgen/sysgen.go | 10 |
7 files changed, 45 insertions, 119 deletions
diff --git a/prog/mutation.go b/prog/mutation.go index b03fccb5f..7b5330b87 100644 --- a/prog/mutation.go +++ b/prog/mutation.go @@ -102,8 +102,6 @@ func (p *Prog) Mutate(rs rand.Source, ncalls int, ct *ChoiceTable, corpus []*Pro } case sys.BufferFilename: arg.Data = []byte(r.filename(s)) - case sys.BufferSockaddr: - arg.Data = r.sockaddr(s) default: panic("unknown buffer kind") } diff --git a/prog/prio.go b/prog/prio.go index f503257ad..c20aa8f52 100644 --- a/prog/prio.go +++ b/prog/prio.go @@ -85,8 +85,6 @@ func calcStaticPriorities() [][]float32 { if a.SubKind != "" { noteUsage(0.2, fmt.Sprintf("str-%v", a.SubKind)) } - case sys.BufferSockaddr: - noteUsage(1.0, "sockaddr") case sys.BufferFilename: noteUsage(1.0, "filename") default: @@ -99,8 +97,6 @@ func calcStaticPriorities() [][]float32 { case sys.IntPlain, sys.IntFileoff, sys.IntRange: case sys.IntSignalno: noteUsage(1.0, "signalno") - case sys.IntInaddr: - noteUsage(1.0, "inaddr") default: panic("unknown int kind") } diff --git a/prog/rand.go b/prog/rand.go index 3d25711e5..adbaa618a 100644 --- a/prog/rand.go +++ b/prog/rand.go @@ -5,7 +5,6 @@ package prog import ( "bytes" - "encoding/binary" "fmt" "math" "math/rand" @@ -193,71 +192,6 @@ func (r *randGen) inport(s *state) uint16 { return uint16(r.Intn(20))<<8 + 0xab } -func (r *randGen) in6addr(s *state, typ sys.Type) (arg *Arg, calls []*Call) { - // addr: loopback (big endian) - return groupArg(typ, []*Arg{ - constArg(nil, 0), - constArg(nil, 0), - constArg(nil, 0), - constArg(nil, 1<<24), - }), nil -} - -func (r *randGen) inaddrany(s *state, typ sys.Type) (arg *Arg, calls []*Call) { - if r.bin() { - return r.in6addr(s, typ) - } else { - return groupArg(typ, []*Arg{ - constArg(nil, uintptr(r.inaddr(s))), - constArg(nil, 0), - constArg(nil, 0), - constArg(nil, 0), - }), nil - } -} - -func (r *randGen) sockaddr(s *state) []byte { - fa := sockFamilies[r.Intn(len(sockFamilies))] - buf := new(bytes.Buffer) - binary.Write(buf, binary.LittleEndian, fa) // this is actually host byte order - switch fa { - case sys.AF_UNIX: - buf.WriteString(r.filename(s)) - case sys.AF_INET: - binary.Write(buf, binary.LittleEndian, r.inport(s)) - binary.Write(buf, binary.LittleEndian, r.inaddr(s)) - case sys.AF_INET6: - binary.Write(buf, binary.LittleEndian, r.inport(s)) - binary.Write(buf, binary.BigEndian, uint32(r.Int63())) // flow info - binary.Write(buf, binary.BigEndian, uint64(0)) // addr: loopback - binary.Write(buf, binary.BigEndian, uint64(1)) // addr: loopback - binary.Write(buf, binary.BigEndian, uint32(r.Int63())) // scope id - case sys.AF_IPX: - case sys.AF_NETLINK: - case sys.AF_X25: - case sys.AF_AX25: - case sys.AF_ATMPVC: - case sys.AF_APPLETALK: - case sys.AF_PACKET: - binary.Write(buf, binary.BigEndian, uint16(0)) // Physical-layer protocol - binary.Write(buf, binary.BigEndian, uint32(0)) // Interface number - binary.Write(buf, binary.BigEndian, uint16(0)) // ARP hardware type - binary.Write(buf, binary.BigEndian, uint8(0)) // Packet type - binary.Write(buf, binary.BigEndian, uint8(0)) // Length of address - binary.Write(buf, binary.BigEndian, uint64(0)) // Physical-layer address - default: - panic("unknown socket domain") - } - if r.oneOf(2) { - buf.Write(make([]byte, 128-len(buf.Bytes()))) - } - data := buf.Bytes() - if r.oneOf(100) { - data = data[:r.Intn(len(data))] - } - return data -} - func (r *randGen) randString(s *state, vals []string, dir sys.Dir) []byte { data := r.randStringImpl(s, vals) if dir == sys.DirOut { @@ -315,14 +249,6 @@ func isSpecialStruct(typ sys.Type) func(r *randGen, s *state) (*Arg, []*Call) { return func(r *randGen, s *state) (*Arg, []*Call) { return r.timespec(s, a, true) } - case "in6_addr": - return func(r *randGen, s *state) (*Arg, []*Call) { - return r.in6addr(s, a) - } - case "in_addr_any": - return func(r *randGen, s *state) (*Arg, []*Call) { - return r.inaddrany(s, a) - } } return nil } @@ -694,14 +620,6 @@ func (r *randGen) generateArg(s *state, typ sys.Type) (arg *Arg, calls []*Call) case sys.BufferFilename: filename := r.filename(s) return dataArg(a, []byte(filename)), nil - case sys.BufferSockaddr: - data := r.sockaddr(s) - if a.Dir() == sys.DirOut { - for i := range data { - data[i] = 0 - } - } - return dataArg(a, data), nil default: panic("unknown buffer kind") } @@ -718,8 +636,6 @@ func (r *randGen) generateArg(s *state, typ sys.Type) (arg *Arg, calls []*Call) switch a.Kind { case sys.IntSignalno: v %= 130 - case sys.IntInaddr: - v = uintptr(r.inaddr(s)) case sys.IntFileoff: r.choose( 90, func() { v = 0 }, diff --git a/sys/decl.go b/sys/decl.go index 0533c3770..bb82cfa18 100644 --- a/sys/decl.go +++ b/sys/decl.go @@ -104,7 +104,6 @@ const ( BufferBlobRange BufferString BufferFilename - BufferSockaddr ) type BufferType struct { @@ -206,7 +205,6 @@ type IntKind int const ( IntPlain IntKind = iota IntSignalno - IntInaddr IntFileoff // offset within a file IntRange ) diff --git a/sys/socket.txt b/sys/socket.txt index f33627855..7c17497f4 100644 --- a/sys/socket.txt +++ b/sys/socket.txt @@ -117,6 +117,22 @@ ip_mtu_discover = IP_PMTUDISC_DONT, IP_PMTUDISC_WANT, IP_PMTUDISC_DO, IP_PMTUDIS sockopt_opt_ipv6_int = IPV6_ADDRFORM, IPV6_MTU, IPV6_MULTICAST_HOPS, IPV6_MULTICAST_IF, IPV6_MULTICAST_LOOP, IPV6_RECVPKTINFO, IPV6_RECVERR, IPV6_ROUTER_ALERT, IPV6_UNICAST_HOPS, IPV6_V6ONLY, IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPTS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT, IPV6_CHECKSUM, IPV6_2292PKTINFO, IPV6_2292HOPOPTS, IPV6_2292DSTOPTS, IPV6_2292RTHDR, IPV6_2292HOPLIMIT sockopt_opt_ipv6_mreq = IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP, IPV6_JOIN_ANYCAST, IPV6_LEAVE_ANYCAST +sockaddr [ + un sockaddr_un + in sockaddr_in + in6 sockaddr_in6 + nl sockaddr_nl + ax25 sockaddr_ax25 + alg sockaddr_alg + nfc sockaddr_nfc + nfc_llcp sockaddr_nfc_llcp + hci sockaddr_hci + sco sockaddr_sco + l2 sockaddr_l2 + rc sockaddr_rc +# TODO: other kinds of sockaddrs +] [varlen] + sockaddr_in { family const[AF_INET, int16] port proc[int16be, 20000, 4] diff --git a/sys/sys.txt b/sys/sys.txt index 76920b37e..6e0edada6 100644 --- a/sys/sys.txt +++ b/sys/sys.txt @@ -962,7 +962,7 @@ xfrm_userpolicy_info { xfrm_user_tmpl { id xfrm_id fam int16 - saddr in_addr_any + saddr xfrm_in_addr reqid int32 mode int8 share int8 @@ -973,8 +973,8 @@ xfrm_user_tmpl { } xfrm_selector { - daddr in_addr_any - saddr in_addr_any + daddr xfrm_in_addr + saddr xfrm_in_addr dport proc[int16be, 20000, 4] dmask int16 sport proc[int16be, 20000, 4] @@ -1006,28 +1006,40 @@ xfrm_lifetime_cur { } xfrm_id { - daddr in_addr_any + daddr xfrm_in_addr spi int32 proto int8 } -# in_addr or in6_addr -# prog knows about this struct -in_addr_any { - a0 in_addr - a1 int32 - a2 int32 - a3 int32 +xfrm_in_addr [ + in in_addr + in6 in6_addr +] + +in_addr [ +# 0.0.0.0 + empty const[0x00000000, int32be] +# 127.0.0.1 + loopback const[0x7f000001, int32be] +# 255.255.255.255 + broadcast const[0xffffffff, int32be] +} + +in6_addr_empty { + a0 const[0, int64be] + a1 const[0, int64be] } -# prog knows about this struct -in6_addr { - a0 int32 - a1 int32 - a2 int32 - a3 int32 +in6_addr_loopback { + a0 const[0, int64be] + a1 const[1, int64be] } +in6_addr [ + empty in6_addr_empty + loopback in6_addr_loopback +] + ipv6_mreq { multi in6_addr ifindex int32 diff --git a/sysgen/sysgen.go b/sysgen/sysgen.go index 3e7c39949..b0b5f6f52 100644 --- a/sysgen/sysgen.go +++ b/sysgen/sysgen.go @@ -449,11 +449,6 @@ func generateArg( } } fmt.Fprintf(out, "&BufferType{%v, Kind: BufferString, SubKind: %q, Values: %#v}", common(), subkind, vals) - case "sockaddr": - if want := 0; len(a) != want { - failf("wrong number of arguments for %v arg %v, want %v, got %v", typ, name, want, len(a)) - } - fmt.Fprintf(out, "&BufferType{%v, Kind: BufferSockaddr}", common()) case "salg_type": if want := 0; len(a) != want { failf("wrong number of arguments for %v arg %v, want %v, got %v", typ, name, want, len(a)) @@ -588,11 +583,6 @@ func generateArg( failf("wrong number of arguments for %v arg %v, want %v, got %v", typ, name, want, len(a)) } fmt.Fprintf(out, "&IntType{%v, TypeSize: 4, Kind: IntSignalno}", common()) - case "in_addr": - if want := 0; len(a) != want { - failf("wrong number of arguments for %v arg %v, want %v, got %v", typ, name, want, len(a)) - } - fmt.Fprintf(out, "&IntType{%v, TypeSize: 4, Kind: IntInaddr}", common()) case "filename": canBeArg = true if want := 0; len(a) != want { |
