mirror of
https://github.com/reactos/syzkaller.git
synced 2024-11-26 21:00:30 +00:00
sys/linux: improve AF_ALG alg name generation
There is effectively infinite number of possible crypto algorithm names due to templates. Plus there is tricky relation between algorithms and algorithm type names. This change adds custom mutator for sockaddr_alg struct to improve variance in generated algorithms.
This commit is contained in:
parent
d19770f1b9
commit
ddf7b3e065
@ -2,7 +2,7 @@
|
||||
|
||||
#if defined(__i386__) || 0
|
||||
#define GOARCH "386"
|
||||
#define SYZ_REVISION "bcbb2cfb0201255ca22ecc77ebc8e22d4880e9a5"
|
||||
#define SYZ_REVISION "a3916a0db735129455fbd809eed379b8568f7c35"
|
||||
#define __NR_syz_emit_ethernet 1000000
|
||||
#define __NR_syz_extract_tcp_res 1000001
|
||||
#define __NR_syz_fuse_mount 1000002
|
||||
@ -1506,7 +1506,7 @@ call_t syscalls[] = {
|
||||
|
||||
#if defined(__x86_64__) || 0
|
||||
#define GOARCH "amd64"
|
||||
#define SYZ_REVISION "7a950be35f2798eefd0ac374561c8e547930bab1"
|
||||
#define SYZ_REVISION "6db640031dfbd383d097fd924b9852fbd9e33616"
|
||||
#define __NR_syz_emit_ethernet 1000000
|
||||
#define __NR_syz_extract_tcp_res 1000001
|
||||
#define __NR_syz_fuse_mount 1000002
|
||||
@ -3071,7 +3071,7 @@ call_t syscalls[] = {
|
||||
|
||||
#if defined(__arm__) || 0
|
||||
#define GOARCH "arm"
|
||||
#define SYZ_REVISION "535d8ff089248a1f2cb7f41725f543f14767dd1e"
|
||||
#define SYZ_REVISION "266440e04c2aa2386a0083e579bfd6a68ad75c2f"
|
||||
#define __NR_syz_emit_ethernet 1000000
|
||||
#define __NR_syz_extract_tcp_res 1000001
|
||||
#define __NR_syz_fuse_mount 1000002
|
||||
@ -4585,7 +4585,7 @@ call_t syscalls[] = {
|
||||
|
||||
#if defined(__aarch64__) || 0
|
||||
#define GOARCH "arm64"
|
||||
#define SYZ_REVISION "043368a9e3f6b8146d46fa8d192bc033b66c707b"
|
||||
#define SYZ_REVISION "491bd0b7116800f63d75074b802c7c58820b119f"
|
||||
#define __NR_syz_emit_ethernet 1000000
|
||||
#define __NR_syz_extract_tcp_res 1000001
|
||||
#define __NR_syz_fuse_mount 1000002
|
||||
@ -6079,7 +6079,7 @@ call_t syscalls[] = {
|
||||
|
||||
#if defined(__ppc64__) || defined(__PPC64__) || defined(__powerpc64__) || 0
|
||||
#define GOARCH "ppc64le"
|
||||
#define SYZ_REVISION "c893d2cc4874589a0e71bd3f9dad5facd0f5f502"
|
||||
#define SYZ_REVISION "5491142031cb62ebd424be9ddfdc17427d1d64f4"
|
||||
#define __NR_syz_emit_ethernet 1000000
|
||||
#define __NR_syz_extract_tcp_res 1000001
|
||||
#define __NR_syz_fuse_mount 1000002
|
||||
|
@ -17,25 +17,9 @@ func init() {
|
||||
|
||||
var (
|
||||
CalcChecksumsCall = calcChecksumsCall
|
||||
//AssignSizesCall = assignSizesCall
|
||||
//DefaultArg = defaultArg
|
||||
InitTest = initTest
|
||||
InitTest = initTest
|
||||
)
|
||||
|
||||
/*
|
||||
func PtrSize() uint64 {
|
||||
return ptrSize
|
||||
}
|
||||
|
||||
func DataOffset() uint64 {
|
||||
return dataOffset
|
||||
}
|
||||
|
||||
func PageSize() uint64 {
|
||||
return pageSize
|
||||
}
|
||||
*/
|
||||
|
||||
func initTest(t *testing.T) (*Target, rand.Source, int) {
|
||||
t.Parallel()
|
||||
iters := 10000
|
||||
|
@ -343,8 +343,10 @@ func (p *Prog) replaceArg(c *Call, arg, arg1 Arg, calls []*Call) {
|
||||
*a = *arg1.(*PointerArg)
|
||||
case *UnionArg:
|
||||
*a = *arg1.(*UnionArg)
|
||||
case *DataArg:
|
||||
*a = *arg1.(*DataArg)
|
||||
default:
|
||||
panic(fmt.Sprintf("replaceArg: bad arg kind %v", arg))
|
||||
panic(fmt.Sprintf("replaceArg: bad arg kind %#v", arg))
|
||||
}
|
||||
p.Target.SanitizeCall(c)
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ package prog
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"sort"
|
||||
)
|
||||
|
||||
@ -152,6 +153,10 @@ type Gen struct {
|
||||
s *state
|
||||
}
|
||||
|
||||
func (g *Gen) Rand() *rand.Rand {
|
||||
return g.r.Rand
|
||||
}
|
||||
|
||||
func (g *Gen) NOutOf(n, outOf int) bool {
|
||||
return g.r.nOutOf(n, outOf)
|
||||
}
|
||||
@ -159,3 +164,9 @@ func (g *Gen) NOutOf(n, outOf int) bool {
|
||||
func (g *Gen) Alloc(ptrType Type, data Arg) (Arg, []*Call) {
|
||||
return g.r.addr(g.s, ptrType, data.Size(), data)
|
||||
}
|
||||
|
||||
func (g *Gen) GenerateArg(typ Type, pcalls *[]*Call) Arg {
|
||||
arg, calls := g.r.generateArg(g.s, typ)
|
||||
*pcalls = append(*pcalls, calls...)
|
||||
return arg
|
||||
}
|
||||
|
@ -412,7 +412,7 @@ var structDescs_386 = []*KeyedStruct{
|
||||
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Buf: "parent"},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "level", TypeSize: 4}}, Val: 279},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 4}}, Val: 3},
|
||||
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "op", TypeSize: 4}}},
|
||||
&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "alg_op_op", FldName: "op", TypeSize: 4}}, Vals: []uint64{0, 1}},
|
||||
}, AlignAttr: 4}},
|
||||
{Key: StructKey{Name: "cmsghdr_sctp"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "cmsghdr_sctp", TypeSize: 44}, Fields: []Type{
|
||||
&StructType{Key: StructKey{Name: "cmsghdr_sctp_init"}, FldName: "init"},
|
||||
@ -13824,6 +13824,8 @@ var consts_386 = []ConstValue{
|
||||
{Name: "AH_ESP_V6_FLOW", Value: 8},
|
||||
{Name: "AH_V4_FLOW", Value: 9},
|
||||
{Name: "AH_V6_FLOW", Value: 11},
|
||||
{Name: "ALG_OP_DECRYPT"},
|
||||
{Name: "ALG_OP_ENCRYPT", Value: 1},
|
||||
{Name: "ALG_SET_AEAD_ASSOCLEN", Value: 4},
|
||||
{Name: "ALG_SET_AEAD_AUTHSIZE", Value: 5},
|
||||
{Name: "ALG_SET_IV", Value: 2},
|
||||
@ -16796,4 +16798,4 @@ var consts_386 = []ConstValue{
|
||||
{Name: "__WNOTHREAD", Value: 536870912},
|
||||
}
|
||||
|
||||
const revision_386 = "bcbb2cfb0201255ca22ecc77ebc8e22d4880e9a5"
|
||||
const revision_386 = "a3916a0db735129455fbd809eed379b8568f7c35"
|
||||
|
506
sys/linux/alg.go
Normal file
506
sys/linux/alg.go
Normal file
@ -0,0 +1,506 @@
|
||||
// Copyright 2017 syzkaller project authors. All rights reserved.
|
||||
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
||||
|
||||
package linux
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
|
||||
"github.com/google/syzkaller/prog"
|
||||
)
|
||||
|
||||
func (arch *arch) generateSockaddrAlg(g *prog.Gen, typ *prog.StructType, old *prog.GroupArg) (
|
||||
arg prog.Arg, calls []*prog.Call) {
|
||||
family := g.GenerateArg(typ.Fields[0], &calls)
|
||||
// There is very little point in generating feat/mask,
|
||||
// because that can only fail otherwise correct bind.
|
||||
feat := prog.MakeConstArg(typ.Fields[2], 0)
|
||||
mask := prog.MakeConstArg(typ.Fields[3], 0)
|
||||
if g.NOutOf(1, 1000) {
|
||||
feat = g.GenerateArg(typ.Fields[2], &calls)
|
||||
mask = g.GenerateArg(typ.Fields[3], &calls)
|
||||
}
|
||||
algType, algName := generateAlgName(g.Rand())
|
||||
// Extend/truncate type/name to their fixed sizes.
|
||||
typeSize := typ.Fields[1].Size()
|
||||
algTypeData := append([]byte(algType), make([]byte, typeSize)...)[:typeSize]
|
||||
nameSize := typ.Fields[4].Size()
|
||||
algNameData := append([]byte(algName), make([]byte, nameSize)...)[:nameSize]
|
||||
arg = prog.MakeGroupArg(typ, []prog.Arg{
|
||||
family,
|
||||
prog.MakeDataArg(typ.Fields[1], algTypeData),
|
||||
feat,
|
||||
mask,
|
||||
prog.MakeDataArg(typ.Fields[4], algNameData),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func generateAlgName(rnd *rand.Rand) (string, string) {
|
||||
typ := allTypes[rnd.Intn(len(allTypes))]
|
||||
name := generateAlg(rnd, typ.typ)
|
||||
return typ.name, name
|
||||
}
|
||||
|
||||
func generateAlg(rnd *rand.Rand, typ int) string {
|
||||
algs := allAlgs[typ]
|
||||
alg := algs[rnd.Intn(len(algs))]
|
||||
return generateAlgImpl(rnd, alg)
|
||||
}
|
||||
|
||||
func generateAlgImpl(rnd *rand.Rand, alg algDesc) string {
|
||||
args := ""
|
||||
if len(alg.args) != 0 {
|
||||
args += "("
|
||||
for i, a := range alg.args {
|
||||
if i != 0 {
|
||||
args += ","
|
||||
}
|
||||
args += generateAlg(rnd, a)
|
||||
}
|
||||
args += ")"
|
||||
}
|
||||
return alg.name + args
|
||||
}
|
||||
|
||||
type algType struct {
|
||||
name string
|
||||
typ int
|
||||
}
|
||||
|
||||
type algDesc struct {
|
||||
name string
|
||||
args []int
|
||||
}
|
||||
|
||||
const (
|
||||
ALG_CIPHER = iota
|
||||
ALG_BLKCIPHER
|
||||
ALG_AEAD
|
||||
ALG_HASH
|
||||
ALG_RNG
|
||||
)
|
||||
|
||||
var allTypes = []algType{
|
||||
{"aead", ALG_AEAD},
|
||||
{"skcipher", ALG_BLKCIPHER},
|
||||
{"hash", ALG_HASH},
|
||||
{"rng", ALG_RNG},
|
||||
}
|
||||
|
||||
var allAlgs = map[int][]algDesc{
|
||||
ALG_AEAD: []algDesc{
|
||||
// templates:
|
||||
{"authencesn", []int{ALG_HASH, ALG_BLKCIPHER}},
|
||||
{"authenc", []int{ALG_HASH, ALG_BLKCIPHER}},
|
||||
{"rfc7539esp", []int{ALG_BLKCIPHER, ALG_HASH}},
|
||||
{"rfc7539", []int{ALG_BLKCIPHER, ALG_HASH}},
|
||||
{"rfc4543", []int{ALG_AEAD}},
|
||||
{"rfc4106", []int{ALG_AEAD}},
|
||||
{"pcrypt", []int{ALG_AEAD}},
|
||||
{"rfc4309", []int{ALG_AEAD}},
|
||||
{"gcm", []int{ALG_CIPHER}},
|
||||
{"gcm_base", []int{ALG_BLKCIPHER, ALG_HASH}},
|
||||
{"ccm", []int{ALG_CIPHER}},
|
||||
{"ccm_base", []int{ALG_BLKCIPHER, ALG_HASH}},
|
||||
{"echainiv", []int{ALG_AEAD}},
|
||||
{"seqiv", []int{ALG_AEAD}},
|
||||
|
||||
// algorithms:
|
||||
{"gcm(aes)", nil},
|
||||
{"gcm_base(ctr(aes-aesni),ghash-generic)", nil},
|
||||
{"generic-gcm-aesni", nil},
|
||||
{"rfc4106(gcm(aes))", nil},
|
||||
{"rfc4106-gcm-aesni", nil},
|
||||
{"__gcm-aes-aesni", nil},
|
||||
{"__driver-gcm-aes-aesni", nil},
|
||||
},
|
||||
ALG_BLKCIPHER: []algDesc{
|
||||
// templates:
|
||||
{"pcbc", []int{ALG_CIPHER}},
|
||||
{"cbc", []int{ALG_CIPHER}},
|
||||
{"xts", []int{ALG_CIPHER}},
|
||||
{"ctr", []int{ALG_CIPHER}},
|
||||
{"lrw", []int{ALG_CIPHER}},
|
||||
{"ecb", []int{ALG_CIPHER}},
|
||||
{"kw", []int{ALG_CIPHER}},
|
||||
{"cts", []int{ALG_BLKCIPHER}},
|
||||
{"fpu", []int{ALG_BLKCIPHER}},
|
||||
{"xts", []int{ALG_BLKCIPHER}},
|
||||
{"lrw", []int{ALG_BLKCIPHER}},
|
||||
{"rfc3686", []int{ALG_BLKCIPHER}},
|
||||
{"cryptd", []int{ALG_BLKCIPHER}},
|
||||
|
||||
// algorithms:
|
||||
{"cbc(aes)", nil},
|
||||
{"cbc(aes-aesni)", nil},
|
||||
{"chacha20", nil},
|
||||
{"chacha20-simd", nil},
|
||||
{"pcbc(aes)", nil},
|
||||
{"pcbc-aes-aesni", nil},
|
||||
{"fpu(pcbc(__aes))", nil},
|
||||
{"fpu(pcbc(__aes-aesni))", nil},
|
||||
{"pcbc(__aes)", nil},
|
||||
{"pcbc(__aes-aesni)", nil},
|
||||
{"xts(aes)", nil},
|
||||
{"xts-aes-aesni", nil},
|
||||
{"ctr(aes)", nil},
|
||||
{"ctr-aes-aesni", nil},
|
||||
{"cbc-aes-aesni", nil},
|
||||
{"ecb(aes)", nil},
|
||||
{"ecb-aes-aesni", nil},
|
||||
{"__xts(aes)", nil},
|
||||
{"__xts-aes-aesni", nil},
|
||||
{"__ctr(aes)", nil},
|
||||
{"__ctr-aes-aesni", nil},
|
||||
{"__cbc(aes)", nil},
|
||||
{"__cbc-aes-aesni", nil},
|
||||
{"__ecb(aes)", nil},
|
||||
{"__ecb-aes-aesni", nil},
|
||||
{"chacha20-generic", nil},
|
||||
{"xts(serpent)", nil},
|
||||
{"xts-serpent-avx2", nil},
|
||||
{"lrw(serpent)", nil},
|
||||
{"lrw-serpent-avx2", nil},
|
||||
{"ctr(serpent)", nil},
|
||||
{"ctr-serpent-avx2", nil},
|
||||
{"cbc(serpent)", nil},
|
||||
{"cbc-serpent-avx2", nil},
|
||||
{"ecb(serpent)", nil},
|
||||
{"ecb-serpent-avx2", nil},
|
||||
{"xts(camellia)", nil},
|
||||
{"xts-camellia-aesni-avx2", nil},
|
||||
{"lrw(camellia)", nil},
|
||||
{"lrw-camellia-aesni-avx2", nil},
|
||||
{"ctr(camellia)", nil},
|
||||
{"ctr-camellia-aesni-avx2", nil},
|
||||
{"cbc(camellia)", nil},
|
||||
{"cbc-camellia-aesni-avx2", nil},
|
||||
{"ecb(camellia)", nil},
|
||||
{"ecb-camellia-aesni-avx2", nil},
|
||||
{"xts-serpent-avx", nil},
|
||||
{"lrw-serpent-avx", nil},
|
||||
{"ctr-serpent-avx", nil},
|
||||
{"cbc-serpent-avx", nil},
|
||||
{"ecb-serpent-avx", nil},
|
||||
{"xts(twofish)", nil},
|
||||
{"xts-twofish-avx", nil},
|
||||
{"lrw(twofish)", nil},
|
||||
{"lrw-twofish-avx", nil},
|
||||
{"ctr(twofish)", nil},
|
||||
{"ctr-twofish-avx", nil},
|
||||
{"cbc(twofish)", nil},
|
||||
{"cbc-twofish-avx", nil},
|
||||
{"ecb(twofish)", nil},
|
||||
{"ecb-twofish-avx", nil},
|
||||
{"xts(cast6)", nil},
|
||||
{"xts-cast6-avx", nil},
|
||||
{"lrw(cast6)", nil},
|
||||
{"lrw-cast6-avx", nil},
|
||||
{"ctr(cast6)", nil},
|
||||
{"ctr-cast6-avx", nil},
|
||||
{"cbc(cast6)", nil},
|
||||
{"cbc-cast6-avx", nil},
|
||||
{"ecb(cast6)", nil},
|
||||
{"ecb-cast6-avx", nil},
|
||||
{"ctr(cast5)", nil},
|
||||
{"ctr-cast5-avx", nil},
|
||||
{"cbc(cast5)", nil},
|
||||
{"cbc-cast5-avx", nil},
|
||||
{"ecb(cast5)", nil},
|
||||
{"ecb-cast5-avx", nil},
|
||||
{"xts-camellia-aesni", nil},
|
||||
{"lrw-camellia-aesni", nil},
|
||||
{"ctr-camellia-aesni", nil},
|
||||
{"cbc-camellia-aesni", nil},
|
||||
{"ecb-camellia-aesni", nil},
|
||||
{"xts-serpent-sse2", nil},
|
||||
{"lrw-serpent-sse2", nil},
|
||||
{"ctr-serpent-sse2", nil},
|
||||
{"cbc-serpent-sse2", nil},
|
||||
{"ecb-serpent-sse2", nil},
|
||||
{"ctr(aes-aesni)", nil},
|
||||
{"salsa20", nil},
|
||||
{"salsa20-generic", nil},
|
||||
{"ecb(arc4)", nil},
|
||||
{"ecb(arc4)-generic", nil},
|
||||
{"ecb(cipher_null)", nil},
|
||||
{"ecb-cipher_null", nil},
|
||||
{"__xts-serpent-avx2", nil},
|
||||
{"__driver-xts-serpent-avx2", nil},
|
||||
{"__lrw-serpent-avx2", nil},
|
||||
{"__driver-lrw-serpent-avx2", nil},
|
||||
{"__ctr-serpent-avx2", nil},
|
||||
{"__driver-ctr-serpent-avx2", nil},
|
||||
{"__cbc-serpent-avx2", nil},
|
||||
{"__driver-cbc-serpent-avx2", nil},
|
||||
{"__ecb-serpent-avx2", nil},
|
||||
{"__driver-ecb-serpent-avx2", nil},
|
||||
{"__xts-camellia-aesni-avx2", nil},
|
||||
{"__driver-xts-camellia-aesni-avx2", nil},
|
||||
{"__lrw-camellia-aesni-avx2", nil},
|
||||
{"__driver-lrw-camellia-aesni-avx2", nil},
|
||||
{"__ctr-camellia-aesni-avx2", nil},
|
||||
{"__driver-ctr-camellia-aesni-avx2", nil},
|
||||
{"__cbc-camellia-aesni-avx2", nil},
|
||||
{"__driver-cbc-camellia-aesni-avx2", nil},
|
||||
{"__ecb-camellia-aesni-avx2", nil},
|
||||
{"__driver-ecb-camellia-aesni-avx2", nil},
|
||||
{"__xts-serpent-avx", nil},
|
||||
{"__driver-xts-serpent-avx", nil},
|
||||
{"__lrw-serpent-avx", nil},
|
||||
{"__driver-lrw-serpent-avx", nil},
|
||||
{"__ctr-serpent-avx", nil},
|
||||
{"__driver-ctr-serpent-avx", nil},
|
||||
{"__cbc-serpent-avx", nil},
|
||||
{"__driver-cbc-serpent-avx", nil},
|
||||
{"__ecb-serpent-avx", nil},
|
||||
{"__driver-ecb-serpent-avx", nil},
|
||||
{"__xts-twofish-avx", nil},
|
||||
{"__driver-xts-twofish-avx", nil},
|
||||
{"__lrw-twofish-avx", nil},
|
||||
{"__driver-lrw-twofish-avx", nil},
|
||||
{"__ctr-twofish-avx", nil},
|
||||
{"__driver-ctr-twofish-avx", nil},
|
||||
{"__cbc-twofish-avx", nil},
|
||||
{"__driver-cbc-twofish-avx", nil},
|
||||
{"__ecb-twofish-avx", nil},
|
||||
{"__driver-ecb-twofish-avx", nil},
|
||||
{"__xts-cast6-avx", nil},
|
||||
{"__driver-xts-cast6-avx", nil},
|
||||
{"__lrw-cast6-avx", nil},
|
||||
{"__driver-lrw-cast6-avx", nil},
|
||||
{"__ctr-cast6-avx", nil},
|
||||
{"__driver-ctr-cast6-avx", nil},
|
||||
{"__cbc-cast6-avx", nil},
|
||||
{"__driver-cbc-cast6-avx", nil},
|
||||
{"__ecb-cast6-avx", nil},
|
||||
{"__driver-ecb-cast6-avx", nil},
|
||||
{"__ctr-cast5-avx", nil},
|
||||
{"__driver-ctr-cast5-avx", nil},
|
||||
{"__cbc-cast5-avx", nil},
|
||||
{"__driver-cbc-cast5-avx", nil},
|
||||
{"__ecb-cast5-avx", nil},
|
||||
{"__driver-ecb-cast5-avx", nil},
|
||||
{"__xts-camellia-aesni", nil},
|
||||
{"__driver-xts-camellia-aesni", nil},
|
||||
{"__lrw-camellia-aesni", nil},
|
||||
{"__driver-lrw-camellia-aesni", nil},
|
||||
{"__ctr-camellia-aesni", nil},
|
||||
{"__driver-ctr-camellia-aesni", nil},
|
||||
{"__cbc-camellia-aesni", nil},
|
||||
{"__driver-cbc-camellia-aesni", nil},
|
||||
{"__ecb-camellia-aesni", nil},
|
||||
{"__driver-ecb-camellia-aesni", nil},
|
||||
{"__xts-serpent-sse2", nil},
|
||||
{"__driver-xts-serpent-sse2", nil},
|
||||
{"__lrw-serpent-sse2", nil},
|
||||
{"__driver-lrw-serpent-sse2", nil},
|
||||
{"__ctr-serpent-sse2", nil},
|
||||
{"__driver-ctr-serpent-sse2", nil},
|
||||
{"__cbc-serpent-sse2", nil},
|
||||
{"__driver-cbc-serpent-sse2", nil},
|
||||
{"__ecb-serpent-sse2", nil},
|
||||
{"__driver-ecb-serpent-sse2", nil},
|
||||
{"salsa20-asm", nil},
|
||||
{"xts-twofish-3way", nil},
|
||||
{"lrw-twofish-3way", nil},
|
||||
{"ctr-twofish-3way", nil},
|
||||
{"cbc-twofish-3way", nil},
|
||||
{"ecb-twofish-3way", nil},
|
||||
{"ctr(blowfish)", nil},
|
||||
{"ctr-blowfish-asm", nil},
|
||||
{"cbc(blowfish)", nil},
|
||||
{"cbc-blowfish-asm", nil},
|
||||
{"ecb(blowfish)", nil},
|
||||
{"ecb-blowfish-asm", nil},
|
||||
{"xts-camellia-asm", nil},
|
||||
{"lrw-camellia-asm", nil},
|
||||
{"ctr-camellia-asm", nil},
|
||||
{"cbc-camellia-asm", nil},
|
||||
{"ecb-camellia-asm", nil},
|
||||
{"ctr(des3_ede)", nil},
|
||||
{"ctr-des3_ede-asm", nil},
|
||||
{"cbc(des3_ede)", nil},
|
||||
{"cbc-des3_ede-asm", nil},
|
||||
{"ecb(des3_ede)", nil},
|
||||
{"ecb-des3_ede-asm", nil},
|
||||
},
|
||||
ALG_CIPHER: []algDesc{
|
||||
{"aes", nil},
|
||||
{"__aes", nil},
|
||||
{"__aes-aesni", nil},
|
||||
{"aes-aesni", nil},
|
||||
{"seed", nil},
|
||||
{"seed-generic", nil},
|
||||
{"anubis", nil},
|
||||
{"anubis-generic", nil},
|
||||
{"khazad", nil},
|
||||
{"khazad-generic", nil},
|
||||
{"xeta", nil},
|
||||
{"xeta-generic", nil},
|
||||
{"xtea", nil},
|
||||
{"xtea-generic", nil},
|
||||
{"tea", nil},
|
||||
{"tea-generic", nil},
|
||||
{"arc4", nil},
|
||||
{"arc4-generic", nil},
|
||||
{"cast6", nil},
|
||||
{"cast6-generic", nil},
|
||||
{"cast5", nil},
|
||||
{"cast5-generic", nil},
|
||||
{"camellia", nil},
|
||||
{"camellia-generic", nil},
|
||||
{"camellia-asm", nil},
|
||||
{"tnepres", nil},
|
||||
{"aes-fixed-time", nil},
|
||||
{"aes-generic", nil},
|
||||
{"tnepres-generic", nil},
|
||||
{"serpent", nil},
|
||||
{"serpent-generic", nil},
|
||||
{"twofish", nil},
|
||||
{"twofish-generic", nil},
|
||||
{"twofish-asm", nil},
|
||||
{"blowfish", nil},
|
||||
{"blowfish-generic", nil},
|
||||
{"blowfish-asm", nil},
|
||||
{"fcrypt", nil},
|
||||
{"fcrypt-generic", nil},
|
||||
{"des3_ede", nil},
|
||||
{"des3_ede-generic", nil},
|
||||
{"des3_ede-asm", nil},
|
||||
{"des", nil},
|
||||
{"des-generic", nil},
|
||||
{"cipher_null", nil},
|
||||
{"cipher_null-generic", nil},
|
||||
{"aes-asm", nil},
|
||||
},
|
||||
ALG_HASH: []algDesc{
|
||||
// templates:
|
||||
{"cmac", []int{ALG_CIPHER}},
|
||||
{"cbcmac", []int{ALG_CIPHER}},
|
||||
{"xcbc", []int{ALG_CIPHER}},
|
||||
{"vmac", []int{ALG_CIPHER}},
|
||||
{"hmac", []int{ALG_HASH}},
|
||||
{"mcryptd", []int{ALG_HASH}},
|
||||
{"cryptd", []int{ALG_HASH}},
|
||||
|
||||
// algorithms:
|
||||
{"sha512", nil},
|
||||
{"sha512_mb", nil},
|
||||
{"__sha512-mb", nil},
|
||||
{"__intel_sha512-mb", nil},
|
||||
{"sha256", nil},
|
||||
{"sha256_mb", nil},
|
||||
{"__sha256-mb", nil},
|
||||
{"__intel_sha256-mb", nil},
|
||||
{"sha1", nil},
|
||||
{"sha1_mb", nil},
|
||||
{"__sha1-mb", nil},
|
||||
{"__intel_sha1-mb", nil},
|
||||
{"ghash", nil},
|
||||
{"ghash-clmulni", nil},
|
||||
{"md4", nil},
|
||||
{"md4-generic", nil},
|
||||
{"md5", nil},
|
||||
{"md5-generic", nil},
|
||||
{"ghash-generic", nil},
|
||||
{"crct10dif", nil},
|
||||
{"crct10dif-generic", nil},
|
||||
{"crct10dif-pclmul", nil},
|
||||
{"crc32", nil},
|
||||
{"crc32-generic", nil},
|
||||
{"crc32c", nil},
|
||||
{"crc32c-generic", nil},
|
||||
{"michael_mic", nil},
|
||||
{"michael_mic-generic", nil},
|
||||
{"poly1305", nil},
|
||||
{"poly1305-generic", nil},
|
||||
{"tgr128", nil},
|
||||
{"tgr128-generic", nil},
|
||||
{"tgr160", nil},
|
||||
{"tgr160-generic", nil},
|
||||
{"tgr192", nil},
|
||||
{"tgr192-generic", nil},
|
||||
{"wp256", nil},
|
||||
{"wp256-generic", nil},
|
||||
{"wp384", nil},
|
||||
{"wp384-generic", nil},
|
||||
{"wp512", nil},
|
||||
{"wp512-generic", nil},
|
||||
{"sm3", nil},
|
||||
{"sm3-generic", nil},
|
||||
{"sha3-512", nil},
|
||||
{"sha3-512-generic", nil},
|
||||
{"sha3-384", nil},
|
||||
{"sha3-384-generic", nil},
|
||||
{"sha3-256", nil},
|
||||
{"sha3-256-generic", nil},
|
||||
{"sha3-224", nil},
|
||||
{"sha3-224-generic", nil},
|
||||
{"sha384", nil},
|
||||
{"sha384-generic", nil},
|
||||
{"sha512-generic", nil},
|
||||
{"sha224", nil},
|
||||
{"sha224-generic", nil},
|
||||
{"sha256-generic", nil},
|
||||
{"sha1-generic", nil},
|
||||
{"rmd320", nil},
|
||||
{"rmd320-generic", nil},
|
||||
{"rmd256", nil},
|
||||
{"rmd256-generic", nil},
|
||||
{"rmd160", nil},
|
||||
{"rmd160-generic", nil},
|
||||
{"rmd128", nil},
|
||||
{"rmd128-generic", nil},
|
||||
{"digest_null", nil},
|
||||
{"digest_null-generic", nil},
|
||||
{"poly1305-simd", nil},
|
||||
{"sha384-avx2", nil},
|
||||
{"sha512-avx2", nil},
|
||||
{"sha384-avx", nil},
|
||||
{"sha512-avx", nil},
|
||||
{"sha384-ssse3", nil},
|
||||
{"sha512-ssse3", nil},
|
||||
{"sha224-avx2", nil},
|
||||
{"sha256-avx2", nil},
|
||||
{"sha224-avx", nil},
|
||||
{"sha256-avx", nil},
|
||||
{"sha224-ssse3", nil},
|
||||
{"sha256-ssse3", nil},
|
||||
{"crc32-pclmul", nil},
|
||||
{"sha1-avx2", nil},
|
||||
{"sha1-avx", nil},
|
||||
{"sha1-ssse3", nil},
|
||||
{"crc32c-intel", nil},
|
||||
{"__ghash", nil},
|
||||
{"__ghash-pclmulqdqni", nil},
|
||||
},
|
||||
ALG_RNG: []algDesc{
|
||||
{"stdrng", nil},
|
||||
{"ansi_cprng", nil},
|
||||
{"jitterentropy_rng", nil},
|
||||
{"drbg_nopr_hmac_sha256", nil},
|
||||
{"drbg_nopr_hmac_sha512", nil},
|
||||
{"drbg_nopr_hmac_sha384", nil},
|
||||
{"drbg_nopr_hmac_sha1", nil},
|
||||
{"drbg_nopr_sha256", nil},
|
||||
{"drbg_nopr_sha512", nil},
|
||||
{"drbg_nopr_sha384", nil},
|
||||
{"drbg_nopr_sha1", nil},
|
||||
{"drbg_nopr_ctr_aes256", nil},
|
||||
{"drbg_nopr_ctr_aes192", nil},
|
||||
{"drbg_nopr_ctr_aes128", nil},
|
||||
{"drbg_pr_hmac_sha256", nil},
|
||||
{"drbg_pr_hmac_sha512", nil},
|
||||
{"drbg_pr_hmac_sha384", nil},
|
||||
{"drbg_pr_hmac_sha1", nil},
|
||||
{"drbg_pr_sha256", nil},
|
||||
{"drbg_pr_sha512", nil},
|
||||
{"drbg_pr_sha384", nil},
|
||||
{"drbg_pr_sha1", nil},
|
||||
{"drbg_pr_ctr_aes256", nil},
|
||||
{"drbg_pr_ctr_aes192", nil},
|
||||
{"drbg_pr_ctr_aes128", nil},
|
||||
},
|
||||
}
|
215
sys/linux/alg_test.go
Normal file
215
sys/linux/alg_test.go
Normal file
@ -0,0 +1,215 @@
|
||||
// Copyright 2017 syzkaller project authors. All rights reserved.
|
||||
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
||||
|
||||
// +build linux
|
||||
|
||||
package linux
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strings"
|
||||
"syscall"
|
||||
"testing"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// AF_ALG tests won't generally pass and intended for manual testing.
|
||||
// First, they require fresh kernel with _all_ crypto algorithms enabled.
|
||||
// Second, they require the newest hardware with all of SSE/AVX.
|
||||
// Finally, they still won't pass because some algorithms are arch-dependent.
|
||||
var flagRunAlgTests = flag.Bool("algtests", false, "run AF_ALG tests")
|
||||
|
||||
func algTest(t *testing.T) {
|
||||
if !*flagRunAlgTests {
|
||||
t.Skip()
|
||||
}
|
||||
t.Parallel()
|
||||
}
|
||||
|
||||
// TestAlgDescriptions checks that there are no duplicate names and that
|
||||
// templates mentioned in complete algorithms are also present as standalone templates.
|
||||
func TestAlgDescriptions(t *testing.T) {
|
||||
algTest(t)
|
||||
allall := make(map[string]bool)
|
||||
for typ, algList := range allAlgs {
|
||||
algs := make(map[string]bool)
|
||||
templates := make(map[string]bool)
|
||||
for _, alg := range algList {
|
||||
allall[alg.name] = true
|
||||
if algs[alg.name] {
|
||||
t.Errorf("duplicate: %v", alg.name)
|
||||
}
|
||||
algs[alg.name] = true
|
||||
if len(alg.args) > 0 {
|
||||
templates[alg.name] = true
|
||||
}
|
||||
}
|
||||
for _, alg := range algList {
|
||||
if len(alg.args) > 0 || strings.HasPrefix(alg.name, "__") {
|
||||
continue
|
||||
}
|
||||
brace := strings.IndexByte(alg.name, '(')
|
||||
if brace == -1 {
|
||||
continue
|
||||
}
|
||||
templ := alg.name[:brace]
|
||||
if !templates[templ] {
|
||||
t.Errorf("template %v is missing for type %v", templ, typ)
|
||||
}
|
||||
templates[templ] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestSingleAlg tests creation of all algorithms (not templates).
|
||||
func TestSingleAlg(t *testing.T) {
|
||||
algTest(t)
|
||||
for _, typ := range allTypes {
|
||||
for _, alg := range allAlgs[typ.typ] {
|
||||
if len(alg.args) != 0 {
|
||||
continue
|
||||
}
|
||||
ok, skip := testAlg(t, typ.name, alg.name)
|
||||
if skip {
|
||||
t.Errorf("SKIP\t%10v\t%v", typ.name, alg.name)
|
||||
continue
|
||||
}
|
||||
if !ok {
|
||||
t.Errorf("FAIL\t%10v\t%v", typ.name, alg.name)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestTemplateAlg1 tests creation of all templates with 1 argument.
|
||||
func TestTemplateAlg1(t *testing.T) {
|
||||
algTest(t)
|
||||
for _, typ := range allTypes {
|
||||
for _, alg := range allAlgs[typ.typ] {
|
||||
if len(alg.args) != 1 {
|
||||
continue
|
||||
}
|
||||
var works []int
|
||||
nextType:
|
||||
for typ1, algs1 := range allAlgs {
|
||||
var selection []algDesc
|
||||
for _, x := range rand.Perm(len(algs1)) {
|
||||
if len(algs1[x].args) != 0 {
|
||||
continue
|
||||
}
|
||||
selection = append(selection, algs1[x])
|
||||
if len(selection) == 10 {
|
||||
break
|
||||
}
|
||||
}
|
||||
for _, alg1 := range selection {
|
||||
name := fmt.Sprintf("%v(%v)", alg.name, alg1.name)
|
||||
ok, _ := testAlg(t, typ.name, name)
|
||||
if ok {
|
||||
works = append(works, typ1)
|
||||
continue nextType
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(works) == 1 && works[0] == alg.args[0] {
|
||||
continue
|
||||
}
|
||||
t.Errorf("FAIL\t%10v\t%v\tclaimed %v works with %v",
|
||||
typ.name, alg.name, alg.args[0], works)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestTemplateAlg2 tests creation of all templates with 2 argument.
|
||||
func TestTemplateAlg2(t *testing.T) {
|
||||
algTest(t)
|
||||
// Can't affort to test all permutations of 2 algorithms,
|
||||
// 20 algorithm pairs for each type pair and use them.
|
||||
selections := make(map[int][]int)
|
||||
for typ1, algs1 := range allAlgs {
|
||||
for typ2, algs2 := range allAlgs {
|
||||
var pairs []int
|
||||
for i1, alg1 := range algs1 {
|
||||
if len(alg1.args) != 0 {
|
||||
continue
|
||||
}
|
||||
for i2, alg2 := range algs2 {
|
||||
if len(alg2.args) != 0 {
|
||||
continue
|
||||
}
|
||||
pairs = append(pairs, i1*1000+i2)
|
||||
}
|
||||
}
|
||||
var selection []int
|
||||
for _, x := range rand.Perm(len(pairs)) {
|
||||
selection = append(selection, pairs[x])
|
||||
if len(selection) > 20 {
|
||||
break
|
||||
}
|
||||
}
|
||||
selections[typ1*1000+typ2] = selection
|
||||
}
|
||||
}
|
||||
for _, typ := range allTypes {
|
||||
for _, alg := range allAlgs[typ.typ] {
|
||||
if len(alg.args) != 2 {
|
||||
continue
|
||||
}
|
||||
for typ1, algs1 := range allAlgs {
|
||||
for typ2, algs2 := range allAlgs {
|
||||
selection := selections[typ1*1000+typ2]
|
||||
for _, x := range selection {
|
||||
alg1 := algs1[x/1000]
|
||||
alg2 := algs2[x%1000]
|
||||
name := fmt.Sprintf("%v(%v,%v)",
|
||||
alg.name, alg1.name, alg2.name)
|
||||
if ok, _ := testAlg(t, typ.name, name); ok {
|
||||
t.Logf("%10v\t%v\tclaimed %v works with %v/%v (%v)",
|
||||
typ.name, alg.name, alg.args, typ1, typ2, name)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type sockaddrAlg struct {
|
||||
family uint16
|
||||
typ [14]byte
|
||||
feat uint32
|
||||
mask uint32
|
||||
name [64]byte
|
||||
}
|
||||
|
||||
func testAlg(t *testing.T, typ, name string) (ok, skip bool) {
|
||||
const AF_ALG = 0x26
|
||||
addr := &sockaddrAlg{
|
||||
family: AF_ALG,
|
||||
}
|
||||
if len(typ) >= int(unsafe.Sizeof(addr.typ)) ||
|
||||
len(name) >= int(unsafe.Sizeof(addr.name)) {
|
||||
return false, true
|
||||
}
|
||||
for i := 0; i < len(typ); i++ {
|
||||
addr.typ[i] = typ[i]
|
||||
}
|
||||
for i := 0; i < len(name); i++ {
|
||||
addr.name[i] = name[i]
|
||||
}
|
||||
sock, err := syscall.Socket(AF_ALG, syscall.SOCK_SEQPACKET, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create AF_ALG socket: %v", err)
|
||||
}
|
||||
defer syscall.Close(sock)
|
||||
_, _, errno := syscall.Syscall(syscall.SYS_BIND, uintptr(sock),
|
||||
uintptr(unsafe.Pointer(addr)), unsafe.Sizeof(*addr))
|
||||
if errno != 0 {
|
||||
return false, false
|
||||
}
|
||||
return true, false
|
||||
}
|
@ -420,7 +420,7 @@ var structDescs_amd64 = []*KeyedStruct{
|
||||
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "parent"},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "level", TypeSize: 4}}, Val: 279},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 4}}, Val: 3},
|
||||
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "op", TypeSize: 4}}},
|
||||
&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "alg_op_op", FldName: "op", TypeSize: 4}}, Vals: []uint64{0, 1}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 4}}, IsPad: true},
|
||||
}, AlignAttr: 8}},
|
||||
{Key: StructKey{Name: "cmsghdr_sctp"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "cmsghdr_sctp", TypeSize: 48}, Fields: []Type{
|
||||
@ -5974,8 +5974,8 @@ var syscalls_amd64 = []*Syscall{
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 1, NR: 43, Name: "accept$alg", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_alg", FldName: "fd", TypeSize: 4}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peer", TypeSize: 8, IsOptional: true}, Type: &StructType{Key: StructKey{Name: "sockaddr_alg", Dir: 1}}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peerlen", TypeSize: 8}, Type: &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", TypeSize: 4, ArgDir: 2}}, Buf: "peer"}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peer", TypeSize: 8}}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peerlen", TypeSize: 8}}},
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock_algconn", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 2, NR: 43, Name: "accept$ax25", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_ax25", FldName: "fd", TypeSize: 4}},
|
||||
@ -14322,6 +14322,8 @@ var consts_amd64 = []ConstValue{
|
||||
{Name: "AH_ESP_V6_FLOW", Value: 8},
|
||||
{Name: "AH_V4_FLOW", Value: 9},
|
||||
{Name: "AH_V6_FLOW", Value: 11},
|
||||
{Name: "ALG_OP_DECRYPT"},
|
||||
{Name: "ALG_OP_ENCRYPT", Value: 1},
|
||||
{Name: "ALG_SET_AEAD_ASSOCLEN", Value: 4},
|
||||
{Name: "ALG_SET_AEAD_AUTHSIZE", Value: 5},
|
||||
{Name: "ALG_SET_IV", Value: 2},
|
||||
@ -17327,4 +17329,4 @@ var consts_amd64 = []ConstValue{
|
||||
{Name: "__WNOTHREAD", Value: 536870912},
|
||||
}
|
||||
|
||||
const revision_amd64 = "7a950be35f2798eefd0ac374561c8e547930bab1"
|
||||
const revision_amd64 = "6db640031dfbd383d097fd924b9852fbd9e33616"
|
||||
|
@ -417,7 +417,7 @@ var structDescs_arm = []*KeyedStruct{
|
||||
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Buf: "parent"},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "level", TypeSize: 4}}, Val: 279},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 4}}, Val: 3},
|
||||
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "op", TypeSize: 4}}},
|
||||
&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "alg_op_op", FldName: "op", TypeSize: 4}}, Vals: []uint64{0, 1}},
|
||||
}, AlignAttr: 4}},
|
||||
{Key: StructKey{Name: "cmsghdr_sctp"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "cmsghdr_sctp", TypeSize: 44}, Fields: []Type{
|
||||
&StructType{Key: StructKey{Name: "cmsghdr_sctp_init"}, FldName: "init"},
|
||||
@ -5640,8 +5640,8 @@ var syscalls_arm = []*Syscall{
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 1, NR: 285, Name: "accept$alg", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_alg", FldName: "fd", TypeSize: 4}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peer", TypeSize: 4, IsOptional: true}, Type: &StructType{Key: StructKey{Name: "sockaddr_alg", Dir: 1}}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peerlen", TypeSize: 4}, Type: &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", TypeSize: 4, ArgDir: 2}}, Buf: "peer"}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peer", TypeSize: 4}}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peerlen", TypeSize: 4}}},
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock_algconn", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 2, NR: 285, Name: "accept$ax25", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_ax25", FldName: "fd", TypeSize: 4}},
|
||||
@ -13741,6 +13741,8 @@ var consts_arm = []ConstValue{
|
||||
{Name: "AH_ESP_V6_FLOW", Value: 8},
|
||||
{Name: "AH_V4_FLOW", Value: 9},
|
||||
{Name: "AH_V6_FLOW", Value: 11},
|
||||
{Name: "ALG_OP_DECRYPT"},
|
||||
{Name: "ALG_OP_ENCRYPT", Value: 1},
|
||||
{Name: "ALG_SET_AEAD_ASSOCLEN", Value: 4},
|
||||
{Name: "ALG_SET_AEAD_AUTHSIZE", Value: 5},
|
||||
{Name: "ALG_SET_IV", Value: 2},
|
||||
@ -16664,4 +16666,4 @@ var consts_arm = []ConstValue{
|
||||
{Name: "__WNOTHREAD", Value: 536870912},
|
||||
}
|
||||
|
||||
const revision_arm = "535d8ff089248a1f2cb7f41725f543f14767dd1e"
|
||||
const revision_arm = "266440e04c2aa2386a0083e579bfd6a68ad75c2f"
|
||||
|
@ -420,7 +420,7 @@ var structDescs_arm64 = []*KeyedStruct{
|
||||
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "parent"},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "level", TypeSize: 4}}, Val: 279},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 4}}, Val: 3},
|
||||
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "op", TypeSize: 4}}},
|
||||
&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "alg_op_op", FldName: "op", TypeSize: 4}}, Vals: []uint64{0, 1}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 4}}, IsPad: true},
|
||||
}, AlignAttr: 8}},
|
||||
{Key: StructKey{Name: "cmsghdr_sctp"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "cmsghdr_sctp", TypeSize: 48}, Fields: []Type{
|
||||
@ -5750,8 +5750,8 @@ var syscalls_arm64 = []*Syscall{
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 1, NR: 202, Name: "accept$alg", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_alg", FldName: "fd", TypeSize: 4}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peer", TypeSize: 8, IsOptional: true}, Type: &StructType{Key: StructKey{Name: "sockaddr_alg", Dir: 1}}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peerlen", TypeSize: 8}, Type: &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", TypeSize: 4, ArgDir: 2}}, Buf: "peer"}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peer", TypeSize: 8}}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peerlen", TypeSize: 8}}},
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock_algconn", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 2, NR: 202, Name: "accept$ax25", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_ax25", FldName: "fd", TypeSize: 4}},
|
||||
@ -13788,6 +13788,8 @@ var consts_arm64 = []ConstValue{
|
||||
{Name: "AH_ESP_V6_FLOW", Value: 8},
|
||||
{Name: "AH_V4_FLOW", Value: 9},
|
||||
{Name: "AH_V6_FLOW", Value: 11},
|
||||
{Name: "ALG_OP_DECRYPT"},
|
||||
{Name: "ALG_OP_ENCRYPT", Value: 1},
|
||||
{Name: "ALG_SET_AEAD_ASSOCLEN", Value: 4},
|
||||
{Name: "ALG_SET_AEAD_AUTHSIZE", Value: 5},
|
||||
{Name: "ALG_SET_IV", Value: 2},
|
||||
@ -16709,4 +16711,4 @@ var consts_arm64 = []ConstValue{
|
||||
{Name: "__WNOTHREAD", Value: 536870912},
|
||||
}
|
||||
|
||||
const revision_arm64 = "043368a9e3f6b8146d46fa8d192bc033b66c707b"
|
||||
const revision_arm64 = "491bd0b7116800f63d75074b802c7c58820b119f"
|
||||
|
@ -40,9 +40,11 @@ func initTarget(target *prog.Target) {
|
||||
target.MakeMmap = arch.makeMmap
|
||||
target.AnalyzeMmap = arch.analyzeMmap
|
||||
target.SanitizeCall = arch.sanitizeCall
|
||||
target.SpecialStructs = map[string]func(g *prog.Gen, typ *prog.StructType, old *prog.GroupArg) (prog.Arg, []*prog.Call){
|
||||
"timespec": arch.generateTimespec,
|
||||
"timeval": arch.generateTimespec,
|
||||
target.SpecialStructs = map[string]func(g *prog.Gen, typ *prog.StructType, old *prog.GroupArg) (
|
||||
prog.Arg, []*prog.Call){
|
||||
"timespec": arch.generateTimespec,
|
||||
"timeval": arch.generateTimespec,
|
||||
"sockaddr_alg": arch.generateSockaddrAlg,
|
||||
}
|
||||
target.StringDictionary = stringDictionary
|
||||
|
||||
|
@ -411,7 +411,7 @@ var structDescs_ppc64le = []*KeyedStruct{
|
||||
&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "parent"},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "level", TypeSize: 4}}, Val: 279},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 4}}, Val: 3},
|
||||
&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "op", TypeSize: 4}}},
|
||||
&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "alg_op_op", FldName: "op", TypeSize: 4}}, Vals: []uint64{0, 1}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 4}}, IsPad: true},
|
||||
}, AlignAttr: 8}},
|
||||
{Key: StructKey{Name: "cmsghdr_sctp"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "cmsghdr_sctp", TypeSize: 48}, Fields: []Type{
|
||||
@ -5595,8 +5595,8 @@ var syscalls_ppc64le = []*Syscall{
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 1, NR: 330, Name: "accept$alg", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_alg", FldName: "fd", TypeSize: 4}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peer", TypeSize: 8, IsOptional: true}, Type: &StructType{Key: StructKey{Name: "sockaddr_alg", Dir: 1}}},
|
||||
&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peerlen", TypeSize: 8}, Type: &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", TypeSize: 4, ArgDir: 2}}, Buf: "peer"}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peer", TypeSize: 8}}},
|
||||
&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "peerlen", TypeSize: 8}}},
|
||||
}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock_algconn", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
|
||||
{ID: 2, NR: 330, Name: "accept$ax25", CallName: "accept", Args: []Type{
|
||||
&ResourceType{TypeCommon: TypeCommon{TypeName: "sock_ax25", FldName: "fd", TypeSize: 4}},
|
||||
@ -13484,6 +13484,8 @@ var consts_ppc64le = []ConstValue{
|
||||
{Name: "AH_ESP_V6_FLOW", Value: 8},
|
||||
{Name: "AH_V4_FLOW", Value: 9},
|
||||
{Name: "AH_V6_FLOW", Value: 11},
|
||||
{Name: "ALG_OP_DECRYPT"},
|
||||
{Name: "ALG_OP_ENCRYPT", Value: 1},
|
||||
{Name: "ALG_SET_AEAD_ASSOCLEN", Value: 4},
|
||||
{Name: "ALG_SET_AEAD_AUTHSIZE", Value: 5},
|
||||
{Name: "ALG_SET_IV", Value: 2},
|
||||
@ -16394,4 +16396,4 @@ var consts_ppc64le = []ConstValue{
|
||||
{Name: "__WNOTHREAD", Value: 536870912},
|
||||
}
|
||||
|
||||
const revision_ppc64le = "c893d2cc4874589a0e71bd3f9dad5facd0f5f502"
|
||||
const revision_ppc64le = "5491142031cb62ebd424be9ddfdc17427d1d64f4"
|
||||
|
@ -15,10 +15,11 @@ socket$alg(domain const[AF_ALG], type const[SOCK_SEQPACKET], proto const[0]) soc
|
||||
bind$alg(fd sock_alg, addr ptr[in, sockaddr_alg], addrlen len[addr])
|
||||
setsockopt$ALG_SET_KEY(fd sock_alg, level const[SOL_ALG], opt const[ALG_SET_KEY], key buffer[in], keylen len[key])
|
||||
setsockopt$ALG_SET_AEAD_AUTHSIZE(fd sock_alg, level const[SOL_ALG], opt const[ALG_SET_AEAD_AUTHSIZE], val const[0], size intptr)
|
||||
accept$alg(fd sock_alg, peer ptr[out, sockaddr_alg, opt], peerlen ptr[inout, len[peer, int32]]) sock_algconn
|
||||
accept$alg(fd sock_alg, peer const[0], peerlen const[0]) sock_algconn
|
||||
sendmsg$alg(fd sock_algconn, msg ptr[in, msghdr_alg], f flags[send_flags])
|
||||
sendmmsg$alg(fd sock_algconn, mmsg ptr[in, array[msghdr_alg]], vlen len[mmsg], f flags[send_flags])
|
||||
|
||||
# Special struct generated by Go code.
|
||||
sockaddr_alg {
|
||||
family const[AF_ALG, int16]
|
||||
type string[salg_type, 14]
|
||||
@ -55,7 +56,7 @@ cmsghdr_alg_op {
|
||||
len len[parent, intptr]
|
||||
level const[SOL_ALG, int32]
|
||||
type const[ALG_SET_OP, int32]
|
||||
op int32
|
||||
op flags[alg_op_op, int32]
|
||||
} [align_ptr]
|
||||
|
||||
cmsghdr_alg_assoc {
|
||||
@ -67,7 +68,10 @@ cmsghdr_alg_assoc {
|
||||
|
||||
af_alg_type = CRYPTO_ALG_TYPE_MASK, CRYPTO_ALG_TYPE_CIPHER, CRYPTO_ALG_TYPE_COMPRESS, CRYPTO_ALG_TYPE_AEAD, CRYPTO_ALG_TYPE_BLKCIPHER, CRYPTO_ALG_TYPE_ABLKCIPHER, CRYPTO_ALG_TYPE_GIVCIPHER, CRYPTO_ALG_TYPE_DIGEST, CRYPTO_ALG_TYPE_HASH, CRYPTO_ALG_TYPE_SHASH, CRYPTO_ALG_TYPE_AHASH, CRYPTO_ALG_TYPE_RNG, CRYPTO_ALG_TYPE_AKCIPHER, CRYPTO_ALG_TYPE_PCOMPRESS, CRYPTO_ALG_LARVAL, CRYPTO_ALG_DEAD, CRYPTO_ALG_DYING, CRYPTO_ALG_ASYNC, CRYPTO_ALG_NEED_FALLBACK, CRYPTO_ALG_GENIV, CRYPTO_ALG_TESTED, CRYPTO_ALG_INSTANCE, CRYPTO_ALG_KERN_DRIVER_ONLY, CRYPTO_ALG_INTERNAL
|
||||
|
||||
alg_op_op = ALG_OP_DECRYPT, ALG_OP_ENCRYPT
|
||||
|
||||
salg_type = "aead", "hash", "rng", "skcipher"
|
||||
|
||||
salg_name = "cmac(aes)", "ecb(aes)", "cbc(aes)", "hmac(sha1)", "pcbc(fcrypt)", "ghash", "jitterentropy_rng", "stdrng", "stdrng", "stdrng", "stdrng", "hmac(sha256)", "stdrng", "stdrng", "stdrng", "stdrng", "stdrng", "842", "lz4hc", "lz4", "lzo", "crct10dif", "crc32", "crc32c", "michael_mic", "zlib", "deflate", "poly1305", "chacha20", "salsa20", "seed", "anubis", "khazad", "xeta", "xtea", "tea", "ecb(arc4)", "arc4", "cast6", "cast5", "camellia", "aes", "tnepres", "serpent", "twofish", "blowfish", "fcrypt", "des3_ede", "des", "tgr128", "tgr160", "tgr192", "wp256", "wp384", "wp512", "sha384", "sha512", "sha224", "sha256", "sha1", "rmd320", "rmd256", "rmd160", "rmd128", "md5", "md4", "digest_null", "compress_null", "ecb(cipher_null)", "cipher_null", "rsa", "poly1305", "xts(serpent)", "lrw(serpent)", "ctr(serpent)", "cbc(serpent)", "__ecb-serpent-sse2", "ecb(serpent)", "__xts-serpent-sse2", "__lrw-serpent-sse2", "__ctr-serpent-sse2", "__cbc-serpent-sse2", "__ecb-serpent-sse2", "salsa20", "xts(twofish)", "lrw(twofish)", "ctr(twofish)", "cbc(twofish)", "ecb(twofish)", "twofish", "ctr(blowfish)", "cbc(blowfish)", "ecb(blowfish)", "blowfish", "xts(camellia)", "lrw(camellia)", "ctr(camellia)", "cbc(camellia)", "ecb(camellia)", "camellia", "ctr(des3_ede)", "cbc(des3_ede)", "ecb(des3_ede)", "des3_ede", "aes"
|
||||
|
||||
# Removed in next-20160210 (commit 11049218)
|
||||
|
@ -1,5 +1,7 @@
|
||||
# AUTOGENERATED FILE
|
||||
AF_ALG = 38
|
||||
ALG_OP_DECRYPT = 0
|
||||
ALG_OP_ENCRYPT = 1
|
||||
ALG_SET_AEAD_ASSOCLEN = 4
|
||||
ALG_SET_AEAD_AUTHSIZE = 5
|
||||
ALG_SET_IV = 2
|
||||
|
@ -1,5 +1,7 @@
|
||||
# AUTOGENERATED FILE
|
||||
AF_ALG = 38
|
||||
ALG_OP_DECRYPT = 0
|
||||
ALG_OP_ENCRYPT = 1
|
||||
ALG_SET_AEAD_ASSOCLEN = 4
|
||||
ALG_SET_AEAD_AUTHSIZE = 5
|
||||
ALG_SET_IV = 2
|
||||
|
@ -1,5 +1,7 @@
|
||||
# AUTOGENERATED FILE
|
||||
AF_ALG = 38
|
||||
ALG_OP_DECRYPT = 0
|
||||
ALG_OP_ENCRYPT = 1
|
||||
ALG_SET_AEAD_ASSOCLEN = 4
|
||||
ALG_SET_AEAD_AUTHSIZE = 5
|
||||
ALG_SET_IV = 2
|
||||
|
@ -1,5 +1,7 @@
|
||||
# AUTOGENERATED FILE
|
||||
AF_ALG = 38
|
||||
ALG_OP_DECRYPT = 0
|
||||
ALG_OP_ENCRYPT = 1
|
||||
ALG_SET_AEAD_ASSOCLEN = 4
|
||||
ALG_SET_AEAD_AUTHSIZE = 5
|
||||
ALG_SET_IV = 2
|
||||
|
@ -1,5 +1,7 @@
|
||||
# AUTOGENERATED FILE
|
||||
AF_ALG = 38
|
||||
ALG_OP_DECRYPT = 0
|
||||
ALG_OP_ENCRYPT = 1
|
||||
ALG_SET_AEAD_ASSOCLEN = 4
|
||||
ALG_SET_AEAD_AUTHSIZE = 5
|
||||
ALG_SET_IV = 2
|
||||
|
Loading…
Reference in New Issue
Block a user