aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2023-07-21 11:54:11 +0200
committerTaras Madan <tarasmadan@google.com>2023-07-24 09:12:13 +0000
commit7549a7e1b57831cf6b08ce4700fc6e53417919f9 (patch)
tree8e027cdaf7abbc52a5fb29c37c7137dfd2122e7a
parentf7eecac8b446ef11cff4122de6f496ad5eaba3a9 (diff)
all: use special placeholder for errors
-rw-r--r--dashboard/app/access.go12
-rw-r--r--dashboard/app/admin.go2
-rw-r--r--dashboard/app/api.go90
-rw-r--r--dashboard/app/asset_storage.go2
-rw-r--r--dashboard/app/discussion.go4
-rw-r--r--dashboard/app/entities.go28
-rw-r--r--dashboard/app/jobs.go82
-rw-r--r--dashboard/app/kcidb.go2
-rw-r--r--dashboard/app/main.go14
-rw-r--r--dashboard/app/reporting.go24
-rw-r--r--dashboard/app/reporting_email.go28
-rw-r--r--dashboard/app/reporting_external.go10
-rw-r--r--dashboard/app/reporting_lists.go4
-rw-r--r--dashboard/app/subsystem.go2
-rw-r--r--dashboard/app/tree.go12
-rw-r--r--dashboard/dashapi/dashapi.go6
-rw-r--r--pkg/bisect/bisect.go6
-rw-r--r--pkg/build/akaros.go8
-rw-r--r--pkg/build/android.go26
-rw-r--r--pkg/build/build.go4
-rw-r--r--pkg/build/cuttlefish.go14
-rw-r--r--pkg/build/freebsd.go4
-rw-r--r--pkg/build/fuchsia.go2
-rw-r--r--pkg/build/linux.go14
-rw-r--r--pkg/build/linux_linux.go14
-rw-r--r--pkg/build/netbsd.go14
-rw-r--r--pkg/build/openbsd.go2
-rw-r--r--pkg/config/config.go4
-rw-r--r--pkg/cover/backend/dwarf.go8
-rw-r--r--pkg/cover/backend/elf.go4
-rw-r--r--pkg/cover/backend/gvisor.go2
-rw-r--r--pkg/cover/backend/mach-o.go2
-rw-r--r--pkg/cover/backend/modules.go4
-rw-r--r--pkg/cover/html.go2
-rw-r--r--pkg/csource/build.go2
-rw-r--r--pkg/csource/common.go2
-rw-r--r--pkg/csource/csource.go4
-rw-r--r--pkg/db/db.go14
-rw-r--r--pkg/email/parser.go16
-rw-r--r--pkg/gce/gce.go22
-rw-r--r--pkg/gcs/gcs.go2
-rw-r--r--pkg/hash/hash.go2
-rw-r--r--pkg/host/machine_info_linux.go4
-rw-r--r--pkg/ifuzz/x86/gen/gen.go8
-rw-r--r--pkg/image/compression.go6
-rw-r--r--pkg/instance/execprog.go4
-rw-r--r--pkg/instance/instance.go24
-rw-r--r--pkg/ipc/ipc.go22
-rw-r--r--pkg/ipc/ipc_test.go4
-rw-r--r--pkg/kcidb/client.go4
-rw-r--r--pkg/kconfig/config.go2
-rw-r--r--pkg/kconfig/kconfig.go2
-rw-r--r--pkg/mgrconfig/load.go2
-rw-r--r--pkg/osutil/fileutil.go4
-rw-r--r--pkg/osutil/fileutil_test.go2
-rw-r--r--pkg/osutil/osutil.go10
-rw-r--r--pkg/osutil/osutil_unix.go6
-rw-r--r--pkg/osutil/sharedmem_memfd.go2
-rw-r--r--pkg/report/decompile.go4
-rw-r--r--pkg/report/report.go2
-rw-r--r--pkg/repro/strace.go4
-rw-r--r--pkg/rpctype/rpc.go2
-rw-r--r--pkg/runtest/run.go16
-rw-r--r--pkg/symbolizer/nm.go4
-rw-r--r--pkg/symbolizer/symbolizer.go6
-rw-r--r--pkg/tool/flags.go4
-rw-r--r--pkg/vcs/fuchsia.go4
-rw-r--r--pkg/vcs/git.go10
-rw-r--r--pkg/vcs/linux.go2
-rw-r--r--prog/encoding.go4
-rw-r--r--prog/validation.go2
-rw-r--r--sys/syz-extract/extract.go2
-rw-r--r--sys/syz-extract/fetch.go8
-rw-r--r--sys/syz-extract/freebsd.go4
-rw-r--r--sys/syz-extract/linux.go8
-rw-r--r--sys/syz-extract/netbsd.go2
-rw-r--r--sys/syz-extract/openbsd.go4
-rw-r--r--syz-ci/jobs.go28
-rw-r--r--syz-ci/manager.go38
-rw-r--r--syz-ci/syz-ci.go2
-rw-r--r--syz-ci/updater.go6
-rw-r--r--syz-fuzzer/testing.go12
-rw-r--r--syz-hub/state/state.go12
-rw-r--r--syz-manager/covfilter.go4
-rw-r--r--syz-manager/manager.go10
-rw-r--r--tools/syz-check/check.go2
-rw-r--r--tools/syz-imagegen/imagegen.go14
-rw-r--r--tools/syz-kconf/kconf.go12
-rw-r--r--tools/syz-kconf/parser.go10
-rw-r--r--tools/syz-reporter/reporter.go4
-rw-r--r--tools/syz-reprolist/reprolist.go6
-rw-r--r--tools/syz-runtest/runtest.go10
-rw-r--r--tools/syz-testbed/checkout.go4
-rw-r--r--tools/syz-testbed/html.go4
-rw-r--r--tools/syz-testbed/instance.go8
-rw-r--r--tools/syz-testbed/targets.go4
-rw-r--r--tools/syz-testbed/testbed.go4
-rw-r--r--vm/adb/adb.go16
-rw-r--r--vm/bhyve/bhyve.go2
-rw-r--r--vm/cuttlefish/cuttlefish.go22
-rw-r--r--vm/gce/gce.go36
-rw-r--r--vm/gvisor/gvisor.go4
-rwxr-xr-xvm/isolated/isolated.go14
-rw-r--r--vm/kvm/kvm.go12
-rw-r--r--vm/proxyapp/proxyappclient.go16
-rw-r--r--vm/qemu/qemu.go6
-rw-r--r--vm/starnix/starnix.go12
-rw-r--r--vm/vm.go2
-rw-r--r--vm/vmimpl/console.go10
-rw-r--r--vm/vmm/vmm.go2
110 files changed, 533 insertions, 533 deletions
diff --git a/dashboard/app/access.go b/dashboard/app/access.go
index 7ad85da09..97ed8af01 100644
--- a/dashboard/app/access.go
+++ b/dashboard/app/access.go
@@ -113,19 +113,19 @@ func checkCrashTextAccess(c context.Context, r *http.Request, field string, id i
Filter(field+"=", id).
GetAll(c, &crashes)
if err != nil {
- return nil, nil, fmt.Errorf("failed to query crashes: %v", err)
+ return nil, nil, fmt.Errorf("failed to query crashes: %w", err)
}
if len(crashes) != 1 {
err := fmt.Errorf("checkCrashTextAccess: found %v crashes for %v=%v", len(crashes), field, id)
if len(crashes) == 0 {
- err = fmt.Errorf("%w: %v", ErrClientNotFound, err)
+ err = fmt.Errorf("%w: %w", ErrClientNotFound, err)
}
return nil, nil, err
}
crash := crashes[0]
bug := new(Bug)
if err := db.Get(c, keys[0].Parent(), bug); err != nil {
- return nil, nil, fmt.Errorf("failed to get bug: %v", err)
+ return nil, nil, fmt.Errorf("failed to get bug: %w", err)
}
bugLevel := bug.sanitizeAccess(accessLevel(c, r))
return bug, crash, checkAccessLevel(c, r, bugLevel)
@@ -137,19 +137,19 @@ func checkJobTextAccess(c context.Context, r *http.Request, field string, id int
KeysOnly().
GetAll(c, nil)
if err != nil {
- return fmt.Errorf("failed to query jobs: %v", err)
+ return fmt.Errorf("failed to query jobs: %w", err)
}
if len(keys) != 1 {
err := fmt.Errorf("checkJobTextAccess: found %v jobs for %v=%v", len(keys), field, id)
if len(keys) == 0 {
// This can be triggered by bad user requests, so don't log the error.
- err = fmt.Errorf("%w: %v", ErrClientNotFound, err)
+ err = fmt.Errorf("%w: %w", ErrClientNotFound, err)
}
return err
}
bug := new(Bug)
if err := db.Get(c, keys[0].Parent(), bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
bugLevel := bug.sanitizeAccess(accessLevel(c, r))
return checkAccessLevel(c, r, bugLevel)
diff --git a/dashboard/app/admin.go b/dashboard/app/admin.go
index 0b6eef0c6..0bef11da0 100644
--- a/dashboard/app/admin.go
+++ b/dashboard/app/admin.go
@@ -306,7 +306,7 @@ func updateHeadReproLevel(c context.Context, w http.ResponseWriter, r *http.Requ
actual := ReproLevelNone
reproCrashes, _, err := queryCrashesForBug(c, key, 2)
if err != nil {
- return fmt.Errorf("failed to fetch crashes with repro: %v", err)
+ return fmt.Errorf("failed to fetch crashes with repro: %w", err)
}
for _, crash := range reproCrashes {
if crash.ReproIsRevoked {
diff --git a/dashboard/app/api.go b/dashboard/app/api.go
index 6565b8690..70b521f73 100644
--- a/dashboard/app/api.go
+++ b/dashboard/app/api.go
@@ -146,14 +146,14 @@ func handleAPI(c context.Context, r *http.Request) (reply interface{}, err error
if str := r.PostFormValue("payload"); str != "" {
gr, err := gzip.NewReader(strings.NewReader(str))
if err != nil {
- return nil, fmt.Errorf("failed to ungzip payload: %v", err)
+ return nil, fmt.Errorf("failed to ungzip payload: %w", err)
}
payload, err = io.ReadAll(gr)
if err != nil {
- return nil, fmt.Errorf("failed to ungzip payload: %v", err)
+ return nil, fmt.Errorf("failed to ungzip payload: %w", err)
}
if err := gr.Close(); err != nil {
- return nil, fmt.Errorf("failed to ungzip payload: %v", err)
+ return nil, fmt.Errorf("failed to ungzip payload: %w", err)
}
}
handler := apiHandlers[method]
@@ -173,7 +173,7 @@ func handleAPI(c context.Context, r *http.Request) (reply interface{}, err error
func apiLogError(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.LogEntry)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
log.Errorf(c, "%v: %v", req.Name, req.Text)
return nil, nil
@@ -182,7 +182,7 @@ func apiLogError(c context.Context, r *http.Request, payload []byte) (interface{
func apiBuilderPoll(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.BuilderPollReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
bugs, _, err := loadAllBugs(c, func(query *db.Query) *db.Query {
return query.Filter("Namespace=", ns).
@@ -249,7 +249,7 @@ func apiCommitPoll(c context.Context, ns string, r *http.Request, payload []byte
Limit(100).
GetAll(c, &bugs)
if err != nil {
- return nil, fmt.Errorf("failed to query bugs: %v", err)
+ return nil, fmt.Errorf("failed to query bugs: %w", err)
}
commits := make(map[string]bool)
for _, bug := range bugs {
@@ -266,7 +266,7 @@ func apiCommitPoll(c context.Context, ns string, r *http.Request, payload []byte
func apiUploadCommits(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.CommitPollResultReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
// This adds fixing commits to bugs.
err := addCommitsToBugs(c, ns, "", nil, req.Commits)
@@ -292,7 +292,7 @@ func addCommitInfo(c context.Context, ns string, com dashapi.Commit) error {
Filter("Commits=", com.Title).
GetAll(c, &bugs)
if err != nil {
- return fmt.Errorf("failed to query bugs: %v", err)
+ return fmt.Errorf("failed to query bugs: %w", err)
}
for i, bug := range bugs {
if err := addCommitInfoToBug(c, bug, keys[i], com); err != nil {
@@ -311,7 +311,7 @@ func addCommitInfoToBug(c context.Context, bug *Bug, bugKey *db.Key, com dashapi
tx := func(c context.Context) error {
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug %v: %v", bugKey.StringID(), err)
+ return fmt.Errorf("failed to get bug %v: %w", bugKey.StringID(), err)
}
if needUpdate, err := addCommitInfoToBugImpl(c, bug, com); err != nil {
return err
@@ -319,7 +319,7 @@ func addCommitInfoToBug(c context.Context, bug *Bug, bugKey *db.Key, com dashapi
return nil
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
@@ -365,7 +365,7 @@ func addCommitInfoToBugImpl(c context.Context, bug *Bug, com dashapi.Commit) (bo
func apiJobPoll(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.JobPollReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
if len(req.Managers) == 0 {
return nil, fmt.Errorf("no managers")
@@ -377,7 +377,7 @@ func apiJobPoll(c context.Context, r *http.Request, payload []byte) (interface{}
func apiJobDone(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.JobDoneReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
err := doneJob(c, req)
return nil, err
@@ -387,7 +387,7 @@ func apiJobDone(c context.Context, r *http.Request, payload []byte) (interface{}
func apiJobReset(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.JobResetReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
err := resetJobs(c, req)
return nil, err
@@ -396,7 +396,7 @@ func apiJobReset(c context.Context, r *http.Request, payload []byte) (interface{
func apiUploadBuild(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.Build)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
now := timeNow(c)
_, isNewBuild, err := uploadBuild(c, now, ns, req, BuildNormal)
@@ -591,7 +591,7 @@ func addCommitsToBug(c context.Context, bug *Bug, manager string, managers, fixC
tx := func(c context.Context) error {
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug %v: %v", bugKey.StringID(), err)
+ return fmt.Errorf("failed to get bug %v: %w", bugKey.StringID(), err)
}
if !bugNeedsCommitUpdate(c, bug, manager, fixCommits, presentCommits, false) {
return nil
@@ -616,7 +616,7 @@ func addCommitsToBug(c context.Context, bug *Bug, manager string, managers, fixC
}
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
@@ -650,7 +650,7 @@ func managerList(c context.Context, ns string) ([]string, error) {
Distinct().
GetAll(c, &builds)
if err != nil {
- return nil, fmt.Errorf("failed to query builds: %v", err)
+ return nil, fmt.Errorf("failed to query builds: %w", err)
}
configManagers := config.Namespaces[ns].Managers
var managers []string
@@ -666,7 +666,7 @@ func managerList(c context.Context, ns string) ([]string, error) {
func apiReportBuildError(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.BuildErrorReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
now := timeNow(c)
build, _, err := uploadBuild(c, now, ns, &req.Build, BuildFailed)
@@ -700,7 +700,7 @@ const (
func apiReportCrash(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.Crash)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
build, err := loadBuild(c, ns, req.BuildID)
if err != nil {
@@ -787,7 +787,7 @@ func reportCrash(c context.Context, build *Build, req *dashapi.Crash) (*Bug, err
tx := func(c context.Context) error {
bug = new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
bug.LastTime = now
if save {
@@ -816,7 +816,7 @@ func reportCrash(c context.Context, build *Build, req *dashapi.Crash) (*Bug, err
bug.MergedTitles = mergeString(bug.MergedTitles, req.Title)
bug.AltTitles = mergeStringList(bug.AltTitles, req.AltTitles)
if _, err = db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
@@ -897,7 +897,7 @@ func saveCrash(c context.Context, ns string, req *dashapi.Crash, bug *Bug, bugKe
crash.UpdateReportingPriority(c, build, bug)
crashKey := db.NewIncompleteKey(c, "Crash", bugKey)
if _, err = db.Put(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to put crash: %v", err)
+ return fmt.Errorf("failed to put crash: %w", err)
}
return nil
}
@@ -983,7 +983,7 @@ func purgeOldCrashes(c context.Context, bug *Bug, bugKey *db.Key) {
func apiReportFailedRepro(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.CrashID)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
req.Title = canonicalizeCrashTitle(req.Title, req.Corrupted, req.Suppressed)
@@ -999,12 +999,12 @@ func apiReportFailedRepro(c context.Context, ns string, r *http.Request, payload
tx := func(c context.Context) error {
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
bug.NumRepro++
bug.LastReproTime = now
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
@@ -1018,7 +1018,7 @@ func apiReportFailedRepro(c context.Context, ns string, r *http.Request, payload
func apiNeedRepro(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.CrashID)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
if req.Corrupted {
resp := &dashapi.NeedReproResp{
@@ -1070,7 +1070,7 @@ func normalizeCrashTitle(title string) string {
func apiManagerStats(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.ManagerStatsReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
now := timeNow(c)
err := updateManager(c, ns, req.Name, func(mgr *Manager, stats *ManagerStats) error {
@@ -1104,7 +1104,7 @@ func apiBugList(c context.Context, ns string, r *http.Request, payload []byte) (
KeysOnly().
GetAll(c, nil)
if err != nil {
- return nil, fmt.Errorf("failed to query bugs: %v", err)
+ return nil, fmt.Errorf("failed to query bugs: %w", err)
}
resp := &dashapi.BugListResp{}
for _, key := range keys {
@@ -1116,12 +1116,12 @@ func apiBugList(c context.Context, ns string, r *http.Request, payload []byte) (
func apiUpdateReport(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.UpdateReportReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
bug := new(Bug)
bugKey := db.NewKey(c, "Bug", req.BugID, 0, nil)
if err := db.Get(c, bugKey, bug); err != nil {
- return nil, fmt.Errorf("failed to get bug: %v", err)
+ return nil, fmt.Errorf("failed to get bug: %w", err)
}
if bug.Namespace != ns {
return nil, fmt.Errorf("no such bug")
@@ -1130,13 +1130,13 @@ func apiUpdateReport(c context.Context, ns string, r *http.Request, payload []by
crash := new(Crash)
crashKey := db.NewKey(c, "Crash", "", req.CrashID, bugKey)
if err := db.Get(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to query the crash: %v", err)
+ return fmt.Errorf("failed to query the crash: %w", err)
}
if req.GuiltyFiles != nil {
crash.ReportElements.GuiltyFiles = *req.GuiltyFiles
}
if _, err := db.Put(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to put reported crash: %v", err)
+ return fmt.Errorf("failed to put reported crash: %w", err)
}
return nil
}
@@ -1146,12 +1146,12 @@ func apiUpdateReport(c context.Context, ns string, r *http.Request, payload []by
func apiLoadBug(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.LoadBugReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
bug := new(Bug)
bugKey := db.NewKey(c, "Bug", req.ID, 0, nil)
if err := db.Get(c, bugKey, bug); err != nil {
- return nil, fmt.Errorf("failed to get bug: %v", err)
+ return nil, fmt.Errorf("failed to get bug: %w", err)
}
if bug.Namespace != ns {
return nil, fmt.Errorf("no such bug")
@@ -1162,7 +1162,7 @@ func apiLoadBug(c context.Context, ns string, r *http.Request, payload []byte) (
func apiLoadFullBug(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.LoadFullBugReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
bug, bugKey, err := findBugByReportingID(c, req.BugID)
if err != nil {
@@ -1192,7 +1192,7 @@ func loadBugReport(c context.Context, bug *Bug) (*dashapi.BugReport, error) {
func apiAddBuildAssets(c context.Context, ns string, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.AddBuildAssetsReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
assets := []Asset{}
for i, toAdd := range req.Assets {
@@ -1237,7 +1237,7 @@ func findExistingBugForCrash(c context.Context, ns string, titles []string) (*Bu
Filter("MergedTitles=", titles[0]).
GetAll(c, &bugs)
if err != nil {
- return nil, fmt.Errorf("failed to query bugs: %v", err)
+ return nil, fmt.Errorf("failed to query bugs: %w", err)
}
// We can find bugs with different bug.Title and uncomparable bug.Seq's.
// But there should be only one active bug for each crash title,
@@ -1263,7 +1263,7 @@ func findExistingBugForCrash(c context.Context, ns string, titles []string) (*Bu
Limit(1).
GetAll(c, &bugs)
if err != nil {
- return nil, fmt.Errorf("failed to query bugs: %v", err)
+ return nil, fmt.Errorf("failed to query bugs: %w", err)
}
if len(bugs) != 0 {
bug := bugs[0]
@@ -1292,7 +1292,7 @@ func findBugForCrash(c context.Context, ns string, titles []string) (*Bug, error
Filter("AltTitles=", title).
GetAll(c, &bugs1)
if err != nil {
- return nil, fmt.Errorf("failed to query bugs: %v", err)
+ return nil, fmt.Errorf("failed to query bugs: %w", err)
}
bugs = append(bugs, bugs1...)
}
@@ -1347,7 +1347,7 @@ func createBugForCrash(c context.Context, ns string, req *dashapi.Crash) (*Bug,
bugKey := db.NewKey(c, "Bug", bugHash, 0, nil)
if err := db.Get(c, bugKey, bug); err != nil {
if err != db.ErrNoSuchEntity {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
bug = &Bug{
Namespace: ns,
@@ -1369,7 +1369,7 @@ func createBugForCrash(c context.Context, ns string, req *dashapi.Crash) (*Bug,
return err
}
if _, err = db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put new bug: %v", err)
+ return fmt.Errorf("failed to put new bug: %w", err)
}
return nil
}
@@ -1493,15 +1493,15 @@ func getText(c context.Context, tag string, id int64) ([]byte, string, error) {
}
text := new(Text)
if err := db.Get(c, db.NewKey(c, tag, "", id, nil), text); err != nil {
- return nil, "", fmt.Errorf("failed to read text %v: %v", tag, err)
+ return nil, "", fmt.Errorf("failed to read text %v: %w", tag, err)
}
d, err := gzip.NewReader(bytes.NewBuffer(text.Text))
if err != nil {
- return nil, "", fmt.Errorf("failed to read text %v: %v", tag, err)
+ return nil, "", fmt.Errorf("failed to read text %v: %w", tag, err)
}
data, err := io.ReadAll(d)
if err != nil {
- return nil, "", fmt.Errorf("failed to read text %v: %v", tag, err)
+ return nil, "", fmt.Errorf("failed to read text %v: %w", tag, err)
}
return data, text.Namespace, nil
}
@@ -1576,7 +1576,7 @@ func handleRefreshSubsystems(w http.ResponseWriter, r *http.Request) {
func apiSaveDiscussion(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.SaveDiscussionReq)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
d := req.Discussion
newBugIDs := []string{}
diff --git a/dashboard/app/asset_storage.go b/dashboard/app/asset_storage.go
index 10926dfa2..3ce096799 100644
--- a/dashboard/app/asset_storage.go
+++ b/dashboard/app/asset_storage.go
@@ -442,7 +442,7 @@ func (ad *crashAssetDeprecator) bugStatusPolicy(crashKey *db.Key, crashAsset *As
bug := new(Bug)
err := db.Get(ad.c, bugKey, bug)
if err != nil {
- return false, fmt.Errorf("failed to query bug: %s", err)
+ return false, fmt.Errorf("failed to query bug: %w", err)
}
return bug.Status == BugStatusOpen ||
bug.Closed.After(timeNow(ad.c).Add(-keepAssetsForClosedBugs)), nil
diff --git a/dashboard/app/discussion.go b/dashboard/app/discussion.go
index 12a0392c5..64878f61c 100644
--- a/dashboard/app/discussion.go
+++ b/dashboard/app/discussion.go
@@ -109,7 +109,7 @@ func mergeDiscussionSummary(c context.Context, key, source string, diff Discussi
bug := new(Bug)
bugKey := db.NewKey(c, "Bug", key, 0, nil)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
var record *BugDiscussionInfo
for i, item := range bug.DiscussionInfo {
@@ -125,7 +125,7 @@ func mergeDiscussionSummary(c context.Context, key, source string, diff Discussi
}
record.Summary.merge(diff)
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
diff --git a/dashboard/app/entities.go b/dashboard/app/entities.go
index a4f9dcbe9..812d31e59 100644
--- a/dashboard/app/entities.go
+++ b/dashboard/app/entities.go
@@ -184,14 +184,14 @@ func updateSingleBug(c context.Context, bugKey *db.Key, transform func(*Bug) err
tx := func(c context.Context) error {
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
err := transform(bug)
if err != nil {
return err
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
@@ -694,7 +694,7 @@ func loadManager(c context.Context, ns, name string) (*Manager, error) {
mgr := new(Manager)
if err := db.Get(c, mgrKey(c, ns, name), mgr); err != nil {
if err != db.ErrNoSuchEntity {
- return nil, fmt.Errorf("failed to get manager %v/%v: %v", ns, name, err)
+ return nil, fmt.Errorf("failed to get manager %v/%v: %w", ns, name, err)
}
mgr = &Manager{
Namespace: ns,
@@ -717,7 +717,7 @@ func updateManager(c context.Context, ns, name string, fn func(mgr *Manager, sta
statsKey := db.NewKey(c, "ManagerStats", "", int64(date), mgrKey)
if err := db.Get(c, statsKey, stats); err != nil {
if err != db.ErrNoSuchEntity {
- return fmt.Errorf("failed to get stats %v/%v/%v: %v", ns, name, date, err)
+ return fmt.Errorf("failed to get stats %v/%v/%v: %w", ns, name, date, err)
}
stats = &ManagerStats{
Date: date,
@@ -729,10 +729,10 @@ func updateManager(c context.Context, ns, name string, fn func(mgr *Manager, sta
}
if _, err := db.Put(c, mgrKey, mgr); err != nil {
- return fmt.Errorf("failed to put manager: %v", err)
+ return fmt.Errorf("failed to put manager: %w", err)
}
if _, err := db.Put(c, statsKey, stats); err != nil {
- return fmt.Errorf("failed to put manager stats: %v", err)
+ return fmt.Errorf("failed to put manager stats: %w", err)
}
return nil
}
@@ -747,7 +747,7 @@ func loadAllManagers(c context.Context, ns string) ([]*Manager, []*db.Key, error
}
keys, err := query.GetAll(c, &managers)
if err != nil {
- return nil, nil, fmt.Errorf("failed to query managers: %v", err)
+ return nil, nil, fmt.Errorf("failed to query managers: %w", err)
}
var result []*Manager
var resultKeys []*db.Key
@@ -775,7 +775,7 @@ func loadBuild(c context.Context, ns, id string) (*Build, error) {
if err == db.ErrNoSuchEntity {
return nil, fmt.Errorf("unknown build %v/%v", ns, id)
}
- return nil, fmt.Errorf("failed to get build %v/%v: %v", ns, id, err)
+ return nil, fmt.Errorf("failed to get build %v/%v: %w", ns, id, err)
}
return build, nil
}
@@ -809,7 +809,7 @@ func splitDisplayTitle(display string) (string, int64, error) {
seqStr := display[match[4]:match[5]]
seq, err := strconv.ParseInt(seqStr, 10, 64)
if err != nil {
- return "", 0, fmt.Errorf("failed to parse bug title: %v", err)
+ return "", 0, fmt.Errorf("failed to parse bug title: %w", err)
}
if seq <= 0 || seq > 1e6 {
return "", 0, fmt.Errorf("failed to parse bug title: seq=%v", seq)
@@ -825,7 +825,7 @@ func canonicalBug(c context.Context, bug *Bug) (*Bug, error) {
canon := new(Bug)
bugKey := db.NewKey(c, "Bug", bug.DupOf, 0, nil)
if err := db.Get(c, bugKey, canon); err != nil {
- return nil, fmt.Errorf("failed to get dup bug %q for %q: %v",
+ return nil, fmt.Errorf("failed to get dup bug %q for %q: %w",
bug.DupOf, bug.keyHash(), err)
}
bug = canon
@@ -949,11 +949,11 @@ func addCrashReference(c context.Context, crashID int64, bugKey *db.Key, ref Cra
crash := new(Crash)
crashKey := db.NewKey(c, "Crash", "", crashID, bugKey)
if err := db.Get(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to get reported crash %v: %v", crashID, err)
+ return fmt.Errorf("failed to get reported crash %v: %w", crashID, err)
}
crash.AddReference(ref)
if _, err := db.Put(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to put reported crash %v: %v", crashID, err)
+ return fmt.Errorf("failed to put reported crash %v: %w", crashID, err)
}
return nil
}
@@ -963,11 +963,11 @@ func removeCrashReference(c context.Context, crashID int64, bugKey *db.Key,
crash := new(Crash)
crashKey := db.NewKey(c, "Crash", "", crashID, bugKey)
if err := db.Get(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to get reported crash %v: %v", crashID, err)
+ return fmt.Errorf("failed to get reported crash %v: %w", crashID, err)
}
crash.ClearReference(t, key)
if _, err := db.Put(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to put reported crash %v: %v", crashID, err)
+ return fmt.Errorf("failed to put reported crash %v: %w", crashID, err)
}
return nil
}
diff --git a/dashboard/app/jobs.go b/dashboard/app/jobs.go
index 3c31991e2..fc18bab00 100644
--- a/dashboard/app/jobs.go
+++ b/dashboard/app/jobs.go
@@ -53,7 +53,7 @@ func handleTestRequest(c context.Context, args *testReqArgs) error {
}
crash, crashKey, err := findCrashForBug(c, args.bug)
if err != nil {
- return fmt.Errorf("failed to find a crash: %v", err)
+ return fmt.Errorf("failed to find a crash: %w", err)
}
_, _, err = addTestJob(c, &testJobArgs{
testReqArgs: *args,
@@ -75,7 +75,7 @@ func handleTestRequest(c context.Context, args *testReqArgs) error {
merged := email.MergeEmailLists(bugCC, args.jobCC)
bugReporting.CC = strings.Join(merged, "|")
if _, err := db.Put(c, args.bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
@@ -163,7 +163,7 @@ func addTestJob(c context.Context, args *testJobArgs) (*Job, *db.Key, error) {
Filter("ExtID=", args.extID).
GetAll(c, &jobs)
if len(jobs) > 1 || err != nil {
- return fmt.Errorf("failed to query jobs: jobs=%v err=%v", len(jobs), err)
+ return fmt.Errorf("failed to query jobs: jobs=%v err=%w", len(jobs), err)
}
}
if len(jobs) != 0 {
@@ -175,14 +175,14 @@ func addTestJob(c context.Context, args *testJobArgs) (*Job, *db.Key, error) {
}
job.Link = args.link
if jobKey, err = db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("failed to put job: %v", err)
+ return fmt.Errorf("failed to put job: %w", err)
}
return nil
}
// Create a new job.
jobKey = db.NewIncompleteKey(c, "Job", args.bugKey)
if jobKey, err = db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("failed to put job: %v", err)
+ return fmt.Errorf("failed to put job: %w", err)
}
return addCrashReference(c, job.CrashID, args.bugKey,
CrashReference{CrashReferenceJob, extJobID(jobKey), now})
@@ -198,7 +198,7 @@ func addTestJob(c context.Context, args *testJobArgs) (*Job, *db.Key, error) {
}
}
if err != nil {
- return nil, nil, fmt.Errorf("job tx failed: %v", err)
+ return nil, nil, fmt.Errorf("job tx failed: %w", err)
}
return job, jobKey, nil
}
@@ -232,7 +232,7 @@ func invalidateBisection(c context.Context, jobKey *db.Key) error {
tx := func(c context.Context) error {
job := new(Job)
if err := db.Get(c, jobKey, job); err != nil {
- return fmt.Errorf("failed to get job: %v", err)
+ return fmt.Errorf("failed to get job: %w", err)
}
if job.Type != JobBisectCause && job.Type != JobBisectFix {
@@ -242,14 +242,14 @@ func invalidateBisection(c context.Context, jobKey *db.Key) error {
// Update the job.
job.InvalidatedBy = u.Email
if _, err := db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("failed to put job: %v", err)
+ return fmt.Errorf("failed to put job: %w", err)
}
// Update the bug.
bug := new(Bug)
bugKey := jobKey.Parent()
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
if job.Type == JobBisectCause {
bug.BisectCause = BisectNot
@@ -257,12 +257,12 @@ func invalidateBisection(c context.Context, jobKey *db.Key) error {
bug.BisectFix = BisectNot
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
if err := db.RunInTransaction(c, tx, &db.TransactionOptions{XG: true, Attempts: 10}); err != nil {
- return fmt.Errorf("update failed: %v", err)
+ return fmt.Errorf("update failed: %w", err)
}
return nil
@@ -363,12 +363,12 @@ func throttleJobGeneration(c context.Context, managers map[string]dashapi.Manage
}
manager.LastGeneratedJob = timeNow(c)
if _, err = db.Put(c, keys[0], manager); err != nil {
- return fmt.Errorf("failed to put Manager: %v", err)
+ return fmt.Errorf("failed to put Manager: %w", err)
}
return nil
}
if err := db.RunInTransaction(c, tx, &db.TransactionOptions{}); err != nil {
- return fmt.Errorf("failed to throttle: %v", err)
+ return fmt.Errorf("failed to throttle: %w", err)
}
}
for name := range drop {
@@ -624,7 +624,7 @@ func findBugsForBisection(c context.Context, managers map[string]bool,
return query
})
if err != nil {
- return nil, nil, fmt.Errorf("failed to query bugs: %v", err)
+ return nil, nil, fmt.Errorf("failed to query bugs: %w", err)
}
for bi, bug := range bugs {
if !shouldBisectBug(c, bug, managers, jobType) {
@@ -713,7 +713,7 @@ func createBisectJobForBug(c context.Context, bug0 *Bug, crash *Crash, bugKey, c
jobKey = nil
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug %v: %v", bugKey.StringID(), err)
+ return fmt.Errorf("failed to get bug %v: %w", bugKey.StringID(), err)
}
if jobType == JobBisectFix && bug.BisectFix != BisectNot ||
jobType == JobBisectCause && bug.BisectCause != BisectNot {
@@ -730,10 +730,10 @@ func createBisectJobForBug(c context.Context, bug0 *Bug, crash *Crash, bugKey, c
var err error
jobKey = db.NewIncompleteKey(c, "Job", bugKey)
if jobKey, err = db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("failed to put job: %v", err)
+ return fmt.Errorf("failed to put job: %w", err)
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return addCrashReference(c, job.CrashID, bugKey,
CrashReference{CrashReferenceJob, extJobID(jobKey), now})
@@ -742,7 +742,7 @@ func createBisectJobForBug(c context.Context, bug0 *Bug, crash *Crash, bugKey, c
// We're accessing two different kinds in addCrashReference.
XG: true,
}); err != nil {
- return nil, nil, fmt.Errorf("create bisect job tx failed: %v", err)
+ return nil, nil, fmt.Errorf("create bisect job tx failed: %w", err)
}
return job, jobKey, nil
}
@@ -757,7 +757,7 @@ func createJobResp(c context.Context, job *Job, jobKey *db.Key) (*dashapi.JobPol
crashKey := db.NewKey(c, "Crash", "", job.CrashID, bugKey)
crash := new(Crash)
if err := db.Get(c, crashKey, crash); err != nil {
- return nil, false, fmt.Errorf("job %v: failed to get crash: %v", jobID, err)
+ return nil, false, fmt.Errorf("job %v: failed to get crash: %w", jobID, err)
}
build, err := loadBuild(c, job.Namespace, crash.BuildID)
@@ -789,7 +789,7 @@ func createJobResp(c context.Context, job *Job, jobKey *db.Key) (*dashapi.JobPol
stale = false
job = new(Job)
if err := db.Get(c, jobKey, job); err != nil {
- return fmt.Errorf("job %v: failed to get in tx: %v", jobID, err)
+ return fmt.Errorf("job %v: failed to get in tx: %w", jobID, err)
}
if !job.Finished.IsZero() {
// This happens sometimes due to inconsistent db.
@@ -800,7 +800,7 @@ func createJobResp(c context.Context, job *Job, jobKey *db.Key) (*dashapi.JobPol
job.IsRunning = true
job.LastStarted = now
if _, err := db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("job %v: failed to put: %v", jobID, err)
+ return fmt.Errorf("job %v: failed to put: %w", jobID, err)
}
return nil
}
@@ -879,11 +879,11 @@ func handleRetestedRepro(c context.Context, now time.Time, job *Job, jobKey *db.
}
crash.UpdateReportingPriority(c, lastBuild, bug)
if _, err := db.Put(c, crashKey, crash); err != nil {
- return nil, fmt.Errorf("failed to put crash: %v", err)
+ return nil, fmt.Errorf("failed to put crash: %w", err)
}
reproCrashes, crashKeys, err := queryCrashesForBug(c, bugKey, 2)
if err != nil {
- return nil, fmt.Errorf("failed to fetch crashes with repro: %v", err)
+ return nil, fmt.Errorf("failed to fetch crashes with repro: %w", err)
}
// Now we can update the bug.
bug.HeadReproLevel = ReproLevelNone
@@ -940,7 +940,7 @@ func resetJobs(c context.Context, req *dashapi.JobResetReq) error {
tx := func(c context.Context) error {
job = new(Job)
if err := db.Get(c, jobKey, job); err != nil {
- return fmt.Errorf("job %v: failed to get in tx: %v", jobKey, err)
+ return fmt.Errorf("job %v: failed to get in tx: %w", jobKey, err)
}
if job.IsFinished() {
// Just in case.
@@ -948,7 +948,7 @@ func resetJobs(c context.Context, req *dashapi.JobResetReq) error {
}
job.IsRunning = false
if _, err := db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("job %v: failed to put: %v", jobKey, err)
+ return fmt.Errorf("job %v: failed to put: %w", jobKey, err)
}
return nil
}
@@ -971,7 +971,7 @@ func doneJob(c context.Context, req *dashapi.JobDoneReq) error {
// So we have to query last build for the manager before the transaction.
job := new(Job)
if err := db.Get(c, jobKey, job); err != nil {
- return fmt.Errorf("job %v: failed to get job: %v", jobID, err)
+ return fmt.Errorf("job %v: failed to get job: %w", jobID, err)
}
lastBuild, err := lastManagerBuild(c, job.Namespace, job.Manager)
if err != nil {
@@ -981,7 +981,7 @@ func doneJob(c context.Context, req *dashapi.JobDoneReq) error {
tx := func(c context.Context) error {
job = new(Job)
if err := db.Get(c, jobKey, job); err != nil {
- return fmt.Errorf("job %v: failed to get job: %v", jobID, err)
+ return fmt.Errorf("job %v: failed to get job: %w", jobID, err)
}
if !job.Finished.IsZero() {
return fmt.Errorf("job %v: already finished", jobID)
@@ -1041,11 +1041,11 @@ func doneJob(c context.Context, req *dashapi.JobDoneReq) error {
}
}
if jobKey, err = db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("failed to put job: %v", err)
+ return fmt.Errorf("failed to put job: %w", err)
}
if bug != nil {
if _, err := db.Put(c, jobKey.Parent(), bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
}
log.Infof(c, "DONE JOB %v: reported=%v reporting=%v", jobID, job.Reported, job.Reporting)
@@ -1058,7 +1058,7 @@ func doneJob(c context.Context, req *dashapi.JobDoneReq) error {
if job.TreeOrigin {
err = treeOriginJobDone(c, jobKey, job)
if err != nil {
- return fmt.Errorf("job %v: failed to execute tree origin handlers: %s", jobID, err)
+ return fmt.Errorf("job %v: failed to execute tree origin handlers: %w", jobID, err)
}
}
return nil
@@ -1131,7 +1131,7 @@ func pollCompletedJobs(c context.Context, typ string) ([]*dashapi.BugReport, err
Filter("Reported=", false).
GetAll(c, &jobs)
if err != nil {
- return nil, fmt.Errorf("failed to query jobs: %v", err)
+ return nil, fmt.Errorf("failed to query jobs: %w", err)
}
var reports []*dashapi.BugReport
for i, job := range jobs {
@@ -1158,7 +1158,7 @@ func pollCompletedJobs(c context.Context, typ string) ([]*dashapi.BugReport, err
bug := new(Bug)
bugKey := keys[i].Parent()
if err := db.Get(c, bugKey, bug); err != nil {
- return nil, fmt.Errorf("job %v: failed to get bug: %v", extJobID(keys[i]), err)
+ return nil, fmt.Errorf("job %v: failed to get bug: %w", extJobID(keys[i]), err)
}
if len(bug.Commits) != 0 || bug.Status != BugStatusOpen {
jobReported(c, extJobID(keys[i]))
@@ -1204,11 +1204,11 @@ func createBugReportForJob(c context.Context, job *Job, jobKey *db.Key, config i
crashKey := db.NewKey(c, "Crash", "", job.CrashID, bugKey)
crash := new(Crash)
if err := db.Get(c, crashKey, crash); err != nil {
- return nil, fmt.Errorf("failed to get crash: %v", err)
+ return nil, fmt.Errorf("failed to get crash: %w", err)
}
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return nil, fmt.Errorf("failed to load job parent bug: %v", err)
+ return nil, fmt.Errorf("failed to load job parent bug: %w", err)
}
bugReporting := bugReportingByName(bug, job.Reporting)
if bugReporting == nil {
@@ -1302,7 +1302,7 @@ func jobReported(c context.Context, jobID string) error {
tx := func(c context.Context) error {
job := new(Job)
if err := db.Get(c, jobKey, job); err != nil {
- return fmt.Errorf("job %v: failed to get job: %v", jobID, err)
+ return fmt.Errorf("job %v: failed to get job: %w", jobID, err)
}
job.Reported = true
// Auto-mark the bug as fixed by the result of fix bisection,
@@ -1313,17 +1313,17 @@ func jobReported(c context.Context, jobID string) error {
bug := new(Bug)
bugKey := jobKey.Parent()
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
if bug.Status == BugStatusOpen && len(bug.Commits) == 0 {
bug.updateCommits([]string{job.Commits[0].Title}, now)
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
}
}
if _, err := db.Put(c, jobKey, job); err != nil {
- return fmt.Errorf("failed to put job: %v", err)
+ return fmt.Errorf("failed to put job: %w", err)
}
return nil
}
@@ -1341,7 +1341,7 @@ func handleExternalTestRequest(c context.Context, req *dashapi.TestPatchRequest)
}
crash, crashKey, err := findCrashForBug(c, bug)
if err != nil {
- return fmt.Errorf("failed to find a crash: %v", err)
+ return fmt.Errorf("failed to find a crash: %w", err)
}
if req.Branch == "" && req.Repo == "" {
build, err := loadBuild(c, bug.Namespace, crash.BuildID)
@@ -1394,7 +1394,7 @@ func loadPendingJob(c context.Context, managers map[string]dashapi.ManagerJobs)
Order("Created").
GetAll(c, &jobs)
if err != nil {
- return nil, nil, fmt.Errorf("failed to query jobs: %v", err)
+ return nil, nil, fmt.Errorf("failed to query jobs: %w", err)
}
sort.Stable(&jobSorter{jobs: jobs, keys: keys})
for i, job := range jobs {
@@ -1465,7 +1465,7 @@ func fetchJob(c context.Context, key string) (*Job, *db.Key, error) {
}
job := new(Job)
if err := db.Get(c, jobKey, job); err != nil {
- return nil, nil, fmt.Errorf("failed to get job: %v", err)
+ return nil, nil, fmt.Errorf("failed to get job: %w", err)
}
return job, jobKey, nil
}
diff --git a/dashboard/app/kcidb.go b/dashboard/app/kcidb.go
index 489c89c3b..b228e771c 100644
--- a/dashboard/app/kcidb.go
+++ b/dashboard/app/kcidb.go
@@ -91,7 +91,7 @@ func publishKcidbBug(c context.Context, client *kcidb.Client, bug *Bug, bugKey *
bug.KcidbStatus = 2
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
diff --git a/dashboard/app/main.go b/dashboard/app/main.go
index 8a50192fb..efbfd8ea4 100644
--- a/dashboard/app/main.go
+++ b/dashboard/app/main.go
@@ -630,7 +630,7 @@ func handleAdmin(c context.Context, w http.ResponseWriter, r *http.Request) erro
case "":
case "memcache_flush":
if err := memcache.Flush(c); err != nil {
- return fmt.Errorf("failed to flush memcache: %v", err)
+ return fmt.Errorf("failed to flush memcache: %w", err)
}
case "invalidate_bisection":
return handleInvalidateBisection(c, w, r)
@@ -669,7 +669,7 @@ func handleAdmin(c context.Context, w http.ResponseWriter, r *http.Request) erro
if r.FormValue("job_type") != "" {
value, err := strconv.Atoi(r.FormValue("job_type"))
if err != nil {
- return fmt.Errorf("%w: %v", ErrClientBadRequest, err)
+ return fmt.Errorf("%w: %w", ErrClientBadRequest, err)
}
g.Go(func() error {
var err error
@@ -721,7 +721,7 @@ func handleAdmin(c context.Context, w http.ResponseWriter, r *http.Request) erro
func handleBug(c context.Context, w http.ResponseWriter, r *http.Request) error {
bug, err := findBugByID(c, r)
if err != nil {
- return fmt.Errorf("%w: %v", ErrClientNotFound, err)
+ return fmt.Errorf("%w: %w", ErrClientNotFound, err)
}
accessLevel := accessLevel(c, r)
if err := checkAccessLevel(c, r, bug.sanitizeAccess(accessLevel)); err != nil {
@@ -1166,14 +1166,14 @@ func handleTextImpl(c context.Context, w http.ResponseWriter, r *http.Request, t
if x := r.FormValue("x"); x != "" {
xid, err := strconv.ParseUint(x, 16, 64)
if err != nil || xid == 0 {
- return fmt.Errorf("%w: failed to parse text id: %v", ErrClientBadRequest, err)
+ return fmt.Errorf("%w: failed to parse text id: %w", ErrClientBadRequest, err)
}
id = int64(xid)
} else {
// Old link support, don't remove.
xid, err := strconv.ParseInt(r.FormValue("id"), 10, 64)
if err != nil || xid == 0 {
- return fmt.Errorf("%w: failed to parse text id: %v", ErrClientBadRequest, err)
+ return fmt.Errorf("%w: failed to parse text id: %w", ErrClientBadRequest, err)
}
id = xid
}
@@ -1184,7 +1184,7 @@ func handleTextImpl(c context.Context, w http.ResponseWriter, r *http.Request, t
data, ns, err := getText(c, tag, id)
if err != nil {
if strings.Contains(err.Error(), "datastore: no such entity") {
- err = fmt.Errorf("%w: %v", ErrClientBadRequest, err)
+ err = fmt.Errorf("%w: %w", ErrClientBadRequest, err)
}
return err
}
@@ -2058,7 +2058,7 @@ func fetchErrorLogs(c context.Context) ([]byte, error) {
adminClient, err := logadmin.NewClient(c, projID)
if err != nil {
- return nil, fmt.Errorf("failed to create the logging client: %v", err)
+ return nil, fmt.Errorf("failed to create the logging client: %w", err)
}
defer adminClient.Close()
diff --git a/dashboard/app/reporting.go b/dashboard/app/reporting.go
index 609b4cf6e..599eb1a79 100644
--- a/dashboard/app/reporting.go
+++ b/dashboard/app/reporting.go
@@ -754,7 +754,7 @@ func foreachBug(c context.Context, filter func(*db.Query) *db.Query, fn func(bug
break
}
if err != nil {
- return fmt.Errorf("failed to fetch bugs: %v", err)
+ return fmt.Errorf("failed to fetch bugs: %w", err)
}
if err := fn(bug, key); err != nil {
return err
@@ -762,7 +762,7 @@ func foreachBug(c context.Context, filter func(*db.Query) *db.Query, fn func(bug
}
cur, err := iter.Cursor()
if err != nil {
- return fmt.Errorf("cursor failed while fetching bugs: %v", err)
+ return fmt.Errorf("cursor failed while fetching bugs: %w", err)
}
cursor = &cur
}
@@ -879,7 +879,7 @@ func checkDupBug(c context.Context, cmd *dashapi.BugUpdate, bug *Bug, bugKey, du
*Bug, bool, string, error) {
dup := new(Bug)
if err := db.Get(c, dupKey, dup); err != nil {
- return nil, false, internalError, fmt.Errorf("can't find the dup by key: %v", err)
+ return nil, false, internalError, fmt.Errorf("can't find the dup by key: %w", err)
}
bugReporting, _ := bugReportingByID(bug, cmd.ID)
dupReporting, _ := bugReportingByID(dup, cmd.DupOf)
@@ -906,7 +906,7 @@ func checkDupBug(c context.Context, cmd *dashapi.BugUpdate, bug *Bug, bugKey, du
}
dupCanon, err := canonicalBug(c, dup)
if err != nil {
- return nil, false, internalError, fmt.Errorf("failed to get canonical bug for dup: %v", err)
+ return nil, false, internalError, fmt.Errorf("failed to get canonical bug for dup: %w", err)
}
if !dupReporting.Closed.IsZero() && dupCanon.Status == BugStatusOpen {
return nil, false, "Dup bug is already upstreamed.", nil
@@ -956,7 +956,7 @@ func incomingCommandTx(c context.Context, now time.Time, cmd *dashapi.BugUpdate,
bool, string, error) {
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return false, internalError, fmt.Errorf("can't find the corresponding bug: %v", err)
+ return false, internalError, fmt.Errorf("can't find the corresponding bug: %w", err)
}
var dup *Bug
if cmd.Status == dashapi.BugStatusDup {
@@ -975,7 +975,7 @@ func incomingCommandTx(c context.Context, now time.Time, cmd *dashapi.BugUpdate,
return ok, reason, err
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return false, internalError, fmt.Errorf("failed to put bug: %v", err)
+ return false, internalError, fmt.Errorf("failed to put bug: %w", err)
}
if err := saveReportingState(c, state); err != nil {
return false, internalError, err
@@ -1160,7 +1160,7 @@ func findBugByReportingID(c context.Context, id string) (*Bug, *db.Key, error) {
Limit(2).
GetAll(c, &bugs)
if err != nil {
- return nil, nil, fmt.Errorf("failed to fetch bugs: %v", err)
+ return nil, nil, fmt.Errorf("failed to fetch bugs: %w", err)
}
if len(bugs) == 0 {
return nil, nil, fmt.Errorf("failed to find bug by reporting id %q", id)
@@ -1183,7 +1183,7 @@ func findDupByTitle(c context.Context, ns, title string) (*Bug, *db.Key, error)
if err == db.ErrNoSuchEntity {
return nil, nil, nil // This is not really an error, we should notify the user instead.
}
- return nil, nil, fmt.Errorf("failed to get dup: %v", err)
+ return nil, nil, fmt.Errorf("failed to get dup: %w", err)
}
return bug, bugKey, nil
}
@@ -1299,7 +1299,7 @@ func loadReportingState(c context.Context) (*ReportingState, error) {
state := new(ReportingState)
key := db.NewKey(c, "ReportingState", "", 1, nil)
if err := db.Get(c, key, state); err != nil && err != db.ErrNoSuchEntity {
- return nil, fmt.Errorf("failed to get reporting state: %v", err)
+ return nil, fmt.Errorf("failed to get reporting state: %w", err)
}
return state, nil
}
@@ -1307,7 +1307,7 @@ func loadReportingState(c context.Context) (*ReportingState, error) {
func saveReportingState(c context.Context, state *ReportingState) error {
key := db.NewKey(c, "ReportingState", "", 1, nil)
if _, err := db.Put(c, key, state); err != nil {
- return fmt.Errorf("failed to put reporting state: %v", err)
+ return fmt.Errorf("failed to put reporting state: %w", err)
}
return nil
}
@@ -1390,7 +1390,7 @@ func loadFullBugInfo(c context.Context, bug *Bug, bugKey *db.Key,
for _, crash := range crashes {
rep, err := crashBugReport(c, bug, crash.crash, crash.key, bugReporting, reporting)
if err != nil {
- return nil, fmt.Errorf("crash %d: %e", crash.key.IntID(), err)
+ return nil, fmt.Errorf("crash %d: %w", crash.key.IntID(), err)
}
ret.Crashes = append(ret.Crashes, rep)
}
@@ -1460,7 +1460,7 @@ func representativeCrashes(c context.Context, bugKey *db.Key) ([]*crashWithKey,
Limit(1).
GetAll(c, &crashes)
if err != nil {
- return nil, fmt.Errorf("failed to fetch the latest crash: %v", err)
+ return nil, fmt.Errorf("failed to fetch the latest crash: %w", err)
}
if len(crashes) > 0 {
recentCrash = &crashWithKey{crashes[0], keys[0]}
diff --git a/dashboard/app/reporting_email.go b/dashboard/app/reporting_email.go
index 071def054..ee87169b7 100644
--- a/dashboard/app/reporting_email.go
+++ b/dashboard/app/reporting_email.go
@@ -85,11 +85,11 @@ func (cfg *EmailConfig) Type() string {
func (cfg *EmailConfig) Validate() error {
if _, err := mail.ParseAddress(cfg.Email); err != nil {
- return fmt.Errorf("bad email address %q: %v", cfg.Email, err)
+ return fmt.Errorf("bad email address %q: %w", cfg.Email, err)
}
for _, email := range cfg.DefaultMaintainers {
if _, err := mail.ParseAddress(email); err != nil {
- return fmt.Errorf("bad email address %q: %v", email, err)
+ return fmt.Errorf("bad email address %q: %w", email, err)
}
}
if cfg.MailMaintainers && len(cfg.DefaultMaintainers) == 0 {
@@ -150,10 +150,10 @@ func emailPollBugs(c context.Context) error {
func emailSendBugReport(c context.Context, rep *dashapi.BugReport) error {
cfg := new(EmailConfig)
if err := json.Unmarshal(rep.Config, cfg); err != nil {
- return fmt.Errorf("failed to unmarshal email config: %v", err)
+ return fmt.Errorf("failed to unmarshal email config: %w", err)
}
if err := emailReport(c, rep); err != nil {
- return fmt.Errorf("failed to report bug: %v", err)
+ return fmt.Errorf("failed to report bug: %w", err)
}
cmd := &dashapi.BugUpdate{
ID: rep.ID,
@@ -171,7 +171,7 @@ func emailSendBugReport(c context.Context, rep *dashapi.BugReport) error {
}
ok, reason, err := incomingCommand(c, cmd)
if !ok || err != nil {
- return fmt.Errorf("failed to update reported bug: ok=%v reason=%v err=%v", ok, reason, err)
+ return fmt.Errorf("failed to update reported bug: ok=%v reason=%v err=%w", ok, reason, err)
}
return nil
}
@@ -179,7 +179,7 @@ func emailSendBugReport(c context.Context, rep *dashapi.BugReport) error {
func emailSendBugListReport(c context.Context, rep *dashapi.BugListReport) error {
cfg := new(EmailConfig)
if err := json.Unmarshal(rep.Config, cfg); err != nil {
- return fmt.Errorf("failed to unmarshal email config: %v", err)
+ return fmt.Errorf("failed to unmarshal email config: %w", err)
}
err := emailListReport(c, rep, cfg)
if err != nil {
@@ -231,7 +231,7 @@ func emailSendBugNotif(c context.Context, notif *dashapi.BugNotification) error
case dashapi.BugNotifLabel:
bodyBuf := new(bytes.Buffer)
if err := mailTemplates.ExecuteTemplate(bodyBuf, "mail_label_notif.txt", notif); err != nil {
- return fmt.Errorf("failed to execute mail_label_notif.txt: %v", err)
+ return fmt.Errorf("failed to execute mail_label_notif.txt: %w", err)
}
body = bodyBuf.String()
default:
@@ -239,7 +239,7 @@ func emailSendBugNotif(c context.Context, notif *dashapi.BugNotification) error
}
cfg := new(EmailConfig)
if err := json.Unmarshal(notif.Config, cfg); err != nil {
- return fmt.Errorf("failed to unmarshal email config: %v", err)
+ return fmt.Errorf("failed to unmarshal email config: %w", err)
}
to := email.MergeEmailLists([]string{cfg.Email}, notif.CC)
if cfg.MailMaintainers && notif.Public {
@@ -264,7 +264,7 @@ func emailSendBugNotif(c context.Context, notif *dashapi.BugNotification) error
}
ok, reason, err := incomingCommand(c, cmd)
if !ok || err != nil {
- return fmt.Errorf("notif update failed: ok=%v reason=%v err=%v", ok, reason, err)
+ return fmt.Errorf("notif update failed: ok=%v reason=%v err=%w", ok, reason, err)
}
return nil
}
@@ -330,7 +330,7 @@ func emailPollJobs(c context.Context) error {
func emailReport(c context.Context, rep *dashapi.BugReport) error {
cfg := new(EmailConfig)
if err := json.Unmarshal(rep.Config, cfg); err != nil {
- return fmt.Errorf("failed to unmarshal email config: %v", err)
+ return fmt.Errorf("failed to unmarshal email config: %w", err)
}
if rep.UserSpaceArch == targets.AMD64 {
// This is default, so don't include the info.
@@ -417,7 +417,7 @@ func sendMailTemplate(c context.Context, params *mailSendParams) error {
}
body := new(bytes.Buffer)
if err := mailTemplates.ExecuteTemplate(body, params.templateName, params.templateArg); err != nil {
- return fmt.Errorf("failed to execute %v template: %v", params.templateName, err)
+ return fmt.Errorf("failed to execute %v template: %w", params.templateName, err)
}
log.Infof(c, "sending email %q to %q", params.title, to)
return sendMailText(c, params.cfg, params.title, from, to, params.replyTo, body.String())
@@ -672,7 +672,7 @@ func processDiscussionEmail(c context.Context, msg *email.Email, source dashapi.
msg.BugIDs = extIDs
err := saveDiscussionMessage(c, msg, source, dType)
if err != nil {
- return fmt.Errorf("failed to save in discussions: %v", err)
+ return fmt.Errorf("failed to save in discussions: %w", err)
}
return nil
}
@@ -1088,7 +1088,7 @@ func matchBugFromList(c context.Context, sender, subject string) (*bugInfoResult
Filter("Title=", title).
GetAll(c, &bugs)
if err != nil {
- return nil, fmt.Errorf("failed to fetch bugs: %v", err)
+ return nil, fmt.Errorf("failed to fetch bugs: %w", err)
}
// Filter the bugs by the email.
candidates := []*bugInfoResult{}
@@ -1237,7 +1237,7 @@ func replyTo(c context.Context, msg *email.Email, bugID, reply string) error {
// Sends email, can be stubbed for testing.
var sendEmail = func(c context.Context, msg *aemail.Message) error {
if err := aemail.Send(c, msg); err != nil {
- return fmt.Errorf("failed to send email: %v", err)
+ return fmt.Errorf("failed to send email: %w", err)
}
return nil
}
diff --git a/dashboard/app/reporting_external.go b/dashboard/app/reporting_external.go
index cdbcb70be..ffe3f00c8 100644
--- a/dashboard/app/reporting_external.go
+++ b/dashboard/app/reporting_external.go
@@ -20,7 +20,7 @@ import (
func apiReportingPollBugs(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.PollBugsRequest)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
reports := reportingPollBugs(c, req.Type)
resp := &dashapi.PollBugsResponse{
@@ -37,7 +37,7 @@ func apiReportingPollBugs(c context.Context, r *http.Request, payload []byte) (i
func apiReportingPollNotifications(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.PollNotificationsRequest)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
notifs := reportingPollNotifications(c, req.Type)
resp := &dashapi.PollNotificationsResponse{
@@ -49,7 +49,7 @@ func apiReportingPollNotifications(c context.Context, r *http.Request, payload [
func apiReportingPollClosed(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.PollClosedRequest)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
ids, err := reportingPollClosed(c, req.IDs)
if err != nil {
@@ -64,7 +64,7 @@ func apiReportingPollClosed(c context.Context, r *http.Request, payload []byte)
func apiReportingUpdate(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.BugUpdate)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
if req.JobID != "" {
resp := &dashapi.BugUpdateReply{
@@ -89,7 +89,7 @@ func apiReportingUpdate(c context.Context, r *http.Request, payload []byte) (int
func apiNewTestJob(c context.Context, r *http.Request, payload []byte) (interface{}, error) {
req := new(dashapi.TestPatchRequest)
if err := json.Unmarshal(payload, req); err != nil {
- return nil, fmt.Errorf("failed to unmarshal request: %v", err)
+ return nil, fmt.Errorf("failed to unmarshal request: %w", err)
}
resp := &dashapi.TestPatchReply{}
err := handleExternalTestRequest(c, req)
diff --git a/dashboard/app/reporting_lists.go b/dashboard/app/reporting_lists.go
index 7e9abef81..7e3ff0540 100644
--- a/dashboard/app/reporting_lists.go
+++ b/dashboard/app/reporting_lists.go
@@ -194,12 +194,12 @@ Please visit the new discussion thread.`
dbSubsystem := new(Subsystem)
err := db.Get(c, subsystemKey, dbSubsystem)
if err != nil {
- return fmt.Errorf("failed to get subsystem: %s", err)
+ return fmt.Errorf("failed to get subsystem: %w", err)
}
dbSubsystem.LastBugList = time.Time{}
_, err = db.Put(c, subsystemKey, dbSubsystem)
if err != nil {
- return fmt.Errorf("failed to save subsystem: %s", err)
+ return fmt.Errorf("failed to save subsystem: %w", err)
}
}
_, err = db.Put(c, reportKey, report)
diff --git a/dashboard/app/subsystem.go b/dashboard/app/subsystem.go
index 5dc0405ca..3777b4ded 100644
--- a/dashboard/app/subsystem.go
+++ b/dashboard/app/subsystem.go
@@ -81,7 +81,7 @@ func bugsToUpdateSubsystems(c context.Context, ns string, count int) ([]*Bug, []
var tmpBugs []*Bug
tmpKeys, err := query.Limit(count).GetAll(c, &tmpBugs)
if err != nil {
- return nil, nil, fmt.Errorf("query %d failed: %s", i, err)
+ return nil, nil, fmt.Errorf("query %d failed: %w", i, err)
}
bugs = append(bugs, tmpBugs...)
keys = append(keys, tmpKeys...)
diff --git a/dashboard/app/tree.go b/dashboard/app/tree.go
index 237f10fe0..e521cfdc8 100644
--- a/dashboard/app/tree.go
+++ b/dashboard/app/tree.go
@@ -29,7 +29,7 @@ func generateTreeOriginJobs(cGlobal context.Context, bugKey *db.Key,
tx := func(c context.Context) error {
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
ctx := &bugTreeContext{
c: c,
@@ -49,7 +49,7 @@ func generateTreeOriginJobs(cGlobal context.Context, bugKey *db.Key,
}
bug.TreeTests.NeedPoll = false
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
job, jobKey = ctx.job, ctx.jobKey
return nil
@@ -68,7 +68,7 @@ func treeOriginJobDone(cGlobal context.Context, jobKey *db.Key, job *Job) error
tx := func(c context.Context) error {
bug := new(Bug)
if err := db.Get(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to get bug: %v", err)
+ return fmt.Errorf("failed to get bug: %w", err)
}
ctx := &bugTreeContext{
c: c,
@@ -88,7 +88,7 @@ func treeOriginJobDone(cGlobal context.Context, jobKey *db.Key, job *Job) error
bug.TreeTests.NeedPoll = true
}
if _, err := db.Put(c, bugKey, bug); err != nil {
- return fmt.Errorf("failed to put bug: %v", err)
+ return fmt.Errorf("failed to put bug: %w", err)
}
return nil
}
@@ -542,7 +542,7 @@ func (ctx *bugTreeContext) loadCrashInfo() error {
// We need to also tolerate the case when the crash was just deleted.
err := db.Get(ctx.c, crashKey, crash)
if err != nil && err != db.ErrNoSuchEntity {
- return fmt.Errorf("failed to get crash: %v", err)
+ return fmt.Errorf("failed to get crash: %w", err)
} else if err == nil {
ok, build, err := ctx.isCrashRelevant(crash)
if err != nil {
@@ -665,7 +665,7 @@ func treeTestJobs(c context.Context, bug *Bug) ([]*dashapi.JobInfo, error) {
crashKey := db.NewKey(c, "Crash", "", job.CrashID, bug.key(c))
crash := new(Crash)
if err := db.Get(c, crashKey, crash); err != nil {
- return fmt.Errorf("failed to get crash: %v", err)
+ return fmt.Errorf("failed to get crash: %w", err)
}
info := makeJobInfo(c, job, jobKey, bug, build, crash)
mu.Lock()
diff --git a/dashboard/dashapi/dashapi.go b/dashboard/dashapi/dashapi.go
index a64ee2ad5..21ba8df1a 100644
--- a/dashboard/dashapi/dashapi.go
+++ b/dashboard/dashapi/dashapi.go
@@ -945,7 +945,7 @@ func (dash *Dashboard) queryImpl(method string, req, reply interface{}) error {
if req != nil {
data, err := json.Marshal(req)
if err != nil {
- return fmt.Errorf("failed to marshal request: %v", err)
+ return fmt.Errorf("failed to marshal request: %w", err)
}
buf := new(bytes.Buffer)
gz := gzip.NewWriter(buf)
@@ -964,7 +964,7 @@ func (dash *Dashboard) queryImpl(method string, req, reply interface{}) error {
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := dash.doer(r)
if err != nil {
- return fmt.Errorf("http request failed: %v", err)
+ return fmt.Errorf("http request failed: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
@@ -973,7 +973,7 @@ func (dash *Dashboard) queryImpl(method string, req, reply interface{}) error {
}
if reply != nil {
if err := json.NewDecoder(resp.Body).Decode(reply); err != nil {
- return fmt.Errorf("failed to unmarshal response: %v", err)
+ return fmt.Errorf("failed to unmarshal response: %w", err)
}
}
return nil
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index cd20cca07..4c02e6336 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -246,7 +246,7 @@ func (env *env) bisect() (*Result, error) {
cfg := env.cfg
if err := build.Clean(cfg.Manager.TargetOS, cfg.Manager.TargetVMArch,
cfg.Manager.Type, cfg.Manager.KernelSrc); err != nil {
- return nil, fmt.Errorf("kernel clean failed: %v", err)
+ return nil, fmt.Errorf("kernel clean failed: %w", err)
}
env.log("building syzkaller on %v", cfg.Syzkaller.Commit)
if _, err := env.inst.BuildSyzkaller(cfg.Syzkaller.Repo, cfg.Syzkaller.Commit); err != nil {
@@ -579,7 +579,7 @@ func (env *env) build() (*vcs.Commit, string, error) {
buildStart := time.Now()
mgr := env.cfg.Manager
if err := build.Clean(mgr.TargetOS, mgr.TargetVMArch, mgr.Type, mgr.KernelSrc); err != nil {
- return current, "", fmt.Errorf("kernel clean failed: %v", err)
+ return current, "", fmt.Errorf("kernel clean failed: %w", err)
}
kern := &env.cfg.Kernel
_, imageDetails, err := env.inst.BuildKernel(&instance.BuildKernelConfig{
@@ -618,7 +618,7 @@ func (env *env) test() (*testResult, error) {
}
if current == nil {
// This is not recoverable, as the caller must know which commit to skip.
- return res, fmt.Errorf("couldn't get repo HEAD: %v", err)
+ return res, fmt.Errorf("couldn't get repo HEAD: %w", err)
}
if err != nil {
errInfo := fmt.Sprintf("failed building %v: ", current.Hash)
diff --git a/pkg/build/akaros.go b/pkg/build/akaros.go
index 9e1ecc66f..67b044f04 100644
--- a/pkg/build/akaros.go
+++ b/pkg/build/akaros.go
@@ -19,7 +19,7 @@ type akaros struct{}
func (ctx akaros) build(params Params) (ImageDetails, error) {
configFile := filepath.Join(params.KernelDir, ".config")
if err := osutil.WriteFile(configFile, params.Config); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to write config file: %v", err)
+ return ImageDetails{}, fmt.Errorf("failed to write config file: %w", err)
}
if err := osutil.SandboxChown(configFile); err != nil {
return ImageDetails{}, err
@@ -61,7 +61,7 @@ bash
`
initFile := filepath.Join(params.KernelDir, "kern", "kfs", "init.sh")
if err := osutil.WriteFile(initFile, []byte(init)); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to write init script: %v", err)
+ return ImageDetails{}, fmt.Errorf("failed to write init script: %w", err)
}
if err := osutil.SandboxChown(initFile); err != nil {
return ImageDetails{}, err
@@ -82,7 +82,7 @@ bash
return ImageDetails{}, err
}
if err := osutil.WriteFile(filepath.Join(params.OutputDir, "image"), nil); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to write image file: %v", err)
+ return ImageDetails{}, fmt.Errorf("failed to write image file: %w", err)
}
for src, dst := range map[string]string{
".config": "kernel.config",
@@ -93,7 +93,7 @@ bash
fullSrc := filepath.Join(params.KernelDir, filepath.FromSlash(src))
fullDst := filepath.Join(params.OutputDir, filepath.FromSlash(dst))
if err := osutil.CopyFile(fullSrc, fullDst); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to copy %v: %v", src, err)
+ return ImageDetails{}, fmt.Errorf("failed to copy %v: %w", src, err)
}
}
return ImageDetails{}, nil
diff --git a/pkg/build/android.go b/pkg/build/android.go
index bade7142f..13a7de2e6 100644
--- a/pkg/build/android.go
+++ b/pkg/build/android.go
@@ -86,7 +86,7 @@ func (a android) build(params Params) (ImageDetails, error) {
buildCfg.DefconfigFragment), fmt.Sprintf("BUILD_TARGET=%v", buildCfg.BuildTarget))
if _, err := osutil.Run(time.Hour, cmd); err != nil {
- return details, fmt.Errorf("failed to build kernel: %s", err)
+ return details, fmt.Errorf("failed to build kernel: %w", err)
}
buildDistDir := filepath.Join(params.KernelDir, "dist")
@@ -96,30 +96,30 @@ func (a android) build(params Params) (ImageDetails, error) {
details.CompilerID, err = a.readCompiler(params.KernelDir)
if err != nil {
- return details, fmt.Errorf("failed to read compiler: %v", err)
+ return details, fmt.Errorf("failed to read compiler: %w", err)
}
if err := osutil.CopyFile(vmlinux, filepath.Join(params.OutputDir, "obj", "vmlinux")); err != nil {
- return details, fmt.Errorf("failed to copy vmlinux: %v", err)
+ return details, fmt.Errorf("failed to copy vmlinux: %w", err)
}
if err := osutil.CopyFile(config, filepath.Join(params.OutputDir, "obj", "kernel.config")); err != nil {
- return details, fmt.Errorf("failed to copy kernel config: %v", err)
+ return details, fmt.Errorf("failed to copy kernel config: %w", err)
}
imageFile, err := os.Create(filepath.Join(params.OutputDir, "image"))
if err != nil {
- return details, fmt.Errorf("failed to create output file: %v", err)
+ return details, fmt.Errorf("failed to create output file: %w", err)
}
defer imageFile.Close()
if err := a.embedImages(imageFile, buildDistDir, "boot.img", "dtbo.img", buildCfg.VendorBootImage,
"vendor_dlkm.img"); err != nil {
- return details, fmt.Errorf("failed to embed images: %v", err)
+ return details, fmt.Errorf("failed to embed images: %w", err)
}
details.Signature, err = elfBinarySignature(vmlinux, params.Tracer)
if err != nil {
- return details, fmt.Errorf("failed to generate signature: %s", err)
+ return details, fmt.Errorf("failed to generate signature: %w", err)
}
return details, nil
@@ -133,7 +133,7 @@ func (a android) embedImages(w io.Writer, srcDir string, imageNames ...string) e
path := filepath.Join(srcDir, name)
data, err := os.ReadFile(path)
if err != nil {
- return fmt.Errorf("failed to read %q: %v", name, err)
+ return fmt.Errorf("failed to read %q: %w", name, err)
}
if err := tw.WriteHeader(&tar.Header{
@@ -141,16 +141,16 @@ func (a android) embedImages(w io.Writer, srcDir string, imageNames ...string) e
Mode: 0600,
Size: int64(len(data)),
}); err != nil {
- return fmt.Errorf("failed to write header for %q: %v", name, err)
+ return fmt.Errorf("failed to write header for %q: %w", name, err)
}
if _, err := tw.Write(data); err != nil {
- return fmt.Errorf("failed to write data for %q: %v", name, err)
+ return fmt.Errorf("failed to write data for %q: %w", name, err)
}
}
if err := tw.Close(); err != nil {
- return fmt.Errorf("close archive: %v", err)
+ return fmt.Errorf("close archive: %w", err)
}
return nil
@@ -158,10 +158,10 @@ func (a android) embedImages(w io.Writer, srcDir string, imageNames ...string) e
func (a android) clean(kernelDir, targetArch string) error {
if err := osutil.RemoveAll(filepath.Join(kernelDir, "out")); err != nil {
- return fmt.Errorf("failed to clean 'out' directory: %v", err)
+ return fmt.Errorf("failed to clean 'out' directory: %w", err)
}
if err := osutil.RemoveAll(filepath.Join(kernelDir, "dist")); err != nil {
- return fmt.Errorf("failed to clean 'dist' directory: %v", err)
+ return fmt.Errorf("failed to clean 'dist' directory: %w", err)
}
return nil
}
diff --git a/pkg/build/build.go b/pkg/build/build.go
index f4cee5d88..9bcacbd90 100644
--- a/pkg/build/build.go
+++ b/pkg/build/build.go
@@ -81,7 +81,7 @@ func Image(params Params) (details ImageDetails, err error) {
if len(params.Config) != 0 {
// Write kernel config early, so that it's captured on build failures.
if err = osutil.WriteFile(filepath.Join(params.OutputDir, "kernel.config"), params.Config); err != nil {
- err = fmt.Errorf("failed to write config file: %v", err)
+ err = fmt.Errorf("failed to write config file: %w", err)
return
}
}
@@ -100,7 +100,7 @@ func Image(params Params) (details ImageDetails, err error) {
}
if key := filepath.Join(params.OutputDir, "key"); osutil.IsExist(key) {
if err := os.Chmod(key, 0600); err != nil {
- return details, fmt.Errorf("failed to chmod 0600 %v: %v", key, err)
+ return details, fmt.Errorf("failed to chmod 0600 %v: %w", key, err)
}
}
return
diff --git a/pkg/build/cuttlefish.go b/pkg/build/cuttlefish.go
index 8580aeba1..377f14222 100644
--- a/pkg/build/cuttlefish.go
+++ b/pkg/build/cuttlefish.go
@@ -125,7 +125,7 @@ func (c cuttlefish) build(params Params) (ImageDetails, error) {
var err error
// Clean output directory if it exists.
if err := osutil.RemoveAll(filepath.Join(params.KernelDir, "out")); err != nil {
- return details, fmt.Errorf("failed to clean before kernel build: %v", err)
+ return details, fmt.Errorf("failed to clean before kernel build: %w", err)
}
// Default to build.sh if compiler is not specified.
if params.Compiler == "bazel" {
@@ -133,25 +133,25 @@ func (c cuttlefish) build(params Params) (ImageDetails, error) {
return details, errors.New("kernel config was not provided for build")
}
if err := c.createDefconfig(filepath.Join(params.KernelDir, "common"), params.Config); err != nil {
- return details, fmt.Errorf("failed to create defconfig file: %v", err)
+ return details, fmt.Errorf("failed to create defconfig file: %w", err)
}
if err := c.runBazel(params.KernelDir); err != nil {
- return details, fmt.Errorf("failed to build kernel: %s", err)
+ return details, fmt.Errorf("failed to build kernel: %w", err)
}
// Find the .config file; it is placed in a temporary output directory during the build.
cmd := osutil.Command("find", ".", "-regex", ".*virtual_device_x86_64_config.*/\\.config")
cmd.Dir = params.KernelDir
configBytes, err := osutil.Run(time.Minute, cmd)
if err != nil {
- return details, fmt.Errorf("failed to find build config: %v", err)
+ return details, fmt.Errorf("failed to find build config: %w", err)
}
config = filepath.Join(params.KernelDir, strings.TrimSpace(string(configBytes)))
} else {
if err := c.runBuild(params.KernelDir, kernelConfig); err != nil {
- return details, fmt.Errorf("failed to build kernel: %s", err)
+ return details, fmt.Errorf("failed to build kernel: %w", err)
}
if err := c.runBuild(params.KernelDir, moduleConfig); err != nil {
- return details, fmt.Errorf("failed to build modules: %s", err)
+ return details, fmt.Errorf("failed to build modules: %w", err)
}
config = filepath.Join(params.KernelDir, "out", "common", ".config")
}
@@ -196,7 +196,7 @@ func (c cuttlefish) build(params Params) (ImageDetails, error) {
details.Signature, err = elfBinarySignature(vmlinux, params.Tracer)
if err != nil {
- return details, fmt.Errorf("failed to generate signature: %s", err)
+ return details, fmt.Errorf("failed to generate signature: %w", err)
}
return details, nil
diff --git a/pkg/build/freebsd.go b/pkg/build/freebsd.go
index c4cae75d0..2f4aa1313 100644
--- a/pkg/build/freebsd.go
+++ b/pkg/build/freebsd.go
@@ -68,7 +68,7 @@ options DIAGNOSTIC
fullSrc := filepath.Join(s.dir, s.src)
fullDst := filepath.Join(params.OutputDir, s.dst)
if err := osutil.CopyFile(fullSrc, fullDst); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to copy %v -> %v: %v", fullSrc, fullDst, err)
+ return ImageDetails{}, fmt.Errorf("failed to copy %v -> %v: %w", fullSrc, fullDst, err)
}
}
@@ -114,7 +114,7 @@ sudo mdconfig -d -u ${md#md}
`, objPrefix, params.KernelDir, confFile)
if debugOut, err := osutil.RunCmd(10*time.Minute, params.OutputDir, "/bin/sh", "-c", script); err != nil {
- return ImageDetails{}, fmt.Errorf("error copying kernel: %v\n%v", err, debugOut)
+ return ImageDetails{}, fmt.Errorf("error copying kernel: %w\n%v", err, debugOut)
}
return ImageDetails{}, nil
}
diff --git a/pkg/build/fuchsia.go b/pkg/build/fuchsia.go
index 22efc3de7..5a7c4fd82 100644
--- a/pkg/build/fuchsia.go
+++ b/pkg/build/fuchsia.go
@@ -87,7 +87,7 @@ func (fu fuchsia) build(params Params) (ImageDetails, error) {
fullSrc := filepath.Join(params.KernelDir, filepath.FromSlash(src))
fullDst := filepath.Join(params.OutputDir, filepath.FromSlash(dst))
if err := osutil.CopyFile(fullSrc, fullDst); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to copy %v: %v", src, err)
+ return ImageDetails{}, fmt.Errorf("failed to copy %v: %w", src, err)
}
}
return ImageDetails{}, nil
diff --git a/pkg/build/linux.go b/pkg/build/linux.go
index 112e2dfab..4069e0202 100644
--- a/pkg/build/linux.go
+++ b/pkg/build/linux.go
@@ -70,7 +70,7 @@ func (linux linux) build(params Params) (ImageDetails, error) {
func (linux linux) buildKernel(params Params) error {
configFile := filepath.Join(params.KernelDir, ".config")
if err := linux.writeFile(configFile, params.Config); err != nil {
- return fmt.Errorf("failed to write config file: %v", err)
+ return fmt.Errorf("failed to write config file: %w", err)
}
// One would expect olddefconfig here, but olddefconfig is not present in v3.6 and below.
// oldconfig is the same as olddefconfig if stdin is not set.
@@ -107,7 +107,7 @@ func (linux linux) buildKernel(params Params) error {
vmlinux := filepath.Join(params.KernelDir, "vmlinux")
outputVmlinux := filepath.Join(params.OutputDir, "obj", "vmlinux")
if err := osutil.Rename(vmlinux, outputVmlinux); err != nil {
- return fmt.Errorf("failed to rename vmlinux: %v", err)
+ return fmt.Errorf("failed to rename vmlinux: %w", err)
}
return nil
}
@@ -120,7 +120,7 @@ func (linux) createImage(params Params, kernelPath string) error {
defer os.RemoveAll(tempDir)
scriptFile := filepath.Join(tempDir, "create.sh")
if err := osutil.WriteExecFile(scriptFile, []byte(createImageScript)); err != nil {
- return fmt.Errorf("failed to write script file: %v", err)
+ return fmt.Errorf("failed to write script file: %w", err)
}
cmd := osutil.Command(scriptFile, params.UserspaceDir, kernelPath, params.TargetArch)
cmd.Dir = tempDir
@@ -131,7 +131,7 @@ func (linux) createImage(params Params, kernelPath string) error {
"SYZ_SYSCTL_FILE="+osutil.Abs(params.SysctlFile),
)
if _, err = osutil.Run(time.Hour, cmd); err != nil {
- return fmt.Errorf("image build failed: %v", err)
+ return fmt.Errorf("image build failed: %w", err)
}
// Note: we use CopyFile instead of Rename because src and dst can be on different filesystems.
imageFile := filepath.Join(params.OutputDir, "image")
@@ -254,11 +254,11 @@ func queryLinuxCompiler(kernelDir string) (string, error) {
func elfBinarySignature(bin string, tracer debugtracer.DebugTracer) (string, error) {
f, err := os.Open(bin)
if err != nil {
- return "", fmt.Errorf("failed to open binary for signature: %v", err)
+ return "", fmt.Errorf("failed to open binary for signature: %w", err)
}
ef, err := elf.NewFile(f)
if err != nil {
- return "", fmt.Errorf("failed to open elf binary: %v", err)
+ return "", fmt.Errorf("failed to open elf binary: %w", err)
}
hasher := sha256.New()
for _, sec := range ef.Sections {
@@ -272,7 +272,7 @@ func elfBinarySignature(bin string, tracer debugtracer.DebugTracer) (string, err
}
data, err := sec.Data()
if err != nil {
- return "", fmt.Errorf("failed to read ELF section %v: %v", sec.Name, err)
+ return "", fmt.Errorf("failed to read ELF section %v: %w", sec.Name, err)
}
hasher1 := sha256.New()
hasher1.Write(data)
diff --git a/pkg/build/linux_linux.go b/pkg/build/linux_linux.go
index d22fea678..c81ccf28e 100644
--- a/pkg/build/linux_linux.go
+++ b/pkg/build/linux_linux.go
@@ -58,7 +58,7 @@ func embedFiles(params Params, callback func(mountDir string) error) error {
return err
}
if err := tryMount(loopFile+"p1", mountDir); err != nil {
- return fmt.Errorf("mount(%vp1, %v) failed: %v", loopFile, mountDir, err)
+ return fmt.Errorf("mount(%vp1, %v) failed: %w", loopFile, mountDir, err)
}
defer unix.Unmount(mountDir, 0)
if err := callback(mountDir); err != nil {
@@ -122,26 +122,26 @@ func copyKernel(mountDir, kernelPath string) error {
func linuxSetupLoop(imageFile string) (int, string, error) {
image, err := unix.Open(imageFile, unix.O_RDWR, 0)
if err != nil {
- return 0, "", fmt.Errorf("failed to open %v: %v", imageFile, err)
+ return 0, "", fmt.Errorf("failed to open %v: %w", imageFile, err)
}
defer unix.Close(image)
loopControl, err := unix.Open("/dev/loop-control", unix.O_RDWR, 0)
if err != nil {
- return 0, "", fmt.Errorf("failed to open /dev/loop-control: %v", err)
+ return 0, "", fmt.Errorf("failed to open /dev/loop-control: %w", err)
}
defer unix.Close(loopControl)
loopIndex, err := unix.IoctlRetInt(loopControl, unix.LOOP_CTL_GET_FREE)
if err != nil {
- return 0, "", fmt.Errorf("LOOP_CTL_GET_FREE failed: %v", err)
+ return 0, "", fmt.Errorf("LOOP_CTL_GET_FREE failed: %w", err)
}
loopFile := fmt.Sprintf("/dev/loop%v", loopIndex)
loop, err := unix.Open(loopFile, unix.O_RDWR, 0)
if err != nil {
- return 0, "", fmt.Errorf("failed to open %v: %v", loopFile, err)
+ return 0, "", fmt.Errorf("failed to open %v: %w", loopFile, err)
}
if err := unix.IoctlSetInt(loop, unix.LOOP_SET_FD, image); err != nil {
unix.Close(loop)
- return 0, "", fmt.Errorf("LOOP_SET_FD failed: %v", err)
+ return 0, "", fmt.Errorf("LOOP_SET_FD failed: %w", err)
}
info := &unix.LoopInfo64{
Flags: unix.LO_FLAGS_PARTSCAN,
@@ -152,7 +152,7 @@ func linuxSetupLoop(imageFile string) (int, string, error) {
if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(loop), unix.LOOP_SET_STATUS64,
uintptr(unsafe.Pointer(info))); err != 0 {
unix.Close(loop)
- return 0, "", fmt.Errorf("LOOP_SET_STATUS64 failed: %v", err)
+ return 0, "", fmt.Errorf("LOOP_SET_STATUS64 failed: %w", err)
}
return loop, loopFile, nil
}
diff --git a/pkg/build/netbsd.go b/pkg/build/netbsd.go
index b569b9833..8717b8105 100644
--- a/pkg/build/netbsd.go
+++ b/pkg/build/netbsd.go
@@ -75,12 +75,12 @@ func (ctx netbsd) build(params Params) (ImageDetails, error) {
fullSrc := filepath.Join(s.dir, s.src)
fullDst := filepath.Join(params.OutputDir, s.dst)
if err := osutil.CopyFile(fullSrc, fullDst); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to copy %v -> %v: %v", fullSrc, fullDst, err)
+ return ImageDetails{}, fmt.Errorf("failed to copy %v -> %v: %w", fullSrc, fullDst, err)
}
}
keyFile := filepath.Join(params.OutputDir, "key")
if err := os.Chmod(keyFile, 0600); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to chmod 0600 %v: %v", keyFile, err)
+ return ImageDetails{}, fmt.Errorf("failed to chmod 0600 %v: %w", keyFile, err)
}
return ImageDetails{}, ctx.copyKernelToDisk(params.TargetArch, params.VMType, params.OutputDir,
filepath.Join(compileDir, "netbsd"))
@@ -117,23 +117,23 @@ func (ctx netbsd) copyKernelToDisk(targetArch, vmType, outputDir, kernel string)
// Create a VM pool.
pool, err := vm.Create(cfg, false)
if err != nil {
- return fmt.Errorf("failed to create a VM Pool: %v", err)
+ return fmt.Errorf("failed to create a VM Pool: %w", err)
}
// Create a new reporter instance.
reporter, err := report.NewReporter(cfg)
if err != nil {
- return fmt.Errorf("failed to create a Reporter: %v", err)
+ return fmt.Errorf("failed to create a Reporter: %w", err)
}
// Create a VM instance (we need only one).
inst, err := pool.Create(0)
if err != nil {
- return fmt.Errorf("failed to create the VM Instance: %v", err)
+ return fmt.Errorf("failed to create the VM Instance: %w", err)
}
defer inst.Close()
// Copy the kernel into the disk image and replace it.
kernel, err = inst.Copy(kernel)
if err != nil {
- return fmt.Errorf("error copying the kernel: %v", err)
+ return fmt.Errorf("error copying the kernel: %w", err)
}
if kernel != "/netbsd" {
return fmt.Errorf("kernel is copied into wrong location: %v", kernel)
@@ -153,7 +153,7 @@ func (ctx netbsd) copyKernelToDisk(targetArch, vmType, outputDir, kernel string)
commands = append(commands, "sync") // Run sync so that the copied image is stored properly.
outc, errc, err := inst.Run(time.Minute, nil, strings.Join(commands, ";"))
if err != nil {
- return fmt.Errorf("error syncing the instance %v", err)
+ return fmt.Errorf("error syncing the instance %w", err)
}
// Make sure that the command has executed properly.
rep := inst.MonitorExecution(outc, errc, reporter, vm.ExitNormal)
diff --git a/pkg/build/openbsd.go b/pkg/build/openbsd.go
index 60a35d190..97f7c6a8f 100644
--- a/pkg/build/openbsd.go
+++ b/pkg/build/openbsd.go
@@ -45,7 +45,7 @@ func (ctx openbsd) build(params Params) (ImageDetails, error) {
fullSrc := filepath.Join(s.dir, s.src)
fullDst := filepath.Join(params.OutputDir, s.dst)
if err := osutil.CopyFile(fullSrc, fullDst); err != nil {
- return ImageDetails{}, fmt.Errorf("failed to copy %v -> %v: %v", fullSrc, fullDst, err)
+ return ImageDetails{}, fmt.Errorf("failed to copy %v -> %v: %w", fullSrc, fullDst, err)
}
}
if params.VMType == "gce" {
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 503a5b466..63c10213d 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -19,7 +19,7 @@ func LoadFile(filename string, cfg interface{}) error {
}
data, err := os.ReadFile(filename)
if err != nil {
- return fmt.Errorf("failed to read config file: %v", err)
+ return fmt.Errorf("failed to read config file: %w", err)
}
return LoadData(data, cfg)
}
@@ -30,7 +30,7 @@ func LoadData(data []byte, cfg interface{}) error {
dec := json.NewDecoder(bytes.NewReader(data))
dec.DisallowUnknownFields()
if err := dec.Decode(cfg); err != nil {
- return fmt.Errorf("failed to parse config file: %v", err)
+ return fmt.Errorf("failed to parse config file: %w", err)
}
return nil
}
diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go
index 40f345614..1a8217cb1 100644
--- a/pkg/cover/backend/dwarf.go
+++ b/pkg/cover/backend/dwarf.go
@@ -364,7 +364,7 @@ func symbolizeModule(target *targets.Target, objDir, srcDir, buildDir string,
}
frames, err := symb.SymbolizeArray(mod.Path, pcs)
if err != nil {
- res.err = fmt.Errorf("failed to symbolize: %v", err)
+ res.err = fmt.Errorf("failed to symbolize: %w", err)
}
res.frames = append(res.frames, frames...)
}
@@ -491,7 +491,7 @@ func objdump(target *targets.Target, mod *Module) ([2][]uint64, error) {
}
defer stderr.Close()
if err := cmd.Start(); err != nil {
- return pcs, fmt.Errorf("failed to run objdump on %v: %v", mod.Path, err)
+ return pcs, fmt.Errorf("failed to run objdump on %v: %w", mod.Path, err)
}
defer func() {
cmd.Process.Kill()
@@ -506,10 +506,10 @@ func objdump(target *targets.Target, mod *Module) ([2][]uint64, error) {
}
stderrOut, _ := io.ReadAll(stderr)
if err := cmd.Wait(); err != nil {
- return pcs, fmt.Errorf("failed to run objdump on %v: %v\n%s", mod.Path, err, stderrOut)
+ return pcs, fmt.Errorf("failed to run objdump on %v: %w\n%s", mod.Path, err, stderrOut)
}
if err := s.Err(); err != nil {
- return pcs, fmt.Errorf("failed to run objdump on %v: %v\n%s", mod.Path, err, stderrOut)
+ return pcs, fmt.Errorf("failed to run objdump on %v: %w\n%s", mod.Path, err, stderrOut)
}
return pcs, nil
}
diff --git a/pkg/cover/backend/elf.go b/pkg/cover/backend/elf.go
index 57908f43a..c9a02aba4 100644
--- a/pkg/cover/backend/elf.go
+++ b/pkg/cover/backend/elf.go
@@ -64,7 +64,7 @@ func elfReadSymbols(module *Module, info *symbolInfo) ([]*Symbol, error) {
}
allSymbols, err := file.Symbols()
if err != nil {
- return nil, fmt.Errorf("failed to read ELF symbols: %v", err)
+ return nil, fmt.Errorf("failed to read ELF symbols: %w", err)
}
if module.Name == "" {
info.textAddr = text.Addr
@@ -121,7 +121,7 @@ func elfReadTextRanges(module *Module) ([]pcRange, []*CompileUnit, error) {
log.Logf(0, "ignoring module %v without DEBUG_INFO", module.Name)
return nil, nil, nil
}
- return nil, nil, fmt.Errorf("failed to parse DWARF: %v (set CONFIG_DEBUG_INFO=y on linux)", err)
+ return nil, nil, fmt.Errorf("failed to parse DWARF: %w (set CONFIG_DEBUG_INFO=y on linux)", err)
}
var pcFix pcFixFn
diff --git a/pkg/cover/backend/gvisor.go b/pkg/cover/backend/gvisor.go
index 155b4cdf4..8e2a32d48 100644
--- a/pkg/cover/backend/gvisor.go
+++ b/pkg/cover/backend/gvisor.go
@@ -111,7 +111,7 @@ func gvisorParseLine(s *bufio.Scanner) (Frame, error) {
for i := range ints {
x, err := strconv.ParseUint(match[i+3], 0, 32)
if err != nil {
- return Frame{}, fmt.Errorf("failed to parse number %q: %v", match[i+3], err)
+ return Frame{}, fmt.Errorf("failed to parse number %q: %w", match[i+3], err)
}
ints[i] = int(x)
}
diff --git a/pkg/cover/backend/mach-o.go b/pkg/cover/backend/mach-o.go
index ac29f9c0b..67e28c625 100644
--- a/pkg/cover/backend/mach-o.go
+++ b/pkg/cover/backend/mach-o.go
@@ -98,7 +98,7 @@ func machoReadTextRanges(module *Module) ([]pcRange, []*CompileUnit, error) {
}
debugInfo, err := dSYM.DWARF()
if err != nil {
- return nil, nil, fmt.Errorf("failed to parse DWARF: %v", err)
+ return nil, nil, fmt.Errorf("failed to parse DWARF: %w", err)
}
return readTextRanges(debugInfo, module, nil)
}
diff --git a/pkg/cover/backend/modules.go b/pkg/cover/backend/modules.go
index e0dd6bea5..4da73d3ad 100644
--- a/pkg/cover/backend/modules.go
+++ b/pkg/cover/backend/modules.go
@@ -96,7 +96,7 @@ func getModuleName(path string) (string, error) {
}
data, err := section.Data()
if err != nil {
- return "", fmt.Errorf("failed to read .modinfo: %v", err)
+ return "", fmt.Errorf("failed to read .modinfo: %w", err)
}
if name := searchModuleName(data); name != "" {
return name, nil
@@ -107,7 +107,7 @@ func getModuleName(path string) (string, error) {
}
data, err = section.Data()
if err != nil {
- return "", fmt.Errorf("failed to read .gnu.linkonce.this_module: %v", err)
+ return "", fmt.Errorf("failed to read .gnu.linkonce.this_module: %w", err)
}
return string(data), nil
}
diff --git a/pkg/cover/html.go b/pkg/cover/html.go
index 874160c8c..92e5cf2bd 100644
--- a/pkg/cover/html.go
+++ b/pkg/cover/html.go
@@ -145,7 +145,7 @@ func (rg *ReportGenerator) DoLineJSON(w io.Writer, progs []Prog, coverFilter map
encoder := json.NewEncoder(w)
encoder.SetIndent("", "\t")
if err := encoder.Encode(entries); err != nil {
- return fmt.Errorf("encoding [%v] entries failed: %v", len(entries), err)
+ return fmt.Errorf("encoding [%v] entries failed: %w", len(entries), err)
}
return nil
}
diff --git a/pkg/csource/build.go b/pkg/csource/build.go
index af41f66d3..35d97d023 100644
--- a/pkg/csource/build.go
+++ b/pkg/csource/build.go
@@ -83,7 +83,7 @@ func Format(src []byte) ([]byte, error) {
cmd.Stdout = stdout
cmd.Stderr = stderr
if err := cmd.Run(); err != nil {
- return src, fmt.Errorf("failed to format source: %v\n%v", err, stderr.String())
+ return src, fmt.Errorf("failed to format source: %w\n%v", err, stderr.String())
}
return stdout.Bytes(), nil
}
diff --git a/pkg/csource/common.go b/pkg/csource/common.go
index 3b30d85f4..2d62f0707 100644
--- a/pkg/csource/common.go
+++ b/pkg/csource/common.go
@@ -48,7 +48,7 @@ func createCommonHeader(p, mmapProg *prog.Prog, replacements map[string]string,
// 3776 | #if not SYZ_SANDBOX_ANDROID
// Potentially we could analyze errors manually and ignore only the expected ones.
if err := cmd.Run(); len(stdout.Bytes()) == 0 {
- return nil, fmt.Errorf("cpp failed: %v %v: %v\n%v\n%v", cmd.Path, cmd.Args, err, stdout.String(), stderr.String())
+ return nil, fmt.Errorf("cpp failed: %v %v: %w\n%v\n%v", cmd.Path, cmd.Args, err, stdout.String(), stderr.String())
}
src, err := removeSystemDefines(stdout.Bytes(), defines)
diff --git a/pkg/csource/csource.go b/pkg/csource/csource.go
index 54cf2fa39..a56a738c5 100644
--- a/pkg/csource/csource.go
+++ b/pkg/csource/csource.go
@@ -39,7 +39,7 @@ import (
// Write generates C source for program p based on the provided options opt.
func Write(p *prog.Prog, opts Options) ([]byte, error) {
if err := opts.Check(p.Target.OS); err != nil {
- return nil, fmt.Errorf("csource: invalid opts: %v", err)
+ return nil, fmt.Errorf("csource: invalid opts: %w", err)
}
ctx := &context{
p: p,
@@ -241,7 +241,7 @@ func (ctx *context) generateProgCalls(p *prog.Prog, trace bool) ([]string, []uin
exec := make([]byte, prog.ExecBufferSize)
progSize, err := p.SerializeForExec(exec)
if err != nil {
- return nil, nil, fmt.Errorf("failed to serialize program: %v", err)
+ return nil, nil, fmt.Errorf("failed to serialize program: %w", err)
}
decoded, err := ctx.target.DeserializeExec(exec[:progSize])
if err != nil {
diff --git a/pkg/db/db.go b/pkg/db/db.go
index 203761dfa..2d75f6489 100644
--- a/pkg/db/db.go
+++ b/pkg/db/db.go
@@ -186,7 +186,7 @@ func deserializeDB(r *bufio.Reader) (version uint64, records map[string]Record,
records = make(map[string]Record)
ver, err := deserializeHeader(r)
if err != nil {
- err0 = fmt.Errorf("failed to deserialize database header: %v", err)
+ err0 = fmt.Errorf("failed to deserialize database header: %w", err)
return
}
version = ver
@@ -196,7 +196,7 @@ func deserializeDB(r *bufio.Reader) (version uint64, records map[string]Record,
return
}
if err != nil {
- err0 = fmt.Errorf("failed to deserialize database record: %v", err)
+ err0 = fmt.Errorf("failed to deserialize database record: %w", err)
return
}
uncompacted++
@@ -277,16 +277,16 @@ func Create(filename string, version uint64, records []Record) error {
os.Remove(filename)
db, err := Open(filename, true)
if err != nil {
- return fmt.Errorf("failed to open database file: %v", err)
+ return fmt.Errorf("failed to open database file: %w", err)
}
if err := db.BumpVersion(version); err != nil {
- return fmt.Errorf("failed to bump database version: %v", err)
+ return fmt.Errorf("failed to bump database version: %w", err)
}
for _, rec := range records {
db.Save(hash.String(rec.Val), rec.Val, rec.Seq)
}
if err := db.Flush(); err != nil {
- return fmt.Errorf("failed to save database file: %v", err)
+ return fmt.Errorf("failed to save database file: %w", err)
}
return nil
}
@@ -297,12 +297,12 @@ func ReadCorpus(filename string, target *prog.Target) (progs []*prog.Prog, err e
}
db, err := Open(filename, false)
if err != nil {
- return nil, fmt.Errorf("failed to open database file: %v", err)
+ return nil, fmt.Errorf("failed to open database file: %w", err)
}
for _, rec := range db.Records {
p, err := target.Deserialize(rec.Val, prog.NonStrict)
if err != nil {
- return nil, fmt.Errorf("failed to deserialize corpus program: %v", err)
+ return nil, fmt.Errorf("failed to deserialize corpus program: %w", err)
}
progs = append(progs, p)
}
diff --git a/pkg/email/parser.go b/pkg/email/parser.go
index cd454646c..2ed9495fd 100644
--- a/pkg/email/parser.go
+++ b/pkg/email/parser.go
@@ -76,11 +76,11 @@ func prepareEmails(list []string) map[string]bool {
func Parse(r io.Reader, ownEmails, goodLists, domains []string) (*Email, error) {
msg, err := mail.ReadMessage(r)
if err != nil {
- return nil, fmt.Errorf("failed to read email: %v", err)
+ return nil, fmt.Errorf("failed to read email: %w", err)
}
from, err := msg.Header.AddressList("From")
if err != nil {
- return nil, fmt.Errorf("failed to parse email header 'From': %v", err)
+ return nil, fmt.Errorf("failed to parse email header 'From': %w", err)
}
if len(from) == 0 {
return nil, fmt.Errorf("failed to parse email header 'To': no senders")
@@ -194,7 +194,7 @@ func Parse(r io.Reader, ownEmails, goodLists, domains []string) (*Email, error)
func AddAddrContext(email, context string) (string, error) {
addr, err := mail.ParseAddress(email)
if err != nil {
- return "", fmt.Errorf("failed to parse %q as email: %v", email, err)
+ return "", fmt.Errorf("failed to parse %q as email: %w", email, err)
}
at := strings.IndexByte(addr.Address, '@')
if at == -1 {
@@ -213,7 +213,7 @@ func AddAddrContext(email, context string) (string, error) {
func RemoveAddrContext(email string) (string, string, error) {
addr, err := mail.ParseAddress(email)
if err != nil {
- return "", "", fmt.Errorf("failed to parse %q as email: %v", email, err)
+ return "", "", fmt.Errorf("failed to parse %q as email: %w", email, err)
}
at := strings.IndexByte(addr.Address, '@')
if at == -1 {
@@ -386,7 +386,7 @@ func parseBody(r io.Reader, headers mail.Header) ([]byte, [][]byte, error) {
var err error
mediaType, params, err = mime.ParseMediaType(headers.Get("Content-Type"))
if err != nil {
- return nil, nil, fmt.Errorf("failed to parse email header 'Content-Type': %v", err)
+ return nil, nil, fmt.Errorf("failed to parse email header 'Content-Type': %w", err)
}
}
switch strings.ToLower(headers.Get("Content-Transfer-Encoding")) {
@@ -399,14 +399,14 @@ func parseBody(r io.Reader, headers mail.Header) ([]byte, [][]byte, error) {
if disp == "attachment" {
attachment, err := io.ReadAll(r)
if err != nil {
- return nil, nil, fmt.Errorf("failed to read email body: %v", err)
+ return nil, nil, fmt.Errorf("failed to read email body: %w", err)
}
return nil, [][]byte{attachment}, nil
}
if mediaType == "text/plain" {
body, err := io.ReadAll(r)
if err != nil {
- return nil, nil, fmt.Errorf("failed to read email body: %v", err)
+ return nil, nil, fmt.Errorf("failed to read email body: %w", err)
}
return body, nil, nil
}
@@ -422,7 +422,7 @@ func parseBody(r io.Reader, headers mail.Header) ([]byte, [][]byte, error) {
return body, attachments, nil
}
if err != nil {
- return nil, nil, fmt.Errorf("failed to parse MIME parts: %v", err)
+ return nil, nil, fmt.Errorf("failed to parse MIME parts: %w", err)
}
body1, attachments1, err1 := parseBody(p, mail.Header(p.Header))
if err1 != nil {
diff --git a/pkg/gce/gce.go b/pkg/gce/gce.go
index f461df604..71b88e2ec 100644
--- a/pkg/gce/gce.go
+++ b/pkg/gce/gce.go
@@ -55,7 +55,7 @@ func NewContext(customZoneID string) (*Context, error) {
background := context.Background()
tokenSource, err := google.DefaultTokenSource(background, compute.CloudPlatformScope)
if err != nil {
- return nil, fmt.Errorf("failed to get a token source: %v", err)
+ return nil, fmt.Errorf("failed to get a token source: %w", err)
}
httpClient := oauth2.NewClient(background, tokenSource)
// nolint
@@ -67,11 +67,11 @@ func NewContext(customZoneID string) (*Context, error) {
// Obtain project name, zone and current instance IP address.
ctx.ProjectID, err = ctx.getMeta("project/project-id")
if err != nil {
- return nil, fmt.Errorf("failed to query gce project-id: %v", err)
+ return nil, fmt.Errorf("failed to query gce project-id: %w", err)
}
myZoneID, err := ctx.getMeta("instance/zone")
if err != nil {
- return nil, fmt.Errorf("failed to query gce zone: %v", err)
+ return nil, fmt.Errorf("failed to query gce zone: %w", err)
}
if i := strings.LastIndexByte(myZoneID, '/'); i != -1 {
myZoneID = myZoneID[i+1:] // the query returns some nonsense prefix
@@ -83,11 +83,11 @@ func NewContext(customZoneID string) (*Context, error) {
}
ctx.Instance, err = ctx.getMeta("instance/name")
if err != nil {
- return nil, fmt.Errorf("failed to query gce instance name: %v", err)
+ return nil, fmt.Errorf("failed to query gce instance name: %w", err)
}
inst, err := ctx.computeService.Instances.Get(ctx.ProjectID, myZoneID, ctx.Instance).Do()
if err != nil {
- return nil, fmt.Errorf("error getting instance info: %v", err)
+ return nil, fmt.Errorf("error getting instance info: %w", err)
}
for _, iface := range inst.NetworkInterfaces {
if strings.HasPrefix(iface.NetworkIP, "10.") {
@@ -167,7 +167,7 @@ retry:
return
})
if err != nil {
- return "", fmt.Errorf("failed to create instance: %v", err)
+ return "", fmt.Errorf("failed to create instance: %w", err)
}
if err := ctx.waitForCompletion("zone", "create image", op.Name, false); err != nil {
if _, ok := err.(resourcePoolExhaustedError); ok && instance.Scheduling.Preemptible {
@@ -183,7 +183,7 @@ retry:
return
})
if err != nil {
- return "", fmt.Errorf("error getting instance %s details after creation: %v", name, err)
+ return "", fmt.Errorf("error getting instance %s details after creation: %w", name, err)
}
// Finds its internal IP.
@@ -210,7 +210,7 @@ func (ctx *Context) DeleteInstance(name string, wait bool) error {
return nil
}
if err != nil {
- return fmt.Errorf("failed to delete instance: %v", err)
+ return fmt.Errorf("failed to delete instance: %w", err)
}
if wait {
if err := ctx.waitForCompletion("zone", "delete image", op.Name, true); err != nil {
@@ -255,7 +255,7 @@ func (ctx *Context) CreateImage(imageName, gcsFile string) error {
return
})
if err != nil {
- return fmt.Errorf("failed to create image: %v", err)
+ return fmt.Errorf("failed to create image: %w", err)
}
}
if err := ctx.waitForCompletion("global", "create image", op.Name, false); err != nil {
@@ -274,7 +274,7 @@ func (ctx *Context) DeleteImage(imageName string) error {
return nil
}
if err != nil {
- return fmt.Errorf("failed to delete image: %v", err)
+ return fmt.Errorf("failed to delete image: %w", err)
}
if err := ctx.waitForCompletion("global", "delete image", op.Name, true); err != nil {
return err
@@ -305,7 +305,7 @@ func (ctx *Context) waitForCompletion(typ, desc, opName string, ignoreNotFound b
return
})
if err != nil {
- return fmt.Errorf("failed to get %v operation %v: %v", desc, opName, err)
+ return fmt.Errorf("failed to get %v operation %v: %w", desc, opName, err)
}
switch op.Status {
case "PENDING", "RUNNING":
diff --git a/pkg/gcs/gcs.go b/pkg/gcs/gcs.go
index e0ccd39c5..2b7a87ab9 100644
--- a/pkg/gcs/gcs.go
+++ b/pkg/gcs/gcs.go
@@ -64,7 +64,7 @@ func (client *Client) Read(gcsFile string) (*File, error) {
f := bkt.Object(filename)
attrs, err := f.Attrs(client.ctx)
if err != nil {
- return nil, fmt.Errorf("failed to read %v attributes: %v", gcsFile, err)
+ return nil, fmt.Errorf("failed to read %v attributes: %w", gcsFile, err)
}
if !attrs.Deleted.IsZero() {
return nil, fmt.Errorf("file %v is deleted", gcsFile)
diff --git a/pkg/hash/hash.go b/pkg/hash/hash.go
index 94bcda4fb..246fc4b2f 100644
--- a/pkg/hash/hash.go
+++ b/pkg/hash/hash.go
@@ -44,7 +44,7 @@ func (sig *Sig) Truncate64() int64 {
func FromString(str string) (Sig, error) {
bin, err := hex.DecodeString(str)
if err != nil {
- return Sig{}, fmt.Errorf("failed to decode sig '%v': %v", str, err)
+ return Sig{}, fmt.Errorf("failed to decode sig '%v': %w", str, err)
}
if len(bin) != len(Sig{}) {
return Sig{}, fmt.Errorf("failed to decode sig '%v': bad len", str)
diff --git a/pkg/host/machine_info_linux.go b/pkg/host/machine_info_linux.go
index d46dacd4e..980081898 100644
--- a/pkg/host/machine_info_linux.go
+++ b/pkg/host/machine_info_linux.go
@@ -136,11 +136,11 @@ func parseModules(modulesText []byte) ([]KernelModule, error) {
for _, m := range re.FindAllSubmatch(modulesText, -1) {
addr, err := strconv.ParseUint(string(m[3]), 0, 64)
if err != nil {
- return nil, fmt.Errorf("address parsing error in /proc/modules: %v", err)
+ return nil, fmt.Errorf("address parsing error in /proc/modules: %w", err)
}
size, err := strconv.ParseUint(string(m[2]), 0, 64)
if err != nil {
- return nil, fmt.Errorf("module size parsing error in /proc/modules: %v", err)
+ return nil, fmt.Errorf("module size parsing error in /proc/modules: %w", err)
}
modules = append(modules, KernelModule{
Name: string(m[1]),
diff --git a/pkg/ifuzz/x86/gen/gen.go b/pkg/ifuzz/x86/gen/gen.go
index acec104fe..aae7429c0 100644
--- a/pkg/ifuzz/x86/gen/gen.go
+++ b/pkg/ifuzz/x86/gen/gen.go
@@ -245,21 +245,21 @@ func parsePattern(insn *x86.Insn, vals []string) error {
insn.Modrm = true
vv, err := parseModrm(v[3:])
if err != nil {
- return fmt.Errorf("failed to parse %v: %v", v, err)
+ return fmt.Errorf("failed to parse %v: %w", v, err)
}
insn.Mod = vv
case strings.HasPrefix(v, "REG["):
insn.Modrm = true
vv, err := parseModrm(v[3:])
if err != nil {
- return fmt.Errorf("failed to parse %v: %v", v, err)
+ return fmt.Errorf("failed to parse %v: %w", v, err)
}
insn.Reg = vv
case strings.HasPrefix(v, "RM["):
insn.Modrm = true
vv, err := parseModrm(v[2:])
if err != nil {
- return fmt.Errorf("failed to parse %v: %v", v, err)
+ return fmt.Errorf("failed to parse %v: %w", v, err)
}
insn.Rm = vv
case v == "RM=4":
@@ -267,7 +267,7 @@ func parsePattern(insn *x86.Insn, vals []string) error {
case strings.HasPrefix(v, "SRM["):
vv, err := parseModrm(v[3:])
if err != nil {
- return fmt.Errorf("failed to parse %v: %v", v, err)
+ return fmt.Errorf("failed to parse %v: %w", v, err)
}
insn.Rm = vv
insn.Srm = true
diff --git a/pkg/image/compression.go b/pkg/image/compression.go
index 70e314ae5..d41392019 100644
--- a/pkg/image/compression.go
+++ b/pkg/image/compression.go
@@ -45,11 +45,11 @@ func decompressWriter(w io.Writer, compressed []byte) error {
}
zlibReader, err := zlib.NewReader(bytes.NewReader(compressed))
if err != nil {
- return fmt.Errorf("could not initialise zlib: %v", err)
+ return fmt.Errorf("could not initialise zlib: %w", err)
}
if _, err := io.Copy(w, zlibReader); err != nil {
- return fmt.Errorf("could not read data with zlib: %v", err)
+ return fmt.Errorf("could not read data with zlib: %w", err)
}
return zlibReader.Close()
@@ -59,7 +59,7 @@ func DecodeB64(b64Data []byte) ([]byte, error) {
decoder := base64.NewDecoder(base64.StdEncoding, bytes.NewReader(b64Data))
rawData, err := io.ReadAll(decoder)
if err != nil {
- return nil, fmt.Errorf("could not decode Base64: %v", err)
+ return nil, fmt.Errorf("could not decode Base64: %w", err)
}
return rawData, nil
}
diff --git a/pkg/instance/execprog.go b/pkg/instance/execprog.go
index 8f052f629..9e97dcd0c 100644
--- a/pkg/instance/execprog.go
+++ b/pkg/instance/execprog.go
@@ -83,7 +83,7 @@ func CreateExecProgInstance(vmPool *vm.Pool, vmIndex int, mgrCfg *mgrconfig.Conf
reporter *report.Reporter, opt *OptionalConfig) (*ExecProgInstance, error) {
vmInst, err := vmPool.Create(vmIndex)
if err != nil {
- return nil, fmt.Errorf("failed to create VM: %v", err)
+ return nil, fmt.Errorf("failed to create VM: %w", err)
}
ret, err := SetupExecProg(vmInst, mgrCfg, reporter, opt)
if err != nil {
@@ -109,7 +109,7 @@ func (inst *ExecProgInstance) runCommand(command string, duration time.Duration)
}
outc, errc, err := inst.VMInstance.Run(duration, nil, command)
if err != nil {
- return nil, fmt.Errorf("failed to run command in VM: %v", err)
+ return nil, fmt.Errorf("failed to run command in VM: %w", err)
}
result := &RunResult{
ExecutionResult: *inst.VMInstance.MonitorExecutionRaw(outc, errc,
diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go
index 3dd654f2b..ea4084def 100644
--- a/pkg/instance/instance.go
+++ b/pkg/instance/instance.go
@@ -65,7 +65,7 @@ func NewEnv(cfg *mgrconfig.Config, buildSem, testSem *Semaphore) (Env, error) {
return nil, fmt.Errorf("syzkaller path is empty")
}
if err := osutil.MkdirAll(cfg.Workdir); err != nil {
- return nil, fmt.Errorf("failed to create tmp dir: %v", err)
+ return nil, fmt.Errorf("failed to create tmp dir: %w", err)
}
env := &env{
cfg: cfg,
@@ -88,14 +88,14 @@ func (env *env) BuildSyzkaller(repoURL, commit string) (string, error) {
}
repo := vcs.NewSyzkallerRepo(cfg.Syzkaller)
if _, err := repo.CheckoutCommit(repoURL, commit); err != nil {
- return "", fmt.Errorf("failed to checkout syzkaller repo: %v", err)
+ return "", fmt.Errorf("failed to checkout syzkaller repo: %w", err)
}
// The following commit ("syz-fuzzer: support optional flags") adds support for optional flags
// in syz-fuzzer and syz-execprog. This is required to invoke older binaries with newer flags
// without failing due to unknown flags.
optionalFlags, err := repo.Contains("64435345f0891706a7e0c7885f5f7487581e6005")
if err != nil {
- return "", fmt.Errorf("optional flags check failed: %v", err)
+ return "", fmt.Errorf("optional flags check failed: %w", err)
}
env.optionalFlags = optionalFlags
cmd := osutil.Command(MakeBin, "target")
@@ -128,7 +128,7 @@ func (env *env) BuildSyzkaller(repoURL, commit string) (string, error) {
buildLog := fmt.Sprintf("go env (err=%v)\n%s\ngit status (err=%v)\n%s\n\n%s",
goEnvErr, goEnvOut, gitStatusErr, gitStatusOut, buildOutput)
if buildErr != nil {
- return buildLog, fmt.Errorf("syzkaller build failed: %v\n%s", buildErr, buildLog)
+ return buildLog, fmt.Errorf("syzkaller build failed: %w\n%s", buildErr, buildLog)
}
return buildLog, nil
}
@@ -176,7 +176,7 @@ func SetConfigImage(cfg *mgrconfig.Config, imageDir string, reliable bool) error
}
vmConfig := make(map[string]interface{})
if err := json.Unmarshal(cfg.VM, &vmConfig); err != nil {
- return fmt.Errorf("failed to parse VM config: %v", err)
+ return fmt.Errorf("failed to parse VM config: %w", err)
}
if cfg.Type == "qemu" || cfg.Type == "vmm" {
if kernel := filepath.Join(imageDir, "kernel"); osutil.IsExist(kernel) {
@@ -192,7 +192,7 @@ func SetConfigImage(cfg *mgrconfig.Config, imageDir string, reliable bool) error
}
vmCfg, err := json.Marshal(vmConfig)
if err != nil {
- return fmt.Errorf("failed to serialize VM config: %v", err)
+ return fmt.Errorf("failed to serialize VM config: %w", err)
}
cfg.VM = vmCfg
return nil
@@ -201,7 +201,7 @@ func SetConfigImage(cfg *mgrconfig.Config, imageDir string, reliable bool) error
func OverrideVMCount(cfg *mgrconfig.Config, n int) error {
vmConfig := make(map[string]interface{})
if err := json.Unmarshal(cfg.VM, &vmConfig); err != nil {
- return fmt.Errorf("failed to parse VM config: %v", err)
+ return fmt.Errorf("failed to parse VM config: %w", err)
}
if vmConfig["count"] == nil || !vm.AllowsOvercommit(cfg.Type) {
return nil
@@ -209,7 +209,7 @@ func OverrideVMCount(cfg *mgrconfig.Config, n int) error {
vmConfig["count"] = n
vmCfg, err := json.Marshal(vmConfig)
if err != nil {
- return fmt.Errorf("failed to serialize VM config: %v", err)
+ return fmt.Errorf("failed to serialize VM config: %w", err)
}
cfg.VM = vmCfg
return nil
@@ -252,7 +252,7 @@ func (env *env) Test(numVMs int, reproSyz, reproOpts, reproC []byte) ([]EnvTestR
}
vmPool, err := vm.Create(env.cfg, false)
if err != nil {
- return nil, fmt.Errorf("failed to create VM pool: %v", err)
+ return nil, fmt.Errorf("failed to create VM pool: %w", err)
}
if n := vmPool.Count(); numVMs > n {
numVMs = n
@@ -352,7 +352,7 @@ func (inst *inst) test() EnvTestResult {
func (inst *inst) testInstance() error {
ln, err := net.Listen("tcp", ":")
if err != nil {
- return fmt.Errorf("failed to open listening socket: %v", err)
+ return fmt.Errorf("failed to open listening socket: %w", err)
}
defer ln.Close()
acceptErr := make(chan error, 1)
@@ -365,7 +365,7 @@ func (inst *inst) testInstance() error {
}()
fwdAddr, err := inst.vm.Forward(ln.Addr().(*net.TCPAddr).Port)
if err != nil {
- return fmt.Errorf("failed to setup port forwarding: %v", err)
+ return fmt.Errorf("failed to setup port forwarding: %w", err)
}
fuzzerBin, err := inst.vm.Copy(inst.cfg.FuzzerBin)
@@ -387,7 +387,7 @@ func (inst *inst) testInstance() error {
inst.cfg.Sandbox, inst.cfg.SandboxArg, 0, inst.cfg.Cover, true, inst.optionalFlags, inst.cfg.Timeouts.Slowdown)
outc, errc, err := inst.vm.Run(10*time.Minute*inst.cfg.Timeouts.Scale, nil, cmd)
if err != nil {
- return fmt.Errorf("failed to run binary in VM: %v", err)
+ return fmt.Errorf("failed to run binary in VM: %w", err)
}
rep := inst.vm.MonitorExecution(outc, errc, inst.reporter, vm.ExitNormal)
if rep != nil {
diff --git a/pkg/ipc/ipc.go b/pkg/ipc/ipc.go
index f30b0afeb..542e75714 100644
--- a/pkg/ipc/ipc.go
+++ b/pkg/ipc/ipc.go
@@ -552,7 +552,7 @@ func makeCommand(pid int, bin []string, config *Config, inFile, outFile *os.File
tmpDirPath string) (*command, error) {
dir, err := os.MkdirTemp(tmpDirPath, "syzkaller-testdir")
if err != nil {
- return nil, fmt.Errorf("failed to create temp dir: %v", err)
+ return nil, fmt.Errorf("failed to create temp dir: %w", err)
}
dir = osutil.Abs(dir)
@@ -578,20 +578,20 @@ func makeCommand(pid int, bin []string, config *Config, inFile, outFile *os.File
}()
if err := os.Chmod(dir, 0777); err != nil {
- return nil, fmt.Errorf("failed to chmod temp dir: %v", err)
+ return nil, fmt.Errorf("failed to chmod temp dir: %w", err)
}
// Output capture pipe.
rp, wp, err := os.Pipe()
if err != nil {
- return nil, fmt.Errorf("failed to create pipe: %v", err)
+ return nil, fmt.Errorf("failed to create pipe: %w", err)
}
defer wp.Close()
// executor->ipc command pipe.
inrp, inwp, err := os.Pipe()
if err != nil {
- return nil, fmt.Errorf("failed to create pipe: %v", err)
+ return nil, fmt.Errorf("failed to create pipe: %w", err)
}
defer inwp.Close()
c.inrp = inrp
@@ -599,7 +599,7 @@ func makeCommand(pid int, bin []string, config *Config, inFile, outFile *os.File
// ipc->executor command pipe.
outrp, outwp, err := os.Pipe()
if err != nil {
- return nil, fmt.Errorf("failed to create pipe: %v", err)
+ return nil, fmt.Errorf("failed to create pipe: %w", err)
}
defer outrp.Close()
c.outwp = outwp
@@ -644,7 +644,7 @@ func makeCommand(pid int, bin []string, config *Config, inFile, outFile *os.File
}(c)
}
if err := cmd.Start(); err != nil {
- return nil, fmt.Errorf("failed to start executor binary: %v", err)
+ return nil, fmt.Errorf("failed to start executor binary: %w", err)
}
c.exited = make(chan error, 1)
c.cmd = cmd
@@ -695,7 +695,7 @@ func (c *command) handshake() error {
}
reqData := (*[unsafe.Sizeof(*req)]byte)(unsafe.Pointer(req))[:]
if _, err := c.outwp.Write(reqData); err != nil {
- return c.handshakeError(fmt.Errorf("failed to write control pipe: %v", err))
+ return c.handshakeError(fmt.Errorf("failed to write control pipe: %w", err))
}
read := make(chan error, 1)
@@ -729,7 +729,7 @@ func (c *command) handshake() error {
func (c *command) handshakeError(err error) error {
c.cmd.Process.Kill()
output := <-c.readDone
- err = fmt.Errorf("executor %v: %v\n%s", c.pid, err, output)
+ err = fmt.Errorf("executor %v: %w\n%s", c.pid, err, output)
c.wait()
return err
}
@@ -752,13 +752,13 @@ func (c *command) exec(opts *ExecOpts, progData []byte) (output []byte, hanged b
reqData := (*[unsafe.Sizeof(*req)]byte)(unsafe.Pointer(req))[:]
if _, err := c.outwp.Write(reqData); err != nil {
output = <-c.readDone
- err0 = fmt.Errorf("executor %v: failed to write control pipe: %v", c.pid, err)
+ err0 = fmt.Errorf("executor %v: failed to write control pipe: %w", c.pid, err)
return
}
if progData != nil {
if _, err := c.outwp.Write(progData); err != nil {
output = <-c.readDone
- err0 = fmt.Errorf("executor %v: failed to write control pipe: %v", c.pid, err)
+ err0 = fmt.Errorf("executor %v: failed to write control pipe: %w", c.pid, err)
return
}
}
@@ -836,7 +836,7 @@ func (c *command) exec(opts *ExecOpts, progData []byte) (output []byte, hanged b
// Without fork server executor can legitimately exit (program contains exit_group),
// with fork server the top process can exit with statusFail if it wants special handling.
if exitStatus == statusFail {
- err0 = fmt.Errorf("executor %v: exit status %d err %s\n%s", c.pid, exitStatus, err, output)
+ err0 = fmt.Errorf("executor %v: exit status %d err %w\n%s", c.pid, exitStatus, err, output)
}
return
}
diff --git a/pkg/ipc/ipc_test.go b/pkg/ipc/ipc_test.go
index a3ab140f1..70f9dce94 100644
--- a/pkg/ipc/ipc_test.go
+++ b/pkg/ipc/ipc_test.go
@@ -151,7 +151,7 @@ func TestParallel(t *testing.T) {
go func() {
env, err := MakeEnv(cfg, p)
if err != nil {
- errs <- fmt.Errorf("failed to create env: %v", err)
+ errs <- fmt.Errorf("failed to create env: %w", err)
return
}
defer func() {
@@ -162,7 +162,7 @@ func TestParallel(t *testing.T) {
opts := &ExecOpts{}
output, info, hanged, err := env.Exec(opts, p)
if err != nil {
- err = fmt.Errorf("failed to run executor: %v", err)
+ err = fmt.Errorf("failed to run executor: %w", err)
return
}
if hanged {
diff --git a/pkg/kcidb/client.go b/pkg/kcidb/client.go
index e04ba5dec..1c4d53764 100644
--- a/pkg/kcidb/client.go
+++ b/pkg/kcidb/client.go
@@ -57,7 +57,7 @@ func (c *Client) Publish(bug *dashapi.BugReport) error {
}
data, err := json.MarshalIndent(c.convert(target, bug), "", " ")
if err != nil {
- return fmt.Errorf("failed to marshal kcidb json: %v", err)
+ return fmt.Errorf("failed to marshal kcidb json: %w", err)
}
if err := kcidbValidate(data); err != nil {
return err
@@ -81,7 +81,7 @@ func kcidbValidate(data []byte) error {
cmd.Stdin = bytes.NewReader(data)
output, err := cmd.CombinedOutput()
if err != nil {
- return fmt.Errorf("%v failed (%v) on:\n%s\n\nerror: %s",
+ return fmt.Errorf("%v failed (%w) on:\n%s\n\nerror: %s",
bin, err, data, output)
}
return nil
diff --git a/pkg/kconfig/config.go b/pkg/kconfig/config.go
index 4b01997a0..0f3f09dc2 100644
--- a/pkg/kconfig/config.go
+++ b/pkg/kconfig/config.go
@@ -107,7 +107,7 @@ func (cf *ConfigFile) Serialize() []byte {
func ParseConfig(file string) (*ConfigFile, error) {
data, err := os.ReadFile(file)
if err != nil {
- return nil, fmt.Errorf("failed to open .config file %v: %v", file, err)
+ return nil, fmt.Errorf("failed to open .config file %v: %w", file, err)
}
return ParseConfigData(data, file)
}
diff --git a/pkg/kconfig/kconfig.go b/pkg/kconfig/kconfig.go
index cd05cdbb1..b5d0c0455 100644
--- a/pkg/kconfig/kconfig.go
+++ b/pkg/kconfig/kconfig.go
@@ -120,7 +120,7 @@ type kconfigParser struct {
func Parse(target *targets.Target, file string) (*KConfig, error) {
data, err := os.ReadFile(file)
if err != nil {
- return nil, fmt.Errorf("failed to open Kconfig file %v: %v", file, err)
+ return nil, fmt.Errorf("failed to open Kconfig file %v: %w", file, err)
}
return ParseData(target, data, file)
}
diff --git a/pkg/mgrconfig/load.go b/pkg/mgrconfig/load.go
index 30cb89417..4a5febf79 100644
--- a/pkg/mgrconfig/load.go
+++ b/pkg/mgrconfig/load.go
@@ -123,7 +123,7 @@ func Complete(cfg *Config) error {
if cfg.WorkdirTemplate != "" {
cfg.WorkdirTemplate = osutil.Abs(cfg.WorkdirTemplate)
if _, err := os.ReadDir(cfg.WorkdirTemplate); err != nil {
- return fmt.Errorf("failed to read workdir_template: %v", err)
+ return fmt.Errorf("failed to read workdir_template: %w", err)
}
}
if cfg.Image != "" {
diff --git a/pkg/osutil/fileutil.go b/pkg/osutil/fileutil.go
index 966560649..850335cfe 100644
--- a/pkg/osutil/fileutil.go
+++ b/pkg/osutil/fileutil.go
@@ -55,12 +55,12 @@ func WriteTempFile(data []byte) (string, error) {
// Note: pkg/report knows about "syzkaller" prefix as it appears in crashes as process name.
f, err := os.CreateTemp("", "syzkaller")
if err != nil {
- return "", fmt.Errorf("failed to create a temp file: %v", err)
+ return "", fmt.Errorf("failed to create a temp file: %w", err)
}
if _, err := f.Write(data); err != nil {
f.Close()
os.Remove(f.Name())
- return "", fmt.Errorf("failed to write a temp file: %v", err)
+ return "", fmt.Errorf("failed to write a temp file: %w", err)
}
f.Close()
return f.Name(), nil
diff --git a/pkg/osutil/fileutil_test.go b/pkg/osutil/fileutil_test.go
index 20d02ea22..33a450fda 100644
--- a/pkg/osutil/fileutil_test.go
+++ b/pkg/osutil/fileutil_test.go
@@ -38,7 +38,7 @@ func TestProcessTempDir(t *testing.T) {
go func() {
dir, err := ProcessTempDir(tmp)
if err != nil {
- done <- fmt.Errorf("failed to create temp dir: %v", err)
+ done <- fmt.Errorf("failed to create temp dir: %w", err)
return
}
mu.Lock()
diff --git a/pkg/osutil/osutil.go b/pkg/osutil/osutil.go
index ba1fb8729..1687cef9d 100644
--- a/pkg/osutil/osutil.go
+++ b/pkg/osutil/osutil.go
@@ -43,7 +43,7 @@ func Run(timeout time.Duration, cmd *exec.Cmd) ([]byte, error) {
}
setPdeathsig(cmd, true)
if err := cmd.Start(); err != nil {
- return nil, fmt.Errorf("failed to start %v %+v: %v", cmd.Path, cmd.Args, err)
+ return nil, fmt.Errorf("failed to start %v %+v: %w", cmd.Path, cmd.Args, err)
}
done := make(chan bool)
timedout := make(chan bool, 1)
@@ -125,7 +125,7 @@ func PrependContext(ctx string, err error) error {
err1.Title = fmt.Sprintf("%v: %v", ctx, err1.Title)
return err1
default:
- return fmt.Errorf("%v: %v", ctx, err)
+ return fmt.Errorf("%v: %w", ctx, err)
}
}
@@ -147,7 +147,7 @@ func IsAccessible(name string) error {
}
f, err := os.Open(name)
if err != nil {
- return fmt.Errorf("%v can't be opened (%v)", name, err)
+ return fmt.Errorf("%v can't be opened (%w)", name, err)
}
f.Close()
return nil
@@ -157,7 +157,7 @@ func IsAccessible(name string) error {
func IsWritable(name string) error {
f, err := os.OpenFile(name, os.O_WRONLY, DefaultFilePerm)
if err != nil {
- return fmt.Errorf("%v can't be written (%v)", name, err)
+ return fmt.Errorf("%v can't be written (%w)", name, err)
}
f.Close()
return nil
@@ -297,7 +297,7 @@ func WriteExecFile(filename string, data []byte) error {
func TempFile(prefix string) (string, error) {
f, err := os.CreateTemp("", prefix)
if err != nil {
- return "", fmt.Errorf("failed to create temp file: %v", err)
+ return "", fmt.Errorf("failed to create temp file: %w", err)
}
f.Close()
return f.Name(), nil
diff --git a/pkg/osutil/osutil_unix.go b/pkg/osutil/osutil_unix.go
index 5563fb5fd..cf6b0284e 100644
--- a/pkg/osutil/osutil_unix.go
+++ b/pkg/osutil/osutil_unix.go
@@ -89,7 +89,7 @@ func HandleInterrupts(shutdown chan struct{}) {
func LongPipe() (io.ReadCloser, io.WriteCloser, error) {
r, w, err := os.Pipe()
if err != nil {
- return nil, nil, fmt.Errorf("failed to create pipe: %v", err)
+ return nil, nil, fmt.Errorf("failed to create pipe: %w", err)
}
prolongPipe(r, w)
return r, w, err
@@ -108,14 +108,14 @@ func CreateMemMappedFile(size int) (f *os.File, mem []byte, err error) {
return
}
if err = f.Truncate(int64(size)); err != nil {
- err = fmt.Errorf("failed to truncate shared mem file: %v", err)
+ err = fmt.Errorf("failed to truncate shared mem file: %w", err)
CloseSharedMemFile(f)
return
}
mem, err = syscall.Mmap(int(f.Fd()), 0, size, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED)
if err != nil {
- err = fmt.Errorf("failed to mmap shm file: %v", err)
+ err = fmt.Errorf("failed to mmap shm file: %w", err)
CloseSharedMemFile(f)
}
return
diff --git a/pkg/osutil/sharedmem_memfd.go b/pkg/osutil/sharedmem_memfd.go
index 9eb3a4075..213080e49 100644
--- a/pkg/osutil/sharedmem_memfd.go
+++ b/pkg/osutil/sharedmem_memfd.go
@@ -18,7 +18,7 @@ func CreateSharedMemFile(size int) (f *os.File, err error) {
// The name is actually irrelevant and can even be the same for all such files.
fd, err := unix.MemfdCreate("syz-shared-mem", unix.MFD_CLOEXEC)
if err != nil {
- err = fmt.Errorf("failed to do memfd_create: %v", err)
+ err = fmt.Errorf("failed to do memfd_create: %w", err)
return
}
f = os.NewFile(uintptr(fd), fmt.Sprintf("/proc/self/fd/%d", fd))
diff --git a/pkg/report/decompile.go b/pkg/report/decompile.go
index 6f5a6fe41..6134a1fd9 100644
--- a/pkg/report/decompile.go
+++ b/pkg/report/decompile.go
@@ -56,13 +56,13 @@ func DecompileOpcodes(rawOpcodes []byte, flags DecompilerFlagMask, target *targe
func objdumpExecutor(rawOpcodes []byte, args []string, target *targets.Target) ([]byte, error) {
fileName, err := osutil.TempFile("syz-opcode-decompiler")
if err != nil {
- return nil, fmt.Errorf("failed to create temp file: %v", err)
+ return nil, fmt.Errorf("failed to create temp file: %w", err)
}
defer os.Remove(fileName)
err = osutil.WriteFile(fileName, rawOpcodes)
if err != nil {
- return nil, fmt.Errorf("failed to write to temp file: %v", err)
+ return nil, fmt.Errorf("failed to write to temp file: %w", err)
}
return osutil.RunCmd(objdumpCallTimeout, "", target.Objdump, append(args, fileName)...)
diff --git a/pkg/report/report.go b/pkg/report/report.go
index bc7fc8ca3..24029d092 100644
--- a/pkg/report/report.go
+++ b/pkg/report/report.go
@@ -165,7 +165,7 @@ func compileRegexps(list []string) ([]*regexp.Regexp, error) {
for i, str := range list {
re, err := regexp.Compile(str)
if err != nil {
- return nil, fmt.Errorf("failed to compile %q: %v", str, err)
+ return nil, fmt.Errorf("failed to compile %q: %w", str, err)
}
compiled[i] = re
}
diff --git a/pkg/repro/strace.go b/pkg/repro/strace.go
index 07c3ea025..87d3cf64e 100644
--- a/pkg/repro/strace.go
+++ b/pkg/repro/strace.go
@@ -34,7 +34,7 @@ func RunStrace(result *Result, cfg *mgrconfig.Config, reporter *report.Reporter,
BeforeContextLen: straceOutputLogSize,
})
if err != nil {
- return straceFailed(fmt.Errorf("failed to set up instance: %v", err))
+ return straceFailed(fmt.Errorf("failed to set up instance: %w", err))
}
defer inst.VMInstance.Close()
@@ -47,7 +47,7 @@ func RunStrace(result *Result, cfg *mgrconfig.Config, reporter *report.Reporter,
runRes, err = inst.RunSyzProg(result.Prog.Serialize(), result.Duration, result.Opts)
}
if err != nil {
- return straceFailed(fmt.Errorf("failed to generate strace log: %v", err))
+ return straceFailed(fmt.Errorf("failed to generate strace log: %w", err))
}
return &StraceResult{
Report: runRes.Report,
diff --git a/pkg/rpctype/rpc.go b/pkg/rpctype/rpc.go
index 76c4c3f9c..6cf878543 100644
--- a/pkg/rpctype/rpc.go
+++ b/pkg/rpctype/rpc.go
@@ -23,7 +23,7 @@ type RPCServer struct {
func NewRPCServer(addr, name string, receiver interface{}) (*RPCServer, error) {
ln, err := net.Listen("tcp", addr)
if err != nil {
- return nil, fmt.Errorf("failed to listen on %v: %v", addr, err)
+ return nil, fmt.Errorf("failed to listen on %v: %w", addr, err)
}
s := rpc.NewServer()
if err := s.RegisterName(name, receiver); err != nil {
diff --git a/pkg/runtest/run.go b/pkg/runtest/run.go
index 3e4543fab..4f6170fbb 100644
--- a/pkg/runtest/run.go
+++ b/pkg/runtest/run.go
@@ -176,7 +176,7 @@ func (ctx *Context) generatePrograms(progs chan *RunRequest) error {
func progFileList(dir, filter string) ([]string, error) {
files, err := os.ReadDir(dir)
if err != nil {
- return nil, fmt.Errorf("failed to read %v: %v", dir, err)
+ return nil, fmt.Errorf("failed to read %v: %w", dir, err)
}
var res []string
for _, file := range files {
@@ -276,7 +276,7 @@ nextSandbox:
func parseProg(target *prog.Target, dir, filename string) (*prog.Prog, map[string]bool, *ipc.ProgInfo, error) {
data, err := os.ReadFile(filepath.Join(dir, filename))
if err != nil {
- return nil, nil, nil, fmt.Errorf("failed to read %v: %v", filename, err)
+ return nil, nil, nil, fmt.Errorf("failed to read %v: %w", filename, err)
}
requires := parseRequires(data)
// Need to check arch requirement early as some programs
@@ -286,7 +286,7 @@ func parseProg(target *prog.Target, dir, filename string) (*prog.Prog, map[strin
}
p, err := target.Deserialize(data, prog.Strict)
if err != nil {
- return nil, nil, nil, fmt.Errorf("failed to deserialize %v: %v", filename, err)
+ return nil, nil, nil, fmt.Errorf("failed to deserialize %v: %w", filename, err)
}
errnos := map[string]int{
"": 0,
@@ -488,11 +488,11 @@ func (ctx *Context) createCTest(p *prog.Prog, sandbox string, threaded bool, tim
}
src, err := csource.Write(p, opts)
if err != nil {
- return nil, fmt.Errorf("failed to create C source: %v", err)
+ return nil, fmt.Errorf("failed to create C source: %w", err)
}
bin, err := csource.Build(p.Target, src)
if err != nil {
- return nil, fmt.Errorf("failed to build C program: %v", err)
+ return nil, fmt.Errorf("failed to build C program: %w", err)
}
var ipcFlags ipc.ExecFlags
if threaded {
@@ -654,14 +654,14 @@ func RunTest(req *RunRequest, executor string) {
var err error
env, err = ipc.MakeEnv(req.Cfg, 0)
if err != nil {
- req.Err = fmt.Errorf("failed to create ipc env: %v", err)
+ req.Err = fmt.Errorf("failed to create ipc env: %w", err)
return
}
}
output, info, hanged, err := env.Exec(req.Opts, req.P)
req.Output = append(req.Output, output...)
if err != nil {
- req.Err = fmt.Errorf("run %v: failed to run: %v", run, err)
+ req.Err = fmt.Errorf("run %v: failed to run: %w", run, err)
return
}
if hanged {
@@ -682,7 +682,7 @@ func RunTest(req *RunRequest, executor string) {
func runTestC(req *RunRequest) {
tmpDir, err := os.MkdirTemp("", "syz-runtest")
if err != nil {
- req.Err = fmt.Errorf("failed to create temp dir: %v", err)
+ req.Err = fmt.Errorf("failed to create temp dir: %w", err)
return
}
defer os.RemoveAll(tmpDir)
diff --git a/pkg/symbolizer/nm.go b/pkg/symbolizer/nm.go
index 471640b4f..6e0fc9016 100644
--- a/pkg/symbolizer/nm.go
+++ b/pkg/symbolizer/nm.go
@@ -59,11 +59,11 @@ func read(target *targets.Target, bin string, text bool) (map[string][]Symbol, e
func load(target *targets.Target, bin string, text bool) ([]elf.Symbol, error) {
file, err := elf.Open(bin)
if err != nil {
- return nil, fmt.Errorf("failed to open ELF file %v: %v", bin, err)
+ return nil, fmt.Errorf("failed to open ELF file %v: %w", bin, err)
}
allSymbols, err := file.Symbols()
if err != nil {
- return nil, fmt.Errorf("failed to read ELF symbols: %v", err)
+ return nil, fmt.Errorf("failed to read ELF symbols: %w", err)
}
var symbols []elf.Symbol
for _, symb := range allSymbols {
diff --git a/pkg/symbolizer/symbolizer.go b/pkg/symbolizer/symbolizer.go
index 8cf6c8cf1..fb378d09f 100644
--- a/pkg/symbolizer/symbolizer.go
+++ b/pkg/symbolizer/symbolizer.go
@@ -74,7 +74,7 @@ func (s *Symbolizer) checkBinSupport(addr2line string) error {
cmd.Env = append(os.Environ(), "LC_ALL=C")
out, err := cmd.CombinedOutput()
if err != nil {
- return fmt.Errorf("addr2line execution failed: %s", err)
+ return fmt.Errorf("addr2line execution failed: %w", err)
}
if !bytes.Contains(out, []byte("supported targets:")) {
return fmt.Errorf("addr2line output didn't contain supported targets")
@@ -174,7 +174,7 @@ func symbolize(input *bufio.Writer, scanner *bufio.Scanner, pcs []uint64) ([]Fra
func parse(s *bufio.Scanner) ([]Frame, error) {
pc, err := strconv.ParseUint(s.Text(), 0, 64)
if err != nil {
- return nil, fmt.Errorf("failed to parse pc '%v' in addr2line output: %v", s.Text(), err)
+ return nil, fmt.Errorf("failed to parse pc '%v' in addr2line output: %w", s.Text(), err)
}
var frames []Frame
for {
@@ -191,7 +191,7 @@ func parse(s *bufio.Scanner) ([]Frame, error) {
if err == nil {
err = io.EOF
}
- return nil, fmt.Errorf("failed to read file:line from addr2line: %v", err)
+ return nil, fmt.Errorf("failed to read file:line from addr2line: %w", err)
}
ln = s.Text()
colon := strings.LastIndexByte(ln, ':')
diff --git a/pkg/tool/flags.go b/pkg/tool/flags.go
index 93616f17b..ec0d3015f 100644
--- a/pkg/tool/flags.go
+++ b/pkg/tool/flags.go
@@ -75,11 +75,11 @@ func deserializeFlags(value string) ([]Flag, error) {
}
name, err := flagUnescape(arg[:eq])
if err != nil {
- return nil, fmt.Errorf("failed to parse flags %q: %v", value, err)
+ return nil, fmt.Errorf("failed to parse flags %q: %w", value, err)
}
value, err := flagUnescape(arg[eq+1:])
if err != nil {
- return nil, fmt.Errorf("failed to parse flags %q: %v", value, err)
+ return nil, fmt.Errorf("failed to parse flags %q: %w", value, err)
}
flags = append(flags, Flag{name, value})
}
diff --git a/pkg/vcs/fuchsia.go b/pkg/vcs/fuchsia.go
index 83f859aa0..bf1bedd9f 100644
--- a/pkg/vcs/fuchsia.go
+++ b/pkg/vcs/fuchsia.go
@@ -38,11 +38,11 @@ func (ctx *fuchsia) Poll(repo, branch string) (*Commit, error) {
func (ctx *fuchsia) initRepo() error {
if err := os.RemoveAll(ctx.dir); err != nil {
- return fmt.Errorf("failed to remove repo dir: %v", err)
+ return fmt.Errorf("failed to remove repo dir: %w", err)
}
tmpDir := ctx.dir + ".tmp"
if err := osutil.MkdirAll(tmpDir); err != nil {
- return fmt.Errorf("failed to create repo dir: %v", err)
+ return fmt.Errorf("failed to create repo dir: %w", err)
}
defer os.RemoveAll(tmpDir)
if err := osutil.SandboxChown(tmpDir); err != nil {
diff --git a/pkg/vcs/git.go b/pkg/vcs/git.go
index 3d5b3ca2f..e1682afb0 100644
--- a/pkg/vcs/git.go
+++ b/pkg/vcs/git.go
@@ -202,10 +202,10 @@ func (git *git) initRepo(reason error) error {
log.Logf(1, "git: initializing repo at %v: %v", git.dir, reason)
}
if err := os.RemoveAll(git.dir); err != nil {
- return fmt.Errorf("failed to remove repo dir: %v", err)
+ return fmt.Errorf("failed to remove repo dir: %w", err)
}
if err := osutil.MkdirAll(git.dir); err != nil {
- return fmt.Errorf("failed to create repo dir: %v", err)
+ return fmt.Errorf("failed to create repo dir: %w", err)
}
if git.sandbox {
if err := osutil.SandboxChown(git.dir); err != nil {
@@ -243,11 +243,11 @@ func gitParseCommit(output, user, domain []byte, ignoreCC map[string]bool) (*Com
const dateFormat = "Mon Jan 2 15:04:05 2006 -0700"
date, err := time.Parse(dateFormat, string(lines[4]))
if err != nil {
- return nil, fmt.Errorf("failed to parse date in git log output: %v\n%q", err, output)
+ return nil, fmt.Errorf("failed to parse date in git log output: %w\n%q", err, output)
}
commitDate, err := time.Parse(dateFormat, string(lines[6]))
if err != nil {
- return nil, fmt.Errorf("failed to parse date in git log output: %v\n%q", err, output)
+ return nil, fmt.Errorf("failed to parse date in git log output: %w\n%q", err, output)
}
recipients := make(map[string]bool)
recipients[strings.ToLower(string(lines[2]))] = true
@@ -375,7 +375,7 @@ func (git *git) ListCommitHashes(baseCommit string) ([]string, error) {
func (git *git) ExtractFixTagsFromCommits(baseCommit, email string) ([]*Commit, error) {
user, domain, err := splitEmail(email)
if err != nil {
- return nil, fmt.Errorf("failed to parse email %q: %v", email, err)
+ return nil, fmt.Errorf("failed to parse email %q: %w", email, err)
}
grep := user + "+.*" + domain
since := time.Now().Add(-time.Hour * 24 * 365 * fetchCommitsMaxAgeInYears).Format("01-02-2006")
diff --git a/pkg/vcs/linux.go b/pkg/vcs/linux.go
index 589c300b8..ed4efa08b 100644
--- a/pkg/vcs/linux.go
+++ b/pkg/vcs/linux.go
@@ -305,7 +305,7 @@ func (ctx *linux) Minimize(target *targets.Target, original, baseline []byte, ty
}
kconf, err := kconfig.Parse(target, filepath.Join(ctx.git.dir, "Kconfig"))
if err != nil {
- return nil, fmt.Errorf("failed to parse Kconfig: %v", err)
+ return nil, fmt.Errorf("failed to parse Kconfig: %w", err)
}
config, err := kconfig.ParseConfigData(original, "original")
if err != nil {
diff --git a/prog/encoding.go b/prog/encoding.go
index bd2efb836..5a2c564e7 100644
--- a/prog/encoding.go
+++ b/prog/encoding.go
@@ -465,7 +465,7 @@ func (p *parser) parseArgInt(typ Type, dir Dir) (Arg, error) {
val := p.Ident()
v, err := strconv.ParseUint(val, 0, 64)
if err != nil {
- return nil, fmt.Errorf("wrong arg value '%v': %v", val, err)
+ return nil, fmt.Errorf("wrong arg value '%v': %w", val, err)
}
switch typ.(type) {
case *ConstType, *IntType, *FlagsType, *ProcType, *CsumType:
@@ -985,7 +985,7 @@ func (p *parser) deserializeData() ([]byte, bool, error) {
p.Parse('"')
decoded, err := image.DecodeB64(rawData)
if err != nil {
- return nil, false, fmt.Errorf("data arg is corrupt: %v", err)
+ return nil, false, fmt.Errorf("data arg is corrupt: %w", err)
}
return decoded, true, nil
}
diff --git a/prog/validation.go b/prog/validation.go
index 06275299a..f573d497b 100644
--- a/prog/validation.go
+++ b/prog/validation.go
@@ -38,7 +38,7 @@ func (p *Prog) validate() error {
return fmt.Errorf("call does not have meta information")
}
if err := ctx.validateCall(c); err != nil {
- return fmt.Errorf("call %v: %v", c.Meta.Name, err)
+ return fmt.Errorf("call %v: %w", c.Meta.Name, err)
}
}
for u, orig := range ctx.uses {
diff --git a/sys/syz-extract/extract.go b/sys/syz-extract/extract.go
index adcb1d0ac..e391a6654 100644
--- a/sys/syz-extract/extract.go
+++ b/sys/syz-extract/extract.go
@@ -193,7 +193,7 @@ func createArches(OS string, archArray, files []string) ([]*Arch, int, error) {
if *flagBuild {
dir, err := os.MkdirTemp("", "syzkaller-kernel-build")
if err != nil {
- return nil, 0, fmt.Errorf("failed to create temp dir: %v", err)
+ return nil, 0, fmt.Errorf("failed to create temp dir: %w", err)
}
buildDir = dir
} else if *flagBuildDir != "" {
diff --git a/sys/syz-extract/fetch.go b/sys/syz-extract/fetch.go
index dd5123b31..a7a0e46fe 100644
--- a/sys/syz-extract/fetch.go
+++ b/sys/syz-extract/fetch.go
@@ -70,7 +70,7 @@ func extract(info *compiler.ConstInfo, cc string, args []string, params *extract
}
}
if !tryAgain {
- return nil, nil, fmt.Errorf("failed to run compiler: %v %v\n%v\n%s",
+ return nil, nil, fmt.Errorf("failed to run compiler: %v %v\n%w\n%s",
cc, args, err, out)
}
data.Values = nil
@@ -121,7 +121,7 @@ type CompileData struct {
func compile(cc string, args []string, data *CompileData) (string, []byte, error) {
src := new(bytes.Buffer)
if err := srcTemplate.Execute(src, data); err != nil {
- return "", nil, fmt.Errorf("failed to generate source: %v", err)
+ return "", nil, fmt.Errorf("failed to generate source: %w", err)
}
binFile, err := osutil.TempFile("syz-extract-bin")
if err != nil {
@@ -147,7 +147,7 @@ func compile(cc string, args []string, data *CompileData) (string, []byte, error
func extractFromExecutable(binFile string) ([]uint64, error) {
out, err := osutil.Command(binFile).CombinedOutput()
if err != nil {
- return nil, fmt.Errorf("failed to run flags binary: %v\n%s", err, out)
+ return nil, fmt.Errorf("failed to run flags binary: %w\n%s", err, out)
}
if len(out) == 0 {
return nil, nil
@@ -156,7 +156,7 @@ func extractFromExecutable(binFile string) ([]uint64, error) {
for _, val := range strings.Split(string(out), " ") {
n, err := strconv.ParseUint(val, 10, 64)
if err != nil {
- return nil, fmt.Errorf("failed to parse value: %v (%v)", err, val)
+ return nil, fmt.Errorf("failed to parse value: %w (%v)", err, val)
}
vals = append(vals, n)
}
diff --git a/sys/syz-extract/freebsd.go b/sys/syz-extract/freebsd.go
index 2660e832c..99f74d636 100644
--- a/sys/syz-extract/freebsd.go
+++ b/sys/syz-extract/freebsd.go
@@ -34,11 +34,11 @@ func (*freebsd) prepareArch(arch *Arch) error {
if err := os.Symlink(filepath.Join(arch.sourceDir, "sys", archName, "include"),
filepath.Join(arch.buildDir, "machine")); err != nil {
- return fmt.Errorf("failed to create link: %v", err)
+ return fmt.Errorf("failed to create link: %w", err)
}
if err := os.Symlink(filepath.Join(arch.sourceDir, "sys", "x86", "include"),
filepath.Join(arch.buildDir, "x86")); err != nil {
- return fmt.Errorf("failed to create link: %v", err)
+ return fmt.Errorf("failed to create link: %w", err)
}
return nil
}
diff --git a/sys/syz-extract/linux.go b/sys/syz-extract/linux.go
index 086c2d64b..4ba940ef4 100644
--- a/sys/syz-extract/linux.go
+++ b/sys/syz-extract/linux.go
@@ -33,7 +33,7 @@ func (*linux) prepare(sourcedir string, build bool, arches []*Arch) error {
out, err := osutil.RunCmd(time.Hour, sourcedir, "make", "mrproper", "ARCH="+arch,
"-j", fmt.Sprint(runtime.NumCPU()))
if err != nil {
- return fmt.Errorf("make mrproper failed: %v\n%s", err, out)
+ return fmt.Errorf("make mrproper failed: %w\n%s", err, out)
}
}
}
@@ -82,7 +82,7 @@ func (*linux) prepareArch(arch *Arch) error {
makeArgs := build.LinuxMakeArgs(arch.target, "", "", "", arch.buildDir)
out, err := osutil.RunCmd(time.Hour, kernelDir, "make", append(makeArgs, "defconfig")...)
if err != nil {
- return fmt.Errorf("make defconfig failed: %v\n%s", err, out)
+ return fmt.Errorf("make defconfig failed: %w\n%s", err, out)
}
_, err = osutil.RunCmd(time.Minute, arch.buildDir, filepath.Join(kernelDir, "scripts", "config"),
// powerpc arch is configured to be big-endian by default, but we want little-endian powerpc.
@@ -106,11 +106,11 @@ func (*linux) prepareArch(arch *Arch) error {
}
out, err = osutil.RunCmd(time.Hour, kernelDir, "make", append(makeArgs, "olddefconfig")...)
if err != nil {
- return fmt.Errorf("make olddefconfig failed: %v\n%s", err, out)
+ return fmt.Errorf("make olddefconfig failed: %w\n%s", err, out)
}
out, err = osutil.RunCmd(time.Hour, kernelDir, "make", append(makeArgs, "init/main.o")...)
if err != nil {
- return fmt.Errorf("make failed: %v\n%s", err, out)
+ return fmt.Errorf("make failed: %w\n%s", err, out)
}
return nil
}
diff --git a/sys/syz-extract/netbsd.go b/sys/syz-extract/netbsd.go
index 8f86cd5d5..8cc5efac0 100644
--- a/sys/syz-extract/netbsd.go
+++ b/sys/syz-extract/netbsd.go
@@ -38,7 +38,7 @@ func (*netbsd) prepareArch(arch *Arch) error {
func machineLink(arch *Arch, machine, dest string) error {
if err := os.Symlink(machineInclude(arch, machine),
filepath.Join(arch.buildDir, dest)); err != nil {
- return fmt.Errorf("failed to create link: %v", err)
+ return fmt.Errorf("failed to create link: %w", err)
}
return nil
}
diff --git a/sys/syz-extract/openbsd.go b/sys/syz-extract/openbsd.go
index 5f7036356..f103d1949 100644
--- a/sys/syz-extract/openbsd.go
+++ b/sys/syz-extract/openbsd.go
@@ -24,11 +24,11 @@ func (*openbsd) prepare(sourcedir string, build bool, arches []*Arch) error {
func (*openbsd) prepareArch(arch *Arch) error {
if err := os.Symlink(filepath.Join(arch.sourceDir, "sys", "arch", "amd64", "include"),
filepath.Join(arch.buildDir, "amd64")); err != nil {
- return fmt.Errorf("failed to create link: %v", err)
+ return fmt.Errorf("failed to create link: %w", err)
}
if err := os.Symlink(filepath.Join(arch.sourceDir, "sys", "arch", "amd64", "include"),
filepath.Join(arch.buildDir, "machine")); err != nil {
- return fmt.Errorf("failed to create link: %v", err)
+ return fmt.Errorf("failed to create link: %w", err)
}
return nil
}
diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go
index 4c10fc7b7..203a7a8e3 100644
--- a/syz-ci/jobs.go
+++ b/syz-ci/jobs.go
@@ -255,10 +255,10 @@ func (jp *JobProcessor) pollRepo(mgr *Manager, URL, branch, reportEmail string)
dir := filepath.Join(jp.baseDir, mgr.managercfg.TargetOS, "kernel")
repo, err := vcs.NewRepo(mgr.managercfg.TargetOS, mgr.managercfg.Type, dir)
if err != nil {
- return nil, fmt.Errorf("failed to create kernel repo: %v", err)
+ return nil, fmt.Errorf("failed to create kernel repo: %w", err)
}
if _, err = repo.CheckoutBranch(URL, branch); err != nil {
- return nil, fmt.Errorf("failed to checkout kernel repo %v/%v: %v", URL, branch, err)
+ return nil, fmt.Errorf("failed to checkout kernel repo %v/%v: %w", URL, branch, err)
}
return repo.ExtractFixTagsFromCommits("HEAD", reportEmail)
}
@@ -267,10 +267,10 @@ func (jp *JobProcessor) getCommitInfo(mgr *Manager, URL, branch string, commits
dir := filepath.Join(jp.baseDir, mgr.managercfg.TargetOS, "kernel")
repo, err := vcs.NewRepo(mgr.managercfg.TargetOS, mgr.managercfg.Type, dir)
if err != nil {
- return nil, fmt.Errorf("failed to create kernel repo: %v", err)
+ return nil, fmt.Errorf("failed to create kernel repo: %w", err)
}
if _, err = repo.CheckoutBranch(URL, branch); err != nil {
- return nil, fmt.Errorf("failed to checkout kernel repo %v/%v: %v", URL, branch, err)
+ return nil, fmt.Errorf("failed to checkout kernel repo %v/%v: %w", URL, branch, err)
}
results, missing, err := repo.GetCommitsByTitles(commits)
if err != nil {
@@ -456,7 +456,7 @@ func (jp *JobProcessor) bisect(job *Job, mgrcfg *mgrconfig.Config) error {
var err error
baseline, err = os.ReadFile(mgr.mgrcfg.KernelBaselineConfig)
if err != nil {
- return fmt.Errorf("failed to read baseline config: %v", err)
+ return fmt.Errorf("failed to read baseline config: %w", err)
}
}
trace := new(bytes.Buffer)
@@ -590,7 +590,7 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error {
jp.Logf(0, "fetching kernel...")
repo, err := vcs.NewRepo(mgrcfg.TargetOS, mgrcfg.Type, mgrcfg.KernelSrc)
if err != nil {
- return fmt.Errorf("failed to create kernel repo: %v", err)
+ return fmt.Errorf("failed to create kernel repo: %w", err)
}
kernelCommit, err := jp.checkoutJobCommit(job, repo)
if err != nil {
@@ -601,7 +601,7 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error {
resp.Build.KernelCommitDate = kernelCommit.CommitDate
if err := build.Clean(mgrcfg.TargetOS, mgrcfg.TargetVMArch, mgrcfg.Type, mgrcfg.KernelSrc); err != nil {
- return fmt.Errorf("kernel clean failed: %v", err)
+ return fmt.Errorf("kernel clean failed: %w", err)
}
if len(req.Patch) != 0 {
if err := vcs.Patch(mgrcfg.KernelSrc, req.Patch); err != nil {
@@ -637,7 +637,7 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error {
if kernelConfig != "" {
resp.Build.KernelConfig, err = os.ReadFile(kernelConfig)
if err != nil {
- return fmt.Errorf("failed to read config file: %v", err)
+ return fmt.Errorf("failed to read config file: %w", err)
}
}
jp.Logf(0, "job: testing...")
@@ -666,17 +666,17 @@ func (jp *JobProcessor) checkoutJobCommit(job *Job, repo vcs.Repo) (*vcs.Commit,
jp.Logf(1, "checking out the base kernel...")
firstCommit, err := checkoutKernelOrCommit(repo, req.KernelRepo, req.KernelBranch)
if err != nil {
- return nil, fmt.Errorf("failed to checkout first kernel repo %v on %v: %v",
+ return nil, fmt.Errorf("failed to checkout first kernel repo %v on %v: %w",
req.KernelRepo, req.KernelBranch, err)
}
secondCommit, err := checkoutKernelOrCommit(repo, req.MergeBaseRepo, req.MergeBaseBranch)
if err != nil {
- return nil, fmt.Errorf("failed to checkout second kernel repo %v on %v: %v",
+ return nil, fmt.Errorf("failed to checkout second kernel repo %v on %v: %w",
req.MergeBaseRepo, req.MergeBaseBranch, err)
}
bases, err := repo.MergeBases(firstCommit.Hash, secondCommit.Hash)
if err != nil {
- return nil, fmt.Errorf("failed to calculate merge bases between %v and %v: %v",
+ return nil, fmt.Errorf("failed to calculate merge bases between %v and %v: %w",
firstCommit.Hash, secondCommit.Hash, err)
}
if len(bases) != 1 {
@@ -685,7 +685,7 @@ func (jp *JobProcessor) checkoutJobCommit(job *Job, repo vcs.Repo) (*vcs.Commit,
}
kernelCommit, err = repo.CheckoutCommit(req.KernelRepo, bases[0].Hash)
if err != nil {
- return nil, fmt.Errorf("failed to checkout kernel repo %v on merge base %v: %v",
+ return nil, fmt.Errorf("failed to checkout kernel repo %v on merge base %v: %w",
req.KernelRepo, bases[0].Hash, err)
}
resp.Build.KernelBranch = ""
@@ -693,7 +693,7 @@ func (jp *JobProcessor) checkoutJobCommit(job *Job, repo vcs.Repo) (*vcs.Commit,
var err error
kernelCommit, err = repo.CheckoutCommit(req.KernelRepo, req.KernelBranch)
if err != nil {
- return nil, fmt.Errorf("failed to checkout kernel repo %v on commit %v: %v",
+ return nil, fmt.Errorf("failed to checkout kernel repo %v on commit %v: %w",
req.KernelRepo, req.KernelBranch, err)
}
resp.Build.KernelBranch = ""
@@ -701,7 +701,7 @@ func (jp *JobProcessor) checkoutJobCommit(job *Job, repo vcs.Repo) (*vcs.Commit,
var err error
kernelCommit, err = repo.CheckoutBranch(req.KernelRepo, req.KernelBranch)
if err != nil {
- return nil, fmt.Errorf("failed to checkout kernel repo %v/%v: %v",
+ return nil, fmt.Errorf("failed to checkout kernel repo %v/%v: %w",
req.KernelRepo, req.KernelBranch, err)
}
}
diff --git a/syz-ci/manager.go b/syz-ci/manager.go
index 7ec7ba1cc..14dd6114c 100644
--- a/syz-ci/manager.go
+++ b/syz-ci/manager.go
@@ -313,10 +313,10 @@ func (mgr *Manager) build(kernelCommit *vcs.Commit) error {
// We first form the whole image in tmp dir and then rename it to latest.
tmpDir := mgr.latestDir + ".tmp"
if err := os.RemoveAll(tmpDir); err != nil {
- return fmt.Errorf("failed to remove tmp dir: %v", err)
+ return fmt.Errorf("failed to remove tmp dir: %w", err)
}
if err := osutil.MkdirAll(tmpDir); err != nil {
- return fmt.Errorf("failed to create tmp dir: %v", err)
+ return fmt.Errorf("failed to create tmp dir: %w", err)
}
params := build.Params{
TargetOS: mgr.managercfg.TargetOS,
@@ -353,11 +353,11 @@ func (mgr *Manager) build(kernelCommit *vcs.Commit) error {
if err := mgr.reportBuildError(rep, info, tmpDir); err != nil {
mgr.Errorf("failed to report image error: %v", err)
}
- return fmt.Errorf("kernel build failed: %v", err)
+ return fmt.Errorf("kernel build failed: %w", err)
}
if err := config.SaveFile(filepath.Join(tmpDir, "tag"), info); err != nil {
- return fmt.Errorf("failed to write tag file: %v", err)
+ return fmt.Errorf("failed to write tag file: %w", err)
}
if err := mgr.testImage(tmpDir, info); err != nil {
@@ -366,7 +366,7 @@ func (mgr *Manager) build(kernelCommit *vcs.Commit) error {
// Now try to replace latest with our tmp dir as atomically as we can get on Linux.
if err := os.RemoveAll(mgr.latestDir); err != nil {
- return fmt.Errorf("failed to remove latest dir: %v", err)
+ return fmt.Errorf("failed to remove latest dir: %w", err)
}
return osutil.Rename(tmpDir, mgr.latestDir)
}
@@ -412,7 +412,7 @@ func (mgr *Manager) testImage(imageDir string, info *BuildInfo) error {
log.Logf(0, "%v: testing image...", mgr.name)
mgrcfg, err := mgr.createTestConfig(imageDir, info)
if err != nil {
- return fmt.Errorf("failed to create manager config: %v", err)
+ return fmt.Errorf("failed to create manager config: %w", err)
}
defer os.RemoveAll(mgrcfg.Workdir)
if !vm.AllowsOvercommit(mgrcfg.Type) {
@@ -455,9 +455,9 @@ func (mgr *Manager) testImage(imageDir string, info *BuildInfo) error {
}
}
if err.Boot {
- failureErr = fmt.Errorf("VM boot failed with: %v", err)
+ failureErr = fmt.Errorf("VM boot failed with: %w", err)
} else {
- failureErr = fmt.Errorf("VM testing failed with: %v", err)
+ failureErr = fmt.Errorf("VM testing failed with: %w", err)
}
default:
failureErr = res.Error
@@ -520,7 +520,7 @@ func (mgr *Manager) createTestConfig(imageDir string, info *BuildInfo) (*mgrconf
}
mgrcfg.KernelSrc = mgr.kernelDir
if err := mgrconfig.Complete(mgrcfg); err != nil {
- return nil, fmt.Errorf("bad manager config: %v", err)
+ return nil, fmt.Errorf("bad manager config: %w", err)
}
return mgrcfg, nil
}
@@ -557,7 +557,7 @@ func (mgr *Manager) writeConfig(buildTag string) (string, error) {
// problems, we need to make a copy of sources after build.
mgrcfg.KernelSrc = mgr.kernelDir
if err := mgrconfig.Complete(mgrcfg); err != nil {
- return "", fmt.Errorf("bad manager config: %v", err)
+ return "", fmt.Errorf("bad manager config: %w", err)
}
configFile := filepath.Join(mgr.currentDir, "manager.cfg")
if err := config.SaveFile(configFile, mgrcfg); err != nil {
@@ -611,7 +611,7 @@ func (mgr *Manager) createDashboardBuild(info *BuildInfo, imageDir, typ string)
if kernelConfigFile := filepath.Join(imageDir, "kernel.config"); osutil.IsExist(kernelConfigFile) {
var err error
if kernelConfig, err = os.ReadFile(kernelConfigFile); err != nil {
- return nil, fmt.Errorf("failed to read kernel.config: %v", err)
+ return nil, fmt.Errorf("failed to read kernel.config: %w", err)
}
}
// Resulting build depends on both kernel build tag and syzkaller commmit.
@@ -787,7 +787,7 @@ func (mgr *Manager) uploadCoverReport() error {
}
resp, err := client.Get(fmt.Sprintf("http://%v/cover", addr))
if err != nil {
- return fmt.Errorf("failed to get report: %v", err)
+ return fmt.Errorf("failed to get report: %w", err)
}
defer resp.Body.Close()
if directUpload {
@@ -818,7 +818,7 @@ func (mgr *Manager) uploadCorpus() error {
func (mgr *Manager) uploadFile(dstPath, name string, file io.Reader) error {
URL, err := url.Parse(dstPath)
if err != nil {
- return fmt.Errorf("failed to parse upload path: %v", err)
+ return fmt.Errorf("failed to parse upload path: %w", err)
}
URL.Path = path.Join(URL.Path, name)
URLStr := URL.String()
@@ -837,19 +837,19 @@ func (mgr *Manager) uploadFile(dstPath, name string, file io.Reader) error {
func uploadFileGCS(URL string, file io.Reader, publish bool) error {
GCS, err := gcs.NewClient()
if err != nil {
- return fmt.Errorf("failed to create GCS client: %v", err)
+ return fmt.Errorf("failed to create GCS client: %w", err)
}
defer GCS.Close()
gcsWriter, err := GCS.FileWriter(URL)
if err != nil {
- return fmt.Errorf("failed to create GCS writer: %v", err)
+ return fmt.Errorf("failed to create GCS writer: %w", err)
}
if _, err := io.Copy(gcsWriter, file); err != nil {
gcsWriter.Close()
- return fmt.Errorf("failed to copy report: %v", err)
+ return fmt.Errorf("failed to copy report: %w", err)
}
if err := gcsWriter.Close(); err != nil {
- return fmt.Errorf("failed to close gcs writer: %v", err)
+ return fmt.Errorf("failed to close gcs writer: %w", err)
}
if publish {
return GCS.Publish(URL)
@@ -860,12 +860,12 @@ func uploadFileGCS(URL string, file io.Reader, publish bool) error {
func uploadFileHTTPPut(URL string, file io.Reader) error {
req, err := http.NewRequest(http.MethodPut, URL, file)
if err != nil {
- return fmt.Errorf("failed to create HTTP PUT request: %v", err)
+ return fmt.Errorf("failed to create HTTP PUT request: %w", err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
- return fmt.Errorf("failed to perform HTTP PUT request: %v", err)
+ return fmt.Errorf("failed to perform HTTP PUT request: %w", err)
}
defer resp.Body.Close()
if !(resp.StatusCode >= 200 && resp.StatusCode <= 299) {
diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go
index 94b574360..e30e59929 100644
--- a/syz-ci/syz-ci.go
+++ b/syz-ci/syz-ci.go
@@ -391,7 +391,7 @@ func loadConfig(filename string) (*Config, error) {
func loadManagerConfig(cfg *Config, mgr *ManagerConfig) error {
managercfg, err := mgrconfig.LoadPartialData(mgr.ManagerConfig)
if err != nil {
- return fmt.Errorf("manager config: %v", err)
+ return fmt.Errorf("manager config: %w", err)
}
if managercfg.Name != "" && mgr.Name != "" {
return fmt.Errorf("both managercfg.Name=%q and mgr.Name=%q are specified", managercfg.Name, mgr.Name)
diff --git a/syz-ci/updater.go b/syz-ci/updater.go
index bade54333..1d632ddcd 100644
--- a/syz-ci/updater.go
+++ b/syz-ci/updater.go
@@ -227,7 +227,7 @@ func (upd *SyzUpdater) build(commit *vcs.Commit) error {
if upd.descriptions != "" {
files, err := os.ReadDir(upd.descriptions)
if err != nil {
- return fmt.Errorf("failed to read descriptions dir: %v", err)
+ return fmt.Errorf("failed to read descriptions dir: %w", err)
}
for _, f := range files {
src := filepath.Join(upd.descriptions, f.Name())
@@ -286,10 +286,10 @@ func (upd *SyzUpdater) build(commit *vcs.Commit) error {
}
tagFile := filepath.Join(upd.syzkallerDir, "tag")
if err := osutil.WriteFile(tagFile, []byte(commit.Hash)); err != nil {
- return fmt.Errorf("failed to write tag file: %v", err)
+ return fmt.Errorf("failed to write tag file: %w", err)
}
if err := osutil.CopyFiles(upd.syzkallerDir, upd.latestDir, upd.syzFiles); err != nil {
- return fmt.Errorf("failed to copy syzkaller: %v", err)
+ return fmt.Errorf("failed to copy syzkaller: %w", err)
}
return nil
}
diff --git a/syz-fuzzer/testing.go b/syz-fuzzer/testing.go
index 49f2d1ce6..4a8fc7e93 100644
--- a/syz-fuzzer/testing.go
+++ b/syz-fuzzer/testing.go
@@ -126,7 +126,7 @@ func checkMachine(args *checkArgs) (*rpctype.CheckArgs, error) {
}
globFiles, err := host.CollectGlobsInfo(args.target.GetGlobs())
if err != nil {
- return nil, fmt.Errorf("failed to collect glob info: %v", err)
+ return nil, fmt.Errorf("failed to collect glob info: %w", err)
}
// TODO: make host.DetectSupportedSyscalls below filter out globs with no values.
// Also make prog package more strict with respect to generation/mutation of globs
@@ -217,7 +217,7 @@ func checkRevisions(args *checkArgs) error {
}
out, err := osutil.Run(time.Minute, cmd)
if err != nil {
- return fmt.Errorf("failed to run executor version: %v", err)
+ return fmt.Errorf("failed to run executor version: %w", err)
}
vers := strings.Split(strings.TrimSpace(string(out)), " ")
if len(vers) != 4 {
@@ -248,17 +248,17 @@ func checkRevisions(args *checkArgs) error {
func checkSimpleProgram(args *checkArgs, features *host.Features) error {
log.Logf(0, "testing simple program...")
if err := host.Setup(args.target, features, args.featureFlags, args.ipcConfig.Executor); err != nil {
- return fmt.Errorf("host setup failed: %v", err)
+ return fmt.Errorf("host setup failed: %w", err)
}
env, err := ipc.MakeEnv(args.ipcConfig, 0)
if err != nil {
- return fmt.Errorf("failed to create ipc env: %v", err)
+ return fmt.Errorf("failed to create ipc env: %w", err)
}
defer env.Close()
p := args.target.DataMmapProg()
output, info, hanged, err := env.Exec(args.ipcExecOpts, p)
if err != nil {
- return fmt.Errorf("program execution failed: %v\n%s", err, output)
+ return fmt.Errorf("program execution failed: %w\n%s", err, output)
}
if hanged {
return fmt.Errorf("program hanged:\n%s", output)
@@ -297,7 +297,7 @@ func buildCallList(target *prog.Target, enabledCalls []int, sandbox string) (
_, unsupported, err := host.DetectSupportedSyscalls(target, sandbox, calls)
if err != nil {
- return nil, nil, fmt.Errorf("failed to detect host supported syscalls: %v", err)
+ return nil, nil, fmt.Errorf("failed to detect host supported syscalls: %w", err)
}
for c := range calls {
if reason, ok := unsupported[c]; ok {
diff --git a/syz-hub/state/state.go b/syz-hub/state/state.go
index d5a6183b4..37bdb2b59 100644
--- a/syz-hub/state/state.go
+++ b/syz-hub/state/state.go
@@ -74,7 +74,7 @@ func Make(dir string) (*State, error) {
osutil.MkdirAll(managersDir)
managers, err := os.ReadDir(managersDir)
if err != nil {
- return nil, fmt.Errorf("failed to read %v dir: %v", managersDir, err)
+ return nil, fmt.Errorf("failed to read %v dir: %w", managersDir, err)
}
for _, manager := range managers {
_, err := st.createManager(manager.Name())
@@ -103,7 +103,7 @@ func loadDB(file, name string, progs bool) (*db.DB, uint64, error) {
log.Logf(0, "reading %v...", name)
db, err := db.Open(file, true)
if err != nil {
- return nil, 0, fmt.Errorf("failed to open %v database: %v", name, err)
+ return nil, 0, fmt.Errorf("failed to open %v database: %w", name, err)
}
log.Logf(0, "read %v programs", len(db.Records))
var maxSeq uint64
@@ -131,7 +131,7 @@ func loadDB(file, name string, progs bool) (*db.DB, uint64, error) {
}
}
if err := db.Flush(); err != nil {
- return nil, 0, fmt.Errorf("failed to flush corpus database: %v", err)
+ return nil, 0, fmt.Errorf("failed to flush corpus database: %w", err)
}
return db, maxSeq, nil
}
@@ -162,7 +162,7 @@ func (st *State) createManager(name string) (*Manager, error) {
mgr.Domain = string(domainData)
corpus, _, err := loadDB(mgr.corpusFile, name, false)
if err != nil {
- return nil, fmt.Errorf("failed to open manager corpus %v: %v", mgr.corpusFile, err)
+ return nil, fmt.Errorf("failed to open manager corpus %v: %w", mgr.corpusFile, err)
}
mgr.Corpus = corpus
log.Logf(0, "created manager %v: domain=%v corpus=%v, corpusSeq=%v, reproSeq=%v",
@@ -276,7 +276,7 @@ func (st *State) PendingRepro(name string) ([]byte, error) {
}
calls, _, err := prog.CallSet(rec.Val)
if err != nil {
- return nil, fmt.Errorf("failed to extract call set: %v\nprogram: %s", err, rec.Val)
+ return nil, fmt.Errorf("failed to extract call set: %w\nprogram: %s", err, rec.Val)
}
if !managerSupportsAllCalls(mgr.Calls, calls) {
continue
@@ -316,7 +316,7 @@ func (st *State) pendingInputs(mgr *Manager) ([]rpctype.HubInput, int, error) {
}
calls, _, err := prog.CallSet(rec.Val)
if err != nil {
- return nil, 0, fmt.Errorf("failed to extract call set: %v\nprogram: %s", err, rec.Val)
+ return nil, 0, fmt.Errorf("failed to extract call set: %w\nprogram: %s", err, rec.Val)
}
if !managerSupportsAllCalls(mgr.Calls, calls) {
continue
diff --git a/syz-manager/covfilter.go b/syz-manager/covfilter.go
index 811689899..5844c4bc3 100644
--- a/syz-manager/covfilter.go
+++ b/syz-manager/covfilter.go
@@ -104,7 +104,7 @@ func covFilterAddRawPCs(pcs map[uint32]uint32, rawPCsFiles []string) error {
for _, f := range rawPCsFiles {
rawFile, err := os.Open(f)
if err != nil {
- return fmt.Errorf("failed to open raw PCs file: %v", err)
+ return fmt.Errorf("failed to open raw PCs file: %w", err)
}
defer rawFile.Close()
s := bufio.NewScanner(rawFile)
@@ -180,7 +180,7 @@ func compileRegexps(regexpStrings []string) ([]*regexp.Regexp, error) {
for _, rs := range regexpStrings {
r, err := regexp.Compile(rs)
if err != nil {
- return nil, fmt.Errorf("failed to compile regexp: %v", err)
+ return nil, fmt.Errorf("failed to compile regexp: %w", err)
}
regexps = append(regexps, r)
}
diff --git a/syz-manager/manager.go b/syz-manager/manager.go
index 99830d7e2..a08cd3d7a 100644
--- a/syz-manager/manager.go
+++ b/syz-manager/manager.go
@@ -767,18 +767,18 @@ func (mgr *Manager) runInstance(index int) (*Crash, error) {
func (mgr *Manager) runInstanceInner(index int, instanceName string) (*report.Report, []byte, error) {
inst, err := mgr.vmPool.Create(index)
if err != nil {
- return nil, nil, fmt.Errorf("failed to create instance: %v", err)
+ return nil, nil, fmt.Errorf("failed to create instance: %w", err)
}
defer inst.Close()
fwdAddr, err := inst.Forward(mgr.serv.port)
if err != nil {
- return nil, nil, fmt.Errorf("failed to setup port forwarding: %v", err)
+ return nil, nil, fmt.Errorf("failed to setup port forwarding: %w", err)
}
fuzzerBin, err := inst.Copy(mgr.cfg.FuzzerBin)
if err != nil {
- return nil, nil, fmt.Errorf("failed to copy binary: %v", err)
+ return nil, nil, fmt.Errorf("failed to copy binary: %w", err)
}
// If ExecutorBin is provided, it means that syz-executor is already in the image,
@@ -787,7 +787,7 @@ func (mgr *Manager) runInstanceInner(index int, instanceName string) (*report.Re
if executorBin == "" {
executorBin, err = inst.Copy(mgr.cfg.ExecutorBin)
if err != nil {
- return nil, nil, fmt.Errorf("failed to copy binary: %v", err)
+ return nil, nil, fmt.Errorf("failed to copy binary: %w", err)
}
}
@@ -826,7 +826,7 @@ func (mgr *Manager) runInstanceInner(index int, instanceName string) (*report.Re
cmd := instance.FuzzerCmd(args)
outc, errc, err := inst.Run(mgr.cfg.Timeouts.VMRunningTime, mgr.vmStop, cmd)
if err != nil {
- return nil, nil, fmt.Errorf("failed to run fuzzer: %v", err)
+ return nil, nil, fmt.Errorf("failed to run fuzzer: %w", err)
}
var vmInfo []byte
diff --git a/tools/syz-check/check.go b/tools/syz-check/check.go
index 7f86c2d41..6a0b4378b 100644
--- a/tools/syz-check/check.go
+++ b/tools/syz-check/check.go
@@ -446,7 +446,7 @@ func checkNetlinkStruct(locs map[string]*ast.Struct, symbols map[string][]symbol
binary := make([]byte, symb.Size)
addr := symb.Addr - rodata.Addr
if _, err := rodata.ReadAt(binary, int64(addr)); err != nil {
- return nil, fmt.Errorf("failed to read policy %v (%v) at %v: %v",
+ return nil, fmt.Errorf("failed to read policy %v (%v) at %v: %w",
kernelName, name, symb.Addr, err)
}
policy := (*[1e6]nlaPolicy)(unsafe.Pointer(&binary[0]))[:symb.Size/int(unsafe.Sizeof(nlaPolicy{}))]
diff --git a/tools/syz-imagegen/imagegen.go b/tools/syz-imagegen/imagegen.go
index 1fd357f43..d71e19d76 100644
--- a/tools/syz-imagegen/imagegen.go
+++ b/tools/syz-imagegen/imagegen.go
@@ -737,11 +737,11 @@ func generateImages(target *prog.Target, flagFS string, list bool) ([]*Image, er
}
files, err := filepath.Glob(filepath.Join("sys", targets.Linux, "test", fs.filePrefix()+"_*"))
if err != nil {
- return nil, fmt.Errorf("error reading output dir: %v", err)
+ return nil, fmt.Errorf("error reading output dir: %w", err)
}
for _, file := range files {
if err := os.Remove(file); err != nil {
- return nil, fmt.Errorf("error removing output file: %v", err)
+ return nil, fmt.Errorf("error removing output file: %w", err)
}
}
}
@@ -806,7 +806,7 @@ func (img *Image) generateSize() error {
// This does not work with runCmd -- sudo does not show password prompt on console.
cmd := exec.Command("sudo", os.Args[0], "-populate", img.disk, "-fs", img.fs.Name)
if out, err := cmd.CombinedOutput(); err != nil {
- return fmt.Errorf("image population failed: %v\n%s", err, out)
+ return fmt.Errorf("image population failed: %w\n%s", err, out)
}
}
data, err := os.ReadFile(img.disk)
@@ -818,16 +818,16 @@ func (img *Image) generateSize() error {
// Write out image *with* change of directory.
out, err := writeImage(img, data)
if err != nil {
- return fmt.Errorf("failed to write image: %v", err)
+ return fmt.Errorf("failed to write image: %w", err)
}
p, err := img.target.Deserialize(out, prog.Strict)
if err != nil {
- return fmt.Errorf("failed to deserialize resulting program: %v", err)
+ return fmt.Errorf("failed to deserialize resulting program: %w", err)
}
exec := make([]byte, prog.ExecBufferSize)
if _, err := p.SerializeForExec(exec); err != nil {
- return fmt.Errorf("failed to serialize for execution: %v", err)
+ return fmt.Errorf("failed to serialize for execution: %w", err)
}
return osutil.WriteFile(outFile, out)
@@ -848,7 +848,7 @@ func populate(disk, fs string) error {
}
defer os.RemoveAll(dir)
if _, err := runCmd("mount", "-t", fs, loop, dir); err != nil {
- return fmt.Errorf("%v\n%s", err, output)
+ return fmt.Errorf("%w\n%s", err, output)
}
defer runCmd("umount", dir)
return populateDir(dir)
diff --git a/tools/syz-kconf/kconf.go b/tools/syz-kconf/kconf.go
index 8a08f557a..aea31b55c 100644
--- a/tools/syz-kconf/kconf.go
+++ b/tools/syz-kconf/kconf.go
@@ -96,7 +96,7 @@ func main() {
}
go func() {
if err := ctx.generate(); err != nil {
- results <- fmt.Errorf("%v failed:\n%v", ctx.Inst.Name, err)
+ results <- fmt.Errorf("%v failed:\n%w", ctx.Inst.Name, err)
}
results <- nil
}()
@@ -211,14 +211,14 @@ func (ctx *Context) generate() error {
}
original := cf.Serialize()
if err := osutil.WriteFile(configFile, original); err != nil {
- return fmt.Errorf("failed to write .config file: %v", err)
+ return fmt.Errorf("failed to write .config file: %w", err)
}
// Save what we've got before olddefconfig for debugging purposes, it allows to see if we did not set a config,
// or olddefconfig removed it. Save as .tmp so that it's not checked-in accidentially.
outputFile := filepath.Join(ctx.ConfigDir, ctx.Inst.Name+".config")
outputFileTmp := outputFile + ".tmp"
if err := osutil.WriteFile(outputFileTmp, original); err != nil {
- return fmt.Errorf("failed to write tmp config file: %v", err)
+ return fmt.Errorf("failed to write tmp config file: %w", err)
}
if err := ctx.Make("olddefconfig"); err != nil {
return err
@@ -228,7 +228,7 @@ func (ctx *Context) generate() error {
return err
}
if err := ctx.verifyConfigs(cf); err != nil {
- return fmt.Errorf("%vsaved config before olddefconfig to %v", err, outputFileTmp)
+ return fmt.Errorf("%w: saved config before olddefconfig to %v", err, outputFileTmp)
}
if !ctx.Inst.Features[featModules] {
cf.ModToNo()
@@ -394,11 +394,11 @@ func (ctx *Context) setReleaseFeatures() error {
}
major, err := strconv.ParseInt(match[1], 10, 32)
if err != nil {
- return fmt.Errorf("bad release tag %q: %v", tag, err)
+ return fmt.Errorf("bad release tag %q: %w", tag, err)
}
minor, err := strconv.ParseInt(match[2], 10, 32)
if err != nil {
- return fmt.Errorf("bad release tag %q: %v", tag, err)
+ return fmt.Errorf("bad release tag %q: %w", tag, err)
}
for ; major >= 2; major-- {
for ; minor >= 0; minor-- {
diff --git a/tools/syz-kconf/parser.go b/tools/syz-kconf/parser.go
index c81525cdf..a37e5f2ed 100644
--- a/tools/syz-kconf/parser.go
+++ b/tools/syz-kconf/parser.go
@@ -91,13 +91,13 @@ type rawFile struct {
func parseMainSpec(file string) ([]*Instance, []string, error) {
data, err := os.ReadFile(file)
if err != nil {
- return nil, nil, fmt.Errorf("failed to read config file: %v", err)
+ return nil, nil, fmt.Errorf("failed to read config file: %w", err)
}
dec := yaml.NewDecoder(bytes.NewReader(data))
dec.KnownFields(true)
raw := new(rawMain)
if err := dec.Decode(raw); err != nil {
- return nil, nil, fmt.Errorf("failed to parse %v: %v", file, err)
+ return nil, nil, fmt.Errorf("failed to parse %v: %w", file, err)
}
var unusedFeatures []string
var instances []*Instance
@@ -109,7 +109,7 @@ func parseMainSpec(file string) ([]*Instance, []string, error) {
}
inst, err := parseInstance(name, filepath.Dir(file), features, raw.Includes)
if err != nil {
- return nil, nil, fmt.Errorf("%v: %v", name, err)
+ return nil, nil, fmt.Errorf("%v: %w", name, err)
}
instances = append(instances, inst)
inst, err = parseInstance(name+"-base", filepath.Dir(file),
@@ -159,13 +159,13 @@ func parseInstance(name, configDir string, features []string, includes []map[str
func parseFile(file string) (*rawFile, error) {
data, err := os.ReadFile(file)
if err != nil {
- return nil, fmt.Errorf("failed to read %v: %v", file, err)
+ return nil, fmt.Errorf("failed to read %v: %w", file, err)
}
dec := yaml.NewDecoder(bytes.NewReader(data))
dec.KnownFields(true)
raw := new(rawFile)
if err := dec.Decode(raw); err != nil {
- return nil, fmt.Errorf("failed to parse %v: %v", file, err)
+ return nil, fmt.Errorf("failed to parse %v: %w", file, err)
}
return raw, nil
}
diff --git a/tools/syz-reporter/reporter.go b/tools/syz-reporter/reporter.go
index f9d482c6b..6fa4adc47 100644
--- a/tools/syz-reporter/reporter.go
+++ b/tools/syz-reporter/reporter.go
@@ -92,7 +92,7 @@ func httpSummary(w io.Writer, cfg *mgrconfig.Config) error {
var err error
if data.Crashes, err = collectCrashes(cfg.Workdir); err != nil {
- return fmt.Errorf("failed to collect crashes: %v", err)
+ return fmt.Errorf("failed to collect crashes: %w", err)
}
data.CrashCount = len(data.Crashes)
@@ -104,7 +104,7 @@ func httpSummary(w io.Writer, cfg *mgrconfig.Config) error {
}
if err = summaryTemplate.Execute(w, data); err != nil {
- return fmt.Errorf("failed to execute template: %v", err)
+ return fmt.Errorf("failed to execute template: %w", err)
}
return err
diff --git a/tools/syz-reprolist/reprolist.go b/tools/syz-reprolist/reprolist.go
index 56313e952..3b0aa94d0 100644
--- a/tools/syz-reprolist/reprolist.go
+++ b/tools/syz-reprolist/reprolist.go
@@ -137,15 +137,15 @@ func writeRepros(bugchan chan *dashapi.BugReport) {
func createCRepro(bug *dashapi.BugReport) error {
opts, err := csource.DeserializeOptions(bug.ReproOpts)
if err != nil {
- return fmt.Errorf("failed to deserialize opts: %v", err)
+ return fmt.Errorf("failed to deserialize opts: %w", err)
}
file := filepath.Join(*flagOutputDir, bug.ID+".syz")
if err := os.WriteFile(file, bug.ReproSyz, 0644); err != nil {
- return fmt.Errorf("failed to write file: %v", err)
+ return fmt.Errorf("failed to write file: %w", err)
}
repo := vcs.NewSyzkallerRepo(*flagSyzkallerDir, vcs.OptPrecious)
if _, err := repo.SwitchCommit(bug.SyzkallerCommit); err != nil {
- return fmt.Errorf("failed to checkout commit %v: %v", bug.SyzkallerCommit, err)
+ return fmt.Errorf("failed to checkout commit %v: %w", bug.SyzkallerCommit, err)
}
// At some points we checked-in generated descriptions, at some they are not tracked.
// Also, new arches were added. This can cause build breakages when switching
diff --git a/tools/syz-runtest/runtest.go b/tools/syz-runtest/runtest.go
index c36936056..405b22255 100644
--- a/tools/syz-runtest/runtest.go
+++ b/tools/syz-runtest/runtest.go
@@ -149,18 +149,18 @@ type Manager struct {
func (mgr *Manager) boot(name string, index int) (*report.Report, error) {
inst, err := mgr.vmPool.Create(index)
if err != nil {
- return nil, fmt.Errorf("failed to create instance: %v", err)
+ return nil, fmt.Errorf("failed to create instance: %w", err)
}
defer inst.Close()
fwdAddr, err := inst.Forward(mgr.port)
if err != nil {
- return nil, fmt.Errorf("failed to setup port forwarding: %v", err)
+ return nil, fmt.Errorf("failed to setup port forwarding: %w", err)
}
fuzzerBin, err := inst.Copy(mgr.cfg.FuzzerBin)
if err != nil {
- return nil, fmt.Errorf("failed to copy binary: %v", err)
+ return nil, fmt.Errorf("failed to copy binary: %w", err)
}
// If SyzExecutorCmd is provided, it means that syz-executor is already in
@@ -169,7 +169,7 @@ func (mgr *Manager) boot(name string, index int) (*report.Report, error) {
if executorBin == "" {
executorBin, err = inst.Copy(mgr.cfg.ExecutorBin)
if err != nil {
- return nil, fmt.Errorf("failed to copy binary: %v", err)
+ return nil, fmt.Errorf("failed to copy binary: %w", err)
}
}
args := &instance.FuzzerCmdArgs{
@@ -194,7 +194,7 @@ func (mgr *Manager) boot(name string, index int) (*report.Report, error) {
cmd := instance.FuzzerCmd(args)
outc, errc, err := inst.Run(time.Hour, mgr.vmStop, cmd)
if err != nil {
- return nil, fmt.Errorf("failed to run fuzzer: %v", err)
+ return nil, fmt.Errorf("failed to run fuzzer: %w", err)
}
rep := inst.MonitorExecution(outc, errc, mgr.reporter, vm.ExitNormal)
return rep, nil
diff --git a/tools/syz-testbed/checkout.go b/tools/syz-testbed/checkout.go
index e28786930..eb7481bef 100644
--- a/tools/syz-testbed/checkout.go
+++ b/tools/syz-testbed/checkout.go
@@ -101,12 +101,12 @@ func (ctx *TestbedContext) NewCheckout(config *CheckoutConfig, mgrConfig json.Ra
repo := vcs.NewSyzkallerRepo(checkout.Path)
commit, err := repo.Poll(config.Repo, config.Branch)
if err != nil {
- return nil, fmt.Errorf("failed to checkout %s (%s): %s", config.Repo, config.Branch, err)
+ return nil, fmt.Errorf("failed to checkout %s (%s): %w", config.Repo, config.Branch, err)
}
log.Printf("[%s] Done. Latest commit: %s", checkout.Name, commit)
log.Printf("[%s] Building", checkout.Name)
if _, err := osutil.RunCmd(time.Hour, checkout.Path, syz_instance.MakeBin); err != nil {
- return nil, fmt.Errorf("[%s] Make failed: %s", checkout.Name, err)
+ return nil, fmt.Errorf("[%s] Make failed: %w", checkout.Name, err)
}
return checkout, nil
}
diff --git a/tools/syz-testbed/html.go b/tools/syz-testbed/html.go
index 70e20ac0b..679099a8a 100644
--- a/tools/syz-testbed/html.go
+++ b/tools/syz-testbed/html.go
@@ -192,7 +192,7 @@ func (ctx *TestbedContext) genSimpleTableController(method func(view StatView) (
return func(urlPrefix string, view StatView, r *http.Request) (*uiTable, error) {
table, err := method(view)
if err != nil {
- return nil, fmt.Errorf("table generation failed: %s", err)
+ return nil, fmt.Errorf("table generation failed: %w", err)
}
return &uiTable{
Table: table,
@@ -208,7 +208,7 @@ func (ctx *TestbedContext) httpMainStatsTable(urlPrefix string, view StatView, r
}
table, err := view.AlignedStatsTable(alignBy)
if err != nil {
- return nil, fmt.Errorf("stat table generation failed: %s", err)
+ return nil, fmt.Errorf("stat table generation failed: %w", err)
}
baseColumn := r.FormValue("base_column")
if baseColumn != "" {
diff --git a/tools/syz-testbed/instance.go b/tools/syz-testbed/instance.go
index a7b616eb6..2ea3161e3 100644
--- a/tools/syz-testbed/instance.go
+++ b/tools/syz-testbed/instance.go
@@ -42,7 +42,7 @@ func (inst *InstanceCommon) Run() error {
if inst.LogFile != "" {
logfile, err := os.Create(inst.LogFile)
if err != nil {
- return fmt.Errorf("[%s] failed to create logfile: %s", inst.Name, err)
+ return fmt.Errorf("[%s] failed to create logfile: %w", inst.Name, err)
}
cmd.Stdout = logfile
cmd.Stderr = logfile
@@ -120,7 +120,7 @@ func (inst *SyzManagerInstance) Run() error {
case err := <-ret:
// Syz-managers are not supposed to stop themselves under normal circumstances.
// If one of them did stop, there must have been a very good reason to do so.
- return fmt.Errorf("[%s] stopped: %v", inst.Name, err)
+ return fmt.Errorf("[%s] stopped: %w", inst.Name, err)
case <-time.After(inst.RunTime):
inst.Stop()
<-ret
@@ -153,7 +153,7 @@ func SetupSyzkallerInstance(mgrName, folder string, checkout *Checkout) (*Syzkal
}
err = osutil.WriteFile(cfgFile, managerCfg)
if err != nil {
- return nil, fmt.Errorf("failed to save manager config to %s: %s", cfgFile, err)
+ return nil, fmt.Errorf("failed to save manager config to %s: %w", cfgFile, err)
}
return &SyzkallerInfo{
Workdir: workdir,
@@ -173,7 +173,7 @@ func (t *SyzManagerTarget) newSyzManagerInstance(slotName, uniqName string, chec
corpusPath := filepath.Join(common.Workdir, "corpus.db")
err = osutil.CopyFile(t.config.Corpus, corpusPath)
if err != nil {
- return nil, fmt.Errorf("failed to copy corpus from %s: %s", t.config.Corpus, err)
+ return nil, fmt.Errorf("failed to copy corpus from %s: %w", t.config.Corpus, err)
}
}
return &SyzManagerInstance{
diff --git a/tools/syz-testbed/targets.go b/tools/syz-testbed/targets.go
index 67a359b62..ef0b189a4 100644
--- a/tools/syz-testbed/targets.go
+++ b/tools/syz-testbed/targets.go
@@ -133,7 +133,7 @@ func (t *SyzManagerTarget) SaveStatView(view StatView, dir string) error {
benchDir := filepath.Join(dir, "benches")
err := osutil.MkdirAll(benchDir)
if err != nil {
- return fmt.Errorf("failed to create %s: %s", benchDir, err)
+ return fmt.Errorf("failed to create %s: %w", benchDir, err)
}
tableStats := map[string]func(view StatView) (*Table, error){
"bugs.csv": (StatView).GenerateBugTable,
@@ -174,7 +174,7 @@ type SyzReproInput struct {
func (inp *SyzReproInput) QueryTitle(checkout *Checkout, dupsMap map[string]int) error {
data, err := os.ReadFile(inp.Path)
if err != nil {
- return fmt.Errorf("failed to read: %s", err)
+ return fmt.Errorf("failed to read: %w", err)
}
report := checkout.GetReporter().Parse(data)
if report == nil {
diff --git a/tools/syz-testbed/testbed.go b/tools/syz-testbed/testbed.go
index d47ee9e53..2c104ebc3 100644
--- a/tools/syz-testbed/testbed.go
+++ b/tools/syz-testbed/testbed.go
@@ -205,7 +205,7 @@ func (ctx *TestbedContext) Slot(slotID int, stop chan struct{}, ret chan error)
for {
checkout, instance, err := ctx.Target.NewJob(slotName, ctx.Checkouts)
if err != nil {
- ret <- fmt.Errorf("failed to create instance: %s", err)
+ ret <- fmt.Errorf("failed to create instance: %w", err)
return
}
checkout.AddRunning(instance)
@@ -232,7 +232,7 @@ func (ctx *TestbedContext) Slot(slotID int, stop chan struct{}, ret chan error)
}
err = checkout.ArchiveInstance(instance)
if err != nil {
- ret <- fmt.Errorf("a call to ArchiveInstance failed: %s", err)
+ ret <- fmt.Errorf("a call to ArchiveInstance failed: %w", err)
return
}
}
diff --git a/vm/adb/adb.go b/vm/adb/adb.go
index 96c156130..704bebb27 100644
--- a/vm/adb/adb.go
+++ b/vm/adb/adb.go
@@ -78,7 +78,7 @@ func loadDevice(data []byte) (*Device, error) {
err1 := config.LoadData(data, devObj)
err2 := config.LoadData(data, &devStr)
if err1 != nil && err2 != nil {
- return nil, fmt.Errorf("failed to parse adb vm config: %v %v", err1, err2)
+ return nil, fmt.Errorf("failed to parse adb vm config: %w %w", err1, err2)
}
if err2 == nil {
devObj.Serial = devStr
@@ -93,7 +93,7 @@ func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
TargetReboot: true,
}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse adb vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse adb vm config: %w", err)
}
if _, err := exec.LookPath(cfg.Adb); err != nil {
return nil, err
@@ -229,7 +229,7 @@ func findConsoleImpl(adb, dev string) (string, error) {
// Search all consoles, as described in 'findConsole'
consoles, err := filepath.Glob("/dev/ttyUSB*")
if err != nil {
- return "", fmt.Errorf("failed to list /dev/ttyUSB devices: %v", err)
+ return "", fmt.Errorf("failed to list /dev/ttyUSB devices: %w", err)
}
output := make(map[string]*[]byte)
errors := make(chan error, len(consoles))
@@ -262,7 +262,7 @@ func findConsoleImpl(adb, dev string) (string, error) {
unique := fmt.Sprintf(">>>%v<<<", dev)
cmd := osutil.Command(adb, "-s", dev, "shell", "echo", "\"<1>", unique, "\"", ">", "/dev/kmsg")
if out, err := cmd.CombinedOutput(); err != nil {
- return "", fmt.Errorf("failed to run adb shell: %v\n%s", err, out)
+ return "", fmt.Errorf("failed to run adb shell: %w\n%s", err, out)
}
time.Sleep(500 * time.Millisecond)
close(done)
@@ -411,12 +411,12 @@ func (inst *instance) runScript(script string) error {
// Execute the contents of the script.
contents, err := os.ReadFile(script)
if err != nil {
- return fmt.Errorf("unable to read %s: %v", script, err)
+ return fmt.Errorf("unable to read %s: %w", script, err)
}
c := string(contents)
output, err := osutil.RunCmd(5*time.Minute, "", "sh", "-c", c)
if err != nil {
- return fmt.Errorf("failed to execute %s: %v", script, err)
+ return fmt.Errorf("failed to execute %s: %w", script, err)
}
log.Logf(2, "adb: execute %s output\n%s", script, output)
log.Logf(2, "adb: done executing %s", script)
@@ -429,7 +429,7 @@ func (inst *instance) waitForSSH() error {
}
if _, err := inst.adbWithTimeout(10*time.Minute, "wait-for-device"); err != nil {
- return fmt.Errorf("instance is dead and unrepairable: %v", err)
+ return fmt.Errorf("instance is dead and unrepairable: %w", err)
}
return nil
@@ -540,7 +540,7 @@ func (inst *instance) Run(timeout time.Duration, stop <-chan bool, command strin
tty.Close()
adbRpipe.Close()
adbWpipe.Close()
- return nil, nil, fmt.Errorf("failed to start adb: %v", err)
+ return nil, nil, fmt.Errorf("failed to start adb: %w", err)
}
adbWpipe.Close()
diff --git a/vm/bhyve/bhyve.go b/vm/bhyve/bhyve.go
index ec0eae81a..cb942f8d6 100644
--- a/vm/bhyve/bhyve.go
+++ b/vm/bhyve/bhyve.go
@@ -64,7 +64,7 @@ func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
Mem: "512M",
}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse bhyve vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse bhyve vm config: %w", err)
}
if cfg.Count < 1 || cfg.Count > 128 {
return nil, fmt.Errorf("invalid config param count: %v, want [1-128]", cfg.Count)
diff --git a/vm/cuttlefish/cuttlefish.go b/vm/cuttlefish/cuttlefish.go
index 92723d720..48cbcbbe0 100644
--- a/vm/cuttlefish/cuttlefish.go
+++ b/vm/cuttlefish/cuttlefish.go
@@ -47,7 +47,7 @@ type instance struct {
func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
gcePool, err := gce.Ctor(env, consoleReadCmd)
if err != nil {
- return nil, fmt.Errorf("failed to create underlying GCE pool: %s", err)
+ return nil, fmt.Errorf("failed to create underlying GCE pool: %w", err)
}
pool := &Pool{
@@ -65,7 +65,7 @@ func (pool *Pool) Count() int {
func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
gceInst, err := pool.gcePool.Create(workdir, index)
if err != nil {
- return nil, fmt.Errorf("failed to create underlying gce instance: %s", err)
+ return nil, fmt.Errorf("failed to create underlying gce instance: %w", err)
}
inst := &instance{
@@ -80,15 +80,15 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
if err := inst.runOnHost(10*time.Minute,
fmt.Sprintf("./bin/launch_cvd -daemon -kernel_path=./bzImage -initramfs_path=./initramfs.img"+
" --noenable_sandbox -report_anonymous_usage_stats=n --memory_mb=8192")); err != nil {
- return nil, fmt.Errorf("failed to start cuttlefish: %s", err)
+ return nil, fmt.Errorf("failed to start cuttlefish: %w", err)
}
if err := inst.runOnHost(10*time.Minute, "adb wait-for-device"); err != nil {
- return nil, fmt.Errorf("failed while waiting for device: %s", err)
+ return nil, fmt.Errorf("failed while waiting for device: %w", err)
}
if err := inst.runOnHost(5*time.Minute, "adb root"); err != nil {
- return nil, fmt.Errorf("failed to get root access to device: %s", err)
+ return nil, fmt.Errorf("failed to get root access to device: %w", err)
}
if err := inst.runOnHost(5*time.Minute, fmt.Sprintf("adb shell '"+
@@ -97,7 +97,7 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
"chmod 0755 /sys/kernel/debug;"+
"mkdir %s;"+
"'", deviceRoot)); err != nil {
- return nil, fmt.Errorf("failed to mount debugfs to /sys/kernel/debug: %s", err)
+ return nil, fmt.Errorf("failed to mount debugfs to /sys/kernel/debug: %w", err)
}
return inst, nil
@@ -120,14 +120,14 @@ func (inst *instance) runOnHost(timeout time.Duration, command string) error {
func (inst *instance) Copy(hostSrc string) (string, error) {
gceDst, err := inst.gceInst.Copy(hostSrc)
if err != nil {
- return "", fmt.Errorf("error copying to worker instance: %s", err)
+ return "", fmt.Errorf("error copying to worker instance: %w", err)
}
deviceDst := filepath.Join(deviceRoot, filepath.Base(hostSrc))
pushCmd := fmt.Sprintf("adb push %s %s", gceDst, deviceDst)
if err := inst.runOnHost(5*time.Minute, pushCmd); err != nil {
- return "", fmt.Errorf("error pushing to device: %s", err)
+ return "", fmt.Errorf("error pushing to device: %w", err)
}
return deviceDst, nil
@@ -136,7 +136,7 @@ func (inst *instance) Copy(hostSrc string) (string, error) {
func (inst *instance) Forward(port int) (string, error) {
hostForward, err := inst.gceInst.Forward(port)
if err != nil {
- return "", fmt.Errorf("failed to get IP/port from GCE instance: %s", err)
+ return "", fmt.Errorf("failed to get IP/port from GCE instance: %w", err)
}
// Run socat in the background. This hangs when run from runOnHost().
@@ -145,7 +145,7 @@ func (inst *instance) Forward(port int) (string, error) {
cmd := exec.Command("ssh", cmdArgs...)
cmd.Dir = "/root"
if err := cmd.Run(); err != nil {
- return "", fmt.Errorf("unable to forward port on host: %s", err)
+ return "", fmt.Errorf("unable to forward port on host: %w", err)
}
for i := 0; i < 100; i++ {
@@ -157,7 +157,7 @@ func (inst *instance) Forward(port int) (string, error) {
}
}
- return "", fmt.Errorf("unable to forward port on device: %s", err)
+ return "", fmt.Errorf("unable to forward port on device: %w", err)
}
func (inst *instance) Close() {
diff --git a/vm/gce/gce.go b/vm/gce/gce.go
index 208cce612..60a88010c 100644
--- a/vm/gce/gce.go
+++ b/vm/gce/gce.go
@@ -83,7 +83,7 @@ func Ctor(env *vmimpl.Env, consoleReadCmd string) (*Pool, error) {
DisplayDevice: true,
}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse gce vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse gce vm config: %w", err)
}
if cfg.Count < 1 || cfg.Count > 1000 {
return nil, fmt.Errorf("invalid config param count: %v, want [1, 1000]", cfg.Count)
@@ -107,7 +107,7 @@ func Ctor(env *vmimpl.Env, consoleReadCmd string) (*Pool, error) {
GCE, err := gce.NewContext(cfg.ZoneID)
if err != nil {
- return nil, fmt.Errorf("failed to init gce: %v", err)
+ return nil, fmt.Errorf("failed to init gce: %w", err)
}
log.Logf(0, "GCE initialized: running on %v, internal IP %v, project %v, zone %v, net %v/%v",
GCE.Instance, GCE.InternalIP, GCE.ProjectID, GCE.ZoneID, GCE.Network, GCE.Subnetwork)
@@ -121,10 +121,10 @@ func Ctor(env *vmimpl.Env, consoleReadCmd string) (*Pool, error) {
}
log.Logf(0, "creating GCE image %v...", cfg.GCEImage)
if err := GCE.DeleteImage(cfg.GCEImage); err != nil {
- return nil, fmt.Errorf("failed to delete GCE image: %v", err)
+ return nil, fmt.Errorf("failed to delete GCE image: %w", err)
}
if err := GCE.CreateImage(cfg.GCEImage, gcsImage); err != nil {
- return nil, fmt.Errorf("failed to create GCE image: %v", err)
+ return nil, fmt.Errorf("failed to create GCE image: %w", err)
}
}
pool := &Pool{
@@ -146,11 +146,11 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
gceKey := filepath.Join(workdir, "key")
keygen := osutil.Command("ssh-keygen", "-t", "ed25519", "-N", "", "-C", "syzkaller", "-f", gceKey)
if out, err := keygen.CombinedOutput(); err != nil {
- return nil, fmt.Errorf("failed to execute ssh-keygen: %v\n%s", err, out)
+ return nil, fmt.Errorf("failed to execute ssh-keygen: %w\n%s", err, out)
}
gceKeyPub, err := os.ReadFile(gceKey + ".pub")
if err != nil {
- return nil, fmt.Errorf("failed to read file: %v", err)
+ return nil, fmt.Errorf("failed to read file: %w", err)
}
log.Logf(0, "deleting instance: %v", name)
@@ -258,7 +258,7 @@ func (inst *instance) Run(timeout time.Duration, stop <-chan bool, command strin
if err := con.Start(); err != nil {
conRpipe.Close()
conWpipe.Close()
- return nil, nil, fmt.Errorf("failed to connect to console server: %v", err)
+ return nil, nil, fmt.Errorf("failed to connect to console server: %w", err)
}
conWpipe.Close()
@@ -292,7 +292,7 @@ func (inst *instance) Run(timeout time.Duration, stop <-chan bool, command strin
merger.Wait()
sshRpipe.Close()
sshWpipe.Close()
- return nil, nil, fmt.Errorf("failed to connect to instance: %v", err)
+ return nil, nil, fmt.Errorf("failed to connect to instance: %w", err)
}
sshWpipe.Close()
merger.Add("ssh", sshRpipe)
@@ -428,7 +428,7 @@ func (pool *Pool) getSerialPortOutput(name, gceKey string) ([]byte, error) {
return nil, err
}
if err := con.Start(); err != nil {
- return nil, fmt.Errorf("failed to connect to console server: %v", err)
+ return nil, fmt.Errorf("failed to connect to console server: %w", err)
}
conWpipe.Close()
done := make(chan bool)
@@ -458,23 +458,23 @@ func (pool *Pool) getSerialPortOutput(name, gceKey string) ([]byte, error) {
func uploadImageToGCS(localImage, gcsImage string) error {
GCS, err := gcs.NewClient()
if err != nil {
- return fmt.Errorf("failed to create GCS client: %v", err)
+ return fmt.Errorf("failed to create GCS client: %w", err)
}
defer GCS.Close()
localReader, err := os.Open(localImage)
if err != nil {
- return fmt.Errorf("failed to open image file: %v", err)
+ return fmt.Errorf("failed to open image file: %w", err)
}
defer localReader.Close()
localStat, err := localReader.Stat()
if err != nil {
- return fmt.Errorf("failed to stat image file: %v", err)
+ return fmt.Errorf("failed to stat image file: %w", err)
}
gcsWriter, err := GCS.FileWriter(gcsImage)
if err != nil {
- return fmt.Errorf("failed to upload image: %v", err)
+ return fmt.Errorf("failed to upload image: %w", err)
}
defer gcsWriter.Close()
@@ -491,19 +491,19 @@ func uploadImageToGCS(localImage, gcsImage string) error {
}
setGNUFormat(tarHeader)
if err := tarWriter.WriteHeader(tarHeader); err != nil {
- return fmt.Errorf("failed to write image tar header: %v", err)
+ return fmt.Errorf("failed to write image tar header: %w", err)
}
if _, err := io.Copy(tarWriter, localReader); err != nil {
- return fmt.Errorf("failed to write image file: %v", err)
+ return fmt.Errorf("failed to write image file: %w", err)
}
if err := tarWriter.Close(); err != nil {
- return fmt.Errorf("failed to write image file: %v", err)
+ return fmt.Errorf("failed to write image file: %w", err)
}
if err := gzipWriter.Close(); err != nil {
- return fmt.Errorf("failed to write image file: %v", err)
+ return fmt.Errorf("failed to write image file: %w", err)
}
if err := gcsWriter.Close(); err != nil {
- return fmt.Errorf("failed to write image file: %v", err)
+ return fmt.Errorf("failed to write image file: %w", err)
}
return nil
}
diff --git a/vm/gvisor/gvisor.go b/vm/gvisor/gvisor.go
index 2e9da0eec..69b852b0d 100644
--- a/vm/gvisor/gvisor.go
+++ b/vm/gvisor/gvisor.go
@@ -55,7 +55,7 @@ func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
Count: 1,
}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse vm config: %w", err)
}
if cfg.Count < 1 || cfg.Count > 128 {
return nil, fmt.Errorf("invalid config param count: %v, want [1, 128]", cfg.Count)
@@ -100,7 +100,7 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
}
bin, err := exec.LookPath(os.Args[0])
if err != nil {
- return nil, fmt.Errorf("failed to lookup %v: %v", os.Args[0], err)
+ return nil, fmt.Errorf("failed to lookup %v: %w", os.Args[0], err)
}
if err := osutil.CopyFile(bin, filepath.Join(imageDir, "init")); err != nil {
return nil, err
diff --git a/vm/isolated/isolated.go b/vm/isolated/isolated.go
index 922dea482..76d5284c0 100755
--- a/vm/isolated/isolated.go
+++ b/vm/isolated/isolated.go
@@ -70,7 +70,7 @@ func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
}
for _, target := range cfg.Targets {
if _, _, err := splitTargetPort(target); err != nil {
- return nil, fmt.Errorf("bad target %q: %v", target, err)
+ return nil, fmt.Errorf("bad target %q: %w", target, err)
}
}
if len(cfg.USBDevNums) > 0 {
@@ -116,7 +116,7 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
}
}()
if err := inst.repair(); err != nil {
- return nil, fmt.Errorf("repair failed: %v", err)
+ return nil, fmt.Errorf("repair failed: %w", err)
}
// Remount to writable.
@@ -190,7 +190,7 @@ func (inst *instance) ssh(command string) error {
if inst.debug {
log.Logf(0, "ssh failed: %v\n%s", err, out)
}
- return fmt.Errorf("ssh %+v failed: %v\n%s", args, err, out)
+ return fmt.Errorf("ssh %+v failed: %w\n%s", args, err, out)
}
close(done)
if inst.debug {
@@ -235,7 +235,7 @@ func (inst *instance) repair() error {
log.Logf(2, "isolated: ssh succeeded, trying to reboot by ssh")
inst.ssh("reboot") // reboot will return an error, ignore it
if err := inst.waitRebootAndSSH(5*60, 30*time.Minute); err != nil {
- return fmt.Errorf("waitRebootAndSSH failed: %v", err)
+ return fmt.Errorf("waitRebootAndSSH failed: %w", err)
}
}
}
@@ -244,11 +244,11 @@ func (inst *instance) repair() error {
// Execute the contents of the StartupScript on the DUT.
contents, err := os.ReadFile(inst.cfg.StartupScript)
if err != nil {
- return fmt.Errorf("unable to read startup_script: %v", err)
+ return fmt.Errorf("unable to read startup_script: %w", err)
}
c := string(contents)
if err := inst.ssh(fmt.Sprintf("bash -c \"%v\"", vmimpl.EscapeDoubleQuotes(c))); err != nil {
- return fmt.Errorf("failed to execute startup_script: %v", err)
+ return fmt.Errorf("failed to execute startup_script: %w", err)
}
log.Logf(2, "isolated: done executing startup_script")
}
@@ -370,7 +370,7 @@ func (inst *instance) readPstoreContents() ([]byte, error) {
cmd.Stdout = &stdout
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
- return nil, fmt.Errorf("unable to read pstore file: %v: %v", err, stderr.String())
+ return nil, fmt.Errorf("unable to read pstore file: %w: %v", err, stderr.String())
}
return stdout.Bytes(), nil
}
diff --git a/vm/kvm/kvm.go b/vm/kvm/kvm.go
index e63e128e9..353f4300e 100644
--- a/vm/kvm/kvm.go
+++ b/vm/kvm/kvm.go
@@ -64,7 +64,7 @@ func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
Lkvm: "lkvm",
}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse kvm vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse kvm vm config: %w", err)
}
if cfg.Count < 1 || cfg.Count > 128 {
return nil, fmt.Errorf("invalid config param count: %v, want [1, 128]", cfg.Count)
@@ -119,16 +119,16 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
os.Remove(inst.sandboxPath + ".sock")
out, err := osutil.Command(inst.cfg.Lkvm, "setup", sandbox).CombinedOutput()
if err != nil {
- return nil, fmt.Errorf("failed to lkvm setup: %v\n%s", err, out)
+ return nil, fmt.Errorf("failed to lkvm setup: %w\n%s", err, out)
}
scriptPath := filepath.Join(workdir, "script.sh")
if err := osutil.WriteExecFile(scriptPath, []byte(script)); err != nil {
- return nil, fmt.Errorf("failed to create temp file: %v", err)
+ return nil, fmt.Errorf("failed to create temp file: %w", err)
}
rpipe, wpipe, err := osutil.LongPipe()
if err != nil {
- return nil, fmt.Errorf("failed to create pipe: %v", err)
+ return nil, fmt.Errorf("failed to create pipe: %w", err)
}
inst.lkvm = osutil.Command("taskset", "-c", strconv.Itoa(index%runtime.NumCPU()),
@@ -146,7 +146,7 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
if err := inst.lkvm.Start(); err != nil {
rpipe.Close()
wpipe.Close()
- return nil, fmt.Errorf("failed to start lkvm: %v", err)
+ return nil, fmt.Errorf("failed to start lkvm: %w", err)
}
// Start output reading goroutine.
@@ -194,7 +194,7 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
err = <-errc
}
if err != nil {
- return nil, fmt.Errorf("failed to run script: %v", err)
+ return nil, fmt.Errorf("failed to run script: %w", err)
}
closeInst = nil
diff --git a/vm/proxyapp/proxyappclient.go b/vm/proxyapp/proxyappclient.go
index daf73df0e..31a19fdec 100644
--- a/vm/proxyapp/proxyappclient.go
+++ b/vm/proxyapp/proxyappclient.go
@@ -211,7 +211,7 @@ func initNetworkRPCClient(cfg *Config) (*rpc.Client, error) {
var err error
conn, err = net.Dial("tcp", cfg.RPCServerURI)
if err != nil {
- return nil, fmt.Errorf("dial: %v", err)
+ return nil, fmt.Errorf("dial: %w", err)
}
case "tls":
var certPool *x509.CertPool
@@ -220,17 +220,17 @@ func initNetworkRPCClient(cfg *Config) (*rpc.Client, error) {
certPool = x509.NewCertPool()
b, err := os.ReadFile(cfg.ServerTLSCert)
if err != nil {
- return nil, fmt.Errorf("read server certificate: %v", err)
+ return nil, fmt.Errorf("read server certificate: %w", err)
}
if !certPool.AppendCertsFromPEM(b) {
- return nil, fmt.Errorf("append server certificate to empty pool: %v", err)
+ return nil, fmt.Errorf("append server certificate to empty pool: %w", err)
}
}
var err error
conn, err = tls.Dial("tcp", cfg.RPCServerURI, &tls.Config{RootCAs: certPool})
if err != nil {
- return nil, fmt.Errorf("dial with tls: %v", err)
+ return nil, fmt.Errorf("dial with tls: %w", err)
}
case "mtls":
return nil, fmt.Errorf("mutual TLS not implemented")
@@ -353,7 +353,7 @@ func (proxy *ProxyApp) CreatePool(config *Config, image string, debug bool) (int
if config.TransferFileContent {
imageData, err := os.ReadFile(image)
if err != nil {
- return 0, fmt.Errorf("read image on host: %v", err)
+ return 0, fmt.Errorf("read image on host: %w", err)
}
params.ImageData = imageData
@@ -391,7 +391,7 @@ func (proxy *ProxyApp) CreateInstance(workdir, image string, index int) (vmimpl.
data, err := os.ReadFile(path)
if err != nil {
- return fmt.Errorf("read file on host: %s", err)
+ return fmt.Errorf("read file on host: %w", err)
}
workdirData[name] = data
@@ -400,7 +400,7 @@ func (proxy *ProxyApp) CreateInstance(workdir, image string, index int) (vmimpl.
})
if err != nil {
- return nil, fmt.Errorf("failed to walk workdir: %v", err)
+ return nil, fmt.Errorf("failed to walk workdir: %w", err)
}
params.WorkdirData = workdirData
@@ -434,7 +434,7 @@ func (inst *instance) Copy(hostSrc string) (string, error) {
if inst.ProxyApp.transferFileContent {
data, err := os.ReadFile(hostSrc)
if err != nil {
- return "", fmt.Errorf("read file on host: %s", err)
+ return "", fmt.Errorf("read file on host: %w", err)
}
params.Data = data
diff --git a/vm/qemu/qemu.go b/vm/qemu/qemu.go
index d32d58143..bb616af47 100644
--- a/vm/qemu/qemu.go
+++ b/vm/qemu/qemu.go
@@ -275,7 +275,7 @@ func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
Snapshot: true,
}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse qemu vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse qemu vm config: %w", err)
}
if cfg.Count < 1 || cfg.Count > 128 {
return nil, fmt.Errorf("invalid config param count: %v, want [1, 128]", cfg.Count)
@@ -340,7 +340,7 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
}
initFile := filepath.Join(workdir, "init.sh")
if err := osutil.WriteExecFile(initFile, []byte(strings.Replace(initScript, "{{KEY}}", sshkey, -1))); err != nil {
- return nil, fmt.Errorf("failed to create init file: %v", err)
+ return nil, fmt.Errorf("failed to create init file: %w", err)
}
}
@@ -513,7 +513,7 @@ func (inst *instance) boot() error {
qemu.Stdout = inst.wpipe
qemu.Stderr = inst.wpipe
if err := qemu.Start(); err != nil {
- return fmt.Errorf("failed to start %v %+v: %v", inst.cfg.Qemu, args, err)
+ return fmt.Errorf("failed to start %v %+v: %w", inst.cfg.Qemu, args, err)
}
inst.wpipe.Close()
inst.wpipe = nil
diff --git a/vm/starnix/starnix.go b/vm/starnix/starnix.go
index f868284b2..78bad4a44 100644
--- a/vm/starnix/starnix.go
+++ b/vm/starnix/starnix.go
@@ -59,7 +59,7 @@ const targetDir = "/data"
func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
cfg := &Config{}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse starnix vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse starnix vm config: %w", err)
}
if cfg.Count < 1 || cfg.Count > 128 {
return nil, fmt.Errorf("invalid config param count: %v, want [1, 128]", cfg.Count)
@@ -106,7 +106,7 @@ func (pool *Pool) Create(workdir string, index int) (vmimpl.Instance, error) {
if err := inst.setFuchsiaVersion(); err != nil {
return nil, fmt.Errorf(
- "there is an error running ffx commands in the Fuchsia checkout (%q): %v",
+ "there is an error running ffx commands in the Fuchsia checkout (%q): %w",
inst.fuchsiaDirectory,
err)
}
@@ -129,20 +129,20 @@ func (inst *instance) boot() error {
inst.ffx("emu", "stop", inst.name)
if err := inst.startFuchsiaVM(); err != nil {
- return fmt.Errorf("could not start Fuchsia VM: %v", err)
+ return fmt.Errorf("could not start Fuchsia VM: %w", err)
}
if err := inst.startAdbServerAndConnection(1 * time.Minute); err != nil {
- return fmt.Errorf("could not start and connect to the adb server: %v", err)
+ return fmt.Errorf("could not start and connect to the adb server: %w", err)
}
if err := inst.createAdbScript(); err != nil {
- return fmt.Errorf("could not create adb script: %v", err)
+ return fmt.Errorf("could not create adb script: %w", err)
}
err := inst.startFuchsiaLogs()
if err != nil {
- return fmt.Errorf("could not start fuchsia logs: %v", err)
+ return fmt.Errorf("could not start fuchsia logs: %w", err)
}
if inst.debug {
log.Logf(0, "%s booted successfully", inst.name)
diff --git a/vm/vm.go b/vm/vm.go
index e1f9cda60..fc2e0eb2c 100644
--- a/vm/vm.go
+++ b/vm/vm.go
@@ -132,7 +132,7 @@ func (pool *Pool) Create(index int) (*Instance, error) {
}
workdir, err := osutil.ProcessTempDir(pool.workdir)
if err != nil {
- return nil, fmt.Errorf("failed to create instance temp dir: %v", err)
+ return nil, fmt.Errorf("failed to create instance temp dir: %w", err)
}
if pool.template != "" {
if err := osutil.CopyDirRecursively(pool.template, filepath.Join(workdir, "template")); err != nil {
diff --git a/vm/vmimpl/console.go b/vm/vmimpl/console.go
index 5958b2a19..6744ac10c 100644
--- a/vm/vmimpl/console.go
+++ b/vm/vmimpl/console.go
@@ -18,7 +18,7 @@ import (
func OpenConsole(con string) (rc io.ReadCloser, err error) {
fd, err := syscall.Open(con, syscall.O_RDONLY|syscall.O_NOCTTY|syscall.O_SYNC, 0)
if err != nil {
- return nil, fmt.Errorf("failed to open console file: %v", err)
+ return nil, fmt.Errorf("failed to open console file: %w", err)
}
defer func() {
if fd != -1 {
@@ -27,7 +27,7 @@ func OpenConsole(con string) (rc io.ReadCloser, err error) {
}()
term, err := unix.IoctlGetTermios(fd, syscallTCGETS)
if err != nil {
- return nil, fmt.Errorf("failed to get console termios: %v", err)
+ return nil, fmt.Errorf("failed to get console termios: %w", err)
}
// No parity bit, only need 1 stop bit, no hardware flowcontrol,
term.Cflag &^= unixCBAUD | unix.CSIZE | unix.PARENB | unix.CSTOPB | unixCRTSCTS
@@ -41,7 +41,7 @@ func OpenConsole(con string) (rc io.ReadCloser, err error) {
term.Cc[unix.VMIN] = 0
term.Cc[unix.VTIME] = 10 // 1 second timeout
if err = unix.IoctlSetTermios(fd, syscallTCSETS, term); err != nil {
- return nil, fmt.Errorf("failed to get console termios: %v", err)
+ return nil, fmt.Errorf("failed to get console termios: %w", err)
}
tmp := fd
fd = -1
@@ -95,7 +95,7 @@ func OpenRemoteKernelLog(ip, console string) (rc io.ReadCloser, err error) {
if err := cmd.Start(); err != nil {
rpipe.Close()
wpipe.Close()
- return nil, fmt.Errorf("failed to connect to console server: %v", err)
+ return nil, fmt.Errorf("failed to connect to console server: %w", err)
}
wpipe.Close()
con := &remoteCon{
@@ -118,7 +118,7 @@ func OpenRemoteConsole(bin string, args ...string) (rc io.ReadCloser, err error)
if err := cmd.Start(); err != nil {
rpipe.Close()
wpipe.Close()
- return nil, fmt.Errorf("failed to start adb: %v", err)
+ return nil, fmt.Errorf("failed to start adb: %w", err)
}
wpipe.Close()
con := &remoteCon{
diff --git a/vm/vmm/vmm.go b/vm/vmm/vmm.go
index 1f9b911f7..bcddc3af0 100644
--- a/vm/vmm/vmm.go
+++ b/vm/vmm/vmm.go
@@ -66,7 +66,7 @@ func ctor(env *vmimpl.Env) (vmimpl.Pool, error) {
}
if err := config.LoadData(env.Config, cfg); err != nil {
- return nil, fmt.Errorf("failed to parse vmm vm config: %v", err)
+ return nil, fmt.Errorf("failed to parse vmm vm config: %w", err)
}
if cfg.Count < 1 || cfg.Count > 128 {
return nil, fmt.Errorf("invalid config param count: %v, want [1-128]", cfg.Count)