diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-01-30 11:49:34 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-01-30 11:03:14 +0000 |
| commit | e961d16c3e35fd78acdfaf5531fc1c1365c24a97 (patch) | |
| tree | 37f72c1514b9f3938983da79380a3b3f8bbaf485 /pkg | |
| parent | 9c8ab8458ec658aa3007c0e8c1695907c8d8c39f (diff) | |
all: clarify the error in case of ExecFailure
Whenever the status is set, also include the reason. It should help
easier debug execution and machine check time problems.
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/fuzzer/queue/queue.go | 12 | ||||
| -rw-r--r-- | pkg/rpcserver/runner.go | 5 |
2 files changed, 14 insertions, 3 deletions
diff --git a/pkg/fuzzer/queue/queue.go b/pkg/fuzzer/queue/queue.go index 58c9f1561..6e17225e2 100644 --- a/pkg/fuzzer/queue/queue.go +++ b/pkg/fuzzer/queue/queue.go @@ -7,6 +7,7 @@ import ( "bytes" "context" "encoding/gob" + "errors" "fmt" "math/rand" "strings" @@ -99,12 +100,14 @@ func (r *Request) Done(res *Result) { close(r.done) } +var errContextAborted = errors.New("context closed while waiting the result") + // Wait() blocks until we have the result. func (r *Request) Wait(ctx context.Context) *Result { r.initChannel() select { case <-ctx.Done(): - return &Result{Status: ExecFailure} + return &Result{Status: ExecFailure, Err: errContextAborted} case <-r.done: return r.result } @@ -537,6 +540,8 @@ func (rq *RandomQueue) Next() *Request { return item } +var errEvictedFromQueue = errors.New("evicted from the random queue") + func (rq *RandomQueue) Submit(req *Request) { rq.mu.Lock() defer rq.mu.Unlock() @@ -545,7 +550,10 @@ func (rq *RandomQueue) Submit(req *Request) { } else { pos := rq.rnd.Intn(rq.maxSize + 1) if pos < len(rq.queue) { - rq.queue[pos].Done(&Result{Status: ExecFailure}) + rq.queue[pos].Done(&Result{ + Status: ExecFailure, + Err: errEvictedFromQueue, + }) rq.queue[pos] = req } } diff --git a/pkg/rpcserver/runner.go b/pkg/rpcserver/runner.go index de38d29f7..e6ea5acdf 100644 --- a/pkg/rpcserver/runner.go +++ b/pkg/rpcserver/runner.go @@ -300,7 +300,10 @@ func (runner *Runner) sendRequest(req *queue.Request) error { // but so far we don't have a better handling than counting this. // This error is observed a lot on the seeded syz_mount_image calls. runner.stats.statExecBufferTooSmall.Add(1) - req.Done(&queue.Result{Status: queue.ExecFailure}) + req.Done(&queue.Result{ + Status: queue.ExecFailure, + Err: fmt.Errorf("program serialization failed: %w", err), + }) return nil } data = progData |
