Running instructions in README.md
will download the following content on a public server at Purdue:
pmc.tar.gz
which stores the PMC cluster data collected in our experiments.testsuite.tar.gz
which contains the prerequisite for Snowboard.gcc-5.4.0.gz
which is the source code of GCC-5.4.0. We use this compiler to compile the code of Snowboard.redis.tar.gz
which is the source code of Redis 6.2.4. We Use Redis service to distribute generated concurrent inputs.
In addition, it also downloads the source code of Linux 5.12-rc3 from Github.com. We use them for analyzing and debugging.
data/pmc
contains all the PMC clusters which were identified in Linux 5.12-rc3 in our experiments.
Specifically, it should have the following files:
cd data/pmc
$ ll
total 9.8G
drwxrwxr-x 2 sishuai sishuai 4.0K Aug 20 02:17 ./
drwxrwxr-x 3 sishuai sishuai 4.0K Aug 20 16:38 ../
-rw-r--r-- 1 sishuai sishuai 6.8G Aug 20 02:05 mem-dict-2021-03-27-14-47-44
-rw-rw-r-- 1 sishuai sishuai 1.8G Aug 19 12:47 uncommon-channel.txt
-rw-rw-r-- 1 sishuai sishuai 138M Aug 19 12:45 uncommon-double-read-channel.txt
-rw-rw-r-- 1 sishuai sishuai 19M Aug 19 12:47 uncommon-ins-pair.txt
-rw-rw-r-- 1 sishuai sishuai 856K Aug 19 12:45 uncommon-ins.txt
-rw-rw-r-- 1 sishuai sishuai 78M Aug 19 12:45 uncommon-mem-addr.txt
-rw-rw-r-- 1 sishuai sishuai 369M Aug 19 12:45 uncommon-object-null-channel.txt
-rw-rw-r-- 1 sishuai sishuai 673M Aug 19 12:44 uncommon-unaligned-channel.txt
First, mem-dict-2021-03-27-14-47-44
is a Python pickle object that encodes all the shared memory accesses we observed in our experiments and it can be used to reproduce uncommon-XXX.txt
files. However, considering that reproducing them takes large amount of memory (~500GB), we include the raw PMC files we generated.
In the next, we explain the data format of each file:
-
uncommon-channel.txt
Each line in this file represents a unique PMC-channel cluster and shows its corresponding clustering key as well as cluster size:
ins
waddrwbytewinsraddrrbytercluster-sizeEach feature is separated by a space and please refer to Section 4.1 in the paper for the meaning of it.
Taking the first line in uncommon-channel.txt as an example:
0xc1b7161a 0xfc6523b4 4 0xc1b001ee 0xfc6523b4 4 1
It means there is only 1 full PMC that has these features therefore belonging to this cluster.
-
uncommon-double-read-channel.txt
Each line in this file represents a unique PMC double-fetch channel cluster and shows its corresponding key as well as cluster size:
ins
waddrwbytewinsraddrrbyterdf_leader cluster-size -
uncommon-ins-pair.txt
Each line represents a unique instruction pair cluster and shows its key as well as cluster size:
ins
winsrcluster-size -
uncommon-ins.txt
Each line represents a unique instruction cluster and shows its key as well as cluster size:
Ins-addr ins-type cluster-size
To differentiate write and read instructions, we introduce another feature ins-type.
0
means the instruction is a write and1
indicates it is a read. -
uncommon-mem-addr.txt
Each line represents a unique memory object cluster and shows its key as well as cluster size:
addr
waddrrbytewbytercluster-size -
uncommon-object-null-channel.txt
Each line represents a unique object-nullification channel and shows its key as well as cluster size:
ins
waddrwbytewinsraddrrbytercluster-size -
uncommon-unaligned-channel.txt
Each line represents a unique unaligned channel and shows its key as well as cluster size:
ins
waddrwbytewinsraddrrbytercluster-size
testsuite/
contains the prerequisite for the tool. Specifically, it has:
testsuite/image
: a virtual machine image and a virtual machine snapshottestsuite/input
: a set of kernel sequential test inputs generated by Syzkaller.testsuite/kernel
: a compiled Linux kernel image of 5.12-rc3, which we used for concurrency testing. In addition, it also hasvmlinux.map
andvmlinux.onlydisas
that help debugging (e.g mapping every instruction address to the source code it belongs to).
code/vmm contains the source code of our tool.code/tools stores the source code of gcc-5.4.0 as well as scripts to compile it. Our tool will be compiled by gcc-5.4.0.code/scripts provides a set of scripts to deploy this tool to analyze and test kernels.