| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We used to have all generated files checked in.
Later we removed them (now users are supposed to
run make to generate them). This causes several
problems:
- go get does not work as it tries to build everything
straight away (go get -d works, but users are confused)
- users don't run make and complain that build is broken
- users don't re-run make after updates and complain that
build is broken
- hard to integrate into other build system (even if they
support building Go, they don't support running sysgen
out-of-the-box)
Fixes #216
|
| | |
|
| |
|
|
|
| |
Formatting generated sources takes tremendous amount of time (6s).
Leave them unformatted. Reduces sysgen time to virtually 0.
|
| |
|
|
| |
Helps with build artifact caching.
|
| |
|
|
|
|
|
|
| |
Compilation of large maps is super slow.
Generate arrays instead and converet to maps at runtime.
Reduces build time from ~40s to ~2s.
Update #182
|
| | |
|
| |
|
|
|
|
| |
Also generalize checksums into the two kinds: inet and pseudo.
Inet checksums is just the Internet checksum of a packet.
Pseudo checksum is the Internet checksum of a packet with a pseudo header.
|
| | |
|
| | |
|
| |
|
|
| |
Also embed tcp checksums into packets.
|
| | |
|
| |
|
|
|
|
|
| |
This change adds a `csum[kind, type]` type.
The only available kind right now is `ipv4`.
Using `csum[ipv4, int16be]` in `ipv4_header` makes syzkaller calculate
and embed correct checksums into ipv4 packets.
|
| |
|
|
|
| |
FieldName() is the name of the struct field or union option with this type.
TypeName() is now always the name of the type.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
Change all 'filename' to 'ptr[in, filename]' and don't imply pointer indirection for filename type.
This is necessary because in some bases we want to embed filename directly into a struct (e.g. unix sock addr).
Similar change was already done for string type for similar reasons. Generally, we want to imply as less as possible.
NOTE: IF YOU HAVE PRIVATE DESCRIPTIONS, YOU NEED TO DO THE SAME REPLACEMENT.
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Now it's possible to use `int32:18` to denote a bitfield of size 18 as a struct field.
This fixes #72.
|
| |
|
|
|
|
|
| |
1. Basic support for arm64 kvm testing.
2. Fix compiler warnings in x86 kvm code.
3. Test all pseudo syz calls in csource.
4. Fix handling of real code in x86.
|
| |
|
|
|
|
| |
Add new pseudo syscall syz_kvm_setup_cpu that setups VCPU into
interesting states for execution. KVM is too difficult to setup otherwise.
Lots of improvements possible, but this is a starting point.
|
| |
|
|
| |
Allows to write vma[4] or vma[5-10] to specify desired number of pages.
|
| | |
|
| |
|
|
|
| |
IP addresses like 192.168.0.1/192.168.1.1 are often used for routing between VM and the host.
Offset our IP addresses to start from 192.168.218.0 to reduce potential conflicts.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Go compiler does not seem to like long generated functions.
This change reduces compilation time of sys_arch.go,
reduces compiler memory consumption and fixes compiler crash on arm64.
|
| |
|
|
|
|
|
|
| |
This allows to write:
string[salg_type, 14]
which will give a string buffer of size 14 regardless of actual string size.
Convert salg_type/salg_name to this.
|
| |
|
|
|
|
|
|
|
|
| |
Allow to define string flags in txt descriptions. E.g.:
filesystem = "ext2", "ext3", "ext4"
and then use it in string type:
ptr[in, string[filesystem]]
|
| |
|
|
|
| |
In preparation for extending string functionality
and to make it less magical.
|
| |
|
|
|
| |
FileoffType is effectively an int, no need for a separate type.
Also remove fd option from fileoff as it is unused and use story is unclear.
|
| |
|
|
| |
FilenameType is effectively a buffer, there is no need for a separate type.
|
| |
|
|
|
|
| |
Dir is a static info, so we don't need to compute, propagate and
attach it in prog whenever we generate/change programs.
Attach Dir to all types.
|
| |
|
|
|
|
|
|
| |
Currently we store most types by value in sys.Type.
This is somewhat counter-intuitive for C++ programmers,
because one can't easily update the type object.
Store pointers to type objects for all types.
It also makes it easier to update types, e.g. adding paddings.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
Struct padding was accidentially lost after:
852e3d2eae98a913b7ec91822ba4dc61059a6955
Restore it. Now with tests.
Fixes #78
|
| | |
|
| |
|
|
|
|
| |
A struct can have a pointer to itself directly or indirectly.
Currently it leads to inifinite recursion when generating descriptions.
Fix this.
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Currently to add a new resource one needs to modify multiple source files,
which complicates descirption of new system calls.
Move resource descriptions from source code to text desciptions.
|
| |
|
|
|
| |
On arm64 all constants are removed for some ptrace flags.
Use plain int in such cases.
|
| |
|
|
|
| |
Still need to generate description for such syscalls so that
they at least can be parsed, and so that Go and C entries match.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This splits generation process into two phases:
1. Extract values of constants from linux kernel sources.
2. Generate Go code.
Constant values are checked in.
The advantage is that the second phase is now completely independent
from linux source files, kernel version, presence of headers for
particular drivers, etc. This allows to change what Go code we generate
any time without access to all kernel headers (which in future won't be
limited to only upstream headers).
Constant extraction process does require proper kernel sources,
but this can be done only once by the person who added the driver
and has access to the required sources. Then the constant values
are checked in for others to use.
Consant extraction process is per-file/per-arch. That is,
if I am adding a driver that is not present upstream and that
works only on a single arch, I will check in constants only for
that driver and for that arch.
|