From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B69CE81732 for ; Thu, 28 May 2026 03:09:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779937783; cv=none; b=hKTzCetRucUIbRH5q0To1375EERTdOBUHl+ILvYb+7M+3T75Kg8DpvXDsbd+Dvmmeat/DoE9o85gTe5INR+DX7MkqiMTrq400xlEf7fCDxPw7MRmC0otyY3rvCy79cPWXTO3Ocp2cZQmvD8dDKzqrlpg5m91+jScnvhXP9ze07E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779937783; c=relaxed/simple; bh=v6oWtISHuXL6tAJTbGL/JIPutmLYJHJEQzmlLfiFmOY=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ck5SM0PPZEG2kObKwI2T55IoqCmfZiP1/755CSWGJKsWhTYtiSCHpNhiDYwKyTvbbs+x/kr4tI1Wbkch0IIlq0pQz33RdX2P+fvHihrYaaI0xOpqeX907DfwKW9eZPSrasVrD2YK5IXhcyJQIqsXBZfpB5kskN/tOXxlL0sJeCo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=irJl4C69; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="irJl4C69" Received: from narnia.corp.microsoft.com (unknown [40.78.13.147]) by linux.microsoft.com (Postfix) with ESMTPSA id 5E1B220B7167; Wed, 27 May 2026 20:09:26 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 5E1B220B7167 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1779937767; bh=a83yqeH8T01DgQPOZIsxaSX8ExU7TvVGfhRQtthLacg=; h=From:To:Subject:Date:In-Reply-To:References:From; b=irJl4C69Q72hhz61wTyTN7ZZFgCVlJNKIUZxooxbQutaq3uUpRnRIiz9CLoLQa2CY P95XHAzEVz5mS33DboC2qhP0xXBj+4GMjV8z8dN+QpMkxlsBjGcQyPovAs6GXCRSpi vT/DKxST5PhGUJnyICn1csxlBK/DpUmDI2Ff/I34= From: Blaise Boscaccy To: "Jonathan Corbet" , "Shuah Khan" , "Paul Moore" , "James Morris" , "Serge E. Hallyn" , "Eric Biggers" , "Fan Wu" , James.Bottomley@HansenPartnership.com, "Blaise Boscaccy" , linux-security-module@vger.kernel.org Subject: [PATCH 04/11] selftests: hornet: handle cross compilation and test skipping Date: Wed, 27 May 2026 20:08:13 -0700 Message-ID: <20260528030915.2654994-5-bboscaccy@linux.microsoft.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260528030915.2654994-1-bboscaccy@linux.microsoft.com> References: <20260528030915.2654994-1-bboscaccy@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-security-module@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit There were a few spots in the hornet selftest makefile where some host resources were assumed to be used. Additionally add proper skip detection for scenarios where the autogenerated signing keys don't exist. Signed-off-by: Blaise Boscaccy --- tools/testing/selftests/hornet/Makefile | 114 ++++++++++++++++++------ 1 file changed, 89 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/hornet/Makefile b/tools/testing/selftests/hornet/Makefile index 316364f95f28c..460adab35e238 100644 --- a/tools/testing/selftests/hornet/Makefile +++ b/tools/testing/selftests/hornet/Makefile @@ -5,59 +5,123 @@ include ../../../scripts/Makefile.include CLANG ?= clang CFLAGS := -g -O2 -Wall +TOOLSDIR := $(abspath ../../..) BPFTOOL ?= $(TOOLSDIR)/bpf/bpftool/bpftool SCRIPTSDIR := $(abspath ../../../../scripts/hornet) -TOOLSDIR := $(abspath ../../..) LIBDIR := $(TOOLSDIR)/lib BPFDIR := $(LIBDIR)/bpf TOOLSINCDIR := $(TOOLSDIR)/include APIDIR := $(TOOLSINCDIR)/uapi CERTDIR := $(abspath ../../../../certs) -PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config +HOSTPKG_CONFIG ?= pkg-config + +SIGNING_KEY := $(CERTDIR)/signing_key.pem +SIGNING_CERT := $(CERTDIR)/signing_key.x509 + +VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \ + $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \ + ../../../../vmlinux \ + /sys/kernel/btf/vmlinux \ + /boot/vmlinux-$(shell uname -r) +VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))) + +# The hornet selftest needs the kernel module signing key/cert (generated when +# the kernel is built with CONFIG_MODULE_SIG=y), a bpftool binary, and a +# vmlinux with BTF for trivial.bpf.o. If any of those are missing (cross-build +# without artifacts, container CI, CONFIG_MODULE_SIG disabled, etc.) skip the +# targets rather than failing the global selftests build. +hornet_skip_reason := +ifeq ($(wildcard $(SIGNING_KEY)),) +hornet_skip_reason := module signing key not found at $(SIGNING_KEY) (build the kernel with CONFIG_MODULE_SIG=y first) +else ifeq ($(wildcard $(SIGNING_CERT)),) +hornet_skip_reason := module signing cert not found at $(SIGNING_CERT) +else ifeq ($(wildcard $(BPFTOOL)),) +hornet_skip_reason := bpftool not found at $(BPFTOOL) (build it under tools/bpf/bpftool first) +else ifeq ($(VMLINUX_BTF),) +hornet_skip_reason := no vmlinux with BTF found; tried $(VMLINUX_BTF_PATHS) (build the kernel with CONFIG_DEBUG_INFO_BTF=y or set VMLINUX_BTF=) +endif + +ifneq ($(hornet_skip_reason),) +$(warning Skipping hornet selftests: $(hornet_skip_reason)) +TEST_GEN_PROGS := +TEST_GEN_FILES := + +include ../lib.mk + +else TEST_GEN_PROGS := loader TEST_GEN_FILES := vmlinux.h loader.h trivial.bpf.o map.bin sig.bin insn.bin signed_loader.h -$(TEST_GEN_PROGS): LDLIBS += -lbpf -$(TEST_GEN_PROGS): $(TEST_GEN_FILES) include ../lib.mk -BPF_CFLAGS := -target bpf \ - -D__TARGET_ARCH_$(ARCH) \ - -I/usr/include/$(shell uname -m)-linux-gnu \ +define get_sys_includes +$(shell $(1) $(2) -v -E - &1 \ + | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \ +$(shell $(1) $(2) -dM -E - vmlinux.h +$(OUTPUT)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) + $(BPFTOOL) btf dump file $(VMLINUX_BTF) format c > $@ -trivial.bpf.o: trivial.bpf.c vmlinux.h - $(CLANG) $(CFLAGS) $(BPF_CFLAGS) -c $< -o $@ +$(OUTPUT)/trivial.bpf.o: trivial.bpf.c $(OUTPUT)/vmlinux.h + $(CLANG) $(CFLAGS) $(BPF_CFLAGS) -I$(OUTPUT) -c $< -o $@ -loader.h: trivial.bpf.o - $(BPFTOOL) gen skeleton -S -k $(CERTDIR)/signing_key.pem -i $(CERTDIR)/signing_key.x509 \ +$(OUTPUT)/loader.h: $(OUTPUT)/trivial.bpf.o + $(BPFTOOL) gen skeleton -S -k $(SIGNING_KEY) -i $(SIGNING_CERT) \ -L $< name trivial > $@ -insn.bin: loader.h +$(OUTPUT)/insn.bin: $(OUTPUT)/loader.h $(SCRIPTSDIR)/extract-insn.sh $< > $@ -map.bin: loader.h +$(OUTPUT)/map.bin: $(OUTPUT)/loader.h $(SCRIPTSDIR)/extract-map.sh $< > $@ $(OUTPUT)/gen_sig: ../../../../scripts/hornet/gen_sig.c $(call msg,GEN_SIG,,$@) - $(Q)$(CC) $(shell $(PKG_CONFIG) --cflags libcrypto 2> /dev/null) \ + $(Q)$(HOSTCC) $(shell $(HOSTPKG_CONFIG) --cflags libcrypto 2> /dev/null) \ $< -o $@ \ - $(shell $(PKG_CONFIG) --libs libcrypto 2> /dev/null || echo -lcrypto) + $(shell $(HOSTPKG_CONFIG) --libs libcrypto 2> /dev/null || echo -lcrypto) + +$(OUTPUT)/sig.bin: $(OUTPUT)/insn.bin $(OUTPUT)/map.bin $(OUTPUT)/gen_sig + $(OUTPUT)/gen_sig --key $(SIGNING_KEY) --cert $(SIGNING_CERT) \ + --data $(OUTPUT)/insn.bin --add $(OUTPUT)/map.bin --out $@ + +$(OUTPUT)/signed_loader.h: $(OUTPUT)/sig.bin $(OUTPUT)/loader.h + $(SCRIPTSDIR)/write-sig.sh $(OUTPUT)/loader.h $(OUTPUT)/sig.bin > $@ + +BPFOBJ := $(OUTPUT)/libbpf/libbpf.a + +$(OUTPUT)/libbpf: + $(Q)mkdir -p $@ -sig.bin: insn.bin map.bin $(OUTPUT)/gen_sig - $(OUTPUT)/gen_sig --key $(CERTDIR)/signing_key.pem --cert $(CERTDIR)/signing_key.x509 \ - --data insn.bin --add map.bin --out sig.bin +$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \ + $(APIDIR)/linux/bpf.h | $(OUTPUT)/libbpf + $(Q)$(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/libbpf/ \ + DESTDIR=$(OUTPUT) prefix= \ + $(BPFOBJ) install_headers -signed_loader.h: sig.bin - $(SCRIPTSDIR)/write-sig.sh loader.h sig.bin > $@ +$(OUTPUT)/loader: loader.c $(OUTPUT)/signed_loader.h $(BPFOBJ) + $(CC) $(CFLAGS) -I$(LIBDIR) -I$(APIDIR) -I$(OUTPUT) \ + $< $(BPFOBJ) -o $@ -lelf -lz -loader: loader.c signed_loader.h - $(CC) $(CFLAGS) -I$(LIBDIR) -I$(APIDIR) $< -o $@ -lbpf +EXTRA_CLEAN = $(OUTPUT)/gen_sig $(OUTPUT)/libbpf -EXTRA_CLEAN = $(OUTPUT)/gen_sig +endif -- 2.53.0