Commit Graph

12 Commits

Author SHA1 Message Date
gVisor bot 08cc017c08 Merge release-20210322.0-29-g8a2f7e716 (automated) 2021-03-29 20:35:44 +00:00
Zach Koopmans 8a2f7e716d [syserror] Split usermem package
Split usermem package to help remove syserror dependency in go_marshal.
New hostarch package contains code not dependent on syserror.

PiperOrigin-RevId: 365651233
2021-03-29 13:30:21 -07:00
gVisor bot 3814d20f28 Merge release-20210112.0-72-g65594d30a (automated) 2021-01-22 19:48:08 +00:00
Dean Deng 65594d30ad Avoid atomic operations in kcov processing.
Atomic operations here significantly slow down gVisor builds with
kcov/coverage enabled. Also mark these functions go:norace to avoid
complaints from the race detector.

PiperOrigin-RevId: 353281865
2021-01-22 11:32:56 -08:00
gVisor bot 0aa7d2a4b2 Merge release-20201208.0-35-g80379894d (automated) 2020-12-11 23:50:15 +00:00
Dean Deng 80379894d3 Add runsc symbolize command.
This command takes instruction pointers from stdin and converts them into their
corresponding file names and line/column numbers in the runsc source code. The
inputs are not interpreted as actual addresses, but as synthetic values that are
exposed through /sys/kernel/debug/kcov. One can extract coverage information
from kcov and translate those values into locations in the source code by
running symbolize on the same runsc binary.

This will allow us to generate syzkaller coverage reports.

PiperOrigin-RevId: 347089624
2020-12-11 15:43:22 -08:00
Dean Deng 8ba2f04285 Automated rollback of changelist 341640485
PiperOrigin-RevId: 342297902
2020-11-13 11:10:36 -08:00
Dean Deng e998b9904f Add logging to internal gvisor when checking for kcov.
May help with debugging
https://syzkaller.appspot.com/bug?id=0d717bd7028dceeb4b38f09aab2841c398b41d81

PiperOrigin-RevId: 341640485
2020-11-10 09:57:48 -08:00
gVisor bot 4734053262 Merge release-20200921.0-53-g2a60f9229 (automated) 2020-09-27 22:36:48 +00:00
Dean Deng 2a60f92291 Clean up kcov.
Previously, we did not check the kcov mode when performing task work. As a
result, disabling kcov did not do anything.

Also avoid expensive atomic RMW when consuming coverage data. We don't need the
swap if the value is already zero (which is most of the time), and it is ok if
there are slight inconsistencies due to a race between coverage data generation
(incrementing the value) and consumption (reading a nonzero value and writing
zero).

PiperOrigin-RevId: 334049207
2020-09-27 15:33:51 -07:00
gVisor bot 8dc17db359 Merge release-20200818.0-54-gcb573c8e0 (automated) 2020-08-25 23:32:40 +00:00
Dean Deng cb573c8e0b Expose basic coverage information to userspace through kcov interface.
In Linux, a kernel configuration is set that compiles the kernel with a
custom function that is called at the beginning of every basic block, which
updates the memory-mapped coverage information. The Go coverage tool does not
allow us to inject arbitrary instructions into basic blocks, but it does
provide data that we can convert to a kcov-like format and transfer them to
userspace through a memory mapping.

Note that this is not a strict implementation of kcov, which is especially
tricky to do because we do not have the same coverage tools available in Go
that that are available for the actual Linux kernel. In Linux, a kernel
configuration is set that compiles the kernel with a custom function that is
called at the beginning of every basic block to write program counters to the
kcov memory mapping. In Go, however, coverage tools only give us a count of
basic blocks as they are executed. Every time we return to userspace, we
collect the coverage information and write out PCs for each block that was
executed, providing userspace with the illusion that the kcov data is always
up to date. For convenience, we also generate a unique synthetic PC for each
block instead of using actual PCs. Finally, we do not provide thread-specific
coverage data (each kcov instance only contains PCs executed by the thread
owning it); instead, we will supply data for any file specified by --
instrumentation_filter.

Also, fix issue in nogo that was causing pkg/coverage:coverage_nogo
compilation to fail.

PiperOrigin-RevId: 328426526
2020-08-25 16:28:45 -07:00