diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-04-01 18:29:56 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-04-01 18:29:56 +0200 |
| commit | 99e3b0a7e8b3ba990fd3ff3e7d10cbd92b957b14 (patch) | |
| tree | 8d907471cc6c69ab35516a80aea3975e759129b9 /tools | |
| parent | 185ac3525e708353d3cae302277225aec1fde165 (diff) | |
sys/linux: add support for reading partition tables
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/syz-imagegen/imagegen.go | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/tools/syz-imagegen/imagegen.go b/tools/syz-imagegen/imagegen.go index 24ea92789..ce8216512 100644 --- a/tools/syz-imagegen/imagegen.go +++ b/tools/syz-imagegen/imagegen.go @@ -1,7 +1,7 @@ // Copyright 2018 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. -// imagegen generates syz_mount_image calls from disk images. +// imagegen generates syz_mount_image/syz_read_part_table calls from disk images. package main import ( @@ -41,7 +41,9 @@ func main() { break } pos = (pos + *flagAlign - 1) & ^(*flagAlign - 1) - segs = append(segs, Segment{offset, data[:pos]}) + if pos != 0 { + segs = append(segs, Segment{offset, data[:pos]}) + } for pos < len(data) && data[pos] == 0 { pos++ } @@ -74,20 +76,35 @@ func main() { fmt.Fprintf(os.Stderr, "restored data differs!\n") os.Exit(1) } - syscallSuffix := *flagFS - if syscallSuffix == "ext2" || syscallSuffix == "ext3" { - syscallSuffix = "ext4" - } - fmt.Printf(`syz_mount_image$%v(&(0x7f0000000000)='%v\x00', &(0x7f0000000100)='./file0\x00', 0x%x, 0x%x, &(0x7f0000000200)=[`, - syscallSuffix, *flagFS, len(data0), len(segs)) - addr := 0x7f0000010000 - for i, seg := range segs { - if i != 0 { - fmt.Printf(", ") + if *flagFS == "part" { + fmt.Printf(`syz_read_part_table(0x%x, 0x%x, &(0x7f0000000200)=[`, + len(data0), len(segs)) + addr := 0x7f0000010000 + for i, seg := range segs { + if i != 0 { + fmt.Printf(", ") + } + fmt.Printf(`{&(0x%x)="%v", 0x%x, 0x%x}`, + addr, hex.EncodeToString(seg.data), len(seg.data), seg.offset) + addr = (addr + len(seg.data) + 0xff) & ^0xff + } + fmt.Printf("])\n") + } else { + syscallSuffix := *flagFS + if syscallSuffix == "ext2" || syscallSuffix == "ext3" { + syscallSuffix = "ext4" + } + fmt.Printf(`syz_mount_image$%v(&(0x7f0000000000)='%v\x00', &(0x7f0000000100)='./file0\x00', 0x%x, 0x%x, &(0x7f0000000200)=[`, + syscallSuffix, *flagFS, len(data0), len(segs)) + addr := 0x7f0000010000 + for i, seg := range segs { + if i != 0 { + fmt.Printf(", ") + } + fmt.Printf(`{&(0x%x)="%v", 0x%x, 0x%x}`, + addr, hex.EncodeToString(seg.data), len(seg.data), seg.offset) + addr = (addr + len(seg.data) + 0xff) & ^0xff } - fmt.Printf(`{&(0x%x)="%v", 0x%x, 0x%x}`, - addr, hex.EncodeToString(seg.data), len(seg.data), seg.offset) - addr = (addr + len(seg.data) + 0xff) & ^0xff + fmt.Printf("], 0x0, &(0x%x))\n", addr) } - fmt.Printf("], 0x0, &(0x%x))\n", addr) } |
