mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
Merge branch 'WireGuard-CI-and-housekeeping'
Jason A. Donenfeld says: ==================== WireGuard CI and housekeeping This is a collection of commits gathered during the last 1.5 weeks since merging WireGuard. If you'd prefer, I can send tree pull requests instead, but I figure it might be best for now to just send things as full patch sets to netdev. The first part of this adds in the CI test harness that we've been using for quite some time with success. You can type `make` and get the selftests running in a fresh VM immediately. This has been an instrumental tool in developing WireGuard, and I think it'd benefit most from being in-tree alongside the selftests that are already there. Once this lands, I plan to get build.wireguard.com building wireguard- linux.git and net-next.git on every single commit pushed, and do so on a bunch of different architectures. As this migrates into Linus' tree eventually and then into net.git, I'll get net.git building there too on every commit. Future work with this involves generalizing it to include more networking subsystem tests beyond just WireGuard, but one step at a time. In the process of porting this to the tree, the builder uncovered a mistake in the config menu file, which the second commit fixes. The last three commits are small housekeeping things, fixing spelling mistakes, replacing call_rcu with kfree_rcu, and removing an unused include. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -85,6 +85,8 @@ config WIREGUARD
|
||||
select CRYPTO_POLY1305_X86_64 if X86 && 64BIT
|
||||
select CRYPTO_BLAKE2S_X86 if X86 && 64BIT
|
||||
select CRYPTO_CURVE25519_X86 if X86 && 64BIT
|
||||
select ARM_CRYPTO if ARM
|
||||
select ARM64_CRYPTO if ARM64
|
||||
select CRYPTO_CHACHA20_NEON if (ARM || ARM64) && KERNEL_MODE_NEON
|
||||
select CRYPTO_POLY1305_NEON if ARM64 && KERNEL_MODE_NEON
|
||||
select CRYPTO_POLY1305_ARM if ARM
|
||||
|
||||
@@ -31,11 +31,6 @@ static void copy_and_assign_cidr(struct allowedips_node *node, const u8 *src,
|
||||
#define CHOOSE_NODE(parent, key) \
|
||||
parent->bit[(key[parent->bit_at_a] >> parent->bit_at_b) & 1]
|
||||
|
||||
static void node_free_rcu(struct rcu_head *rcu)
|
||||
{
|
||||
kfree(container_of(rcu, struct allowedips_node, rcu));
|
||||
}
|
||||
|
||||
static void push_rcu(struct allowedips_node **stack,
|
||||
struct allowedips_node __rcu *p, unsigned int *len)
|
||||
{
|
||||
@@ -112,7 +107,7 @@ static void walk_remove_by_peer(struct allowedips_node __rcu **top,
|
||||
if (!node->bit[0] || !node->bit[1]) {
|
||||
rcu_assign_pointer(*nptr, DEREF(
|
||||
&node->bit[!REF(node->bit[0])]));
|
||||
call_rcu(&node->rcu, node_free_rcu);
|
||||
kfree_rcu(node, rcu);
|
||||
node = DEREF(nptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
#include <uapi/linux/wireguard.h>
|
||||
|
||||
#include <linux/version.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/genetlink.h>
|
||||
|
||||
@@ -380,7 +380,7 @@ static void wg_packet_consume_data_done(struct wg_peer *peer,
|
||||
/* We've already verified the Poly1305 auth tag, which means this packet
|
||||
* was not modified in transit. We can therefore tell the networking
|
||||
* stack that all checksums of every layer of encapsulation have already
|
||||
* been checked "by the hardware" and therefore is unneccessary to check
|
||||
* been checked "by the hardware" and therefore is unnecessary to check
|
||||
* again in software.
|
||||
*/
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
* one but not both of:
|
||||
*
|
||||
* WGDEVICE_A_IFINDEX: NLA_U32
|
||||
* WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMESIZ - 1
|
||||
* WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
|
||||
*
|
||||
* The kernel will then return several messages (NLM_F_MULTI) containing the
|
||||
* following tree of nested items:
|
||||
*
|
||||
* WGDEVICE_A_IFINDEX: NLA_U32
|
||||
* WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMESIZ - 1
|
||||
* WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
|
||||
* WGDEVICE_A_PRIVATE_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
|
||||
* WGDEVICE_A_PUBLIC_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
|
||||
* WGDEVICE_A_LISTEN_PORT: NLA_U16
|
||||
@@ -77,7 +77,7 @@
|
||||
* WGDEVICE_A_IFINDEX and WGDEVICE_A_IFNAME:
|
||||
*
|
||||
* WGDEVICE_A_IFINDEX: NLA_U32
|
||||
* WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMESIZ - 1
|
||||
* WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
|
||||
* WGDEVICE_A_FLAGS: NLA_U32, 0 or WGDEVICE_F_REPLACE_PEERS if all current
|
||||
* peers should be removed prior to adding the list below.
|
||||
* WGDEVICE_A_PRIVATE_KEY: len WG_KEY_LEN, all zeros to remove
|
||||
@@ -121,7 +121,7 @@
|
||||
* filling in information not contained in the prior. Note that if
|
||||
* WGDEVICE_F_REPLACE_PEERS is specified in the first message, it probably
|
||||
* should not be specified in fragments that come after, so that the list
|
||||
* of peers is only cleared the first time but appened after. Likewise for
|
||||
* of peers is only cleared the first time but appended after. Likewise for
|
||||
* peers, if WGPEER_F_REPLACE_ALLOWEDIPS is specified in the first message
|
||||
* of a peer, it likely should not be specified in subsequent fragments.
|
||||
*
|
||||
|
||||
2
tools/testing/selftests/wireguard/qemu/.gitignore
vendored
Normal file
2
tools/testing/selftests/wireguard/qemu/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
build/
|
||||
distfiles/
|
||||
385
tools/testing/selftests/wireguard/qemu/Makefile
Normal file
385
tools/testing/selftests/wireguard/qemu/Makefile
Normal file
@@ -0,0 +1,385 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
|
||||
PWD := $(shell pwd)
|
||||
|
||||
CHOST := $(shell gcc -dumpmachine)
|
||||
ifneq (,$(ARCH))
|
||||
CBUILD := $(subst -gcc,,$(lastword $(subst /, ,$(firstword $(wildcard $(foreach bindir,$(subst :, ,$(PATH)),$(bindir)/$(ARCH)-*-gcc))))))
|
||||
ifeq (,$(CBUILD))
|
||||
$(error The toolchain for $(ARCH) is not installed)
|
||||
endif
|
||||
else
|
||||
CBUILD := $(CHOST)
|
||||
ARCH := $(firstword $(subst -, ,$(CBUILD)))
|
||||
endif
|
||||
|
||||
# Set these from the environment to override
|
||||
KERNEL_PATH ?= $(PWD)/../../../../..
|
||||
BUILD_PATH ?= $(PWD)/build/$(ARCH)
|
||||
DISTFILES_PATH ?= $(PWD)/distfiles
|
||||
NR_CPUS ?= 4
|
||||
|
||||
MIRROR := https://download.wireguard.com/qemu-test/distfiles/
|
||||
|
||||
default: qemu
|
||||
|
||||
# variable name, tarball project name, version, tarball extension, default URI base
|
||||
define tar_download =
|
||||
$(1)_VERSION := $(3)
|
||||
$(1)_NAME := $(2)-$$($(1)_VERSION)
|
||||
$(1)_TAR := $(DISTFILES_PATH)/$$($(1)_NAME)$(4)
|
||||
$(1)_PATH := $(BUILD_PATH)/$$($(1)_NAME)
|
||||
$(call file_download,$$($(1)_NAME)$(4),$(5),$(6))
|
||||
endef
|
||||
|
||||
define file_download =
|
||||
$(DISTFILES_PATH)/$(1):
|
||||
mkdir -p $(DISTFILES_PATH)
|
||||
flock -x $$@.lock -c '[ -f $$@ ] && exit 0; wget -O $$@.tmp $(MIRROR)$(1) || wget -t inf --retry-on-http-error=404 -O $$@.tmp $(2)$(1) || rm -f $$@.tmp'
|
||||
if echo "$(3) $$@.tmp" | sha256sum -c -; then mv $$@.tmp $$@; else rm -f $$@.tmp; exit 71; fi
|
||||
endef
|
||||
|
||||
$(eval $(call tar_download,MUSL,musl,1.1.20,.tar.gz,https://www.musl-libc.org/releases/,44be8771d0e6c6b5f82dd15662eb2957c9a3173a19a8b49966ac0542bbd40d61))
|
||||
$(eval $(call tar_download,LIBMNL,libmnl,1.0.4,.tar.bz2,https://www.netfilter.org/projects/libmnl/files/,171f89699f286a5854b72b91d06e8f8e3683064c5901fb09d954a9ab6f551f81))
|
||||
$(eval $(call tar_download,IPERF,iperf,3.1.7,.tar.gz,http://downloads.es.net/pub/iperf/,a4ef73406fe92250602b8da2ae89ec53211f805df97a1d1d629db5a14043734f))
|
||||
$(eval $(call tar_download,BASH,bash,5.0,.tar.gz,https://ftp.gnu.org/gnu/bash/,b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d))
|
||||
$(eval $(call tar_download,IPROUTE2,iproute2,5.1.0,.tar.gz,https://www.kernel.org/pub/linux/utils/net/iproute2/,9b43707d6075ecdca14803ca8ce0c8553848c49fa1586d12fd508d66577243f2))
|
||||
$(eval $(call tar_download,IPTABLES,iptables,1.6.1,.tar.bz2,https://www.netfilter.org/projects/iptables/files/,0fc2d7bd5d7be11311726466789d4c65fb4c8e096c9182b56ce97440864f0cf5))
|
||||
$(eval $(call tar_download,NMAP,nmap,7.60,.tar.bz2,https://nmap.org/dist/,a8796ecc4fa6c38aad6139d9515dc8113023a82e9d787e5a5fb5fa1b05516f21))
|
||||
$(eval $(call tar_download,IPUTILS,iputils,s20161105,.tar.gz,https://github.com/iputils/iputils/archive/s20161105.tar.gz/#,f813092f03d17294fd23544b129b95cdb87fe19f7970a51908a6b88509acad8a))
|
||||
$(eval $(call tar_download,WIREGUARD_TOOLS,WireGuard,0.0.20191212,.tar.xz,https://git.zx2c4.com/WireGuard/snapshot/,b0d718380f7a8822b2f12d75e462fa4eafa3a77871002981f367cd4fe2a1b071))
|
||||
|
||||
KERNEL_BUILD_PATH := $(BUILD_PATH)/kernel$(if $(findstring yes,$(DEBUG_KERNEL)),-debug)
|
||||
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
|
||||
WIREGUARD_SOURCES := $(call rwildcard,$(KERNEL_PATH)/drivers/net/wireguard/,*)
|
||||
|
||||
export CFLAGS ?= -O3 -pipe
|
||||
export LDFLAGS ?=
|
||||
export CPPFLAGS := -I$(BUILD_PATH)/include
|
||||
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
CROSS_COMPILE_FLAG := --host=$(CHOST)
|
||||
NOPIE_GCC := gcc -fno-PIE
|
||||
CFLAGS += -march=native
|
||||
STRIP := strip
|
||||
else
|
||||
$(info Cross compilation: building for $(CBUILD) using $(CHOST))
|
||||
CROSS_COMPILE_FLAG := --build=$(CBUILD) --host=$(CHOST)
|
||||
export CROSS_COMPILE=$(CBUILD)-
|
||||
NOPIE_GCC := $(CBUILD)-gcc -fno-PIE
|
||||
STRIP := $(CBUILD)-strip
|
||||
endif
|
||||
ifeq ($(ARCH),aarch64)
|
||||
QEMU_ARCH := aarch64
|
||||
KERNEL_ARCH := arm64
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
|
||||
else
|
||||
QEMU_MACHINE := -cpu cortex-a53 -machine virt
|
||||
CFLAGS += -march=armv8-a -mtune=cortex-a53
|
||||
endif
|
||||
else ifeq ($(ARCH),aarch64_be)
|
||||
QEMU_ARCH := aarch64
|
||||
KERNEL_ARCH := arm64
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
|
||||
else
|
||||
QEMU_MACHINE := -cpu cortex-a53 -machine virt
|
||||
CFLAGS += -march=armv8-a -mtune=cortex-a53
|
||||
endif
|
||||
else ifeq ($(ARCH),arm)
|
||||
QEMU_ARCH := arm
|
||||
KERNEL_ARCH := arm
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
|
||||
else
|
||||
QEMU_MACHINE := -cpu cortex-a15 -machine virt
|
||||
CFLAGS += -march=armv7-a -mtune=cortex-a15 -mabi=aapcs-linux
|
||||
endif
|
||||
else ifeq ($(ARCH),armeb)
|
||||
QEMU_ARCH := arm
|
||||
KERNEL_ARCH := arm
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
|
||||
else
|
||||
QEMU_MACHINE := -cpu cortex-a15 -machine virt
|
||||
CFLAGS += -march=armv7-a -mabi=aapcs-linux # We don't pass -mtune=cortex-a15 due to a compiler bug on big endian.
|
||||
LDFLAGS += -Wl,--be8
|
||||
endif
|
||||
else ifeq ($(ARCH),x86_64)
|
||||
QEMU_ARCH := x86_64
|
||||
KERNEL_ARCH := x86_64
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine q35,accel=kvm
|
||||
else
|
||||
QEMU_MACHINE := -cpu Skylake-Server -machine q35
|
||||
CFLAGS += -march=skylake-avx512
|
||||
endif
|
||||
else ifeq ($(ARCH),i686)
|
||||
QEMU_ARCH := i386
|
||||
KERNEL_ARCH := x86
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage
|
||||
ifeq ($(subst i686,x86_64,$(CBUILD)),$(CHOST))
|
||||
QEMU_MACHINE := -cpu host -machine q35,accel=kvm
|
||||
else
|
||||
QEMU_MACHINE := -cpu coreduo -machine q35
|
||||
CFLAGS += -march=prescott
|
||||
endif
|
||||
else ifeq ($(ARCH),mips64)
|
||||
QEMU_ARCH := mips64
|
||||
KERNEL_ARCH := mips
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine malta,accel=kvm
|
||||
CFLAGS += -EB
|
||||
else
|
||||
QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1
|
||||
CFLAGS += -march=mips64r2 -EB
|
||||
endif
|
||||
else ifeq ($(ARCH),mips64el)
|
||||
QEMU_ARCH := mips64el
|
||||
KERNEL_ARCH := mips
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine malta,accel=kvm
|
||||
CFLAGS += -EL
|
||||
else
|
||||
QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1
|
||||
CFLAGS += -march=mips64r2 -EL
|
||||
endif
|
||||
else ifeq ($(ARCH),mips)
|
||||
QEMU_ARCH := mips
|
||||
KERNEL_ARCH := mips
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine malta,accel=kvm
|
||||
CFLAGS += -EB
|
||||
else
|
||||
QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1
|
||||
CFLAGS += -march=mips32r2 -EB
|
||||
endif
|
||||
else ifeq ($(ARCH),mipsel)
|
||||
QEMU_ARCH := mipsel
|
||||
KERNEL_ARCH := mips
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host -machine malta,accel=kvm
|
||||
CFLAGS += -EL
|
||||
else
|
||||
QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1
|
||||
CFLAGS += -march=mips32r2 -EL
|
||||
endif
|
||||
else ifeq ($(ARCH),powerpc64le)
|
||||
QEMU_ARCH := ppc64
|
||||
KERNEL_ARCH := powerpc
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host,accel=kvm -machine pseries
|
||||
else
|
||||
QEMU_MACHINE := -machine pseries
|
||||
endif
|
||||
CFLAGS += -mcpu=powerpc64le -mlong-double-64
|
||||
else ifeq ($(ARCH),powerpc)
|
||||
QEMU_ARCH := ppc
|
||||
KERNEL_ARCH := powerpc
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/powerpc/boot/uImage
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host,accel=kvm -machine ppce500
|
||||
else
|
||||
QEMU_MACHINE := -machine ppce500
|
||||
endif
|
||||
CFLAGS += -mcpu=powerpc -mlong-double-64 -msecure-plt
|
||||
else ifeq ($(ARCH),m68k)
|
||||
QEMU_ARCH := m68k
|
||||
KERNEL_ARCH := m68k
|
||||
KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
|
||||
ifeq ($(CHOST),$(CBUILD))
|
||||
QEMU_MACHINE := -cpu host,accel=kvm -machine q800
|
||||
else
|
||||
QEMU_MACHINE := -machine q800
|
||||
endif
|
||||
else
|
||||
$(error I only build: x86_64, i686, arm, armeb, aarch64, aarch64_be, mips, mipsel, mips64, mips64el, powerpc64le, powerpc, m68k)
|
||||
endif
|
||||
|
||||
REAL_CC := $(CBUILD)-gcc
|
||||
MUSL_CC := $(BUILD_PATH)/musl-gcc
|
||||
export CC := $(MUSL_CC)
|
||||
USERSPACE_DEPS := $(MUSL_CC) $(BUILD_PATH)/include/.installed $(BUILD_PATH)/include/linux/.installed
|
||||
|
||||
build: $(KERNEL_BZIMAGE)
|
||||
qemu: $(KERNEL_BZIMAGE)
|
||||
rm -f $(BUILD_PATH)/result
|
||||
timeout --foreground 20m qemu-system-$(QEMU_ARCH) \
|
||||
-nodefaults \
|
||||
-nographic \
|
||||
-smp $(NR_CPUS) \
|
||||
$(QEMU_MACHINE) \
|
||||
-m $$(grep -q CONFIG_DEBUG_KMEMLEAK=y $(KERNEL_BUILD_PATH)/.config && echo 1G || echo 256M) \
|
||||
-serial stdio \
|
||||
-serial file:$(BUILD_PATH)/result \
|
||||
-no-reboot \
|
||||
-monitor none \
|
||||
-kernel $<
|
||||
grep -Fq success $(BUILD_PATH)/result
|
||||
|
||||
$(BUILD_PATH)/init-cpio-spec.txt:
|
||||
mkdir -p $(BUILD_PATH)
|
||||
echo "file /init $(BUILD_PATH)/init 755 0 0" > $@
|
||||
echo "file /init.sh $(PWD)/../netns.sh 755 0 0" >> $@
|
||||
echo "dir /dev 755 0 0" >> $@
|
||||
echo "nod /dev/console 644 0 0 c 5 1" >> $@
|
||||
echo "dir /bin 755 0 0" >> $@
|
||||
echo "file /bin/iperf3 $(IPERF_PATH)/src/iperf3 755 0 0" >> $@
|
||||
echo "file /bin/wg $(WIREGUARD_TOOLS_PATH)/src/tools/wg 755 0 0" >> $@
|
||||
echo "file /bin/bash $(BASH_PATH)/bash 755 0 0" >> $@
|
||||
echo "file /bin/ip $(IPROUTE2_PATH)/ip/ip 755 0 0" >> $@
|
||||
echo "file /bin/ss $(IPROUTE2_PATH)/misc/ss 755 0 0" >> $@
|
||||
echo "file /bin/ping $(IPUTILS_PATH)/ping 755 0 0" >> $@
|
||||
echo "file /bin/ncat $(NMAP_PATH)/ncat/ncat 755 0 0" >> $@
|
||||
echo "file /bin/xtables-multi $(IPTABLES_PATH)/iptables/xtables-multi 755 0 0" >> $@
|
||||
echo "slink /bin/iptables xtables-multi 777 0 0" >> $@
|
||||
echo "slink /bin/ping6 ping 777 0 0" >> $@
|
||||
echo "dir /lib 755 0 0" >> $@
|
||||
echo "file /lib/libc.so $(MUSL_PATH)/lib/libc.so 755 0 0" >> $@
|
||||
echo "slink /lib/ld-linux.so.1 libc.so 777 0 0" >> $@
|
||||
|
||||
$(KERNEL_BUILD_PATH)/.config: kernel.config arch/$(ARCH).config
|
||||
mkdir -p $(KERNEL_BUILD_PATH)
|
||||
cp kernel.config $(KERNEL_BUILD_PATH)/minimal.config
|
||||
printf 'CONFIG_NR_CPUS=$(NR_CPUS)\nCONFIG_INITRAMFS_SOURCE="$(BUILD_PATH)/init-cpio-spec.txt"\n' >> $(KERNEL_BUILD_PATH)/minimal.config
|
||||
cat arch/$(ARCH).config >> $(KERNEL_BUILD_PATH)/minimal.config
|
||||
$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) allnoconfig
|
||||
cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config $(KERNEL_BUILD_PATH)/minimal.config
|
||||
$(if $(findstring yes,$(DEBUG_KERNEL)),cp debug.config $(KERNEL_BUILD_PATH) && cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config debug.config,)
|
||||
|
||||
$(KERNEL_BZIMAGE): $(KERNEL_BUILD_PATH)/.config $(BUILD_PATH)/init-cpio-spec.txt $(MUSL_PATH)/lib/libc.so $(IPERF_PATH)/src/iperf3 $(IPUTILS_PATH)/ping $(BASH_PATH)/bash $(IPROUTE2_PATH)/misc/ss $(IPROUTE2_PATH)/ip/ip $(IPTABLES_PATH)/iptables/xtables-multi $(NMAP_PATH)/ncat/ncat $(WIREGUARD_TOOLS_PATH)/src/tools/wg $(BUILD_PATH)/init ../netns.sh $(WIREGUARD_SOURCES)
|
||||
$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) CC="$(NOPIE_GCC)"
|
||||
|
||||
$(BUILD_PATH)/include/linux/.installed: | $(KERNEL_BUILD_PATH)/.config
|
||||
$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) INSTALL_HDR_PATH=$(BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) headers_install
|
||||
touch $@
|
||||
|
||||
$(MUSL_PATH)/lib/libc.so: $(MUSL_TAR)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
cd $(MUSL_PATH) && CC=$(REAL_CC) ./configure --prefix=/ --disable-static --build=$(CBUILD)
|
||||
$(MAKE) -C $(MUSL_PATH)
|
||||
$(STRIP) -s $@
|
||||
|
||||
$(BUILD_PATH)/include/.installed: $(MUSL_PATH)/lib/libc.so
|
||||
$(MAKE) -C $(MUSL_PATH) DESTDIR=$(BUILD_PATH) install-headers
|
||||
touch $@
|
||||
|
||||
$(MUSL_CC): $(MUSL_PATH)/lib/libc.so
|
||||
sh $(MUSL_PATH)/tools/musl-gcc.specs.sh $(BUILD_PATH)/include $(MUSL_PATH)/lib /lib/ld-linux.so.1 > $(BUILD_PATH)/musl-gcc.specs
|
||||
printf '#!/bin/sh\nexec "$(REAL_CC)" --specs="$(BUILD_PATH)/musl-gcc.specs" -fno-stack-protector -no-pie "$$@"\n' > $(BUILD_PATH)/musl-gcc
|
||||
chmod +x $(BUILD_PATH)/musl-gcc
|
||||
|
||||
$(IPERF_PATH)/.installed: $(IPERF_TAR)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
sed -i '1s/^/#include <stdint.h>/' $(IPERF_PATH)/src/cjson.h $(IPERF_PATH)/src/timer.h
|
||||
sed -i -r 's/-p?g//g' $(IPERF_PATH)/src/Makefile*
|
||||
touch $@
|
||||
|
||||
$(IPERF_PATH)/src/iperf3: | $(IPERF_PATH)/.installed $(USERSPACE_DEPS)
|
||||
cd $(IPERF_PATH) && CFLAGS="$(CFLAGS) -D_GNU_SOURCE" ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared
|
||||
$(MAKE) -C $(IPERF_PATH)
|
||||
$(STRIP) -s $@
|
||||
|
||||
$(LIBMNL_PATH)/.installed: $(LIBMNL_TAR)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
touch $@
|
||||
|
||||
$(LIBMNL_PATH)/src/.libs/libmnl.a: | $(LIBMNL_PATH)/.installed $(USERSPACE_DEPS)
|
||||
cd $(LIBMNL_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared
|
||||
$(MAKE) -C $(LIBMNL_PATH)
|
||||
sed -i 's:prefix=.*:prefix=$(LIBMNL_PATH):' $(LIBMNL_PATH)/libmnl.pc
|
||||
|
||||
$(WIREGUARD_TOOLS_PATH)/.installed: $(WIREGUARD_TOOLS_TAR)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
touch $@
|
||||
|
||||
$(WIREGUARD_TOOLS_PATH)/src/tools/wg: | $(WIREGUARD_TOOLS_PATH)/.installed $(LIBMNL_PATH)/src/.libs/libmnl.a $(USERSPACE_DEPS)
|
||||
LDFLAGS="$(LDFLAGS) -L$(LIBMNL_PATH)/src/.libs" $(MAKE) -C $(WIREGUARD_TOOLS_PATH)/src/tools LIBMNL_CFLAGS="-I$(LIBMNL_PATH)/include" LIBMNL_LDLIBS="-lmnl" wg
|
||||
$(STRIP) -s $@
|
||||
|
||||
$(BUILD_PATH)/init: init.c | $(USERSPACE_DEPS)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
$(MUSL_CC) -o $@ $(CFLAGS) $(LDFLAGS) -std=gnu11 $<
|
||||
$(STRIP) -s $@
|
||||
|
||||
$(IPUTILS_PATH)/.installed: $(IPUTILS_TAR)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
touch $@
|
||||
|
||||
$(IPUTILS_PATH)/ping: | $(IPUTILS_PATH)/.installed $(USERSPACE_DEPS)
|
||||
$(MAKE) -C $(IPUTILS_PATH) USE_CAP=no USE_IDN=no USE_NETTLE=no USE_CRYPTO=no ping
|
||||
$(STRIP) -s $@
|
||||
|
||||
$(BASH_PATH)/.installed: $(BASH_TAR)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
touch $@
|
||||
|
||||
$(BASH_PATH)/bash: | $(BASH_PATH)/.installed $(USERSPACE_DEPS)
|
||||
cd $(BASH_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --without-bash-malloc --disable-debugger --disable-help-builtin --disable-history --disable-multibyte --disable-progcomp --disable-readline --disable-mem-scramble
|
||||
$(MAKE) -C $(BASH_PATH)
|
||||
$(STRIP) -s $@
|
||||
|
||||
$(IPROUTE2_PATH)/.installed: $(IPROUTE2_TAR)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
printf 'CC:=$(CC)\nPKG_CONFIG:=pkg-config\nTC_CONFIG_XT:=n\nTC_CONFIG_ATM:=n\nTC_CONFIG_IPSET:=n\nIP_CONFIG_SETNS:=y\nHAVE_ELF:=n\nHAVE_MNL:=y\nHAVE_BERKELEY_DB:=n\nHAVE_LATEX:=n\nHAVE_PDFLATEX:=n\nCFLAGS+=-DHAVE_SETNS -DHAVE_LIBMNL -I$(LIBMNL_PATH)/include\nLDLIBS+=-lmnl' > $(IPROUTE2_PATH)/config.mk
|
||||
printf 'lib: snapshot\n\t$$(MAKE) -C lib\nip/ip: lib\n\t$$(MAKE) -C ip ip\nmisc/ss: lib\n\t$$(MAKE) -C misc ss\n' >> $(IPROUTE2_PATH)/Makefile
|
||||
touch $@
|
||||
|
||||
$(IPROUTE2_PATH)/ip/ip: | $(IPROUTE2_PATH)/.installed $(LIBMNL_PATH)/src/.libs/libmnl.a $(USERSPACE_DEPS)
|
||||
LDFLAGS="$(LDFLAGS) -L$(LIBMNL_PATH)/src/.libs" PKG_CONFIG_LIBDIR="$(LIBMNL_PATH)" $(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ ip/ip
|
||||
$(STRIP) -s $(IPROUTE2_PATH)/ip/ip
|
||||
|
||||
$(IPROUTE2_PATH)/misc/ss: | $(IPROUTE2_PATH)/.installed $(LIBMNL_PATH)/src/.libs/libmnl.a $(USERSPACE_DEPS)
|
||||
LDFLAGS="$(LDFLAGS) -L$(LIBMNL_PATH)/src/.libs" PKG_CONFIG_LIBDIR="$(LIBMNL_PATH)" $(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ misc/ss
|
||||
$(STRIP) -s $(IPROUTE2_PATH)/misc/ss
|
||||
|
||||
$(IPTABLES_PATH)/.installed: $(IPTABLES_TAR)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
sed -i -e "/nfnetlink=[01]/s:=[01]:=0:" -e "/nfconntrack=[01]/s:=[01]:=0:" $(IPTABLES_PATH)/configure
|
||||
touch $@
|
||||
|
||||
$(IPTABLES_PATH)/iptables/xtables-multi: | $(IPTABLES_PATH)/.installed $(LIBMNL_PATH)/src/.libs/libmnl.a $(USERSPACE_DEPS)
|
||||
cd $(IPTABLES_PATH) && PKG_CONFIG_LIBDIR="$(LIBMNL_PATH)" ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --disable-nftables --disable-bpf-compiler --disable-nfsynproxy --disable-libipq --with-kernel=$(BUILD_PATH)/include
|
||||
$(MAKE) -C $(IPTABLES_PATH)
|
||||
$(STRIP) -s $@
|
||||
|
||||
$(NMAP_PATH)/.installed: $(NMAP_TAR)
|
||||
mkdir -p $(BUILD_PATH)
|
||||
flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
|
||||
touch $@
|
||||
|
||||
$(NMAP_PATH)/ncat/ncat: | $(NMAP_PATH)/.installed $(USERSPACE_DEPS)
|
||||
cd $(NMAP_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --without-ndiff --without-zenmap --without-nping --with-libpcap=included --with-libpcre=included --with-libdnet=included --without-liblua --with-liblinear=included --without-nmap-update --without-openssl --with-pcap=linux
|
||||
$(MAKE) -C $(NMAP_PATH) build-ncat
|
||||
$(STRIP) -s $@
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_PATH)
|
||||
|
||||
distclean: clean
|
||||
rm -rf $(DISTFILES_PATH)
|
||||
|
||||
menuconfig: $(KERNEL_BUILD_PATH)/.config
|
||||
$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) CC="$(NOPIE_GCC)" menuconfig
|
||||
|
||||
.PHONY: qemu build clean distclean menuconfig
|
||||
.DELETE_ON_ERROR:
|
||||
@@ -0,0 +1,5 @@
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
|
||||
CONFIG_FRAME_WARN=1280
|
||||
@@ -0,0 +1,6 @@
|
||||
CONFIG_CPU_BIG_ENDIAN=y
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
|
||||
CONFIG_FRAME_WARN=1280
|
||||
9
tools/testing/selftests/wireguard/qemu/arch/arm.config
Normal file
9
tools/testing/selftests/wireguard/qemu/arch/arm.config
Normal file
@@ -0,0 +1,9 @@
|
||||
CONFIG_MMU=y
|
||||
CONFIG_ARCH_MULTI_V7=y
|
||||
CONFIG_ARCH_VIRT=y
|
||||
CONFIG_THUMB2_KERNEL=n
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
|
||||
CONFIG_FRAME_WARN=1024
|
||||
10
tools/testing/selftests/wireguard/qemu/arch/armeb.config
Normal file
10
tools/testing/selftests/wireguard/qemu/arch/armeb.config
Normal file
@@ -0,0 +1,10 @@
|
||||
CONFIG_MMU=y
|
||||
CONFIG_ARCH_MULTI_V7=y
|
||||
CONFIG_ARCH_VIRT=y
|
||||
CONFIG_THUMB2_KERNEL=n
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
|
||||
CONFIG_CPU_BIG_ENDIAN=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
5
tools/testing/selftests/wireguard/qemu/arch/i686.config
Normal file
5
tools/testing/selftests/wireguard/qemu/arch/i686.config
Normal file
@@ -0,0 +1,5 @@
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1024
|
||||
9
tools/testing/selftests/wireguard/qemu/arch/m68k.config
Normal file
9
tools/testing/selftests/wireguard/qemu/arch/m68k.config
Normal file
@@ -0,0 +1,9 @@
|
||||
CONFIG_MMU=y
|
||||
CONFIG_M68040=y
|
||||
CONFIG_MAC=y
|
||||
CONFIG_SERIAL_PMACZILOG=y
|
||||
CONFIG_SERIAL_PMACZILOG_TTYS=y
|
||||
CONFIG_SERIAL_PMACZILOG_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1024
|
||||
11
tools/testing/selftests/wireguard/qemu/arch/mips.config
Normal file
11
tools/testing/selftests/wireguard/qemu/arch/mips.config
Normal file
@@ -0,0 +1,11 @@
|
||||
CONFIG_CPU_MIPS32_R2=y
|
||||
CONFIG_MIPS_MALTA=y
|
||||
CONFIG_MIPS_CPS=y
|
||||
CONFIG_MIPS_FP_SUPPORT=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1024
|
||||
14
tools/testing/selftests/wireguard/qemu/arch/mips64.config
Normal file
14
tools/testing/selftests/wireguard/qemu/arch/mips64.config
Normal file
@@ -0,0 +1,14 @@
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_CPU_MIPS64_R2=y
|
||||
CONFIG_MIPS32_N32=y
|
||||
CONFIG_CPU_HAS_MSA=y
|
||||
CONFIG_MIPS_MALTA=y
|
||||
CONFIG_MIPS_CPS=y
|
||||
CONFIG_MIPS_FP_SUPPORT=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1280
|
||||
15
tools/testing/selftests/wireguard/qemu/arch/mips64el.config
Normal file
15
tools/testing/selftests/wireguard/qemu/arch/mips64el.config
Normal file
@@ -0,0 +1,15 @@
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_CPU_MIPS64_R2=y
|
||||
CONFIG_MIPS32_N32=y
|
||||
CONFIG_CPU_HAS_MSA=y
|
||||
CONFIG_MIPS_MALTA=y
|
||||
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||
CONFIG_MIPS_CPS=y
|
||||
CONFIG_MIPS_FP_SUPPORT=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1280
|
||||
12
tools/testing/selftests/wireguard/qemu/arch/mipsel.config
Normal file
12
tools/testing/selftests/wireguard/qemu/arch/mipsel.config
Normal file
@@ -0,0 +1,12 @@
|
||||
CONFIG_CPU_MIPS32_R2=y
|
||||
CONFIG_MIPS_MALTA=y
|
||||
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||
CONFIG_MIPS_CPS=y
|
||||
CONFIG_MIPS_FP_SUPPORT=y
|
||||
CONFIG_POWER_RESET=y
|
||||
CONFIG_POWER_RESET_SYSCON=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1024
|
||||
10
tools/testing/selftests/wireguard/qemu/arch/powerpc.config
Normal file
10
tools/testing/selftests/wireguard/qemu/arch/powerpc.config
Normal file
@@ -0,0 +1,10 @@
|
||||
CONFIG_PPC_QEMU_E500=y
|
||||
CONFIG_FSL_SOC_BOOKE=y
|
||||
CONFIG_PPC_85xx=y
|
||||
CONFIG_PHYS_64BIT=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_MATH_EMULATION=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1024
|
||||
@@ -0,0 +1,12 @@
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_PPC_PSERIES=y
|
||||
CONFIG_ALTIVEC=y
|
||||
CONFIG_VSX=y
|
||||
CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
|
||||
CONFIG_PPC_RADIX_MMU=y
|
||||
CONFIG_HVC_CONSOLE=y
|
||||
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=hvc0 wg.success=hvc1"
|
||||
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
|
||||
CONFIG_FRAME_WARN=1280
|
||||
@@ -0,0 +1,5 @@
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_CMDLINE_BOOL=y
|
||||
CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
|
||||
CONFIG_FRAME_WARN=1280
|
||||
67
tools/testing/selftests/wireguard/qemu/debug.config
Normal file
67
tools/testing/selftests/wireguard/qemu/debug.config
Normal file
@@ -0,0 +1,67 @@
|
||||
CONFIG_LOCALVERSION="-debug"
|
||||
CONFIG_ENABLE_WARN_DEPRECATED=y
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_STACK_VALIDATION=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_INFO_DWARF4=y
|
||||
CONFIG_PAGE_EXTENSION=y
|
||||
CONFIG_PAGE_POISONING=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEBUG_OBJECTS_FREE=y
|
||||
CONFIG_DEBUG_OBJECTS_TIMERS=y
|
||||
CONFIG_DEBUG_OBJECTS_WORK=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
|
||||
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
|
||||
CONFIG_SLUB_DEBUG_ON=y
|
||||
CONFIG_DEBUG_VM=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_HAVE_ARCH_KMEMCHECK=y
|
||||
CONFIG_HAVE_ARCH_KASAN=y
|
||||
CONFIG_KASAN=y
|
||||
CONFIG_KASAN_INLINE=y
|
||||
CONFIG_UBSAN=y
|
||||
CONFIG_UBSAN_SANITIZE_ALL=y
|
||||
CONFIG_UBSAN_NO_ALIGNMENT=y
|
||||
CONFIG_UBSAN_NULL=y
|
||||
CONFIG_DEBUG_KMEMLEAK=y
|
||||
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=8192
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
CONFIG_DEBUG_SHIRQ=y
|
||||
CONFIG_WQ_WATCHDOG=y
|
||||
CONFIG_SCHED_DEBUG=y
|
||||
CONFIG_SCHED_INFO=y
|
||||
CONFIG_SCHEDSTATS=y
|
||||
CONFIG_SCHED_STACK_END_CHECK=y
|
||||
CONFIG_DEBUG_TIMEKEEPING=y
|
||||
CONFIG_TIMER_STATS=y
|
||||
CONFIG_DEBUG_PREEMPT=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_LOCKDEP=y
|
||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||
CONFIG_TRACE_IRQFLAGS=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_LIST=y
|
||||
CONFIG_DEBUG_PI_LIST=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
CONFIG_SPARSE_RCU_POINTER=y
|
||||
CONFIG_RCU_CPU_STALL_TIMEOUT=21
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_RCU_EQS_DEBUG=y
|
||||
CONFIG_USER_STACKTRACE_SUPPORT=y
|
||||
CONFIG_DEBUG_SG=y
|
||||
CONFIG_DEBUG_NOTIFIERS=y
|
||||
CONFIG_DOUBLEFAULT=y
|
||||
CONFIG_X86_DEBUG_FPU=y
|
||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
CONFIG_DEBUG_PAGEALLOC=y
|
||||
CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
|
||||
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
|
||||
284
tools/testing/selftests/wireguard/qemu/init.c
Normal file
284
tools/testing/selftests/wireguard/qemu/init.c
Normal file
@@ -0,0 +1,284 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/io.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/reboot.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <sys/sendfile.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
__attribute__((noreturn)) static void poweroff(void)
|
||||
{
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
reboot(RB_AUTOBOOT);
|
||||
sleep(30);
|
||||
fprintf(stderr, "\x1b[37m\x1b[41m\x1b[1mFailed to power off!!!\x1b[0m\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void panic(const char *what)
|
||||
{
|
||||
fprintf(stderr, "\n\n\x1b[37m\x1b[41m\x1b[1mSOMETHING WENT HORRIBLY WRONG\x1b[0m\n\n \x1b[31m\x1b[1m%s: %s\x1b[0m\n\n\x1b[37m\x1b[44m\x1b[1mPower off...\x1b[0m\n\n", what, strerror(errno));
|
||||
poweroff();
|
||||
}
|
||||
|
||||
#define pretty_message(msg) puts("\x1b[32m\x1b[1m" msg "\x1b[0m")
|
||||
|
||||
static void print_banner(void)
|
||||
{
|
||||
struct utsname utsname;
|
||||
int len;
|
||||
|
||||
if (uname(&utsname) < 0)
|
||||
panic("uname");
|
||||
|
||||
len = strlen(" WireGuard Test Suite on ") + strlen(utsname.sysname) + strlen(utsname.release) + strlen(utsname.machine);
|
||||
printf("\x1b[45m\x1b[33m\x1b[1m%*.s\x1b[0m\n\x1b[45m\x1b[33m\x1b[1m WireGuard Test Suite on %s %s %s \x1b[0m\n\x1b[45m\x1b[33m\x1b[1m%*.s\x1b[0m\n\n", len, "", utsname.sysname, utsname.release, utsname.machine, len, "");
|
||||
}
|
||||
|
||||
static void seed_rng(void)
|
||||
{
|
||||
int fd;
|
||||
struct {
|
||||
int entropy_count;
|
||||
int buffer_size;
|
||||
unsigned char buffer[256];
|
||||
} entropy = {
|
||||
.entropy_count = sizeof(entropy.buffer) * 8,
|
||||
.buffer_size = sizeof(entropy.buffer),
|
||||
.buffer = "Adding real entropy is not actually important for these tests. Don't try this at home, kids!"
|
||||
};
|
||||
|
||||
if (mknod("/dev/urandom", S_IFCHR | 0644, makedev(1, 9)))
|
||||
panic("mknod(/dev/urandom)");
|
||||
fd = open("/dev/urandom", O_WRONLY);
|
||||
if (fd < 0)
|
||||
panic("open(urandom)");
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
if (ioctl(fd, RNDADDENTROPY, &entropy) < 0)
|
||||
panic("ioctl(urandom)");
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
|
||||
static void mount_filesystems(void)
|
||||
{
|
||||
pretty_message("[+] Mounting filesystems...");
|
||||
mkdir("/dev", 0755);
|
||||
mkdir("/proc", 0755);
|
||||
mkdir("/sys", 0755);
|
||||
mkdir("/tmp", 0755);
|
||||
mkdir("/run", 0755);
|
||||
mkdir("/var", 0755);
|
||||
if (mount("none", "/dev", "devtmpfs", 0, NULL))
|
||||
panic("devtmpfs mount");
|
||||
if (mount("none", "/proc", "proc", 0, NULL))
|
||||
panic("procfs mount");
|
||||
if (mount("none", "/sys", "sysfs", 0, NULL))
|
||||
panic("sysfs mount");
|
||||
if (mount("none", "/tmp", "tmpfs", 0, NULL))
|
||||
panic("tmpfs mount");
|
||||
if (mount("none", "/run", "tmpfs", 0, NULL))
|
||||
panic("tmpfs mount");
|
||||
if (mount("none", "/sys/kernel/debug", "debugfs", 0, NULL))
|
||||
; /* Not a problem if it fails.*/
|
||||
if (symlink("/run", "/var/run"))
|
||||
panic("run symlink");
|
||||
if (symlink("/proc/self/fd", "/dev/fd"))
|
||||
panic("fd symlink");
|
||||
}
|
||||
|
||||
static void enable_logging(void)
|
||||
{
|
||||
int fd;
|
||||
pretty_message("[+] Enabling logging...");
|
||||
fd = open("/proc/sys/kernel/printk", O_WRONLY);
|
||||
if (fd >= 0) {
|
||||
if (write(fd, "9\n", 2) != 2)
|
||||
panic("write(printk)");
|
||||
close(fd);
|
||||
}
|
||||
fd = open("/proc/sys/debug/exception-trace", O_WRONLY);
|
||||
if (fd >= 0) {
|
||||
if (write(fd, "1\n", 2) != 2)
|
||||
panic("write(exception-trace)");
|
||||
close(fd);
|
||||
}
|
||||
fd = open("/proc/sys/kernel/panic_on_warn", O_WRONLY);
|
||||
if (fd >= 0) {
|
||||
if (write(fd, "1\n", 2) != 2)
|
||||
panic("write(panic_on_warn)");
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
static void kmod_selftests(void)
|
||||
{
|
||||
FILE *file;
|
||||
char line[2048], *start, *pass;
|
||||
bool success = true;
|
||||
pretty_message("[+] Module self-tests:");
|
||||
file = fopen("/proc/kmsg", "r");
|
||||
if (!file)
|
||||
panic("fopen(kmsg)");
|
||||
if (fcntl(fileno(file), F_SETFL, O_NONBLOCK) < 0)
|
||||
panic("fcntl(kmsg, nonblock)");
|
||||
while (fgets(line, sizeof(line), file)) {
|
||||
start = strstr(line, "wireguard: ");
|
||||
if (!start)
|
||||
continue;
|
||||
start += 11;
|
||||
*strchrnul(start, '\n') = '\0';
|
||||
if (strstr(start, "www.wireguard.com"))
|
||||
break;
|
||||
pass = strstr(start, ": pass");
|
||||
if (!pass || pass[6] != '\0') {
|
||||
success = false;
|
||||
printf(" \x1b[31m* %s\x1b[0m\n", start);
|
||||
} else
|
||||
printf(" \x1b[32m* %s\x1b[0m\n", start);
|
||||
}
|
||||
fclose(file);
|
||||
if (!success) {
|
||||
puts("\x1b[31m\x1b[1m[-] Tests failed! \u2639\x1b[0m");
|
||||
poweroff();
|
||||
}
|
||||
}
|
||||
|
||||
static void launch_tests(void)
|
||||
{
|
||||
char cmdline[4096], *success_dev;
|
||||
int status, fd;
|
||||
pid_t pid;
|
||||
|
||||
pretty_message("[+] Launching tests...");
|
||||
pid = fork();
|
||||
if (pid == -1)
|
||||
panic("fork");
|
||||
else if (pid == 0) {
|
||||
execl("/init.sh", "init", NULL);
|
||||
panic("exec");
|
||||
}
|
||||
if (waitpid(pid, &status, 0) < 0)
|
||||
panic("waitpid");
|
||||
if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
|
||||
pretty_message("[+] Tests successful! :-)");
|
||||
fd = open("/proc/cmdline", O_RDONLY);
|
||||
if (fd < 0)
|
||||
panic("open(/proc/cmdline)");
|
||||
if (read(fd, cmdline, sizeof(cmdline) - 1) <= 0)
|
||||
panic("read(/proc/cmdline)");
|
||||
cmdline[sizeof(cmdline) - 1] = '\0';
|
||||
for (success_dev = strtok(cmdline, " \n"); success_dev; success_dev = strtok(NULL, " \n")) {
|
||||
if (strncmp(success_dev, "wg.success=", 11))
|
||||
continue;
|
||||
memcpy(success_dev + 11 - 5, "/dev/", 5);
|
||||
success_dev += 11 - 5;
|
||||
break;
|
||||
}
|
||||
if (!success_dev || !strlen(success_dev))
|
||||
panic("Unable to find success device");
|
||||
|
||||
fd = open(success_dev, O_WRONLY);
|
||||
if (fd < 0)
|
||||
panic("open(success_dev)");
|
||||
if (write(fd, "success\n", 8) != 8)
|
||||
panic("write(success_dev)");
|
||||
close(fd);
|
||||
} else {
|
||||
const char *why = "unknown cause";
|
||||
int what = -1;
|
||||
|
||||
if (WIFEXITED(status)) {
|
||||
why = "exit code";
|
||||
what = WEXITSTATUS(status);
|
||||
} else if (WIFSIGNALED(status)) {
|
||||
why = "signal";
|
||||
what = WTERMSIG(status);
|
||||
}
|
||||
printf("\x1b[31m\x1b[1m[-] Tests failed with %s %d! \u2639\x1b[0m\n", why, what);
|
||||
}
|
||||
}
|
||||
|
||||
static void ensure_console(void)
|
||||
{
|
||||
for (unsigned int i = 0; i < 1000; ++i) {
|
||||
int fd = open("/dev/console", O_RDWR);
|
||||
if (fd < 0) {
|
||||
usleep(50000);
|
||||
continue;
|
||||
}
|
||||
dup2(fd, 0);
|
||||
dup2(fd, 1);
|
||||
dup2(fd, 2);
|
||||
close(fd);
|
||||
if (write(1, "\0\0\0\0\n", 5) == 5)
|
||||
return;
|
||||
}
|
||||
panic("Unable to open console device");
|
||||
}
|
||||
|
||||
static void clear_leaks(void)
|
||||
{
|
||||
int fd;
|
||||
|
||||
fd = open("/sys/kernel/debug/kmemleak", O_WRONLY);
|
||||
if (fd < 0)
|
||||
return;
|
||||
pretty_message("[+] Starting memory leak detection...");
|
||||
write(fd, "clear\n", 5);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
static void check_leaks(void)
|
||||
{
|
||||
int fd;
|
||||
|
||||
fd = open("/sys/kernel/debug/kmemleak", O_WRONLY);
|
||||
if (fd < 0)
|
||||
return;
|
||||
pretty_message("[+] Scanning for memory leaks...");
|
||||
sleep(2); /* Wait for any grace periods. */
|
||||
write(fd, "scan\n", 5);
|
||||
close(fd);
|
||||
|
||||
fd = open("/sys/kernel/debug/kmemleak", O_RDONLY);
|
||||
if (fd < 0)
|
||||
return;
|
||||
if (sendfile(1, fd, NULL, 0x7ffff000) > 0)
|
||||
panic("Memory leaks encountered");
|
||||
close(fd);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
seed_rng();
|
||||
ensure_console();
|
||||
print_banner();
|
||||
mount_filesystems();
|
||||
kmod_selftests();
|
||||
enable_logging();
|
||||
clear_leaks();
|
||||
launch_tests();
|
||||
check_leaks();
|
||||
poweroff();
|
||||
return 1;
|
||||
}
|
||||
86
tools/testing/selftests/wireguard/qemu/kernel.config
Normal file
86
tools/testing/selftests/wireguard/qemu/kernel.config
Normal file
@@ -0,0 +1,86 @@
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_NET=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_CORE=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_MULTIUSER=y
|
||||
CONFIG_NAMESPACES=y
|
||||
CONFIG_NET_NS=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NETFILTER_ADVANCED=y
|
||||
CONFIG_NF_CONNTRACK=y
|
||||
CONFIG_NF_NAT=y
|
||||
CONFIG_NETFILTER_XTABLES=y
|
||||
CONFIG_NETFILTER_XT_NAT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
|
||||
CONFIG_NF_CONNTRACK_IPV4=y
|
||||
CONFIG_NF_NAT_IPV4=y
|
||||
CONFIG_IP_NF_IPTABLES=y
|
||||
CONFIG_IP_NF_FILTER=y
|
||||
CONFIG_IP_NF_NAT=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
CONFIG_TTY=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
CONFIG_BINFMT_SCRIPT=y
|
||||
CONFIG_VDSO=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_HYPERVISOR_GUEST=y
|
||||
CONFIG_PARAVIRT=y
|
||||
CONFIG_KVM_GUEST=y
|
||||
CONFIG_PARAVIRT_SPINLOCKS=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
|
||||
CONFIG_EMBEDDED=n
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLUB=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_NUMA=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_ARCH_RANDOM=y
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_POSIX_TIMERS=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=15
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_LEGACY_VSYSCALL_NONE=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
CONFIG_PANIC_ON_OOPS=y
|
||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||
CONFIG_LOCKUP_DETECTOR=y
|
||||
CONFIG_SOFTLOCKUP_DETECTOR=y
|
||||
CONFIG_HARDLOCKUP_DETECTOR=y
|
||||
CONFIG_WQ_WATCHDOG=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
||||
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
|
||||
CONFIG_PANIC_TIMEOUT=-1
|
||||
CONFIG_STACKTRACE=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_GDB_SCRIPTS=y
|
||||
CONFIG_WIREGUARD=y
|
||||
CONFIG_WIREGUARD_DEBUG=y
|
||||
Reference in New Issue
Block a user