Skip to content

Commit 0d84571

Browse files
committed
syz-manager: move syscall info to a separate page
It's rarely needed. So move from main page.
1 parent 188daeb commit 0d84571

File tree

1 file changed

+46
-21
lines changed

1 file changed

+46
-21
lines changed

syz-manager/html.go

+46-21
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const dateFormat = "Jan 02 2006 15:04:05 MST"
2929

3030
func (mgr *Manager) initHTTP() {
3131
http.HandleFunc("/", mgr.httpSummary)
32+
http.HandleFunc("/syscalls", mgr.httpSyscalls)
3233
http.HandleFunc("/corpus", mgr.httpCorpus)
3334
http.HandleFunc("/crash", mgr.httpCrash)
3435
http.HandleFunc("/cover", mgr.httpCover)
@@ -52,8 +53,9 @@ func (mgr *Manager) initHTTP() {
5253

5354
func (mgr *Manager) httpSummary(w http.ResponseWriter, r *http.Request) {
5455
data := &UISummaryData{
55-
Name: mgr.cfg.Name,
56-
Log: CachedLogOutput(),
56+
Name: mgr.cfg.Name,
57+
Log: CachedLogOutput(),
58+
Stats: mgr.collectStats(),
5759
}
5860

5961
var err error
@@ -62,13 +64,18 @@ func (mgr *Manager) httpSummary(w http.ResponseWriter, r *http.Request) {
6264
return
6365
}
6466

65-
calls, err := mgr.collectSummary(data)
66-
if err != nil {
67-
http.Error(w, err.Error(), http.StatusInternalServerError)
67+
if err := summaryTemplate.Execute(w, data); err != nil {
68+
http.Error(w, fmt.Sprintf("failed to execute template: %v", err),
69+
http.StatusInternalServerError)
6870
return
6971
}
72+
}
7073

71-
for c, cc := range calls {
74+
func (mgr *Manager) httpSyscalls(w http.ResponseWriter, r *http.Request) {
75+
data := &UISyscallsData{
76+
Name: mgr.cfg.Name,
77+
}
78+
for c, cc := range mgr.collectSyscallInfo() {
7279
data.Calls = append(data.Calls, UICallType{
7380
Name: c,
7481
Inputs: cc.count,
@@ -77,7 +84,7 @@ func (mgr *Manager) httpSummary(w http.ResponseWriter, r *http.Request) {
7784
}
7885
sort.Sort(UICallTypeArray(data.Calls))
7986

80-
if err := summaryTemplate.Execute(w, data); err != nil {
87+
if err := syscallsTemplate.Execute(w, data); err != nil {
8188
http.Error(w, fmt.Sprintf("failed to execute template: %v", err),
8289
http.StatusInternalServerError)
8390
return
@@ -89,16 +96,18 @@ type CallCov struct {
8996
cov cover.Cover
9097
}
9198

92-
func (mgr *Manager) collectSummary(data *UISummaryData) (map[string]*CallCov, error) {
99+
func (mgr *Manager) collectStats() []UIStat {
93100
mgr.mu.Lock()
94101
defer mgr.mu.Unlock()
95102

96-
data.Stats = append(data.Stats, UIStat{Name: "uptime", Value: fmt.Sprint(time.Since(mgr.startTime) / 1e9 * 1e9)})
97-
data.Stats = append(data.Stats, UIStat{Name: "fuzzing", Value: fmt.Sprint(mgr.fuzzingTime / 60e9 * 60e9)})
98-
data.Stats = append(data.Stats, UIStat{Name: "corpus", Value: fmt.Sprint(len(mgr.corpus))})
99-
data.Stats = append(data.Stats, UIStat{Name: "triage queue", Value: fmt.Sprint(len(mgr.candidates))})
100-
data.Stats = append(data.Stats, UIStat{Name: "cover", Value: fmt.Sprint(len(mgr.corpusCover)), Link: "/cover"})
101-
data.Stats = append(data.Stats, UIStat{Name: "signal", Value: fmt.Sprint(mgr.corpusSignal.Len())})
103+
var stats []UIStat
104+
stats = append(stats, UIStat{Name: "uptime", Value: fmt.Sprint(time.Since(mgr.startTime) / 1e9 * 1e9)})
105+
stats = append(stats, UIStat{Name: "fuzzing", Value: fmt.Sprint(mgr.fuzzingTime / 60e9 * 60e9)})
106+
stats = append(stats, UIStat{Name: "corpus", Value: fmt.Sprint(len(mgr.corpus))})
107+
stats = append(stats, UIStat{Name: "triage queue", Value: fmt.Sprint(len(mgr.candidates))})
108+
stats = append(stats, UIStat{Name: "cover", Value: fmt.Sprint(len(mgr.corpusCover)), Link: "/cover"})
109+
stats = append(stats, UIStat{Name: "signal", Value: fmt.Sprint(mgr.corpusSignal.Len())})
110+
stats = append(stats, UIStat{Name: "syscalls", Value: fmt.Sprint(len(mgr.enabledCalls)), Link: "/syscalls"})
102111

103112
secs := uint64(1)
104113
if !mgr.firstConnect.IsZero() {
@@ -118,9 +127,14 @@ func (mgr *Manager) collectSummary(data *UISummaryData) (map[string]*CallCov, er
118127
}
119128
intStats = append(intStats, UIStat{Name: k, Value: val})
120129
}
121-
122130
sort.Sort(UIStatArray(intStats))
123-
data.Stats = append(data.Stats, intStats...)
131+
stats = append(stats, intStats...)
132+
return stats
133+
}
134+
135+
func (mgr *Manager) collectSyscallInfo() map[string]*CallCov {
136+
mgr.mu.Lock()
137+
defer mgr.mu.Unlock()
124138

125139
calls := make(map[string]*CallCov)
126140
for _, inp := range mgr.corpus {
@@ -131,8 +145,7 @@ func (mgr *Manager) collectSummary(data *UISummaryData) (map[string]*CallCov, er
131145
cc.count++
132146
cc.cov.Merge(inp.Cover)
133147
}
134-
135-
return calls, nil
148+
return calls
136149
}
137150

138151
func (mgr *Manager) httpCrash(w http.ResponseWriter, r *http.Request) {
@@ -445,11 +458,15 @@ func trimNewLines(data []byte) []byte {
445458
type UISummaryData struct {
446459
Name string
447460
Stats []UIStat
448-
Calls []UICallType
449461
Crashes []*UICrashType
450462
Log string
451463
}
452464

465+
type UISyscallsData struct {
466+
Name string
467+
Calls []UICallType
468+
}
469+
453470
type UICrashType struct {
454471
Description string
455472
LastTime string
@@ -577,9 +594,17 @@ var summaryTemplate = template.Must(template.New("").Parse(addStyle(`
577594
var textarea = document.getElementById("log_textarea");
578595
textarea.scrollTop = textarea.scrollHeight;
579596
</script>
580-
<br>
581-
<br>
597+
</body></html>
598+
`)))
582599

600+
var syscallsTemplate = template.Must(template.New("").Parse(addStyle(`
601+
<!doctype html>
602+
<html>
603+
<head>
604+
<title>{{.Name }} syzkaller</title>
605+
{{STYLE}}
606+
</head>
607+
<body>
583608
<b>Per-call coverage:</b>
584609
<br>
585610
{{range $c := $.Calls}}

0 commit comments

Comments
 (0)