diff --git a/docs/porting-notes.md b/docs/porting-notes.md new file mode 100644 index 0000000..f1d25a5 --- /dev/null +++ b/docs/porting-notes.md @@ -0,0 +1,105 @@ + +## 2026-11-11T11:42:59-03:00 staging +```sh +stage: headers + skeletons +``` + +## 2026-11-11T11:43:18-03:00 staging +```sh +stage: headers + skeletons +``` + +## 2026-11-11T11:51:34-03:00 staging +```sh +stage: headers + skeletons +``` + +## 2026-11-11T11:52:34-03:00 staging +```sh +stage: headers + skeletons +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf.c -> pfsrc/pf.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_ioctl.c -> pfsrc/pf_ioctl.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_norm.c -> pfsrc/pf_norm.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_if.c -> pfsrc/pf_if.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_lb.c -> pfsrc/pf_lb.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_ruleset.c -> pfsrc/pf_ruleset.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_table.c -> pfsrc/pf_table.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_osfp.c -> pfsrc/pf_osfp.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/pf_syncookies.c -> pfsrc/pf_syncookies.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/radix.c -> compat/radix.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/rtable.c -> compat/rtable.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c crypto/sha2.c -> compat/sha2.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/ifq.c -> pfsrc/ifq.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/hfsc.c -> pfsrc/hfsc.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/fq_codel.c -> pfsrc/fq_codel.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c net/if_pflog.c -> pfsrc/if_pflog.c.c (includes→pfk.h; struct renames; sa_len nulled) +``` + +## 2026-11-11T12:08:01-03:00 staging +```sh +port_c netinet/ip_divert.c -> pfsrc/ip_divert.c (includes→pfk.h; struct renames; sa_len nulled) +``` diff --git a/lab/cloud-init/meta-data.tmpl b/lab/cloud-init/meta-data.tmpl new file mode 100644 index 0000000..9ff0e35 --- /dev/null +++ b/lab/cloud-init/meta-data.tmpl @@ -0,0 +1,2 @@ +instance-id: pflab-@VM@-v3 +local-hostname: @VM@ diff --git a/lab/cloud-init/network-config.cli.tmpl b/lab/cloud-init/network-config.cli.tmpl new file mode 100644 index 0000000..c5c59dd --- /dev/null +++ b/lab/cloud-init/network-config.cli.tmpl @@ -0,0 +1,14 @@ +# cloud-init network config v2 — pftest-cli. mgmt dhcp gives DNS only +# (use-routes:false); default route goes through pf0 so LAN->WAN traffic +# exercises pf forwarding. Rendered by scripts/vm-create.sh. +version: 2 +ethernets: + mgmt: + match: {macaddress: "@CLI_MAC_MGMT@"} + dhcp4: true + dhcp4-overrides: {use-routes: false} + lan: + match: {macaddress: "@CLI_MAC_LAN@"} + addresses: [@CLI@] + routes: + - {to: default, via: @CLI_GW@} diff --git a/lab/cloud-init/network-config.gw2.tmpl b/lab/cloud-init/network-config.gw2.tmpl new file mode 100644 index 0000000..f5cfa9b --- /dev/null +++ b/lab/cloud-init/network-config.gw2.tmpl @@ -0,0 +1,13 @@ +# cloud-init network config v2 — pftest-gw2. No mgmt NIC (contract): +# pf-wan2 + pf-wan only, forwards between them (ip_forward set in user-data); +# default via pf0 so the guest itself has egress for package installs. +version: 2 +ethernets: + wan2: + match: {macaddress: "@GW2_MAC_WAN2@"} + addresses: [@GW2_WAN2@] + wan: + match: {macaddress: "@GW2_MAC_WAN@"} + addresses: [@GW2_WAN@] + routes: + - {to: default, via: @PF0_WAN_IP@} diff --git a/lab/cloud-init/network-config.pf0.tmpl b/lab/cloud-init/network-config.pf0.tmpl new file mode 100644 index 0000000..c5764b7 --- /dev/null +++ b/lab/cloud-init/network-config.pf0.tmpl @@ -0,0 +1,16 @@ +# cloud-init network config v2 — pftest-pf0. mgmt=dhcp on default net, +# data ifaces static (lab/ips.env). Rendered by scripts/vm-create.sh. +version: 2 +ethernets: + mgmt: + match: {macaddress: "@PF0_MAC_MGMT@"} + dhcp4: true + lan: + match: {macaddress: "@PF0_MAC_LAN@"} + addresses: [@PF0_LAN@] + wan: + match: {macaddress: "@PF0_MAC_WAN@"} + addresses: [@PF0_WAN@] + wan2: + match: {macaddress: "@PF0_MAC_WAN2@"} + addresses: [@PF0_WAN2@] diff --git a/lab/cloud-init/network-config.srv.tmpl b/lab/cloud-init/network-config.srv.tmpl new file mode 100644 index 0000000..aa74ae5 --- /dev/null +++ b/lab/cloud-init/network-config.srv.tmpl @@ -0,0 +1,15 @@ +# cloud-init network config v2 — pftest-srv. mgmt dhcp gives DNS only; +# default via pf0 (SRV_GW); 10.0.3.0/24 pinned via gw2 so the srv->gw2 +# path is exercised through gw forwarding instead of pf0's own link. +version: 2 +ethernets: + mgmt: + match: {macaddress: "@SRV_MAC_MGMT@"} + dhcp4: true + dhcp4-overrides: {use-routes: false} + wan: + match: {macaddress: "@SRV_MAC_WAN@"} + addresses: [@SRV@] + routes: + - {to: default, via: @SRV_GW@} + - {to: 10.0.3.0/24, via: @GW2_WAN_IP@} diff --git a/lab/cloud-init/user-data.tmpl b/lab/cloud-init/user-data.tmpl new file mode 100644 index 0000000..8c67210 --- /dev/null +++ b/lab/cloud-init/user-data.tmpl @@ -0,0 +1,23 @@ +#cloud-config +# Rendered per VM by scripts/vm-create.sh (tokens: @...@). +hostname: @VM@ +manage_etc_hosts: true +ssh_pwauth: true +users: + - name: root + lock_passwd: false + ssh_authorized_keys: + - @SSH_PUBKEY@ +chpasswd: + expire: false + users: + - name: root + password: "@ROOT_PASS@" + type: text +packages: @LAB_PACKAGES@ +runcmd: + - echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/00-pflab.conf + - sysctl -q -p /etc/sysctl.d/00-pflab.conf + - "printf '@ROOT_PASS@\\n@ROOT_PASS@\\n' | passwd root >/dev/null 2>&1 || true" +@RUNCMD_EXTRA@ + - touch /run/pf-lab-ready diff --git a/lab/domains/pftest-cli.xml.tmpl b/lab/domains/pftest-cli.xml.tmpl new file mode 100644 index 0000000..c2e726c --- /dev/null +++ b/lab/domains/pftest-cli.xml.tmpl @@ -0,0 +1,49 @@ + + @NAME@ + @VM_MEM_MB@ + @VM_VCPUS@ + + + hvm + +@KERNELBLOCK@ + + + + + + + destroy + restart + destroy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lab/domains/pftest-gw2.xml.tmpl b/lab/domains/pftest-gw2.xml.tmpl new file mode 100644 index 0000000..b411e16 --- /dev/null +++ b/lab/domains/pftest-gw2.xml.tmpl @@ -0,0 +1,50 @@ + + + @NAME@ + @VM_MEM_MB@ + @VM_VCPUS@ + + + hvm + +@KERNELBLOCK@ + + + + + + + destroy + restart + destroy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lab/domains/pftest-pf0.xml.tmpl b/lab/domains/pftest-pf0.xml.tmpl new file mode 100644 index 0000000..96c3835 --- /dev/null +++ b/lab/domains/pftest-pf0.xml.tmpl @@ -0,0 +1,59 @@ + + @NAME@ + @VM_MEM_MB@ + @VM_VCPUS@ + + + hvm + +@KERNELBLOCK@ + + + + + + + destroy + restart + destroy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lab/domains/pftest-srv.xml.tmpl b/lab/domains/pftest-srv.xml.tmpl new file mode 100644 index 0000000..2a8817c --- /dev/null +++ b/lab/domains/pftest-srv.xml.tmpl @@ -0,0 +1,49 @@ + + @NAME@ + @VM_MEM_MB@ + @VM_VCPUS@ + + + hvm + +@KERNELBLOCK@ + + + + + + + destroy + restart + destroy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lab/ips.env b/lab/ips.env new file mode 100644 index 0000000..7f86f92 --- /dev/null +++ b/lab/ips.env @@ -0,0 +1,68 @@ +# PF-on-Linux VM lab topology — single source of truth. +# Consumed by scripts/lab-lib.sh (sourced as shell). VM aliases: pf0 cli srv gw2 +# (domain names are pftest-). Hypervisor host "deb" runs everything. + +DEB=192.168.1.242 +DEB_USER=root + +# --- addressing (contract) --- +PF0_MGMT=dhcp # default-net NAT 192.168.122.0/24 (dhcp) +PF0_LAN=10.0.1.1/24 +PF0_WAN=10.0.2.1/24 +PF0_WAN2=10.0.3.1/24 +CLI=10.0.1.10/24 +CLI_GW=10.0.1.1 +SRV=10.0.2.20/24 +SRV_GW=10.0.2.1 +GW2_WAN2=10.0.3.2/24 +GW2_WAN=10.0.2.2/24 # gw2 ip_forward=1 forwards wan2<->wan + +# IPs that laptop `ssh pf0|cli|srv|gw2` (ProxyJump via deb) and nested ssh use. +PF0_SSH=10.0.1.1 +CLI_SSH=10.0.1.10 +SRV_SSH=10.0.2.20 +GW2_SSH=10.0.3.2 # reachable from deb via pf-wan2 bridge IP + +# --- libvirt networks --- +MGMT_NET=default # start+autostart; NAT, dhcp +NET_PF_LAN=pf-lan # 10.0.1.0/24, forward=none +NET_PF_WAN=pf-wan +NET_PF_WAN2=pf-wan2 +# Host-side bridge addresses (NOT used by any guest; let deb route to VMs). +PF_LAN_HOSTIP=10.0.1.254 +PF_WAN_HOSTIP=10.0.2.254 +PF_WAN2_HOSTIP=10.0.3.254 +PF_NET_PREFIX=255.255.255.0 + +# --- domain sizing --- +VM_VCPUS=2 +VM_MEM_MB=1024 + +# --- MACs (match blocks in network-config templates) --- +PF0_MAC_MGMT=52:54:00:aa:00:01 +PF0_MAC_LAN=52:54:00:aa:00:02 +PF0_MAC_WAN=52:54:00:aa:00:03 +PF0_MAC_WAN2=52:54:00:aa:00:04 +CLI_MAC_MGMT=52:54:00:bb:00:01 +CLI_MAC_LAN=52:54:00:bb:00:02 +SRV_MAC_MGMT=52:54:00:cc:00:01 +SRV_MAC_WAN=52:54:00:cc:00:02 +GW2_MAC_WAN=52:54:00:dd:00:01 +GW2_MAC_WAN2=52:54:00:dd:00:02 + +# --- root creds / packages (cloud-init) --- +ROOT_PASS=pftest +LAB_PACKAGES='[iperf3, tcpdump, python3, py3-scapy, bash]' + +# --- paths --- +IMG_DIR=/var/lib/libvirt/images +BASE_IMG=$IMG_DIR/alpine-base.qcow2 # immutable; per-VM disks back onto it +SEED_DIR=/var/lib/libvirt/pflab/seeds # cloud-init dirs + seed.iso per VM +DEPLOY_DIR=/var/lib/pflab/deploy # vm-deploy.sh landing zone (on deb) +BOOT_DIR=/var/lib/pflab/boot # --pf0-kernel artifacts (on deb) +LAB_KEY_DEB=/root/.ssh/pflab_ed # keypair injected into VM authorized_keys +LAB_KEY_LAPTOP=$HOME/.ssh/pflab_ed +LAPTOP_SSH_FRAG=$HOME/.ssh/config.d/pflab + +# Laptop source image fetched by scripts/fetch-sources.sh (see vendorize.sh style). +BASE_SRC_REL=_vendor/images/alpine-3.22-x86_64-cloud.qcow2 diff --git a/module/..module-common.o.cmd b/module/..module-common.o.cmd new file mode 100644 index 0000000..40a0cc8 --- /dev/null +++ b/module/..module-common.o.cmd @@ -0,0 +1,1143 @@ +savedcmd_.module-common.o := gcc -Wp,-MMD,./..module-common.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -DMODULE -DKBUILD_BASENAME='".module_common"' -DKBUILD_MODNAME='".module_common.o"' -D__KBUILD_MODNAME=.module_common.o -c -o .module-common.o /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/module-common.c ; /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --prefix=16 --orc --retpoline --rethunk --static-call --uaccess --link --module .module-common.o + +source_.module-common.o := /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/module-common.c + +deps_.module-common.o := \ + $(wildcard include/config/UNWINDER_ORC) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/TRACING) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + $(wildcard include/config/KPROBES) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build-salt.h \ + $(wildcard include/config/BUILD_SALT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elfnote.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elfnote-lto.h \ + $(wildcard include/config/LTO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vermagic.h \ + $(wildcard include/config/PREEMPT_BUILD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/utsrelease.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vermagic.h \ + $(wildcard include/config/M586TSC) \ + $(wildcard include/config/M586MMX) \ + $(wildcard include/config/MATOM) \ + $(wildcard include/config/M686) \ + $(wildcard include/config/MPENTIUMII) \ + $(wildcard include/config/MPENTIUMIII) \ + $(wildcard include/config/MPENTIUMM) \ + $(wildcard include/config/MPENTIUM4) \ + $(wildcard include/config/MK6) \ + $(wildcard include/config/MK7) \ + $(wildcard include/config/MCRUSOE) \ + $(wildcard include/config/MEFFICEON) \ + $(wildcard include/config/MCYRIXIII) \ + $(wildcard include/config/MVIAC3_2) \ + $(wildcard include/config/MVIAC7) \ + $(wildcard include/config/MGEODEGX1) \ + $(wildcard include/config/MGEODE_LX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_header.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/orc_hash.h \ + +.module-common.o: $(deps_.module-common.o) + +$(deps_.module-common.o): + +.module-common.o: $(wildcard /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool) diff --git a/module/.Module.symvers.cmd b/module/.Module.symvers.cmd new file mode 100644 index 0000000..4c09105 --- /dev/null +++ b/module/.Module.symvers.cmd @@ -0,0 +1 @@ +savedcmd_Module.symvers := /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/mod/modpost -M -o Module.symvers -n -T modules.order -i /home/lgcosta/lab/linux_kernel/linux-7.3.4/Module.symvers -e diff --git a/module/.modules.order.cmd b/module/.modules.order.cmd new file mode 100644 index 0000000..550cebe --- /dev/null +++ b/module/.modules.order.cmd @@ -0,0 +1 @@ +savedcmd_modules.order := { echo pf.o; :; } > modules.order diff --git a/module/.pf.ko.cmd b/module/.pf.ko.cmd new file mode 100644 index 0000000..be8d3a3 --- /dev/null +++ b/module/.pf.ko.cmd @@ -0,0 +1 @@ +savedcmd_pf.ko := ld -r -m elf_x86_64 --fatal-warnings -z noexecstack --no-warn-rwx-segments --build-id=sha1 --force-group-allocation -T /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/module.lds -o pf.ko pf.o pf.mod.o .module-common.o diff --git a/module/.pf.mod.cmd b/module/.pf.mod.cmd new file mode 100644 index 0000000..1713f5e --- /dev/null +++ b/module/.pf.mod.cmd @@ -0,0 +1 @@ +savedcmd_pf.mod := printf '%s\n' pfsrc/pfk_mod.o pfsrc/pfk_hooks.o compat/pfk_mbuf.o compat/pfk_kern.o compat/pfk_if.o compat/pfk_xmit.o compat/siphash.o compat/toeplitz.o | awk '!x[$$0]++ { print("./"$$0) }' > pf.mod diff --git a/module/.pf.mod.o.cmd b/module/.pf.mod.o.cmd new file mode 100644 index 0000000..b61e7bd --- /dev/null +++ b/module/.pf.mod.o.cmd @@ -0,0 +1,1117 @@ +savedcmd_pf.mod.o := gcc -Wp,-MMD,./.pf.mod.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -DMODULE -DKBUILD_BASENAME='"pf.mod"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o pf.mod.o pf.mod.c ; /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --prefix=16 --orc --retpoline --rethunk --static-call --uaccess --link --module pf.mod.o + +source_pf.mod.o := pf.mod.c + +deps_pf.mod.o := \ + $(wildcard include/config/MODULE_UNLOAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/TRACING) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + $(wildcard include/config/KPROBES) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export-internal.h \ + $(wildcard include/config/PARISC) \ + +pf.mod.o: $(deps_pf.mod.o) + +$(deps_pf.mod.o): + +pf.mod.o: $(wildcard /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool) diff --git a/module/.pf.o.cmd b/module/.pf.o.cmd new file mode 100644 index 0000000..7161ee8 --- /dev/null +++ b/module/.pf.o.cmd @@ -0,0 +1,3 @@ +savedcmd_pf.o := ld -m elf_x86_64 --fatal-warnings -z noexecstack --no-warn-rwx-segments -r -o pf.o @pf.mod ; /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --prefix=16 --orc --retpoline --rethunk --static-call --uaccess --link --module pf.o + +pf.o: $(wildcard /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool) diff --git a/module/Makefile b/module/Makefile new file mode 100644 index 0000000..94395ec --- /dev/null +++ b/module/Makefile @@ -0,0 +1,17 @@ +# PF-on-Linux kernel module build (out-of-tree) +# Build: make -C /path/to/linux-7.3.4 M=$PWD (or scripts/build-module.sh) +ccflags-y := -I$(src)/include -I$(src)/include/compat -DPFLINUX=1 \ + -Wno-declaration-after-statement + +# M1 skeleton set — staged engine files (pf.c, pf_ioctl.c, ...) are added +# per plan tasks T7b/T10/T11/T12; keep list explicit (no wildcards). +pf-objs := pfsrc/pfk_mod.o pfsrc/pfk_hooks.o \ + compat/pfk_mbuf.o compat/pfk_kern.o compat/pfk_if.o compat/pfk_xmit.o \ + compat/siphash.o compat/toeplitz.o +# staged BSD sources (uncomment as ported): +# pf-objs += compat/sha2.o compat/sha1.o compat/siphash.o compat/toeplitz.o +# pf-objs += compat/radix.o compat/rtable.o +# pf-objs += pfsrc/pf.o pfsrc/pf_ioctl.o pfsrc/pf_norm.o pfsrc/pf_if.o pfsrc/pf_lb.o +# pf-objs += pfsrc/pf_ruleset.o pfsrc/pf_table.o pfsrc/pf_osfp.o pfsrc/pf_syncookies.o + +obj-m := pf.o diff --git a/module/compat/.pfk_if.o.cmd b/module/compat/.pfk_if.o.cmd new file mode 100644 index 0000000..a2e1427 --- /dev/null +++ b/module/compat/.pfk_if.o.cmd @@ -0,0 +1,1820 @@ +savedcmd_compat/pfk_if.o := gcc -Wp,-MMD,compat/.pfk_if.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_if"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_if.o compat/pfk_if.c + +source_compat/pfk_if.o := compat/pfk_if.c + +deps_compat/pfk_if.o := \ + $(wildcard include/config/IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + +compat/pfk_if.o: $(deps_compat/pfk_if.o) + +$(deps_compat/pfk_if.o): diff --git a/module/compat/.pfk_kern.o.cmd b/module/compat/.pfk_kern.o.cmd new file mode 100644 index 0000000..b9d7464 --- /dev/null +++ b/module/compat/.pfk_kern.o.cmd @@ -0,0 +1,1820 @@ +savedcmd_compat/pfk_kern.o := gcc -Wp,-MMD,compat/.pfk_kern.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_kern"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_kern.o compat/pfk_kern.c + +source_compat/pfk_kern.o := compat/pfk_kern.c + +deps_compat/pfk_kern.o := \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/IPV6) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + +compat/pfk_kern.o: $(deps_compat/pfk_kern.o) + +$(deps_compat/pfk_kern.o): diff --git a/module/compat/.pfk_mbuf.o.cmd b/module/compat/.pfk_mbuf.o.cmd new file mode 100644 index 0000000..9fa091b --- /dev/null +++ b/module/compat/.pfk_mbuf.o.cmd @@ -0,0 +1,1820 @@ +savedcmd_compat/pfk_mbuf.o := gcc -Wp,-MMD,compat/.pfk_mbuf.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_mbuf"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_mbuf.o compat/pfk_mbuf.c + +source_compat/pfk_mbuf.o := compat/pfk_mbuf.c + +deps_compat/pfk_mbuf.o := \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/IPV6) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + +compat/pfk_mbuf.o: $(deps_compat/pfk_mbuf.o) + +$(deps_compat/pfk_mbuf.o): diff --git a/module/compat/.pfk_xmit.o.cmd b/module/compat/.pfk_xmit.o.cmd new file mode 100644 index 0000000..284b3a6 --- /dev/null +++ b/module/compat/.pfk_xmit.o.cmd @@ -0,0 +1,1820 @@ +savedcmd_compat/pfk_xmit.o := gcc -Wp,-MMD,compat/.pfk_xmit.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_xmit"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_xmit.o compat/pfk_xmit.c + +source_compat/pfk_xmit.o := compat/pfk_xmit.c + +deps_compat/pfk_xmit.o := \ + $(wildcard include/config/IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + +compat/pfk_xmit.o: $(deps_compat/pfk_xmit.o) + +$(deps_compat/pfk_xmit.o): diff --git a/module/compat/.siphash.o.cmd b/module/compat/.siphash.o.cmd new file mode 100644 index 0000000..6e51308 --- /dev/null +++ b/module/compat/.siphash.o.cmd @@ -0,0 +1,1820 @@ +savedcmd_compat/siphash.o := gcc -Wp,-MMD,compat/.siphash.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"siphash"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/siphash.o compat/siphash.c + +source_compat/siphash.o := compat/siphash.c + +deps_compat/siphash.o := \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/IPV6) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + +compat/siphash.o: $(deps_compat/siphash.o) + +$(deps_compat/siphash.o): diff --git a/module/compat/.toeplitz.o.cmd b/module/compat/.toeplitz.o.cmd new file mode 100644 index 0000000..9662164 --- /dev/null +++ b/module/compat/.toeplitz.o.cmd @@ -0,0 +1,1822 @@ +savedcmd_compat/toeplitz.o := gcc -Wp,-MMD,compat/.toeplitz.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"toeplitz"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/toeplitz.o compat/toeplitz.c + +source_compat/toeplitz.o := compat/toeplitz.c + +deps_compat/toeplitz.o := \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/IPV6) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crypto.h \ + +compat/toeplitz.o: $(deps_compat/toeplitz.o) + +$(deps_compat/toeplitz.o): diff --git a/module/compat/pfk_if.c b/module/compat/pfk_if.c new file mode 100644 index 0000000..96c29f8 --- /dev/null +++ b/module/compat/pfk_if.c @@ -0,0 +1,387 @@ +/* + * PF-on-Linux ifnet/address registry (ISC 2026). + * Maintains BSD-flavored struct pfk_ifnet views over net_device, refreshed + * address snapshots, egress tracking, and name/index lookups. All ops under + * NET_LOCK (read for lookups, write for list mutation) except notifier which + * uses its own spinlock + work. + */ +#include + +static DEFINE_IDR(pfk_ifnet_idr); +static DEFINE_SPINLOCK(pfk_ifnet_lock); +static struct pfk_ifnet *pfk_egress; + +static void pfk_ifnet_release(struct rcu_head *rhp) +{ + struct pfk_ifnet *ifp = container_of(rhp, struct pfk_ifnet, rcu); + + pfk_if_free(ifp); +} + +static struct pfk_ifnet * +pfk_ifnet_new(struct net_device *dev) +{ + struct pfk_ifnet *ifp = kzalloc(sizeof(*ifp), GFP_KERNEL); + + if (!ifp) + return NULL; + strscpy(ifp->if_xname, dev->name, sizeof(ifp->if_xname)); + ifp->if_index = dev->ifindex; + ifp->dev = dev; + ifp->alive = 1; + INIT_LIST_HEAD(&ifp->link); + ifp->if_type = IFT_OTHER; + switch (dev->type) { + case ARPHRD_ETHER: ifp->if_type = IFT_ETHER; break; + case ARPHRD_LOOPBACK: ifp->if_type = IFT_LOOP; break; + case ARPHRD_PPP: ifp->if_type = IFT_PPPOINT; break; + case ARPHRD_SIT: case ARPHRD_TUNNEL: case ARPHRD_IP6GRE: + ifp->if_type = IFT_GIF; break; + } + return ifp; +} + +static int +pfk_dev_flags_bsd(struct net_device *dev) +{ + int f = 0; + + if (dev->flags & IFF_UP) f |= PFIFF_UP; + if (dev->flags & IFF_BROADCAST) f |= PFIFF_BROADCAST; + if (dev->flags & IFF_DEBUG) f |= PFIFF_DEBUG; + if (dev->flags & IFF_LOOPBACK) f |= PFIFF_LOOPBACK; + if (dev->flags & IFF_POINTOPOINT) f |= PFIFF_POINTOPOINT; + if (netif_running(dev)) f |= PFIFF_RUNNING; + if (dev->flags & IFF_PROMISC) f |= PFIFF_PROMISC; + if (dev->flags & IFF_ALLMULTI) f |= PFIFF_ALLMULTI; + if (dev->flags & IFF_MULTICAST) f |= PFIFF_MULTICAST; + if (!netif_running(dev)) f |= PFIFF_RESOLVE; + return f; +} + +void +pfk_if_refresh(struct pfk_ifnet *ifp) +{ + ifp->if_mtu = ifp->dev->mtu; + ifp->if_flags = pfk_dev_flags_bsd(ifp->dev); + /* address snapshot: rebuild list from Linux in_ifaddr/inet6_ifaddr */ + pfk_if_addrlist_refresh(ifp); +} + +struct pfk_ifnet * +pfk_ifp_byindex(int idx) +{ + struct pfk_ifnet *ifp; + + if (idx <= 0) + return NULL; + ifp = idr_find(&pfk_ifnet_idr, idx); + return ifp && ifp->alive ? ifp : NULL; +} + +struct pfk_ifnet * +pfk_ifp_bydev(struct net_device *dev) +{ + return dev ? pfk_ifp_byindex(dev->ifindex) : NULL; +} + +struct pfk_ifnet * +pfk_ifp_byname(const char *name) +{ + struct net_device *dev; + struct pfk_ifnet *ifp; + + dev = dev_get_by_name(&init_net, name); + if (!dev) + return NULL; + ifp = pfk_ifp_bydev(dev); + dev_put(dev); + return ifp; +} + +void +pfk_if_stats(struct pfk_ifnet *ifp, struct pfk_if_data *out) +{ + memset(out, 0, sizeof(*out)); + out->ifi_ibytes = ifp->dev->stats.rx_bytes; + out->ifi_obytes = ifp->dev->stats.tx_bytes; +} + +/* -------- address snapshots -------- */ +static struct pfk_ifaddr * +pfkifa_new(struct pfk_ifnet *ifp, int family) +{ + struct pfk_ifaddr *ifa = kzalloc(sizeof(*ifa), GFP_KERNEL); + + if (!ifa) + return NULL; + ifa->ifa_ifp = ifp; + ifa->dev = ifp->dev; + ifa->family = family; + ifa->ifa_refcnt = 1; + ifa->ifa_addr = (struct sockaddr *)&ifa->ifa_addr_storage; + return ifa; +} + +int +pfk_if_addrlist_refresh(struct pfk_ifnet *ifp) +{ + struct pfk_ifaddr *ifa, *next; + struct net_device *dev = ifp->dev; + + /* free old */ + for (ifa = ifp->if_addrlist; ifa; ifa = next) { + next = ifa->ifa_next; + kfree(ifa); + } + ifp->if_addrlist = NULL; + + rcu_read_lock(); + /* IPv4 */ + { + struct in_device *idev = __in_dev_get_rcu(dev); + struct in_ifaddr *ifa4; + + if (idev) + for (ifa4 = rcu_dereference(idev->ifa_list); ifa4; + ifa4 = rcu_dereference(ifa4->ifa_next)) { + ifa = pfkifa_new(ifp, AF_INET); + if (!ifa) + continue; + ifa->addr4 = ifa4->ifa_address; + ifa->ifa_addr->sa_family = AF_INET; + { + struct sockaddr_in *sin = + sintosa(ifa->ifa_addr); + sin->sin_addr.s_addr = ifa4->ifa_address; + sin->sin_family = AF_INET; + } + ifa->ifa_next = ifp->if_addrlist; + ifp->if_addrlist = ifa; + } + } + /* IPv6 */ +#if IS_ENABLED(CONFIG_IPV6) + { + struct inet6_dev *idev6 = __in6_dev_get(dev); + struct inet6_ifaddr *ifa6; + + if (idev6) + list_for_each_entry(ifa6, &idev6->addr_list, if_list) { + ifa = pfkifa_new(ifp, AF_INET6); + if (!ifa) + continue; + ifa->addr6 = ifa6->addr; + ifa->scope = ifa6->scope; + ifa->ifa_addr->sa_family = AF_INET6; + { + struct sockaddr_in6 *sin6 = + sin6tosa(ifa->ifa_addr); + sin6->sin6_family = AF_INET6; + sin6->sin6_addr = ifa6->addr; + } + ifa->ifa_next = ifp->if_addrlist; + ifp->if_addrlist = ifa; + } + } +#endif + rcu_read_unlock(); + return 0; +} + +struct pfk_ifaddr * +pfk_ifwithaddr(const struct sockaddr *sa) +{ + struct pfk_ifnet *ifp; + struct pfk_ifaddr *ifa; + + for (ifp = pfk_if_first(); ifp; ifp = pfk_if_next(ifp)) { + for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) { + if (ifa->family != sa->sa_family) + continue; + if (sa->sa_family == AF_INET && + ifa->addr4 == sintosa(sa)->sin_addr.s_addr) + return ifa; + if (sa->sa_family == AF_INET6 && + !memcmp(&ifa->addr6, &sin6tosa(sa)->sin6_addr, + sizeof(struct in6_addr))) + return ifa; + } + } + return NULL; +} + +void +pfk_if_free(struct pfk_ifnet *ifp) +{ + struct pfk_ifaddr *ifa, *next; + + for (ifa = ifp->if_addrlist; ifa; ifa = next) { + next = ifa->ifa_next; + kfree(ifa); + } + kfree(ifp); +} + +/* -------- netdev events -------- */ +static int +pfk_netdev_event(struct notifier_block *nb, unsigned long ev, void *ptr) +{ + struct net_device *dev = netdev_notifier_info_to_dev(ptr); + struct pfk_ifnet *ifp; + unsigned long flags; + + switch (ev) { + case NETDEV_REGISTER: + ifp = pfk_ifnet_new(dev); + if (!ifp) + return NOTIFY_DONE; + pfk_if_refresh(ifp); + spin_lock_irqsave(&pfk_ifnet_lock, flags); + if (idr_find(&pfk_ifnet_idr, dev->ifindex)) + idr_remove(&pfk_ifnet_idr, dev->ifindex); + if (idr_alloc(&pfk_ifnet_idr, ifp, dev->ifindex, + dev->ifindex + 1, GFP_ATOMIC) < 0) { + spin_unlock_irqrestore(&pfk_ifnet_lock, flags); + kfree(ifp); + return NOTIFY_DONE; + } + spin_unlock_irqrestore(&pfk_ifnet_lock, flags); + break; + case NETDEV_UNREGISTER: + spin_lock_irqsave(&pfk_ifnet_lock, flags); + ifp = idr_find(&pfk_ifnet_idr, dev->ifindex); + if (ifp) { + ifp->alive = 0; + idr_remove(&pfk_ifnet_idr, dev->ifindex); + call_rcu(&ifp->rcu, pfk_ifnet_release); + } + spin_unlock_irqrestore(&pfk_ifnet_lock, flags); + break; + case NETDEV_CHANGE: + case NETDEV_CHANGENAME: + case NETDEV_CHANGEMTU: + ifp = pfk_ifp_bydev(dev); + if (ifp) + pfk_if_refresh(ifp); + break; + case NETDEV_DOWN: + case NETDEV_UP: { + ifp = pfk_ifp_bydev(dev); + if (ifp) + pfk_if_refresh(ifp); + pfk_egress_refresh(); + break; + } + } + pfk_egress_refresh(); + return NOTIFY_DONE; +} + +static struct notifier_block pfk_netdev_nb = { + .notifier_call = pfk_netdev_event, +}; + +/* -------- egress -------- */ +void +pfk_egress_refresh(void) +{ + struct pfk_ifnet *ifp = NULL; + struct net_device *dev; + + /* PFLINUX: default route lookup for 0.0.0.0 via FIB */ + rcu_read_lock(); + dev = ip_rt_get_default_dev(&init_net); /* helper, P1 export */ + rcu_read_unlock(); + ifp = pfk_ifp_bydev(dev); + if (ifp) + ifp->if_xflags |= 0x00000001; /* BSD IFFX_EGRESS value */ + pfk_egress = ifp; +} + +struct pfk_ifnet * +pfk_egress_if(void) +{ + return pfk_egress; +} + +/* -------- iteration -------- */ +struct pfk_ifnet * +pfk_if_first(void) +{ + int id = -1; + + return pfk_if_next_from(&id); +} +/* callers keep id on stack; helper returns next or NULL */ +struct pfk_ifnet * +pfk_if_next_from(int *idp) +{ + struct pfk_ifnet *ifp; + unsigned long flags; + + spin_lock_irqsave(&pfk_ifnet_lock, flags); + ifp = idr_get_next(&pfk_ifnet_idr, idp); + spin_unlock_irqrestore(&pfk_ifnet_lock, flags); + if (ifp) + (*idp)++; + return ifp && ifp->alive ? ifp : (ifp ? pfk_if_next_from(idp) : NULL); +} + +struct pfk_ifnet * +pfk_if_next(struct pfk_ifnet *ifp) +{ + int id = ifp ? ifp->if_index : -1; + + return pfk_if_next_from(&id); +} + +int +pfk_if_init(void) +{ + struct net_device *dev; + int err; + + err = register_netdevice_notifier(&pfk_netdev_nb); + if (err) + return err; + /* populate existing devices */ + rtnl_lock(); + for_each_netdev(&init_net, dev) { + struct pfk_ifnet *ifp = pfk_ifnet_new(dev); + unsigned long flags; + + if (!ifp) + continue; + spin_lock_irqsave(&pfk_ifnet_lock, flags); + if (!idr_find(&pfk_ifnet_idr, dev->ifindex)) + idr_alloc(&pfk_ifnet_idr, ifp, dev->ifindex, + dev->ifindex + 1, GFP_KERNEL); + else + ifp = NULL; /* already tracked by notifier */ + spin_unlock_irqrestore(&pfk_ifnet_lock, flags); + if (ifp) + pfk_if_refresh(ifp); + } + rtnl_unlock(); + pfk_egress_refresh(); + return 0; +} + +void +pfk_if_exit(void) +{ + struct pfk_ifnet *ifp; + int id = -1; + unsigned long flags; + + unregister_netdevice_notifier(&pfk_netdev_nb); + spin_lock_irqsave(&pfk_ifnet_lock, flags); + while ((ifp = idr_get_next(&pfk_ifnet_idr, &id)) != NULL) { + ifp->alive = 0; + idr_remove(&pfk_ifnet_idr, id); + kfree(ifp); + id = -1; + } + spin_unlock_irqrestore(&pfk_ifnet_lock, flags); +} diff --git a/module/compat/pfk_kern.c b/module/compat/pfk_kern.c new file mode 100644 index 0000000..7d0c6ce --- /dev/null +++ b/module/compat/pfk_kern.c @@ -0,0 +1,332 @@ +/* + * PF-on-Linux kernel API compatibility (log/lock/malloc/pool/timeout/tsleep) + * ISC (c) 2026 PF-on-Linux contributors + */ +#include + +/* ---------------- logging ---------------- */ +void +pfk_log(int level, const char *fmt, ...) +{ + char buf[512]; + va_list ap; + + if (level < 0 || level > LOG_DEBUG) + level = LOG_INFO; + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + switch (level) { + case LOG_EMERG: pr_emerg("%s\n", buf); break; + case LOG_ALERT: pr_alert("%s\n", buf); break; + case LOG_CRIT: pr_crit("%s\n", buf); break; + case LOG_ERR: pr_err("%s\n", buf); break; + case LOG_WARNING: pr_warn("%s\n", buf); break; + case LOG_NOTICE: pr_notice("%s\n", buf); break; + default: + pr_info_ratelimited("%s\n", buf); break; + } +} + +int +pfk_printk_compat(const char *fmt, ...) +{ + char buf[512]; + va_list ap; + int n; + + va_start(ap, fmt); + n = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + if (n > 0) + pr_info("%s", buf); + return n; +} + +/* ---------------- NET_LOCK ---------------- */ +static DECLARE_RWSEM(pfk_net_sem); +static atomic_t pfk_net_readers = ATOMIC_INIT(0); + +void pfk_net_lock_init(void) { } +void pfk_net_lock(void) { down_write(&pfk_net_sem); } +void pfk_net_unlock(void) { up_write(&pfk_net_sem); } +void pfk_net_read_enter(void) { down_read(&pfk_net_sem); + atomic_inc(&pfk_net_readers); } +void pfk_net_read_release(void){ atomic_dec(&pfk_net_readers); + up_read(&pfk_net_sem); } + +void +rw_init(struct rwlock *l, const char *name) +{ + init_rwsem(&l->sem); + l->name = name; + l->is_writer = 0; + atomic_set(&l->readers, 0); +} + +void +rw_enter(struct rwlock *l, int mode) +{ + if (mode == RW_WRITER) { + down_write(&l->sem); + l->is_writer = 1; + } else { + down_read(&l->sem); + atomic_inc(&l->readers); + } +} + +void +rw_exit(struct rwlock *l) +{ + if (l->is_writer) { + l->is_writer = 0; + up_write(&l->sem); + } else { + atomic_dec(&l->readers); + up_read(&l->sem); + } +} + +int +rw_status(struct rwlock *l) +{ + return l->is_writer ? RW_WRITER : + atomic_read(&l->readers) ? RW_READER : RW_NAPUTS; +} + +/* ---------------- malloc ---------------- */ +void * +pfk_malloc(size_t sz, int flags) +{ + gfp_t g = (flags & M_WAITOK) ? GFP_KERNEL : GFP_ATOMIC; + + if (flags & M_ZERO) + return kzalloc(sz, g); + return kmalloc(sz, g); +} + +void +pfk_free(void *p) +{ + kfree(p); +} + +/* ---------------- pools ---------------- */ +static atomic64_t pfk_pool_id = ATOMIC64_INIT(0); + +int +pool_init(struct pool *pl, size_t size, int align, int ipl, const char *use, + void *p, int flags, void (*ih)(void *, void *), void *arg, + struct srcptr_static *sp) +{ + memset(pl, 0, sizeof(*pl)); + pl->p_size = size; + return 0; /* slab lazily created on first pool_get */ +} + +static int +pool_get_cache(struct pool *pl) +{ + char nm[64]; + struct kmem_cache *c; + + snprintf(nm, sizeof(nm), "pfk_pool_%llu", + (unsigned long long)atomic64_inc_return(&pfk_pool_id)); + c = kmem_cache_create_usercopy(nm, pl->p_size, 0, SLAB_HWCACHE_ALIGN, + 0, pl->p_size, NULL); + pl->slab = c; + return c ? 0 : -ENOMEM; +} + +void +pool_destroy(struct pool *pl) +{ + if (pl->slab) { + kmem_cache_destroy(pl->slab); + pl->slab = NULL; + } +} + +void * +pool_get(struct pool *pl, int flags) +{ + void *v; + + if (!pl->slab && pool_get_cache(pl)) + return NULL; + v = kmem_cache_alloc(pl->slab, + (flags & PR_WAITOK) ? GFP_KERNEL : + (flags & PR_NOWAIT) ? GFP_ATOMIC : + __GFP_RETRY_MAYFAIL | GFP_KERNEL); + if (v) { + pl->p_used++; + if (flags & PR_ZERO) + memset(v, 0, pl->p_size); + } + return v; +} + +void +pool_put(struct pool *pl, void *v) +{ + if (pl->slab && v) { + kmem_cache_free(pl->slab, v); + if (pl->p_used) + pl->p_used--; + } +} + +void +pool_sethardlimit(struct pool *pl, unsigned long lim, const char *msg, int lvl) +{ + pl->p_hardlimit = lim; +} + +/* ---------------- timeout ---------------- */ +static void +pfk_timeout_work(struct work_struct *w) +{ + struct timeout *to = container_of(w, struct timeout, work); + + to->running = 1; + to->pending = 0; + if (to->fn) + to->fn(to->arg); + to->running = 0; + if (to->period_ms >= 0) + mod_timer(&to->timer, jiffies + msecs_to_jiffies(to->period_ms)); +} + +static void +pfk_timeout_fire(struct timer_list *tl) +{ + struct timeout *to = container_of(tl, struct timeout, timer); + + schedule_work(&to->work); +} + +void +timeout_set(struct timeout *to, timeout_fn *fn, void *arg) +{ + if (!to->fn) { /* one-time setup */ + timer_setup(&to->timer, pfk_timeout_fire, 0); + INIT_WORK(&to->work, pfk_timeout_work); + to->period_ms = -1; + } + to->fn = fn; + to->arg = arg; +} + +void +timeout_set_micro(struct timeout *to, timeout_fn *fn, void *arg) +{ + timeout_set(to, fn, arg); +} + +int +timeout_add(struct timeout *to, long ms) +{ + if (ms < 0) + ms = 0; + to->pending = 1; + to->deadline_jif = jiffies + msecs_to_jiffies(ms); + return mod_timer(&to->timer, to->deadline_jif); +} + +int +timeout_add_sec(struct timeout *to, int secs) +{ + return timeout_add(to, (long)secs * 1000); +} + +int +timeout_add_usec(struct timeout *to, int us) +{ + return timeout_add(to, us > 1000 ? us / 1000 : (us ? 1 : 0)); +} + +int +timeout_pending(struct timeout *to) +{ + return to->pending; +} + +int +timeout_del(struct timeout *to) +{ + to->pending = 0; + return timer_delete(&to->timer); +} + +void +timeout_del_sync(struct timeout *to) +{ + to->pending = 0; + timer_delete_sync(&to->timer); + cancel_work_sync(&to->work); +} + +void +timeout_barrier(struct timeout *to, int flags) +{ + timer_delete_sync(&to->timer); + cancel_work_sync(&to->work); +} + +/* ---------------- tsleep/wakeup (control path only) ---------------- */ +struct pfk_wait { + struct list_head link; + struct wait_queue_head wq; + int done; +}; + +static DEFINE_SPINLOCK(pfk_tsleep_lock); +/* PFLINUX: BSD queue.h shadows LIST_HEAD (2-arg) — use raw initializer */ +static struct list_head pfk_tsleep_list = { + .next = &pfk_tsleep_list, + .prev = &pfk_tsleep_list, +}; + +int +tsleep(void *p, int pr, const char *w, int timo) +{ + struct pfk_wait *pw; + long left; + + pw = kmalloc(sizeof(*pw), GFP_KERNEL); + if (!pw) + return EINTR; + init_waitqueue_head(&pw->wq); + pw->done = 0; + spin_lock(&pfk_tsleep_lock); + list_add_tail(&pw->link, &pfk_tsleep_list); + pw->link.next = (void *)p; /* stash ident */ + spin_unlock(&pfk_tsleep_lock); + left = wait_event_interruptible_timeout(pw->wq, pw->done, + timo ? msecs_to_jiffies(timo) : MAX_JIFFY_OFFSET); + spin_lock(&pfk_tsleep_lock); + list_del(&pw->link); + spin_unlock(&pfk_tsleep_lock); + kfree(pw); + if (!left) + return EWOULDBLOCK; + if (left == -ERESTARTSYS) + return EINTR; + return 0; +} + +void +pfk_wakeup(void *p) +{ + struct pfk_wait *pw; + + spin_lock(&pfk_tsleep_lock); + list_for_each_entry(pw, &pfk_tsleep_list, link) { + if (pw->link.next == (void *)p) { + pw->done = 1; + wake_up_interruptible(&pw->wq); + } + } + spin_unlock(&pfk_tsleep_lock); +} diff --git a/module/compat/pfk_mbuf.c b/module/compat/pfk_mbuf.c new file mode 100644 index 0000000..4719d3f --- /dev/null +++ b/module/compat/pfk_mbuf.c @@ -0,0 +1,462 @@ +/* + * PF-on-Linux mbuf shim implementation (ISC, (c) 2026 PF-on-Linux contributors) + * See pfk_mbuf.h for the invariants. All functions run under pfk NET_LOCK + * (read side) — never in hardirq context. + */ +#include + +static struct kmem_cache *pfk_mbuf_cache; + +struct mbuf * +m_get(int how, short type) +{ + return m_gethdr(how, type); /* PF always uses pkthdr packets */ +} + +struct mbuf * +m_gethdr(int how, short type) +{ + struct mbuf *m; + struct sk_buff *skb; + + m = kmem_cache_zalloc(pfk_mbuf_cache, + (how & (M_WAITOK|M_CANFAIL)) == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC); + if (!m) + return NULL; + skb = alloc_skb(256 + NET_SKB_PAD + NET_IP_ALIGN, + (how & (M_WAITOK|M_CANFAIL)) == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC); + if (!skb) { + kmem_cache_free(pfk_mbuf_cache, m); + return NULL; + } + skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN); + m->skb = skb; + m->m_data = skb->data; + m->m_len = skb->len; + m->m_type = type; + m->m_flags = M_PKTHDR; + m->m_refcnt = 1; + m->m_maxsize = skb_tailroom(skb); + pfk_m_setpkthdr(m); + return m; +} + +void +pfk_m_setpkthdr(struct mbuf *m) +{ + m->m_flags |= M_PKTHDR; + m->m_pkthdr.len = m->m_len; + m->m_pkthdr.pf.tag = NULL; + m->m_pkthdr.tags = NULL; +} + +struct mbuf * +m_alloc_skb(struct sk_buff *skb, int how) +{ + struct mbuf *m; + + m = kmem_cache_zalloc(pfk_mbuf_cache, + (how & (M_WAITOK|M_CANFAIL)) == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC); + if (!m) { + kfree_skb(skb); + return NULL; + } + m->skb = skb; + m->m_data = skb->data; + m->m_len = skb->len; + m->m_type = MT_HEADER; + m->m_refcnt = 1; + pfk_m_setpkthdr(m); + return m; +} + +/* reverse map: stash mbuf ptr in skb->cb (documented exclusivity in spec §4.1) */ +struct pfk_skb_cb { + struct mbuf *m; +}; +#define PFK_CB(skb) ((struct pfk_skb_cb *)((skb)->cb)) + +struct mbuf * +m_dtom(struct sk_buff *skb) +{ + return PFK_CB(skb)->m; +} + +struct mbuf * +m_devget(char *buf, int totlen, int off, struct pfk_ifnet *ifp, + void (*copyin_fc)(caddr_t, int)) +{ + struct mbuf *m; + + if (off) { + buf += off; + totlen -= off; + } + if (totlen < 0) + return NULL; + m = m_gethdr(M_NOWAIT, MT_DATA); + if (!m) + return NULL; + if (skb_put(m->skb, totlen) == NULL) { + m_freem(m); + return NULL; + } + if (copyin_fc) + copyin_fc(mtod(m, caddr_t), totlen); + else + memcpy(m->skb->data, buf, totlen); + pfk_mbuf_refresh(m); + return m; +} + +int +pfk_mbuf_linearize(struct mbuf *m) +{ + if (skb_is_nonlinear(m->skb)) { + struct sk_buff *ns; + + ns = skb_copy(m->skb, GFP_ATOMIC); + if (!ns) + return ENOBUFS; + consume_skb(m->skb); + m->skb = ns; + } + return 0; +} + +void +pfk_mbuf_refresh(struct mbuf *m) +{ + m->m_data = m->skb->data; + m->m_len = m->skb->len; + if (m->m_flags & M_PKTHDR) + m->m_pkthdr.len = m->m_len; +} + +struct mbuf * +m_copym(struct mbuf *m, int off, int len, int wait) +{ + struct mbuf *n; + struct sk_buff *ns; + + if (len == 0) + len = m->m_len - off; + if (off > m->m_len || len > m->m_len - off) + return NULL; + ns = alloc_skb(len + NET_SKB_PAD + NET_IP_ALIGN, + wait == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC); + if (!ns) + return NULL; + skb_reserve(ns, NET_SKB_PAD + NET_IP_ALIGN); + if (skb_copy_bits(m->skb, off, skb_put(ns, len), len)) { + kfree_skb(ns); + return NULL; + } + n = m_alloc_skb(ns, wait); + if (!n) + return NULL; + if (m->m_flags & M_PKTHDR) { + n->m_pkthdr = m->m_pkthdr; + n->m_pkthdr.len = len; + n->m_pkthdr.tags = NULL; + if (m_tag_copy_chain(n, m, wait) != 0) { + m_freem(n); + return NULL; + } + } + return n; +} + +struct mbuf * +m_dup(struct mbuf *m, int wait) +{ + struct mbuf *n = m_copym(m, 0, m->m_len, wait); + + if (n) { + struct sk_buff *ns = n->skb; + int need = 256 - skb_headroom(ns); + + if (need > 0 && + pskb_expand_head(ns, ALIGN(need, 64), 0, + wait == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC)) { + m_freem(n); + return NULL; + } + pfk_mbuf_refresh(n); + } + return n; +} + +void +m_adj(struct mbuf *m, int dlen) +{ + int off = dlen; + + if (off < 0) { /* trim tail */ + skb_trim(m->skb, m->skb->len + off); + } else if (off > 0) { + pskb_pull(m->skb, off > m->skb->len ? m->skb->len : off); + } + pfk_mbuf_refresh(m); +} + +void +m_trim(struct mbuf *m, int dlen) +{ + skb_trim(m->skb, dlen); + pfk_mbuf_refresh(m); +} + +int +m_cat(struct mbuf *to, struct mbuf *from) +{ + int len = from->m_len; + + if (skb_tailroom(to->skb) < len) { + if (pskb_expand_head(to->skb, 0, ALIGN(len, 64), GFP_ATOMIC)) + return EINVAL; + pfk_mbuf_refresh(to); + } + memcpy(skb_put(to->skb, len), from->m_data, len); + pfk_mbuf_refresh(to); + m_freem(from); + return 0; +} + +caddr_t +m_copyback(struct mbuf *m, int off, int len, const void *copied) +{ + int grow = off + len - m->m_len; + caddr_t p; + + if (off < 0 || len < 0) + return mtod(m, caddr_t) + off; /* BSD clamps; PF never does this */ + if (grow > 0) { + if (skb_tailroom(m->skb) < grow) { + if (pskb_expand_head(m->skb, 0, ALIGN(grow, 64), GFP_ATOMIC)) + return NULL; + pfk_mbuf_refresh(m); + } + memset(m->m_data + m->m_len, 0, grow); + skb_put(m->skb, grow); + pfk_mbuf_refresh(m); + } + p = m->m_data + off; + memcpy(p, copied, len); + return p; +} + +void +m_copydata(const struct mbuf *m, int off, int len, caddr_t dest) +{ + if (len <= 0) + return; + if (skb_copy_bits(m->skb, off, dest, len)) + memcpy(dest, m->m_data + off, + len > m->m_len - off ? m->m_len - off : len); +} + +caddr_t +m_getptr(struct mbuf *m, int loc, int *offp) +{ + *offp = 0; + if (loc < 0 || loc >= m->m_len) + return NULL; + return m->m_data + loc; +} + +int +m_clump(struct mbuf **m0p, int len, int *mp_off, int *mp_len, caddr_t *doff) +{ + struct mbuf *m = *m0p; + + if (!pskb_may_pull(m->skb, *mp_off + len)) + return -1; + pfk_mbuf_refresh(m); + *mp_len = len; + *doff = m->m_data + *mp_off; + *m0p = m; + return 0; +} + +struct mbuf * +m_free(struct mbuf *m) +{ + struct mbuf *n = m->m_next; + + m_tag_delete_chain(m, NULL); + if (m->skb) { + if (PFK_CB(m->skb)->m == m) + PFK_CB(m->skb)->m = NULL; + kfree_skb(m->skb); + } + kmem_cache_free(pfk_mbuf_cache, m); + return n; +} + +void +m_freem(struct mbuf *m) +{ + while (m) + m = m_free(m); +} + +void +m_free_ext(struct mbuf *m) +{ + /* PF never attaches external mbuf refs; no-op like upstream ext free */ +} + +/* ---------------- m_tag ---------------- */ +struct m_tag * +m_tag_alloc(int type, int len, int wait, caddr_t *align_data) +{ + struct m_tag *t; + + t = kmalloc(sizeof(*t) + len + 4, + wait == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC); + if (!t) + return NULL; + t->m_tag_next = NULL; + t->m_tag_type = type; + t->m_tag_len = len; + if (align_data) + *align_data = PFK_PTR_ALIGN(&t[1]); + return t; +} + +void +m_tag_free(struct m_tag *t) +{ + kfree(t); +} + +void +m_tag_attach(struct mbuf *m, struct m_tag *t) +{ + t->m_tag_next = NULL; + if (m->m_pkthdr.tags) { + struct m_tag *e = m->m_pkthdr.tags; + + while (e->m_tag_next) + e = e->m_tag_next; + e->m_tag_next = t; + } else + m->m_pkthdr.tags = t; +} + +void +m_tag_prepend(struct mbuf *m, struct m_tag *t) +{ + t->m_tag_next = m->m_pkthdr.tags; + m->m_pkthdr.tags = t; +} + +void +m_tag_prepend_packet(struct mbuf *m, struct m_tag *t) +{ + if (m->m_flags & M_PKTHDR) + m_tag_prepend(m, t); + else + m_tag_free(t); +} + +struct m_tag * +m_tag_find(struct mbuf *m, int type, struct m_tag *start) +{ + struct m_tag *t; + + if (start == NULL) { + if (!(m->m_flags & M_PKTHDR)) + return NULL; + t = m->m_pkthdr.tags; + } else + t = start->m_tag_next; + for (; t; t = t->m_tag_next) + if (t->m_tag_type == type) + break; + return t; +} + +void +m_tag_delete(struct mbuf *m, struct m_tag *t) +{ + struct m_tag **pp = &m->m_pkthdr.tags, *e; + + for (e = m->m_pkthdr.tags; e; e = e->m_tag_next) { + if (e == t) { + *pp = t->m_tag_next; + m_tag_free(t); + return; + } + pp = &e->m_tag_next; + } +} + +struct m_tag * +m_tag_copy(struct m_tag *tag, int how) +{ + struct m_tag *t; + caddr_t d; + + t = m_tag_alloc(tag->m_tag_type, tag->m_tag_len, how, &d); + if (t) + memcpy(d, tag->m_tag_data, tag->m_tag_len); + return t; +} + +int +m_tag_copy_chain(struct mbuf *to, struct mbuf *from, int how) +{ + struct m_tag *t; + + for (t = m_tag_first(from); t; t = m_tag_next(from, t)) { + struct m_tag *n = m_tag_copy(t, how); + + if (!n) + return ENOBUFS; + m_tag_attach(to, n); + } + return 0; +} + +void +m_tag_delete_chain(struct mbuf *m, struct m_tag *end) +{ + struct m_tag *t, *n; + + if (!(m->m_flags & M_PKTHDR)) + return; + for (t = m->m_pkthdr.tags; t && t != end; t = n) { + n = t->m_tag_next; + m_tag_free(t); + } + m->m_pkthdr.tags = end; +} + +struct m_tag * +m_tag_first(struct mbuf *m) +{ + return (m->m_flags & M_PKTHDR) ? m->m_pkthdr.tags : NULL; +} + +struct m_tag * +m_tag_next(struct mbuf *m, struct m_tag *t) +{ + return t->m_tag_next; +} + +int +pfk_mbuf_init(void) +{ + pfk_mbuf_cache = KMEM_CACHE(mbuf, 0); + if (!pfk_mbuf_cache) + return -ENOMEM; + return 0; +} + +void +pfk_mbuf_exit(void) +{ + kmem_cache_destroy(pfk_mbuf_cache); +} diff --git a/module/compat/pfk_xmit.c b/module/compat/pfk_xmit.c new file mode 100644 index 0000000..3d09c82 --- /dev/null +++ b/module/compat/pfk_xmit.c @@ -0,0 +1,208 @@ +/* + * PF-on-Linux transmit + return-packet helpers (ISC 2026). + * if_output_tso/ml + if_enqueue mirror OpenBSD calls; route-to uses them + * with a gateway dst (see pf_route.c, T14). Return errors use Linux + * ipstack helpers (exported: icmp_send; P1 exports ip_route_output_key, + * ip6_route_output, tcp_v4_send_reset if needed). + */ +#include + +static struct dst_entry * +pfk_route4(__be32 daddr, __be32 saddr, int oif) +{ + struct flowi4 fl4 = { }; + struct rtable *rt; + + fl4.daddr = daddr; + fl4.saddr = saddr; + if (oif) + fl4.flowi4_oif = oif; + rt = ip_route_output_key(&init_net, &fl4); + if (IS_ERR(rt)) + return NULL; + return &rt->dst; +} + +#if IS_ENABLED(CONFIG_IPV6) +static struct dst_entry * +pfk_route6(const struct in6_addr *daddr, const struct in6_addr *saddr, int oif) +{ + struct flowi6 fl6 = { }; + struct dst_entry *d; + + fl6.daddr = *daddr; + if (saddr) + fl6.saddr = *saddr; + if (oif) + fl6.flowi6_oif = oif; + d = ip6_route_output(&init_net, NULL, &fl6); + if (!d || d->error) { + if (d) + dst_release(d); + return NULL; + } + return d; +} +#endif + +/* xmit: BSD semantics — caller hands fully-formed IP packet + dst sock. + * rt arg is OpenBSD's cached route (opaque to us). Returns 0/errno. */ +int +if_output_tso(struct pfk_ifnet *ifp, struct mbuf **mp, struct sockaddr *dst, + void *rt, int mtu) +{ + struct mbuf *m = *mp; + struct sk_buff *skb = m_to_skb(m); + struct dst_entry *d = NULL; + int ret = 0; + + if (!pskb_may_pull(skb, sizeof(struct pf_ip))) { + ret = EINVAL; + goto drop; + } + if (skb_ensure_writable(skb, 0)) { + ret = ENOBUFS; + goto drop; + } + switch (dst->sa_family) { + case AF_INET: { + struct pf_ip *ip = mtod(m, struct pf_ip *); + __be32 gw = 0; + + /* if route was forced (route-to), dst holds gw sockaddr + * stored in sin_addr by pf_route; normal case dst==final */ + gw = sintosa(dst)->sin_addr.s_addr; + d = pfk_route4(gw, ip->ip_src.s_addr, ifp->if_index); + if (!d) { + ret = EHOSTUNREACH; + goto drop; + } + skb_dst_set(skb, d); + break; + } +#if IS_ENABLED(CONFIG_IPV6) + case AF_INET6: { + struct pf_ip6_hdr *ip6 = mtod(m, struct pf_ip6_hdr *); + const struct in6_addr *gw = &sin6tosa(dst)->sin6_addr; + + if (!d) + d = pfk_route6(gw, + (struct in6_addr *)&ip6->ip6_src, + ifp->if_index); + if (!d) { + ret = EHOSTUNREACH; + goto drop; + } + skb_dst_set(skb, d); + skb->protocol = htons(ETH_P_IPV6); + break; + } +#endif + default: + ret = EAFNOSUPPORT; + goto drop; + } + + skb->dev = skb_dst(skb)->dev; + skb_reset_network_header(skb); + if (skb->protocol == 0) + skb->protocol = htons(ETH_P_IP); + /* push through network layer exactly like OpenBSD's if_output: + * dst->output = ip_output/ip6_output (headers already built) */ + if (!netif_running(skb->dev)) { + ret = ENETDOWN; + goto drop_dst_nofree; + } + ret = skb_dst(skb)->output(&init_net, NULL, skb); + /* output consumed skb (and wrapper); avoid double free */ + if (ret == 0) { + m->skb = NULL; /* ownership moved */ + m_freem(m); + *mp = NULL; + } + return ret; + +drop_dst_nofree: + ret = ENETDOWN; +drop: + if (m) { + m_freem(m); + *mp = NULL; + } + return ret; +} + +int +if_output_ml(struct pfk_ifnet *ifp, struct mbuf_list *ml, + struct sockaddr *dst, void *rt) +{ + struct mbuf *m; + int err = 0, n; + + while ((m = ml->ml_first) != NULL) { + ml->ml_first = m->m_next; + m->m_next = NULL; + n = if_output_tso(ifp, &m, dst, rt, ifp->if_mtu); + if (n) + err = n; + } + ml->ml_len = 0; + return err; +} + +int +if_enqueue(struct pfk_ifnet *ifp, struct mbuf *m) +{ + /* PFLINUX M1-M4: no qdisc attached → direct xmit via same path; + * M5 replaces this with the pfq enqueue (spec §4.3). */ + struct sockaddr sa = { .sa_family = AF_INET }; + struct mbuf *mp = m; + + if (m_to_skb(m)->protocol == htons(ETH_P_IPV6)) + sa.sa_family = AF_INET6; + if_output_tso(ifp, &mp, &sa, NULL, ifp->if_mtu); + if (mp == NULL) + return 0; + m_freem(mp); + return ENOBUFS; +} + +/* default-route egress device helper for pfk_egress_refresh() */ +struct net_device * +ip_rt_get_default_dev(struct net *net) +{ + struct dst_entry *d = pfk_route4(htonl(0x08080808), 0, 0); + struct net_device *dev = NULL; + + if (d) { + dev = d->dev; + if (dev) + dev_hold(dev); + dst_release(d); + } + return dev; +} + +/* ---------------- return errors ---------------- */ +u_int16_t +pfk_in_cksum(const void *data, int len) +{ + return csum_fold(csum_partial(data, len, 0)); +} + +void +pfk_send_icmp_error(int family, struct sk_buff *skb_in, int type, int code, + __be32 info) +{ + if (family == AF_INET) { + icmp_send(skb_in, type, code, info); + return; + } +#if IS_ENABLED(CONFIG_IPV6) + pr_warn_once("pfk: ICMPv6 error path pending P1 export (type %d)\n", type); +#endif +} + +/* NOTE: TCP RST generation is done by PF itself (pf.c builds the segment + * and calls if_output_tso), so no kernel tcp_v4_send_reset export is + * needed — matches OpenBSD's pf_send_rst() design. */ diff --git a/module/compat/siphash.c b/module/compat/siphash.c new file mode 100644 index 0000000..06b9b9e --- /dev/null +++ b/module/compat/siphash.c @@ -0,0 +1,157 @@ +/* + * SipHash-2-4 implementation (PFLINUX) — reference algorithm by Jean-Philippe + * Aumasson & Daniel J. Bernstein, public domain reference semantics. + * ISC (c) 2026 PF-on-Linux contributors. + */ +#include +#include "compat/crypto/siphash.h" + +#define ROTL64(x, b) (u64)(((x) << (b)) | ((x) >> (64 - (b)))) + +#define SIPROUND \ + do { \ + v0 += v1; v1 = ROTL64(v1, 13); v1 ^= v0; v0 = ROTL64(v0, 32); \ + v2 += v3; v3 = ROTL64(v3, 16); v3 ^= v2; \ + v0 += v3; v3 = ROTL64(v3, 21); v3 ^= v0; \ + v2 += v1; v1 = ROTL64(v1, 17); v1 ^= v2; v2 = ROTL64(v2, 32); \ + } while (0) + +#define U8TO64_LE(p) \ + (((u64)((p)[0])) | ((u64)((p)[1]) << 8) | ((u64)((p)[2]) << 16) | \ + ((u64)((p)[3]) << 24) | ((u64)((p)[4]) << 32) | ((u64)((p)[5]) << 40) | \ + ((u64)((p)[6]) << 48) | ((u64)((p)[7]) << 56)) + +#define U64TO8_LE(p, v) \ + do { \ + (p)[0] = (u8)((v) & 0xff); (p)[1] = (u8)((v) >> 8); \ + (p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24); \ + (p)[4] = (u8)((v) >> 32); (p)[5] = (u8)((v) >> 40); \ + (p)[6] = (u8)((v) >> 48); (p)[7] = (u8)((v) >> 56); \ + } while (0) + +void +SipHash24_Init(SIPHASH_CTX *ctx, const SIPHASH_KEY *key) +{ + ctx->v[0] = 0x736f6d6570736575ULL ^ key->v[0]; + ctx->v[1] = 0x646f72616e646f6dULL ^ key->v[1]; + ctx->v[2] = 0x6c7967656e657261ULL ^ key->v[0]; + ctx->v[3] = 0x7465646279746573ULL ^ key->v[1]; + ctx->total_len = 0; + ctx->block_len = 0; + memset(ctx->block, 0, sizeof(ctx->block)); +} + +void +SipHash24_Update(SIPHASH_CTX *ctx, const void *in, __u64 inlen) +{ + const unsigned char *ni = in; + u64 total = ctx->total_len + inlen; + int left = ctx->block_len; + u64 i; + + ctx->total_len = total; + if (left) { + unsigned int take = 8 - left; + + if (take > inlen) + take = inlen; + memcpy(ctx->block + left, ni, take); + left += take; + ni += take; + inlen -= take; + if (left == 8) { + u64 m = U8TO64_LE(ctx->block); + u64 v0 = ctx->v[0], v1 = ctx->v[1]; + u64 v2 = ctx->v[2], v3 = ctx->v[3]; + + v3 ^= m; + SIPROUND; SIPROUND; + v0 ^= m; + ctx->v[0] = v0; ctx->v[1] = v1; + ctx->v[2] = v2; ctx->v[3] = v3; + ctx->block_len = 0; + } + } + while (inlen >= 8) { + u64 m = U8TO64_LE(ni); + u64 v0 = ctx->v[0], v1 = ctx->v[1]; + u64 v2 = ctx->v[2], v3 = ctx->v[3]; + + v3 ^= m; + SIPROUND; SIPROUND; + v0 ^= m; + ctx->v[0] = v0; ctx->v[1] = v1; + ctx->v[2] = v2; ctx->v[3] = v3; + ni += 8; inlen -= 8; + } + if (inlen) { + memcpy(ctx->block, ni, inlen); + ctx->block_len = inlen; + } + (void)i; +} + +void +SipHash24_Final(SIPHASH_CTX *ctx, unsigned char *out) +{ + u64 b = ((u64)ctx->total_len) << 56; + u64 v0 = ctx->v[0], v1 = ctx->v[1], v2 = ctx->v[2], v3 = ctx->v[3]; + unsigned char t[8]; + int i; + + U64TO8_LE(t, b); + for (i = 0; i < ctx->block_len; i++) + t[i] = ctx->block[i]; + + v3 ^= b; + SIPROUND; SIPROUND; + v0 ^= b; + v2 ^= 0xff; + SIPROUND; SIPROUND; SIPROUND; SIPROUND; + U64TO8_LE(out, v0 ^ v1 ^ v2 ^ v3); + /* wipe */ + ctx->v[0] = ctx->v[1] = ctx->v[2] = ctx->v[3] = 0; +} + +void +SipHash24_Generate(const SIPHASH_KEY *key, const void *in, __u64 inlen, + unsigned char *out) +{ + u64 k0 = key->v[0], k1 = key->v[1]; + u64 v0, v1, v2, v3; + + v0 = 0x736f6d6570736575ULL ^ k0; + v1 = 0x646f72616e646f6dULL ^ k1; + v2 = 0x6c7967656e657261ULL ^ k0; + v3 = 0x7465646279746573ULL ^ k1; + + while (inlen >= 8) { + u64 m = U8TO64_LE((const unsigned char *)in); + + v3 ^= m; + SIPROUND; SIPROUND; + v0 ^= m; + in = (const unsigned char *)in + 8; + inlen -= 8; + } + { + unsigned char t[8]; + u64 b = ((u64)inlen) << 56; + int i; + + memset(t, 0, sizeof(t)); + memcpy(t, in, inlen); + for (i = 0; i < 8; i++) + t[i] ^= (unsigned char)(b >> (8 * i)); + { + u64 m = U8TO64_LE(t); + + v3 ^= m; + SIPROUND; SIPROUND; + v0 ^= m; + } + v2 ^= 0xff; + SIPROUND; SIPROUND; SIPROUND; SIPROUND; + U64TO8_LE(out, v0 ^ v1 ^ v2 ^ v3); + } +} diff --git a/module/compat/toeplitz.c b/module/compat/toeplitz.c new file mode 100644 index 0000000..24a8fe1 --- /dev/null +++ b/module/compat/toeplitz.c @@ -0,0 +1,168 @@ +/* + * Software Toeplitz hash (RFC 3305) for PF flow ids — PFLINUX. + * The key window is SHA256(key) || key; the 16-bit result is the XOR of + * the 16-bit windows selected by the set bits of the input. + * ISC (c) 2026 PF-on-Linux contributors. + */ +#include +#include +#include "compat/net/toeplitz.h" + +struct stoeplitz_cache *stoeplitz_cache; + +static int +toeplitz_keyhash(const u8 *key, u8 *out /*32*/) +{ + struct crypto_shash *tfm; + char descbuf[sizeof(struct shash_desc) + 512]; + struct shash_desc *desc = (struct shash_desc *)descbuf; + int err; + + tfm = crypto_alloc_shash("sha256", 0, 0); + if (!tfm) + return -ENOMEM; + desc->tfm = tfm; + err = crypto_shash_digest(desc, key, TOEPLITZ_KEY_LEN, out); + crypto_free_shash(tfm); + return err; +} + +/* core: hash `inlen` bytes of `in` (MSB-first bit order) into 16 bits */ +static uint16_t +toeplitz_bits(const struct stoeplitz_cache *sc, const u8 *in, int inlen) +{ + u8 window[64 + 32]; /* keyhash(32) || key(40) */ + int i, bit, k; + uint16_t res = 0; + + memcpy(window, sc->keyhash, 32); + memcpy(window + 32, sc->key, TOEPLITZ_KEY_LEN); + + for (i = 0; i < inlen; i++) { + for (bit = 0; bit < 8; bit++) { + if (!(in[i] & (0x80 >> bit))) + continue; + for (k = 0; k < 16; k++) { + int pos = i * 8 + bit + k; + int byte = pos / 8; + int b = 7 - (pos % 8); + + res ^= (uint16_t)((window[byte] >> b) & 1) << k; + } + } + } + return res; +} + +void +stoeplitz_cache_init(struct stoeplitz_cache *sc, const u8 *key) +{ + memset(sc, 0, sizeof(*sc)); + memcpy(sc->key, key, TOEPLITZ_KEY_LEN); + toeplitz_keyhash(key, sc->keyhash); + sc->initialized = 1; +} + +void +stoeplitz_init(void) +{ + static u8 key[TOEPLITZ_KEY_LEN]; + int i; + + if (stoeplitz_cache && stoeplitz_cache->initialized) + return; + for (i = 0; i < TOEPLITZ_KEY_LEN; i++) + key[i] = get_random_u8(); + stoeplitz_cache = kzalloc(sizeof(*stoeplitz_cache), GFP_KERNEL); + if (!stoeplitz_cache) + return; + stoeplitz_cache_init(stoeplitz_cache, key); +} + +uint16_t +stoeplitz_hash_n16(const struct stoeplitz_cache *sc, u16 n16) +{ + u8 b[2] = { (u8)(n16 >> 8), (u8)n16 }; + + return toeplitz_bits(sc, b, sizeof(b)); +} + +uint16_t +stoeplitz_hash_n32(const struct stoeplitz_cache *sc, u32 n32) +{ + return stoeplitz_hash_n16(sc, (u16)(n32 ^ (n32 >> 16))); +} + +uint16_t +stoeplitz_hash_h16(const struct stoeplitz_cache *sc, u16 h16) +{ + u8 b[2] = { (u8)(h16 >> 8), (u8)h16 }; + + return toeplitz_bits(sc, b, sizeof(b)); +} + +uint16_t +stoeplitz_hash_h32(const struct stoeplitz_cache *sc, u32 h32) +{ + return stoeplitz_hash_h16(sc, (u16)(h32 ^ (h32 >> 16))); +} + +uint16_t +stoeplitz_hash_h64(const struct stoeplitz_cache *sc, u64 h64) +{ + return stoeplitz_hash_h32(sc, (u32)(h64 ^ (h64 >> 32))); +} + +uint16_t +stoeplitz_hash_ip4(const struct stoeplitz_cache *sc, + const struct in_addr *sa, const struct in_addr *da) +{ + u8 buf[8]; + + memcpy(buf, &sa->s_addr, 4); + memcpy(buf + 4, &da->s_addr, 4); + return toeplitz_bits(sc, buf, sizeof(buf)); +} + +uint16_t +stoeplitz_hash_ip4port(const struct stoeplitz_cache *sc, + const struct in_addr *sa, const struct in_addr *da, u16 sp, u16 dp) +{ + u8 buf[12]; + + memcpy(buf, &sa->s_addr, 4); + memcpy(buf + 4, &da->s_addr, 4); + buf[8] = (u8)(sp >> 8); buf[9] = (u8)sp; + buf[10] = (u8)(dp >> 8); buf[11] = (u8)dp; + return toeplitz_bits(sc, buf, sizeof(buf)); +} + +uint16_t +stoeplitz_hash_ip6(const struct stoeplitz_cache *sc, + const struct in6_addr *sa, const struct in6_addr *da) +{ + u8 buf[32]; + + memcpy(buf, sa, 16); + memcpy(buf + 16, da, 16); + return toeplitz_bits(sc, buf, sizeof(buf)); +} + +uint16_t +stoeplitz_hash_ip6port(const struct stoeplitz_cache *sc, + const struct in6_addr *sa, const struct in6_addr *da, u16 sp, u16 dp) +{ + u8 buf[36]; + + memcpy(buf, sa, 16); + memcpy(buf + 16, da, 16); + buf[32] = (u8)(sp >> 8); buf[33] = (u8)sp; + buf[34] = (u8)(dp >> 8); buf[35] = (u8)dp; + return toeplitz_bits(sc, buf, sizeof(buf)); +} + +uint16_t +stoeplitz_hash_eaddr(const struct stoeplitz_cache *sc, const u8 *ea) +{ + return toeplitz_bits(sc, ea, 6); +} diff --git a/module/include/compat/crypto/sha2.h b/module/include/compat/crypto/sha2.h new file mode 100644 index 0000000..461b49b --- /dev/null +++ b/module/include/compat/crypto/sha2.h @@ -0,0 +1,83 @@ +/* $OpenBSD: sha2.h,v 1.5 2014/11/16 17:39:09 tedu Exp $ */ + +/* + * FILE: sha2.h + * AUTHOR: Aaron D. Gifford + * + * Copyright (c) 2000-2001, Aaron D. Gifford + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $ + */ + +#ifndef _SHA2_H +#define _SHA2_H + + +/*** SHA-256/384/512 Various Length Definitions ***********************/ +#define SHA256_BLOCK_LENGTH 64 +#define SHA256_DIGEST_LENGTH 32 +#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) +#define SHA384_BLOCK_LENGTH 128 +#define SHA384_DIGEST_LENGTH 48 +#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1) +#define SHA512_BLOCK_LENGTH 128 +#define SHA512_DIGEST_LENGTH 64 +#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) + + +/*** SHA-256/384/512 Context Structure *******************************/ +typedef struct _SHA2_CTX { + union { + u_int32_t st32[8]; + u_int64_t st64[8]; + } state; + u_int64_t bitcount[2]; + u_int8_t buffer[SHA512_BLOCK_LENGTH]; +} SHA2_CTX; + +__BEGIN_DECLS +void SHA256Init(SHA2_CTX *); +void SHA256Update(SHA2_CTX *, const void *, size_t) + __attribute__((__bounded__(__string__,2,3))); +void SHA256Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA2_CTX *) + __attribute__((__bounded__(__minbytes__,1,SHA256_DIGEST_LENGTH))); + +void SHA384Init(SHA2_CTX *); +void SHA384Update(SHA2_CTX *, const void *, size_t) + __attribute__((__bounded__(__string__,2,3))); +void SHA384Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA2_CTX *) + __attribute__((__bounded__(__minbytes__,1,SHA384_DIGEST_LENGTH))); + +void SHA512Init(SHA2_CTX *); +void SHA512Update(SHA2_CTX *, const void *, size_t) + __attribute__((__bounded__(__string__,2,3))); +void SHA512Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA2_CTX *) + __attribute__((__bounded__(__minbytes__,1,SHA512_DIGEST_LENGTH))); +__END_DECLS + +#endif /* _SHA2_H */ diff --git a/module/include/compat/crypto/siphash.h b/module/include/compat/crypto/siphash.h new file mode 100644 index 0000000..2df2902 --- /dev/null +++ b/module/include/compat/crypto/siphash.h @@ -0,0 +1,27 @@ +/* PFLINUX compat: — SipHash-2-4 (Aumasson–Bernstein) + * API compatible with OpenBSD's SIPHASH_CTX/KEY usage in pf_syncookies.c. + * Implementation: compat/siphash.c (ISC 2026). */ +#ifndef _PFK_SIPHASH_H +#define _PFK_SIPHASH_H +#include + +#define SIPHASH_KEY_LENGTH 16 + +typedef struct { + __u64 v[2]; +} SIPHASH_KEY; + +typedef struct { + __u64 v[3]; + __u64 total_len; + unsigned char block[8]; + unsigned char block_len; +} SIPHASH_CTX; + +void SipHash24_Init(SIPHASH_CTX *ctx, const SIPHASH_KEY *key); +void SipHash24_Update(SIPHASH_CTX *ctx, const void *in, __u64 inlen); +void SipHash24_Final(SIPHASH_CTX *ctx, unsigned char *out); +void SipHash24_Generate(const SIPHASH_KEY *key, const void *in, __u64 inlen, + unsigned char *out); + +#endif diff --git a/module/include/compat/net/if_pflog.h b/module/include/compat/net/if_pflog.h new file mode 100644 index 0000000..440d8f0 --- /dev/null +++ b/module/include/compat/net/if_pflog.h @@ -0,0 +1,72 @@ +/* $OpenBSD: if_pflog.h,v 1.29 2021/01/13 09:13:30 mvs Exp $ */ +/* + * Copyright 2001 Niels Provos + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _NET_IF_PFLOG_H_ +#define _NET_IF_PFLOG_H_ + +#include +#include + +#define PFLOG_RULESET_NAME_SIZE 16 + +struct pfloghdr { + u_int8_t length; + sa_family_t af; + u_int8_t action; + u_int8_t reason; + char ifname[IFNAMSIZ]; + char ruleset[PFLOG_RULESET_NAME_SIZE]; + u_int32_t rulenr; + u_int32_t subrulenr; + uid_t uid; + pid_t pid; + uid_t rule_uid; + pid_t rule_pid; + u_int8_t dir; + u_int8_t rewritten; + sa_family_t naf; + u_int8_t pad[1]; + struct pf_addr saddr; + struct pf_addr daddr; + u_int16_t sport; + u_int16_t dport; +}; + +#define PFLOG_HDRLEN sizeof(struct pfloghdr) +/* used to be minus pad, also used as a signature */ +#define PFLOG_REAL_HDRLEN PFLOG_HDRLEN +#define PFLOG_OLD_HDRLEN offsetof(struct pfloghdr, pad) + +#ifdef _KERNEL + +struct pflog_softc { + LIST_ENTRY(pflog_softc) sc_entry; + struct ifnet sc_if; /* the interface */ + int sc_unit; +}; + +#endif /* _KERNEL */ +#endif /* _NET_IF_PFLOG_H_ */ diff --git a/module/include/compat/net/if_types.h b/module/include/compat/net/if_types.h new file mode 100644 index 0000000..fe7413d --- /dev/null +++ b/module/include/compat/net/if_types.h @@ -0,0 +1,16 @@ +/* PFLINUX compat: — OpenBSD IFT_* constants + * (values must match OpenBSD: they travel in pf_rule/pfk_if ioctls). */ +#ifndef _PFK_IF_TYPES_H +#define _PFK_IF_TYPES_H +#define IFT_OTHER 0x1 +#define IFT_ETHER 0x6 +#define IFT_TOKENRING 0xf +#define IFT_FDDI 0x12 +#define IFT_LOOP 0x18 +#define IFT_SLIP 0x1f +#define IFT_PPPOINT 0x1e +#define IFT_GIF 0xe6 +#define IFT_PFLOG 0xf0 +#define IFT_PFSYNC 0xf1 +#define IFT_CARP 0xf8 +#endif diff --git a/module/include/compat/net/if_var.h b/module/include/compat/net/if_var.h new file mode 100644 index 0000000..9b21714 --- /dev/null +++ b/module/include/compat/net/if_var.h @@ -0,0 +1,5 @@ +/* PFLINUX compat: — ifnet view comes from pfk_if.h */ +#ifndef _PFK_IF_VAR_H +#define _PFK_IF_VAR_H +/* intentionally minimal; struct pfk_ifnet is the ifnet */ +#endif diff --git a/module/include/compat/net/ifq.h b/module/include/compat/net/ifq.h new file mode 100644 index 0000000..7b8499c --- /dev/null +++ b/module/include/compat/net/ifq.h @@ -0,0 +1,507 @@ +/* $OpenBSD: ifq.h,v 1.44 2025/03/04 01:13:37 dlg Exp $ */ + +/* + * Copyright (c) 2015 David Gwynne + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _NET_IFQ_H_ +#define _NET_IFQ_H_ + +struct ifnet; +struct kstat; + +struct ifq_ops; + +struct ifqueue { + struct ifnet *ifq_if; + struct taskq *ifq_softnet; + union { + void *_ifq_softc; + /* + * a rings sndq is found by looking up an array of pointers. + * by default we only have one sndq and the default drivers + * dont use ifq_softc, so we can borrow it for the map until + * we need to allocate a proper map. + */ + struct ifqueue *_ifq_ifqs[1]; + } _ifq_ptr; +#define ifq_softc _ifq_ptr._ifq_softc +#define ifq_ifqs _ifq_ptr._ifq_ifqs + + /* mbuf handling */ + struct mutex ifq_mtx; + const struct ifq_ops *ifq_ops; + void *ifq_q; + struct mbuf_list ifq_free; + unsigned int ifq_len; + unsigned int ifq_oactive; + + /* statistics */ + uint64_t ifq_packets; + uint64_t ifq_bytes; + uint64_t ifq_qdrops; + uint64_t ifq_errors; + uint64_t ifq_mcasts; + uint32_t ifq_oactives; + + struct kstat *ifq_kstat; + + /* work serialisation */ + struct mutex ifq_task_mtx; + struct task_list ifq_task_list; + void *ifq_serializer; + struct task ifq_bundle; + + /* work to be serialised */ + struct task ifq_start; + struct task ifq_restart; + + /* properties */ + unsigned int ifq_maxlen; + unsigned int ifq_idx; +}; + +struct ifiqueue { + struct ifnet *ifiq_if; + caddr_t *ifiq_bpfp; + struct taskq *ifiq_softnet; + union { + void *_ifiq_softc; + struct ifiqueue *_ifiq_ifiqs[1]; + } _ifiq_ptr; +#define ifiq_softc _ifiq_ptr._ifiq_softc +#define ifiq_ifiqs _ifiq_ptr._ifiq_ifiqs + + struct mutex ifiq_mtx; + struct mbuf_list ifiq_ml; + struct task ifiq_task; + unsigned int ifiq_pressure; + + /* counters */ + uint64_t ifiq_packets; + uint64_t ifiq_bytes; + uint64_t ifiq_fdrops; + uint64_t ifiq_qdrops; + uint64_t ifiq_errors; + uint64_t ifiq_mcasts; + uint64_t ifiq_noproto; + + /* number of times a list of packets were put on ifiq_ml */ + uint64_t ifiq_enqueues; + /* number of times a list of packets were pulled off ifiq_ml */ + uint64_t ifiq_dequeues; + + struct kstat *ifiq_kstat; + + /* properties */ + unsigned int ifiq_idx; +}; + +#ifdef _KERNEL + +#define IFQ_MAXLEN 256 + +/* + * + * Interface Send Queues + * + * struct ifqueue sits between the network stack and a drivers + * transmission of packets. The high level view is that when the stack + * has finished generating a packet it hands it to a driver for + * transmission. It does this by queueing the packet on an ifqueue and + * notifying the driver to start transmission of the queued packets. + * + * A network device may have multiple contexts for the transmission + * of packets, ie, independent transmit rings. Such a network device, + * represented by a struct ifnet, would then have multiple ifqueue + * structures, each of which maps to an independent transmit ring. + * + * struct ifqueue also provides the point where conditioning of + * traffic (ie, priq and hfsc) is implemented, and provides some + * infrastructure to assist in the implementation of network drivers. + * + * = ifq API + * + * The ifq API provides functions for three distinct consumers: + * + * 1. The network stack + * 2. Traffic QoS/conditioning implementations + * 3. Network drivers + * + * == Network Stack API + * + * The network stack is responsible for initialising and destroying + * the ifqueue structures, changing the traffic conditioner on an + * interface, enqueuing packets for transmission, and notifying + * the driver to start transmission of a particular ifqueue. + * + * === ifq_init() + * + * During if_attach(), the network stack calls ifq_init to initialise + * the ifqueue structure. By default it configures the priq traffic + * conditioner. + * + * === ifq_destroy() + * + * The network stack calls ifq_destroy() during if_detach to tear down + * the ifqueue structure. It frees the traffic conditioner state, and + * frees any mbufs that were left queued. + * + * === ifq_attach() + * + * ifq_attach() is used to replace the current traffic conditioner on + * the ifqueue. All the pending mbufs are removed from the previous + * conditioner and requeued on the new. + * + * === ifq_idx() + * + * ifq_idx() selects a specific ifqueue from the current ifnet + * structure for use in the transmission of the mbuf. + * + * === ifq_enqueue() + * + * ifq_enqueue() attempts to fit an mbuf onto the ifqueue. The + * current traffic conditioner may drop a packet to make space on the + * queue. + * + * === ifq_start() + * + * Once a packet has been successfully queued with ifq_enqueue(), + * the network card is notified with a call to ifq_start(). + * Calls to ifq_start() run in the ifqueue serialisation context, + * guaranteeing that only one instance of ifp->if_qstart() will be + * running on behalf of a specific ifqueue in the system at any point + * in time. + * + * == Traffic conditioners API + * + * The majority of interaction between struct ifqueue and a traffic + * conditioner occurs via the callbacks a traffic conditioner provides + * in an instance of struct ifq_ops. + * + * XXX document ifqop_* + * + * The ifqueue API implements the locking on behalf of the conditioning + * implementations so conditioners only have to reject or keep mbufs. + * If something needs to inspect a conditioners internals, the queue lock + * needs to be taken to allow for a consistent or safe view. The queue + * lock may be taken and released with ifq_q_enter() and ifq_q_leave(). + * + * === ifq_q_enter() + * + * Code wishing to access a conditioners internals may take the queue + * lock with ifq_q_enter(). The caller must pass a reference to the + * conditioners ifq_ops structure so the infrastructure can ensure the + * caller is able to understand the internals. ifq_q_enter() returns + * a pointer to the conditioners internal structures, or NULL if the + * ifq_ops did not match the current conditioner. + * + * === ifq_q_leave() + * + * The queue lock acquired with ifq_q_enter() is released with + * ifq_q_leave(). + * + * === ifq_mfreem() and ifq_mfreeml() + * + * A goal of the API is to avoid freeing an mbuf while mutexes are + * held. Because the ifq API manages the lock on behalf of the backend + * ifqops, the backend should not directly free mbufs. If a conditioner + * backend needs to drop a packet during the handling of ifqop_deq_begin, + * it may free it by calling ifq_mfreem(). This accounts for the drop, + * and schedules the free of the mbuf outside the hold of ifq_mtx. + * ifq_mfreeml() takes an mbuf list as an argument instead. + * + * + * == Network Driver API + * + * The API used by network drivers is mostly documented in the + * ifq_dequeue(9) manpage except for ifq_serialize(). + * + * === ifq_serialize() + * + * A driver may run arbitrary work in the ifqueue serialiser context + * via ifq_serialize(). The work to be done is represented by a task + * that has been prepared with task_set. + * + * The work will be run in series with any other work dispatched by + * ifq_start(), ifq_restart(), or other ifq_serialize() calls. + * + * Because the work may be run on another CPU, the lifetime of the + * task and the work it represents can extend beyond the end of the + * call to ifq_serialize() that dispatched it. + * + * + * = ifqueue work serialisation + * + * ifqueues provide a mechanism to dispatch work to be run in a single + * context. Work in this mechanism is represented by task structures. + * + * The tasks are run in a context similar to a taskq serviced by a + * single kernel thread, except the work is run immediately by the + * first CPU that dispatches work. If a second CPU attempts to dispatch + * additional tasks while the first is still running, it will be queued + * to be run by the first CPU. The second CPU will return immediately. + * + * = MP Safe Network Drivers + * + * An MP safe network driver is one in which its start routine can be + * called by the network stack without holding the big kernel lock. + * + * == Attach + * + * A driver advertises its ability to run its start routine without + * the kernel lock by setting the IFXF_MPSAFE flag in ifp->if_xflags + * before calling if_attach(). Advertising an MPSAFE start routine + * also implies that the driver understands that a network card can + * have multiple rings or transmit queues, and therefore provides + * if_qstart function (which takes an ifqueue pointer) instead of an + * if_start function (which takes an ifnet pointer). + * + * If the hardware supports multiple transmit rings, it advertises + * support for multiple rings to the network stack with if_attach_queues() + * after the call to if_attach(). if_attach_queues allocates a struct + * ifqueue for each hardware ring, which can then be initialised by + * the driver with data for each ring. + * + * void drv_start(struct ifqueue *); + * + * void + * drv_attach() + * { + * ... + * ifp->if_xflags = IFXF_MPSAFE; + * ifp->if_qstart = drv_start; + * if_attach(ifp); + * + * if_attach_queues(ifp, DRV_NUM_TX_RINGS); + * for (i = 0; i < DRV_NUM_TX_RINGS; i++) { + * struct ifqueue *ifq = ifp->if_ifqs[i]; + * struct drv_tx_ring *ring = &sc->sc_tx_rings[i]; + * + * ifq->ifq_softc = ring; + * ring->ifq = ifq; + * } + * } + * + * The network stack will then call ifp->if_qstart via ifq_start() + * to guarantee there is only one instance of that function running + * for each ifq in the system, and to serialise it with other work + * the driver may provide. + * + * == Initialise + * + * When the stack requests an interface be brought up (ie, drv_ioctl() + * is called to handle SIOCSIFFLAGS with IFF_UP set in ifp->if_flags) + * drivers should set IFF_RUNNING in ifp->if_flags, and then call + * ifq_clr_oactive() against each ifq. + * + * == if_start + * + * ifq_start() checks that IFF_RUNNING is set in ifp->if_flags, that + * ifq_is_oactive() does not return true, and that there are pending + * packets to transmit via a call to ifq_len(). Therefore, drivers are + * no longer responsible for doing this themselves. + * + * If a driver should not transmit packets while its link is down, use + * ifq_purge() to flush pending packets from the transmit queue. + * + * Drivers for hardware should use the following pattern to transmit + * packets: + * + * void + * drv_start(struct ifqueue *ifq) + * { + * struct drv_tx_ring *ring = ifq->ifq_softc; + * struct ifnet *ifp = ifq->ifq_if; + * struct drv_softc *sc = ifp->if_softc; + * struct mbuf *m; + * int kick = 0; + * + * if (NO_LINK) { + * ifq_purge(ifq); + * return; + * } + * + * for (;;) { + * if (NO_SPACE(ring)) { + * ifq_set_oactive(ifq); + * break; + * } + * + * m = ifq_dequeue(ifq); + * if (m == NULL) + * break; + * + * if (drv_encap(sc, ring, m) != 0) { // map and fill ring + * m_freem(m); + * continue; + * } + * + * bpf_mtap(); + * } + * + * drv_kick(ring); // notify hw of new descriptors on the ring + * } + * + * == Transmission completion + * + * The following pattern should be used for transmit queue interrupt + * processing: + * + * void + * drv_txeof(struct drv_tx_ring *ring) + * { + * struct ifqueue *ifq = ring->ifq; + * + * while (COMPLETED_PKTS(ring)) { + * // unmap packets, m_freem() the mbufs. + * } + * + * if (ifq_is_oactive(ifq)) + * ifq_restart(ifq); + * } + * + * == Stop + * + * Bringing an interface down (ie, IFF_UP was cleared in ifp->if_flags) + * should clear IFF_RUNNING in ifp->if_flags, and guarantee the start + * routine is not running before freeing any resources it uses: + * + * void + * drv_down(struct drv_softc *sc) + * { + * struct ifnet *ifp = &sc->sc_if; + * struct ifqueue *ifq; + * int i; + * + * CLR(ifp->if_flags, IFF_RUNNING); + * DISABLE_INTERRUPTS(); + * + * for (i = 0; i < sc->sc_num_queues; i++) { + * ifq = ifp->if_ifqs[i]; + * ifq_barrier(ifq); + * } + * + * intr_barrier(sc->sc_ih); + * + * FREE_RESOURCES(); + * + * for (i = 0; i < sc->sc_num_queues; i++) { + * ifq = ifp->if_ifqs[i]; + * ifq_clr_oactive(ifq); + * } + * } + * + */ + +struct ifq_ops { + unsigned int (*ifqop_idx)(unsigned int, + const struct mbuf *); + struct mbuf *(*ifqop_enq)(struct ifqueue *, struct mbuf *); + struct mbuf *(*ifqop_deq_begin)(struct ifqueue *, void **); + void (*ifqop_deq_commit)(struct ifqueue *, + struct mbuf *, void *); + void (*ifqop_purge)(struct ifqueue *, + struct mbuf_list *); + void *(*ifqop_alloc)(unsigned int, void *); + void (*ifqop_free)(unsigned int, void *); +}; + +extern const struct ifq_ops * const ifq_priq_ops; + +/* + * Interface send queues. + */ + +void ifq_init(struct ifqueue *, struct ifnet *, unsigned int); +void ifq_attach(struct ifqueue *, const struct ifq_ops *, void *); +void ifq_destroy(struct ifqueue *); +void ifq_add_data(struct ifqueue *, struct if_data *); +int ifq_enqueue(struct ifqueue *, struct mbuf *); +void ifq_start(struct ifqueue *); +struct mbuf *ifq_deq_begin(struct ifqueue *); +void ifq_deq_commit(struct ifqueue *, struct mbuf *); +void ifq_deq_rollback(struct ifqueue *, struct mbuf *); +struct mbuf *ifq_dequeue(struct ifqueue *); +int ifq_hdatalen(struct ifqueue *); +void ifq_init_maxlen(struct ifqueue *, unsigned int); +void ifq_mfreem(struct ifqueue *, struct mbuf *); +void ifq_mfreeml(struct ifqueue *, struct mbuf_list *); +unsigned int ifq_purge(struct ifqueue *); +void *ifq_q_enter(struct ifqueue *, const struct ifq_ops *); +void ifq_q_leave(struct ifqueue *, void *); +void ifq_serialize(struct ifqueue *, struct task *); +void ifq_barrier(struct ifqueue *); +void ifq_set_oactive(struct ifqueue *); +void ifq_deq_set_oactive(struct ifqueue *); + +int ifq_deq_sleep(struct ifqueue *, struct mbuf **, int, int, + const char *, volatile unsigned int *, + volatile unsigned int *); + +#define ifq_len(_ifq) READ_ONCE((_ifq)->ifq_len) +#define ifq_empty(_ifq) (ifq_len(_ifq) == 0) + +static inline int +ifq_is_priq(struct ifqueue *ifq) +{ + return (ifq->ifq_ops == ifq_priq_ops); +} + +static inline void +ifq_clr_oactive(struct ifqueue *ifq) +{ + ifq->ifq_oactive = 0; +} + +static inline unsigned int +ifq_is_oactive(struct ifqueue *ifq) +{ + return (ifq->ifq_oactive); +} + +static inline void +ifq_restart(struct ifqueue *ifq) +{ + ifq_serialize(ifq, &ifq->ifq_restart); +} + +static inline unsigned int +ifq_idx(struct ifqueue *ifq, unsigned int nifqs, const struct mbuf *m) +{ + return ((*ifq->ifq_ops->ifqop_idx)(nifqs, m)); +} + +/* ifiq */ + +void ifiq_init(struct ifiqueue *, struct ifnet *, unsigned int); +void ifiq_destroy(struct ifiqueue *); +int ifiq_input(struct ifiqueue *, struct mbuf_list *); +int ifiq_enqueue_qlim(struct ifiqueue *, struct mbuf *, + unsigned int); +void ifiq_add_data(struct ifiqueue *, struct if_data *); + +#define ifiq_len(_ifiq) READ_ONCE(ml_len(&(_ifiq)->ifiq_ml)) +#define ifiq_empty(_ifiq) (ifiq_len(_ifiq) == 0) + +static inline int +ifiq_enqueue(struct ifiqueue *ifiq, struct mbuf *m) +{ + return ifiq_enqueue_qlim(ifiq, m, 0); +} + +#endif /* _KERNEL */ + +#endif /* _NET_IFQ_H_ */ diff --git a/module/include/compat/net/radix.h b/module/include/compat/net/radix.h new file mode 100644 index 0000000..38b5714 --- /dev/null +++ b/module/include/compat/net/radix.h @@ -0,0 +1,75 @@ +/* PFLINUX compat: — OpenBSD 8.0 radix structures/API + * (rn_*), cleaned of BSD-only syntax. Implementation: compat/radix.c + * (ported from OpenBSD 8.0 sys/net/radix.c, task T10). */ +#ifndef _PFK_RADIX_H +#define _PFK_RADIX_H + +#include + +struct radix_mask; + +struct radix_node { + struct radix_mask *rn_mklist; + struct radix_node *rn_p; + short rn_b; + char rn_bmask; + u_char rn_flags; +#define RNF_NORMAL 1 +#define RNF_ROOT 2 +#define RNF_ACTIVE 4 + union { + struct { + caddr_t rn_Key; + caddr_t rn_Mask; + struct radix_node *rn_Dupedkey; + } rn_leaf; + struct { + int rn_Off; + struct radix_node *rn_L; + struct radix_node *rn_R; + } rn_node; + } rn_u; +}; + +#define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey +#define rn_key rn_u.rn_leaf.rn_Key +#define rn_mask rn_u.rn_leaf.rn_Mask +#define rn_off rn_u.rn_node.rn_Off +#define rn_l rn_u.rn_node.rn_L +#define rn_r rn_u.rn_node.rn_R + +struct radix_mask { + short rm_b; + char rm_unused; + u_char rm_flags; + struct radix_mask *rm_mklist; + union { + caddr_t rmu_mask; + struct radix_node *rmu_leaf; + } rm_rmu; + int rm_refs; +}; + +#define rm_mask rm_rmu.rmu_mask +#define rm_leaf rm_rmu.rmu_leaf + +struct radix_node_head { + struct radix_node *rnh_treetop; + int rnh_addrsize; + int rnh_pktsize; + struct radix_node rnh_nodes[3]; + u_int rnh_rtableid; +}; + +void rn_init(unsigned int); +int rn_inithead(void **, int); +int rn_walktree(struct radix_node_head *, + int (*)(struct radix_node *, void *, u_int), void *); +struct radix_node *rn_addroute(void *, void *, struct radix_node_head *, + struct radix_node [2], u_int8_t); +struct radix_node *rn_delete(void *, void *, struct radix_node_head *, + struct radix_node *); +struct radix_node *rn_lookup(void *, void *, struct radix_node_head *); +struct radix_node *rn_match(void *, struct radix_node_head *); + +#endif /* _PFK_RADIX_H_ */ diff --git a/module/include/compat/net/rtable.h b/module/include/compat/net/rtable.h new file mode 100644 index 0000000..d08edc3 --- /dev/null +++ b/module/include/compat/net/rtable.h @@ -0,0 +1,82 @@ +/* $OpenBSD: rtable.h,v 1.36 2025/07/15 09:55:49 dlg Exp $ */ + +/* + * Copyright (c) 2014-2016 Martin Pieuchot + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _NET_RTABLE_H_ +#define _NET_RTABLE_H_ + +#include + +struct art; + +/* + * Locks used to protect struct members in this file: + * I immutable after creation + * N net lock + */ + +struct rtable { + struct rwlock r_lock; + struct art *r_art; /* [I] */ + unsigned int r_off; /* [I] Offset of key in bytes */ + + struct sockaddr *r_source; /* [N] use optional src addr */ +}; + +/* + * Newer routing table implementation based on ART (Allotment Routing + * Table). + */ + +#define rt_key(rt) ((rt)->rt_dest) +#define rt_plen(rt) ((rt)->rt_plen) +#define RT_ROOT(rt) (0) + +int rtable_satoplen(sa_family_t, const struct sockaddr *); + +void rtable_init(void); +int rtable_exists(unsigned int); +int rtable_empty(unsigned int); +int rtable_add(unsigned int); +unsigned int rtable_l2(unsigned int); +unsigned int rtable_loindex(unsigned int); +void rtable_l2set(unsigned int, unsigned int, unsigned int); + +int rtable_setsource(unsigned int, int, struct sockaddr *); +struct sockaddr *rtable_getsource(unsigned int, int); +void rtable_clearsource(unsigned int, struct sockaddr *); +struct rtentry *rtable_lookup(unsigned int, const struct sockaddr *, + const struct sockaddr *, const struct sockaddr *, uint8_t); +struct rtentry *rtable_match(unsigned int, const struct sockaddr *, + uint32_t *); +struct rtentry *rtable_iterate(struct rtentry *); +int rtable_insert(unsigned int, struct sockaddr *, + const struct sockaddr *, const struct sockaddr *, uint8_t, + struct rtentry *); +int rtable_delete(unsigned int, const struct sockaddr *, + const struct sockaddr *, struct rtentry *); +int rtable_walk(unsigned int, sa_family_t, struct rtentry **, + int (*)(struct rtentry *, void *, unsigned int), void *); +int rtable_read(unsigned int, sa_family_t, + int (*)(const struct rtentry *, void *, unsigned int), + void *); + +int rtable_mpath_capable(unsigned int, sa_family_t); +int rtable_mpath_reprio(unsigned int, struct sockaddr *, int, + uint8_t, struct rtentry *); + +#endif /* _NET_RTABLE_H_ */ diff --git a/module/include/compat/net/toeplitz.h b/module/include/compat/net/toeplitz.h new file mode 100644 index 0000000..1eb6c3c --- /dev/null +++ b/module/include/compat/net/toeplitz.h @@ -0,0 +1,53 @@ +/* PFLINUX compat: — software Toeplitz hash (RFC 3305) + * with the OpenBSD API shape used by PF (global cache + stoeplitz_* macros). + * Implementation: compat/toeplitz.c (uses kernel crypto_shash "sha256"). */ +#ifndef _PFK_TOEPLITZ_H +#define _PFK_TOEPLITZ_H +#include + +#define TOEPLITZ_KEY_LEN 40 + +struct stoeplitz_cache { + u8 key[TOEPLITZ_KEY_LEN]; + u8 keyhash[32]; /* SHA256(key) */ + int initialized; +}; + +extern struct stoeplitz_cache *stoeplitz_cache; + +void stoeplitz_init(void); +void stoeplitz_cache_init(struct stoeplitz_cache *, const u8 *key); +uint16_t stoeplitz_hash_ip4(const struct stoeplitz_cache *, + const struct in_addr *, const struct in_addr *); +uint16_t stoeplitz_hash_ip4port(const struct stoeplitz_cache *, + const struct in_addr *, const struct in_addr *, + u16, u16); +uint16_t stoeplitz_hash_ip6(const struct stoeplitz_cache *, + const struct in6_addr *, const struct in6_addr *); +uint16_t stoeplitz_hash_ip6port(const struct stoeplitz_cache *, + const struct in6_addr *, const struct in6_addr *, + u16, u16); +uint16_t stoeplitz_hash_eaddr(const struct stoeplitz_cache *, + const u8 *); +uint16_t stoeplitz_hash_n16(const struct stoeplitz_cache *, u16); +uint16_t stoeplitz_hash_n32(const struct stoeplitz_cache *, u32); +uint16_t stoeplitz_hash_h16(const struct stoeplitz_cache *, u16); +uint16_t stoeplitz_hash_h32(const struct stoeplitz_cache *, u32); +uint16_t stoeplitz_hash_h64(const struct stoeplitz_cache *, u64); + +#define stoeplitz_n32(_n32) stoeplitz_hash_n32(stoeplitz_cache, (_n32)) +#define stoeplitz_h16(_h16) stoeplitz_hash_h16(stoeplitz_cache, (_h16)) +#define stoeplitz_h32(_h32) stoeplitz_hash_h32(stoeplitz_cache, (_h32)) +#define stoeplitz_h64(_h64) stoeplitz_hash_h64(stoeplitz_cache, (_h64)) +#define stoeplitz_ip4(_sa4, _da4) \ + stoeplitz_hash_ip4(stoeplitz_cache, (_sa4), (_da4)) +#define stoeplitz_ip4port(_sa4, _da4, _sp, _dp) \ + stoeplitz_hash_ip4port(stoeplitz_cache, (_sa4), (_da4), (_sp), (_dp)) +#define stoeplitz_ip6(_sa6, _da6) \ + stoeplitz_hash_ip6(stoeplitz_cache, (_sa6), (_da6)) +#define stoeplitz_ip6port(_sa6, _da6, _sp, _dp) \ + stoeplitz_hash_ip6port(stoeplitz_cache, (_sa6), (_da6), (_sp), (_dp)) +#define stoeplitz_eaddr(_ea) \ + stoeplitz_hash_eaddr(stoeplitz_cache, (_ea)) + +#endif diff --git a/module/include/compat/netinet/in.h b/module/include/compat/netinet/in.h new file mode 100644 index 0000000..ac5a2d4 --- /dev/null +++ b/module/include/compat/netinet/in.h @@ -0,0 +1,13 @@ +/* PFLINUX compat: */ +#ifndef _PFK_NETINET_IN_H +#define _PFK_NETINET_IN_H +#include +#include +/* BSD IP-level option numbers (Linux uapi uses different values) */ +#define PF_IP_OPTIONS 1 +#define PF_IP_RECORD_ROUTE 7 +#define PF_IP_TIMESTAMP 68 +#ifndef INADDR_MULTICAST +#define INADDR_MULTICAST 0xe0000000U +#endif +#endif diff --git a/module/include/compat/sys/_endian.h b/module/include/compat/sys/_endian.h new file mode 100644 index 0000000..e1ce82e --- /dev/null +++ b/module/include/compat/sys/_endian.h @@ -0,0 +1,179 @@ +/* $OpenBSD: _endian.h,v 1.8 2018/01/11 23:13:37 dlg Exp $ */ + +/*- + * Copyright (c) 1997 Niklas Hallqvist. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Internal endianness macros. This pulls in to + * get the correct setting direction for the platform and sets internal + * ('__' prefix) macros appropriately. + */ + +#ifndef _SYS__ENDIAN_H_ +#define _SYS__ENDIAN_H_ + +#include + +#define __FROM_SYS__ENDIAN +#include +#undef __FROM_SYS__ENDIAN + +#define _LITTLE_ENDIAN 1234 +#define _BIG_ENDIAN 4321 +#define _PDP_ENDIAN 3412 + +/* Note that these macros evaluate their arguments several times. */ + +#define __swap16gen(x) \ + (__uint16_t)(((__uint16_t)(x) & 0xffU) << 8 | ((__uint16_t)(x) & 0xff00U) >> 8) + +#define __swap32gen(x) \ + (__uint32_t)(((__uint32_t)(x) & 0xff) << 24 | \ + ((__uint32_t)(x) & 0xff00) << 8 | ((__uint32_t)(x) & 0xff0000) >> 8 |\ + ((__uint32_t)(x) & 0xff000000) >> 24) + +#define __swap64gen(x) \ + (__uint64_t)((((__uint64_t)(x) & 0xff) << 56) | \ + ((__uint64_t)(x) & 0xff00ULL) << 40 | \ + ((__uint64_t)(x) & 0xff0000ULL) << 24 | \ + ((__uint64_t)(x) & 0xff000000ULL) << 8 | \ + ((__uint64_t)(x) & 0xff00000000ULL) >> 8 | \ + ((__uint64_t)(x) & 0xff0000000000ULL) >> 24 | \ + ((__uint64_t)(x) & 0xff000000000000ULL) >> 40 | \ + ((__uint64_t)(x) & 0xff00000000000000ULL) >> 56) + +#ifndef __HAVE_MD_SWAP +static __inline __uint16_t +__swap16md(__uint16_t x) +{ + return (__swap16gen(x)); +} + +static __inline __uint32_t +__swap32md(__uint32_t x) +{ + return (__swap32gen(x)); +} + +static __inline __uint64_t +__swap64md(__uint64_t x) +{ + return (__swap64gen(x)); +} +#endif + +#define __swap16(x) \ + (__uint16_t)(__builtin_constant_p(x) ? __swap16gen(x) : __swap16md(x)) +#define __swap32(x) \ + (__uint32_t)(__builtin_constant_p(x) ? __swap32gen(x) : __swap32md(x)) +#define __swap64(x) \ + (__uint64_t)(__builtin_constant_p(x) ? __swap64gen(x) : __swap64md(x)) + +#if _BYTE_ORDER == _LITTLE_ENDIAN + +#define _QUAD_HIGHWORD 1 +#define _QUAD_LOWWORD 0 + +#define __htobe16 __swap16 +#define __htobe32 __swap32 +#define __htobe64 __swap64 +#define __htole16(x) ((__uint16_t)(x)) +#define __htole32(x) ((__uint32_t)(x)) +#define __htole64(x) ((__uint64_t)(x)) + +#ifdef _KERNEL +#ifdef __HAVE_MD_SWAPIO + +#define __bemtoh16(_x) __mswap16(_x) +#define __bemtoh32(_x) __mswap32(_x) +#define __bemtoh64(_x) __mswap64(_x) + +#define __htobem16(_x, _v) __swapm16((_x), (_v)) +#define __htobem32(_x, _v) __swapm32((_x), (_v)) +#define __htobem64(_x, _v) __swapm64((_x), (_v)) + +#endif /* __HAVE_MD_SWAPIO */ +#endif /* _KERNEL */ +#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ + +#if _BYTE_ORDER == _BIG_ENDIAN + +#define _QUAD_HIGHWORD 0 +#define _QUAD_LOWWORD 1 + +#define __htobe16(x) ((__uint16_t)(x)) +#define __htobe32(x) ((__uint32_t)(x)) +#define __htobe64(x) ((__uint64_t)(x)) +#define __htole16 __swap16 +#define __htole32 __swap32 +#define __htole64 __swap64 + +#ifdef _KERNEL +#ifdef __HAVE_MD_SWAPIO + +#define __lemtoh16(_x) __mswap16(_x) +#define __lemtoh32(_x) __mswap32(_x) +#define __lemtoh64(_x) __mswap64(_x) + +#define __htolem16(_x, _v) __swapm16((_x), (_v)) +#define __htolem32(_x, _v) __swapm32((_x), (_v)) +#define __htolem64(_x, _v) __swapm64((_x), (_v)) + +#endif /* __HAVE_MD_SWAPIO */ +#endif /* _KERNEL */ +#endif /* _BYTE_ORDER == _BIG_ENDIAN */ + + +#ifdef _KERNEL +/* + * Fill in the __hto[bl]em{16,32,64} and __[bl]emtoh{16,32,64} macros + * that haven't been defined yet + */ + +#ifndef __bemtoh16 +#define __bemtoh16(_x) __htobe16(*(__uint16_t *)(_x)) +#define __bemtoh32(_x) __htobe32(*(__uint32_t *)(_x)) +#define __bemtoh64(_x) __htobe64(*(__uint64_t *)(_x)) +#endif + +#ifndef __htobem16 +#define __htobem16(_x, _v) (*(__uint16_t *)(_x) = __htobe16(_v)) +#define __htobem32(_x, _v) (*(__uint32_t *)(_x) = __htobe32(_v)) +#define __htobem64(_x, _v) (*(__uint64_t *)(_x) = __htobe64(_v)) +#endif + +#ifndef __lemtoh16 +#define __lemtoh16(_x) __htole16(*(__uint16_t *)(_x)) +#define __lemtoh32(_x) __htole32(*(__uint32_t *)(_x)) +#define __lemtoh64(_x) __htole64(*(__uint64_t *)(_x)) +#endif + +#ifndef __htolem16 +#define __htolem16(_x, _v) (*(__uint16_t *)(_x) = __htole16(_v)) +#define __htolem32(_x, _v) (*(__uint32_t *)(_x) = __htole32(_v)) +#define __htolem64(_x, _v) (*(__uint64_t *)(_x) = __htole64(_v)) +#endif +#endif /* _KERNEL */ + +#endif /* _SYS__ENDIAN_H_ */ diff --git a/module/include/compat/sys/_null.h b/module/include/compat/sys/_null.h new file mode 100644 index 0000000..2de47f0 --- /dev/null +++ b/module/include/compat/sys/_null.h @@ -0,0 +1,7 @@ +/* PFLINUX compat: */ +#ifndef _SYS__NULL_H_ +#define _SYS__NULL_H_ +#ifndef NULL +#define NULL 0L +#endif +#endif diff --git a/module/include/compat/sys/cdefs.h b/module/include/compat/sys/cdefs.h new file mode 100644 index 0000000..5403ce3 --- /dev/null +++ b/module/include/compat/sys/cdefs.h @@ -0,0 +1,34 @@ +/* PFLINUX compat: minimal for queue.h/tree.h */ +#ifndef _PFK_CDEFS_H +#define _PFK_CDEFS_H +#include +#define __BEGIN_DECLS +#define __END_DECLS +#ifndef __aligned +#define __aligned(x) __attribute__((__aligned__(x))) +#endif +#ifndef __packed +#define __packed __attribute__((__packed__)) +#endif +#ifndef __unused +#define __unused __attribute__((__unused__)) +#endif +#ifndef __dead +#define __dead __attribute__((__noreturn__)) +#endif +#ifndef __predict_false +#define __predict_false(x) unlikely(x) +#endif +#ifndef __predict_true +#define __predict_true(x) likely(x) +#endif +#ifndef __arraycount +#define __arraycount(a) (sizeof(a)/sizeof((a)[0])) +#endif +#ifndef __predict +#define __predict(x, y) ((y) ? likely(x) : unlikely(x)) +#endif +#ifndef __restrict +#define __restrict +#endif +#endif diff --git a/module/include/compat/sys/endian.h b/module/include/compat/sys/endian.h new file mode 100644 index 0000000..6642dfe --- /dev/null +++ b/module/include/compat/sys/endian.h @@ -0,0 +1,6 @@ +/* PFLINUX compat: */ +#ifndef _PFK_SYS_ENDIAN_H +#define _PFK_SYS_ENDIAN_H +#include +#include +#endif diff --git a/module/include/compat/sys/param.h b/module/include/compat/sys/param.h new file mode 100644 index 0000000..f804c4e --- /dev/null +++ b/module/include/compat/sys/param.h @@ -0,0 +1,10 @@ +/* PFLINUX compat: */ +#ifndef _PFK_PARAM_H +#define _PFK_PARAM_H +#include +#define MAXHOSTNAMELEN 64 +#define NOFILE 256 +#define BSD 20260101 +#define BSD_VERSION BSD +#define NETBSD 0 +#endif diff --git a/module/include/compat/sys/queue.h b/module/include/compat/sys/queue.h new file mode 100644 index 0000000..0043af3 --- /dev/null +++ b/module/include/compat/sys/queue.h @@ -0,0 +1,633 @@ +/* $OpenBSD: queue.h,v 1.47 2026/06/12 01:04:42 millert Exp $ */ +/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */ + +/* + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + */ + +#ifndef _SYS_QUEUE_H_ +#define _SYS_QUEUE_H_ + +#include + +/* + * This file defines five types of data structures: singly-linked lists, + * lists, simple queues, tail queues and XOR simple queues. + * + * + * A singly-linked list is headed by a single forward pointer. The elements + * are singly linked for minimum space and pointer manipulation overhead at + * the expense of O(n) removal for arbitrary elements. New elements can be + * added to the list after an existing element or at the head of the list. + * Elements being removed from the head of the list should use the explicit + * macro for this purpose for optimum efficiency. A singly-linked list may + * only be traversed in the forward direction. Singly-linked lists are ideal + * for applications with large datasets and few or no removals or for + * implementing a LIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may only be traversed in the forward direction. + * + * A simple queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are singly + * linked to save space, so elements can only be removed from the + * head of the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the + * list. A simple queue may only be traversed in the forward direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * An XOR simple queue is used in the same way as a regular simple queue. + * The difference is that the head structure also includes a "cookie" that + * is XOR'd with the queue pointer (first, last or next) to generate the + * real pointer value. + * + * For details on the use of these macros, see the queue(3) manual page. + */ + +#if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) +#define _Q_INVALID ((void *)-1) +#define _Q_INVALIDATE(a) (a) = _Q_INVALID +#else +#define _Q_INVALIDATE(a) +#endif + +/* + * Singly-linked List definitions. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List access methods. + */ +#define SLIST_FIRST(head) ((head)->slh_first) +#define SLIST_END(head) NULL +#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + +#define SLIST_FOREACH(var, head, field) \ + for((var) = SLIST_FIRST(head); \ + (var) != SLIST_END(head); \ + (var) = SLIST_NEXT(var, field)) + +#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = SLIST_FIRST(head); \ + (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ + (var) = (tvar)) + +/* + * Singly-linked List functions. + */ +#define SLIST_INIT(head) { \ + SLIST_FIRST(head) = SLIST_END(head); \ +} + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + (elm)->field.sle_next = (slistelm)->field.sle_next; \ + (slistelm)->field.sle_next = (elm); \ +} while (0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.sle_next = (head)->slh_first; \ + (head)->slh_first = (elm); \ +} while (0) + +#define SLIST_REMOVE_AFTER(elm, field) do { \ + (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ +} while (0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + (head)->slh_first = (head)->slh_first->field.sle_next; \ +} while (0) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + if ((head)->slh_first == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } else { \ + struct type *curelm = (head)->slh_first; \ + \ + while (curelm->field.sle_next != (elm)) \ + curelm = curelm->field.sle_next; \ + curelm->field.sle_next = \ + curelm->field.sle_next->field.sle_next; \ + } \ + _Q_INVALIDATE((elm)->field.sle_next); \ +} while (0) + +/* + * List definitions. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List access methods. + */ +#define LIST_FIRST(head) ((head)->lh_first) +#define LIST_END(head) NULL +#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + +#define LIST_FOREACH(var, head, field) \ + for((var) = LIST_FIRST(head); \ + (var)!= LIST_END(head); \ + (var) = LIST_NEXT(var, field)) + +#define LIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = LIST_FIRST(head); \ + (var) && ((tvar) = LIST_NEXT(var, field), 1); \ + (var) = (tvar)) + +/* + * List functions. + */ +#define LIST_INIT(head) do { \ + LIST_FIRST(head) = LIST_END(head); \ +} while (0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ + (listelm)->field.le_next->field.le_prev = \ + &(elm)->field.le_next; \ + (listelm)->field.le_next = (elm); \ + (elm)->field.le_prev = &(listelm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + (elm)->field.le_next = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &(elm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.le_next = (head)->lh_first) != NULL) \ + (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ + (head)->lh_first = (elm); \ + (elm)->field.le_prev = &(head)->lh_first; \ +} while (0) + +#define LIST_REMOVE(elm, field) do { \ + if ((elm)->field.le_next != NULL) \ + (elm)->field.le_next->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = (elm)->field.le_next; \ + _Q_INVALIDATE((elm)->field.le_prev); \ + _Q_INVALIDATE((elm)->field.le_next); \ +} while (0) + +#define LIST_REPLACE(elm, elm2, field) do { \ + if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ + (elm2)->field.le_next->field.le_prev = \ + &(elm2)->field.le_next; \ + (elm2)->field.le_prev = (elm)->field.le_prev; \ + *(elm2)->field.le_prev = (elm2); \ + _Q_INVALIDATE((elm)->field.le_prev); \ + _Q_INVALIDATE((elm)->field.le_next); \ +} while (0) + +/* + * Simple queue definitions. + */ +#define SIMPLEQ_HEAD(name, type) \ +struct name { \ + struct type *sqh_first; /* first element */ \ + struct type **sqh_last; /* addr of last next element */ \ +} + +#define SIMPLEQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).sqh_first } + +#define SIMPLEQ_ENTRY(type) \ +struct { \ + struct type *sqe_next; /* next element */ \ +} + +/* + * Simple queue access methods. + */ +#define SIMPLEQ_FIRST(head) ((head)->sqh_first) +#define SIMPLEQ_END(head) NULL +#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) +#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) + +#define SIMPLEQ_FOREACH(var, head, field) \ + for((var) = SIMPLEQ_FIRST(head); \ + (var) != SIMPLEQ_END(head); \ + (var) = SIMPLEQ_NEXT(var, field)) + +#define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = SIMPLEQ_FIRST(head); \ + (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ + (var) = (tvar)) + +/* + * Simple queue functions. + */ +#define SIMPLEQ_INIT(head) do { \ + (head)->sqh_first = NULL; \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (head)->sqh_first = (elm); \ +} while (0) + +#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.sqe_next = NULL; \ + *(head)->sqh_last = (elm); \ + (head)->sqh_last = &(elm)->field.sqe_next; \ +} while (0) + +#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (listelm)->field.sqe_next = (elm); \ +} while (0) + +#define SIMPLEQ_REMOVE_HEAD(head, field) do { \ + if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +#define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ + if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \ + == NULL) \ + (head)->sqh_last = &(elm)->field.sqe_next; \ +} while (0) + +#define SIMPLEQ_CONCAT(head1, head2) do { \ + if (!SIMPLEQ_EMPTY((head2))) { \ + *(head1)->sqh_last = (head2)->sqh_first; \ + (head1)->sqh_last = (head2)->sqh_last; \ + SIMPLEQ_INIT((head2)); \ + } \ +} while (0) + +/* + * XOR Simple queue definitions. + */ +#define XSIMPLEQ_HEAD(name, type) \ +struct name { \ + struct type *sqx_first; /* first element */ \ + struct type **sqx_last; /* addr of last next element */ \ + unsigned long sqx_cookie; \ +} + +#define XSIMPLEQ_ENTRY(type) \ +struct { \ + struct type *sqx_next; /* next element */ \ +} + +/* + * XOR Simple queue access methods. + */ +#define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \ + (unsigned long)(ptr))) +#define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) +#define XSIMPLEQ_END(head) NULL +#define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) +#define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) + + +#define XSIMPLEQ_FOREACH(var, head, field) \ + for ((var) = XSIMPLEQ_FIRST(head); \ + (var) != XSIMPLEQ_END(head); \ + (var) = XSIMPLEQ_NEXT(head, var, field)) + +#define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = XSIMPLEQ_FIRST(head); \ + (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \ + (var) = (tvar)) + +/* + * XOR Simple queue functions. + */ +#define XSIMPLEQ_INIT(head) do { \ + arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \ + (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \ + (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ +} while (0) + +#define XSIMPLEQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.sqx_next = (head)->sqx_first) == \ + XSIMPLEQ_XOR(head, NULL)) \ + (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ + (head)->sqx_first = XSIMPLEQ_XOR(head, (elm)); \ +} while (0) + +#define XSIMPLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL); \ + *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \ + (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ +} while (0) + +#define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.sqx_next = (listelm)->field.sqx_next) == \ + XSIMPLEQ_XOR(head, NULL)) \ + (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ + (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm)); \ +} while (0) + +#define XSIMPLEQ_REMOVE_HEAD(head, field) do { \ + if (((head)->sqx_first = XSIMPLEQ_XOR(head, \ + (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \ + (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ +} while (0) + +#define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ + if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head, \ + (elm)->field.sqx_next)->field.sqx_next) \ + == XSIMPLEQ_XOR(head, NULL)) \ + (head)->sqx_last = \ + XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ +} while (0) + + +/* + * Tail queue definitions. + */ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first } + +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} + +/* + * Tail queue access methods. + */ +#define TAILQ_FIRST(head) ((head)->tqh_first) +#define TAILQ_END(head) NULL +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) +/* XXX */ +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) +#define TAILQ_EMPTY(head) \ + (TAILQ_FIRST(head) == TAILQ_END(head)) + +#define TAILQ_FOREACH(var, head, field) \ + for((var) = TAILQ_FIRST(head); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_NEXT(var, field)) + +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST(head); \ + (var) != TAILQ_END(head) && \ + ((tvar) = TAILQ_NEXT(var, field), 1); \ + (var) = (tvar)) + + +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for((var) = TAILQ_LAST(head, headname); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_PREV(var, headname, field)) + +#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ + for ((var) = TAILQ_LAST(head, headname); \ + (var) != TAILQ_END(head) && \ + ((tvar) = TAILQ_PREV(var, headname, field), 1); \ + (var) = (tvar)) + +/* + * Tail queue functions. + */ +#define TAILQ_INIT(head) do { \ + (head)->tqh_first = NULL; \ + (head)->tqh_last = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ + (head)->tqh_first->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (head)->tqh_first = (elm); \ + (elm)->field.tqe_prev = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ + (elm)->field.tqe_next->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (listelm)->field.tqe_next = (elm); \ + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_REMOVE(head, elm, field) do { \ + if (((elm)->field.tqe_next) != NULL) \ + (elm)->field.tqe_next->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ + _Q_INVALIDATE((elm)->field.tqe_prev); \ + _Q_INVALIDATE((elm)->field.tqe_next); \ +} while (0) + +#define TAILQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ + (elm2)->field.tqe_next->field.tqe_prev = \ + &(elm2)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm2)->field.tqe_next; \ + (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ + *(elm2)->field.tqe_prev = (elm2); \ + _Q_INVALIDATE((elm)->field.tqe_prev); \ + _Q_INVALIDATE((elm)->field.tqe_next); \ +} while (0) + +#define TAILQ_CONCAT(head1, head2, field) do { \ + if (!TAILQ_EMPTY(head2)) { \ + *(head1)->tqh_last = (head2)->tqh_first; \ + (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ + (head1)->tqh_last = (head2)->tqh_last; \ + TAILQ_INIT((head2)); \ + } \ +} while (0) + +/* + * Singly-linked Tail queue declarations. + */ +#define STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first; /* first element */ \ + struct type **stqh_last; /* addr of last next element */ \ +} + +#define STAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).stqh_first } + +#define STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + +/* + * Singly-linked Tail queue access methods. + */ +#define STAILQ_FIRST(head) ((head)->stqh_first) +#define STAILQ_END(head) NULL +#define STAILQ_EMPTY(head) (STAILQ_FIRST(head) == STAILQ_END(head)) +#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) + +#define STAILQ_FOREACH(var, head, field) \ + for ((var) = STAILQ_FIRST(head); \ + (var) != STAILQ_END(head); \ + (var) = STAILQ_NEXT(var, field)) + +#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = STAILQ_FIRST(head); \ + (var) && ((tvar) = STAILQ_NEXT(var, field), 1); \ + (var) = (tvar)) + +/* + * Singly-linked Tail queue functions. + */ +#define STAILQ_INIT(head) do { \ + STAILQ_FIRST((head)) = NULL; \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_INSERT_HEAD(head, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_FIRST((head)) = (elm); \ +} while (0) + +#define STAILQ_INSERT_TAIL(head, elm, field) do { \ + STAILQ_NEXT((elm), field) = NULL; \ + *(head)->stqh_last = (elm); \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ +} while (0) + +#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((listelm), field)) == NULL)\ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_NEXT((listelm), field) = (elm); \ +} while (0) + +#define STAILQ_REMOVE_HEAD(head, field) do { \ + if ((STAILQ_FIRST((head)) = \ + STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_REMOVE_AFTER(head, elm, field) do { \ + if ((STAILQ_NEXT(elm, field) = \ + STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ +} while (0) + +#define STAILQ_REMOVE(head, elm, type, field) do { \ + if (STAILQ_FIRST((head)) == (elm)) { \ + STAILQ_REMOVE_HEAD((head), field); \ + } else { \ + struct type *curelm = (head)->stqh_first; \ + while (STAILQ_NEXT(curelm, field) != (elm)) \ + curelm = STAILQ_NEXT(curelm, field); \ + STAILQ_REMOVE_AFTER(head, curelm, field); \ + } \ +} while (0) + +#define STAILQ_CONCAT(head1, head2) do { \ + if (!STAILQ_EMPTY((head2))) { \ + *(head1)->stqh_last = (head2)->stqh_first; \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_INIT((head2)); \ + } \ +} while (0) + +#define STAILQ_LAST(head, type, field) \ + (STAILQ_EMPTY((head)) ? NULL : \ + ((struct type *)(void *) \ + ((char *)((head)->stqh_last) - offsetof(struct type, field)))) + +#endif /* !_SYS_QUEUE_H_ */ diff --git a/module/include/compat/sys/refcnt.h b/module/include/compat/sys/refcnt.h new file mode 100644 index 0000000..aa58cd3 --- /dev/null +++ b/module/include/compat/sys/refcnt.h @@ -0,0 +1,38 @@ +/* PFLINUX compat: — refcount_t wrapper with OpenBSD API */ +#ifndef _PFK_REFCNT_H +#define _PFK_REFCNT_H +#include + +struct refcnt { refcount_t rc; }; +#define REFCNT_INITIALIZER { .rc = REFCNT_INIT } + +static inline void refcnt_init(struct refcnt *r, unsigned int v) +{ + refcount_set(&r->rc, v ? (int)v : 1); +} +static inline unsigned int refcnt_value(const struct refcnt *r) +{ + return refcount_read((refcount_t *)&r->rc); +} +static inline void refcnt_take(struct refcnt *r) +{ + refcount_inc(&r->rc); +} +/* returns true if ref was valid and taken (OpenBSD refcnt_take_if) */ +static inline bool refcnt_take_not0(struct refcnt *r) +{ + return refcount_inc_not_zero(&r->rc); +} +static inline unsigned int refcnt_rele(struct refcnt *r) +{ + return (unsigned int)refcount_dec_and_test(&r->rc) ? + refcnt_value(r) : refcnt_value(r) + 1; +} +static inline unsigned int refcnt_rele_wake(struct refcnt *r) +{ + return refcnt_rele(r); +} +static inline void refcnt_finalize(struct refcnt *r, const void *unused) +{ +} +#endif diff --git a/module/include/compat/sys/socket.h b/module/include/compat/sys/socket.h new file mode 100644 index 0000000..61951ca --- /dev/null +++ b/module/include/compat/sys/socket.h @@ -0,0 +1,46 @@ +/* PFLINUX compat: — BSD sockaddrs stay Linux-layout; + * sa_len fields are removed by the staging sed (see PORTING.md). + * Provides BSD sockaddr accessor macros + address family constants. */ +#ifndef _PFK_SOCKET_H +#define _PFK_SOCKET_H + +#include +struct pfk_sockaddr_union { + struct sockaddr_storage ss; +}; + +#define sintosa(x) ((struct sockaddr_in *)(void *)(x)) +#define sin6tosa(x) ((struct sockaddr_in6 *)(void *)(x)) +#define sa_tosa(x) ((struct sockaddr *)(void *)(x)) +#define satosa(x) ((struct sockaddr *)(void *)(x)) +#define satoxp(x) ((void *)(x)) /* unused; keep symbol */ +#define SA_LEN(x) (((x)->sa_family == AF_INET) ? \ + sizeof(struct sockaddr_in) : \ + ((x)->sa_family == AF_INET6) ? \ + sizeof(struct sockaddr_in6) : 16) +#define PFK_SA(x) ((struct sockaddr *)(x)) +#define PFK_INA(x) (&((struct sockaddr_in *)(x))->sin_addr) +#define PFK_SA6(x) ((struct sockaddr_in6 *)(x)) + +/* BSD sin_port/sin_addr == Linux: both network byte order fields */ +#ifndef SIN_IS_PRIVATE +#define SIN_IS_PRIVATE 1 +#endif +/* AF_INET6 == 10 on both sides */ +#ifndef AF_LINK +#define AF_LINK 18 /* OpenBSD value; used by pf for link sa */ +#endif + +static inline int pfk_sa_cmp(const struct sockaddr *a, const struct sockaddr *b) +{ + if (a->sa_family != b->sa_family) + return 1; + switch (a->sa_family) { + case AF_INET: + return memcmp(sintosa(a), sintosa(b), sizeof(struct sockaddr_in)); + case AF_INET6: + return memcmp(sin6tosa(a), sin6tosa(b), sizeof(struct sockaddr_in6)); + } + return 1; +} +#endif diff --git a/module/include/compat/sys/syslimits.h b/module/include/compat/sys/syslimits.h new file mode 100644 index 0000000..4900ccb --- /dev/null +++ b/module/include/compat/sys/syslimits.h @@ -0,0 +1,9 @@ +/* PFLINUX compat: */ +#ifndef _PFK_SYSLIMITS_H +#define _PFK_SYSLIMITS_H +#include +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif +#define MAXSYMLINKS 8 +#endif diff --git a/module/include/compat/sys/timeout.h b/module/include/compat/sys/timeout.h new file mode 100644 index 0000000..cace291 --- /dev/null +++ b/module/include/compat/sys/timeout.h @@ -0,0 +1,17 @@ +/* PFLINUX compat: */ +#ifndef _PFK_TIMEOUT_H +#define _PFK_TIMEOUT_H +#include +#include +typedef void (timeout_fn)(void *); +struct timeout { + struct timer_list timer; + struct work_struct work; + timeout_fn *fn; + void *arg; + unsigned long deadline_jif; + int period_ms; + int pending; + int running; +}; +#endif diff --git a/module/include/compat/sys/tree.h b/module/include/compat/sys/tree.h new file mode 100644 index 0000000..5ef8777 --- /dev/null +++ b/module/include/compat/sys/tree.h @@ -0,0 +1,1004 @@ +/* $OpenBSD: tree.h,v 1.31 2023/03/08 04:43:09 guenther Exp $ */ +/* + * Copyright 2002 Niels Provos + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _SYS_TREE_H_ +#define _SYS_TREE_H_ + +#include + +/* + * This file defines data structures for different types of trees: + * splay trees and red-black trees. + * + * A splay tree is a self-organizing data structure. Every operation + * on the tree causes a splay to happen. The splay moves the requested + * node to the root of the tree and partly rebalances it. + * + * This has the benefit that request locality causes faster lookups as + * the requested nodes move to the top of the tree. On the other hand, + * every lookup causes memory writes. + * + * The Balance Theorem bounds the total access time for m operations + * and n inserts on an initially empty tree as O((m + n)lg n). The + * amortized cost for a sequence of m accesses to a splay tree is O(lg n); + * + * A red-black tree is a binary search tree with the node color as an + * extra attribute. It fulfills a set of conditions: + * - every search path from the root to a leaf consists of the + * same number of black nodes, + * - each red node (except for the root) has a black parent, + * - each leaf node is black. + * + * Every operation on a red-black tree is bounded as O(lg n). + * The maximum height of a red-black tree is 2lg (n+1). + */ + +#define SPLAY_HEAD(name, type) \ +struct name { \ + struct type *sph_root; /* root of the tree */ \ +} + +#define SPLAY_INITIALIZER(root) \ + { NULL } + +#define SPLAY_INIT(root) do { \ + (root)->sph_root = NULL; \ +} while (0) + +#define SPLAY_ENTRY(type) \ +struct { \ + struct type *spe_left; /* left element */ \ + struct type *spe_right; /* right element */ \ +} + +#define SPLAY_LEFT(elm, field) (elm)->field.spe_left +#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right +#define SPLAY_ROOT(head) (head)->sph_root +#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) + +/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ +#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ + SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ + SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ + (head)->sph_root = tmp; \ +} while (0) + +#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ + SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ + SPLAY_LEFT(tmp, field) = (head)->sph_root; \ + (head)->sph_root = tmp; \ +} while (0) + +#define SPLAY_LINKLEFT(head, tmp, field) do { \ + SPLAY_LEFT(tmp, field) = (head)->sph_root; \ + tmp = (head)->sph_root; \ + (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ +} while (0) + +#define SPLAY_LINKRIGHT(head, tmp, field) do { \ + SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ + tmp = (head)->sph_root; \ + (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ +} while (0) + +#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ + SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ + SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\ + SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ + SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ +} while (0) + +/* Generates prototypes and inline functions */ + +#define SPLAY_PROTOTYPE(name, type, field, cmp) \ +void name##_SPLAY(struct name *, struct type *); \ +void name##_SPLAY_MINMAX(struct name *, int); \ +struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ +struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ + \ +/* Finds the node with the same key as elm */ \ +static __unused __inline struct type * \ +name##_SPLAY_FIND(struct name *head, struct type *elm) \ +{ \ + if (SPLAY_EMPTY(head)) \ + return(NULL); \ + name##_SPLAY(head, elm); \ + if ((cmp)(elm, (head)->sph_root) == 0) \ + return (head->sph_root); \ + return (NULL); \ +} \ + \ +static __unused __inline struct type * \ +name##_SPLAY_NEXT(struct name *head, struct type *elm) \ +{ \ + name##_SPLAY(head, elm); \ + if (SPLAY_RIGHT(elm, field) != NULL) { \ + elm = SPLAY_RIGHT(elm, field); \ + while (SPLAY_LEFT(elm, field) != NULL) { \ + elm = SPLAY_LEFT(elm, field); \ + } \ + } else \ + elm = NULL; \ + return (elm); \ +} \ + \ +static __unused __inline struct type * \ +name##_SPLAY_MIN_MAX(struct name *head, int val) \ +{ \ + name##_SPLAY_MINMAX(head, val); \ + return (SPLAY_ROOT(head)); \ +} + +/* Main splay operation. + * Moves node close to the key of elm to top + */ +#define SPLAY_GENERATE(name, type, field, cmp) \ +struct type * \ +name##_SPLAY_INSERT(struct name *head, struct type *elm) \ +{ \ + if (SPLAY_EMPTY(head)) { \ + SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ + } else { \ + int __comp; \ + name##_SPLAY(head, elm); \ + __comp = (cmp)(elm, (head)->sph_root); \ + if(__comp < 0) { \ + SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\ + SPLAY_RIGHT(elm, field) = (head)->sph_root; \ + SPLAY_LEFT((head)->sph_root, field) = NULL; \ + } else if (__comp > 0) { \ + SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\ + SPLAY_LEFT(elm, field) = (head)->sph_root; \ + SPLAY_RIGHT((head)->sph_root, field) = NULL; \ + } else \ + return ((head)->sph_root); \ + } \ + (head)->sph_root = (elm); \ + return (NULL); \ +} \ + \ +struct type * \ +name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ +{ \ + struct type *__tmp; \ + if (SPLAY_EMPTY(head)) \ + return (NULL); \ + name##_SPLAY(head, elm); \ + if ((cmp)(elm, (head)->sph_root) == 0) { \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ + (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\ + } else { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + (head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\ + name##_SPLAY(head, elm); \ + SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ + } \ + return (elm); \ + } \ + return (NULL); \ +} \ + \ +void \ +name##_SPLAY(struct name *head, struct type *elm) \ +{ \ + struct type __node, *__left, *__right, *__tmp; \ + int __comp; \ +\ + SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\ + __left = __right = &__node; \ +\ + while ((__comp = (cmp)(elm, (head)->sph_root))) { \ + if (__comp < 0) { \ + __tmp = SPLAY_LEFT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if ((cmp)(elm, __tmp) < 0){ \ + SPLAY_ROTATE_RIGHT(head, __tmp, field); \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL)\ + break; \ + } \ + SPLAY_LINKLEFT(head, __right, field); \ + } else if (__comp > 0) { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if ((cmp)(elm, __tmp) > 0){ \ + SPLAY_ROTATE_LEFT(head, __tmp, field); \ + if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\ + break; \ + } \ + SPLAY_LINKRIGHT(head, __left, field); \ + } \ + } \ + SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ +} \ + \ +/* Splay with either the minimum or the maximum element \ + * Used to find minimum or maximum element in tree. \ + */ \ +void name##_SPLAY_MINMAX(struct name *head, int __comp) \ +{ \ + struct type __node, *__left, *__right, *__tmp; \ +\ + SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\ + __left = __right = &__node; \ +\ + while (1) { \ + if (__comp < 0) { \ + __tmp = SPLAY_LEFT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if (__comp < 0){ \ + SPLAY_ROTATE_RIGHT(head, __tmp, field); \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL)\ + break; \ + } \ + SPLAY_LINKLEFT(head, __right, field); \ + } else if (__comp > 0) { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if (__comp > 0) { \ + SPLAY_ROTATE_LEFT(head, __tmp, field); \ + if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\ + break; \ + } \ + SPLAY_LINKRIGHT(head, __left, field); \ + } \ + } \ + SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ +} + +#define SPLAY_NEGINF -1 +#define SPLAY_INF 1 + +#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) +#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) +#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) +#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) +#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ + : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) +#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ + : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) + +#define SPLAY_FOREACH(x, name, head) \ + for ((x) = SPLAY_MIN(name, head); \ + (x) != NULL; \ + (x) = SPLAY_NEXT(name, head, x)) + +/* Macros that define a red-black tree */ +#define RB_HEAD(name, type) \ +struct name { \ + struct type *rbh_root; /* root of the tree */ \ +} + +#define RB_INITIALIZER(root) \ + { NULL } + +#define RB_INIT(root) do { \ + (root)->rbh_root = NULL; \ +} while (0) + +#define RB_BLACK 0 +#define RB_RED 1 +#define RB_ENTRY(type) \ +struct { \ + struct type *rbe_left; /* left element */ \ + struct type *rbe_right; /* right element */ \ + struct type *rbe_parent; /* parent element */ \ + int rbe_color; /* node color */ \ +} + +#define RB_LEFT(elm, field) (elm)->field.rbe_left +#define RB_RIGHT(elm, field) (elm)->field.rbe_right +#define RB_PARENT(elm, field) (elm)->field.rbe_parent +#define RB_COLOR(elm, field) (elm)->field.rbe_color +#define RB_ROOT(head) (head)->rbh_root +#define RB_EMPTY(head) (RB_ROOT(head) == NULL) + +#define RB_SET(elm, parent, field) do { \ + RB_PARENT(elm, field) = parent; \ + RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \ + RB_COLOR(elm, field) = RB_RED; \ +} while (0) + +#define RB_SET_BLACKRED(black, red, field) do { \ + RB_COLOR(black, field) = RB_BLACK; \ + RB_COLOR(red, field) = RB_RED; \ +} while (0) + +#ifndef RB_AUGMENT +#define RB_AUGMENT(x) do {} while (0) +#endif + +#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \ + (tmp) = RB_RIGHT(elm, field); \ + if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field))) { \ + RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \ + } \ + RB_AUGMENT(elm); \ + if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field))) { \ + if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ + RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ + else \ + RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ + } else \ + (head)->rbh_root = (tmp); \ + RB_LEFT(tmp, field) = (elm); \ + RB_PARENT(elm, field) = (tmp); \ + RB_AUGMENT(tmp); \ + if ((RB_PARENT(tmp, field))) \ + RB_AUGMENT(RB_PARENT(tmp, field)); \ +} while (0) + +#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \ + (tmp) = RB_LEFT(elm, field); \ + if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field))) { \ + RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \ + } \ + RB_AUGMENT(elm); \ + if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field))) { \ + if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ + RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ + else \ + RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ + } else \ + (head)->rbh_root = (tmp); \ + RB_RIGHT(tmp, field) = (elm); \ + RB_PARENT(elm, field) = (tmp); \ + RB_AUGMENT(tmp); \ + if ((RB_PARENT(tmp, field))) \ + RB_AUGMENT(RB_PARENT(tmp, field)); \ +} while (0) + +/* Generates prototypes and inline functions */ +#define RB_PROTOTYPE(name, type, field, cmp) \ + RB_PROTOTYPE_INTERNAL(name, type, field, cmp,) +#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \ + RB_PROTOTYPE_INTERNAL(name, type, field, cmp, __attribute__((__unused__)) static) +#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \ +attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \ +attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\ +attr struct type *name##_RB_REMOVE(struct name *, struct type *); \ +attr struct type *name##_RB_INSERT(struct name *, struct type *); \ +attr struct type *name##_RB_FIND(struct name *, struct type *); \ +attr struct type *name##_RB_NFIND(struct name *, struct type *); \ +attr struct type *name##_RB_NEXT(struct type *); \ +attr struct type *name##_RB_PREV(struct type *); \ +attr struct type *name##_RB_MINMAX(struct name *, int); \ + \ + +/* Main rb operation. + * Moves node close to the key of elm to top + */ +#define RB_GENERATE(name, type, field, cmp) \ + RB_GENERATE_INTERNAL(name, type, field, cmp,) +#define RB_GENERATE_STATIC(name, type, field, cmp) \ + RB_GENERATE_INTERNAL(name, type, field, cmp, __attribute__((__unused__)) static) +#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \ +attr void \ +name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \ +{ \ + struct type *parent, *gparent, *tmp; \ + while ((parent = RB_PARENT(elm, field)) && \ + RB_COLOR(parent, field) == RB_RED) { \ + gparent = RB_PARENT(parent, field); \ + if (parent == RB_LEFT(gparent, field)) { \ + tmp = RB_RIGHT(gparent, field); \ + if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ + RB_COLOR(tmp, field) = RB_BLACK; \ + RB_SET_BLACKRED(parent, gparent, field);\ + elm = gparent; \ + continue; \ + } \ + if (RB_RIGHT(parent, field) == elm) { \ + RB_ROTATE_LEFT(head, parent, tmp, field);\ + tmp = parent; \ + parent = elm; \ + elm = tmp; \ + } \ + RB_SET_BLACKRED(parent, gparent, field); \ + RB_ROTATE_RIGHT(head, gparent, tmp, field); \ + } else { \ + tmp = RB_LEFT(gparent, field); \ + if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ + RB_COLOR(tmp, field) = RB_BLACK; \ + RB_SET_BLACKRED(parent, gparent, field);\ + elm = gparent; \ + continue; \ + } \ + if (RB_LEFT(parent, field) == elm) { \ + RB_ROTATE_RIGHT(head, parent, tmp, field);\ + tmp = parent; \ + parent = elm; \ + elm = tmp; \ + } \ + RB_SET_BLACKRED(parent, gparent, field); \ + RB_ROTATE_LEFT(head, gparent, tmp, field); \ + } \ + } \ + RB_COLOR(head->rbh_root, field) = RB_BLACK; \ +} \ + \ +attr void \ +name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, struct type *elm) \ +{ \ + struct type *tmp; \ + while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \ + elm != RB_ROOT(head)) { \ + if (RB_LEFT(parent, field) == elm) { \ + tmp = RB_RIGHT(parent, field); \ + if (RB_COLOR(tmp, field) == RB_RED) { \ + RB_SET_BLACKRED(tmp, parent, field); \ + RB_ROTATE_LEFT(head, parent, tmp, field);\ + tmp = RB_RIGHT(parent, field); \ + } \ + if ((RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\ + (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\ + RB_COLOR(tmp, field) = RB_RED; \ + elm = parent; \ + parent = RB_PARENT(elm, field); \ + } else { \ + if (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) {\ + struct type *oleft; \ + if ((oleft = RB_LEFT(tmp, field)))\ + RB_COLOR(oleft, field) = RB_BLACK;\ + RB_COLOR(tmp, field) = RB_RED; \ + RB_ROTATE_RIGHT(head, tmp, oleft, field);\ + tmp = RB_RIGHT(parent, field); \ + } \ + RB_COLOR(tmp, field) = RB_COLOR(parent, field);\ + RB_COLOR(parent, field) = RB_BLACK; \ + if (RB_RIGHT(tmp, field)) \ + RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK;\ + RB_ROTATE_LEFT(head, parent, tmp, field);\ + elm = RB_ROOT(head); \ + break; \ + } \ + } else { \ + tmp = RB_LEFT(parent, field); \ + if (RB_COLOR(tmp, field) == RB_RED) { \ + RB_SET_BLACKRED(tmp, parent, field); \ + RB_ROTATE_RIGHT(head, parent, tmp, field);\ + tmp = RB_LEFT(parent, field); \ + } \ + if ((RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\ + (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\ + RB_COLOR(tmp, field) = RB_RED; \ + elm = parent; \ + parent = RB_PARENT(elm, field); \ + } else { \ + if (RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) {\ + struct type *oright; \ + if ((oright = RB_RIGHT(tmp, field)))\ + RB_COLOR(oright, field) = RB_BLACK;\ + RB_COLOR(tmp, field) = RB_RED; \ + RB_ROTATE_LEFT(head, tmp, oright, field);\ + tmp = RB_LEFT(parent, field); \ + } \ + RB_COLOR(tmp, field) = RB_COLOR(parent, field);\ + RB_COLOR(parent, field) = RB_BLACK; \ + if (RB_LEFT(tmp, field)) \ + RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK;\ + RB_ROTATE_RIGHT(head, parent, tmp, field);\ + elm = RB_ROOT(head); \ + break; \ + } \ + } \ + } \ + if (elm) \ + RB_COLOR(elm, field) = RB_BLACK; \ +} \ + \ +attr struct type * \ +name##_RB_REMOVE(struct name *head, struct type *elm) \ +{ \ + struct type *child, *parent, *old = elm; \ + int color; \ + if (RB_LEFT(elm, field) == NULL) \ + child = RB_RIGHT(elm, field); \ + else if (RB_RIGHT(elm, field) == NULL) \ + child = RB_LEFT(elm, field); \ + else { \ + struct type *left; \ + elm = RB_RIGHT(elm, field); \ + while ((left = RB_LEFT(elm, field))) \ + elm = left; \ + child = RB_RIGHT(elm, field); \ + parent = RB_PARENT(elm, field); \ + color = RB_COLOR(elm, field); \ + if (child) \ + RB_PARENT(child, field) = parent; \ + if (parent) { \ + if (RB_LEFT(parent, field) == elm) \ + RB_LEFT(parent, field) = child; \ + else \ + RB_RIGHT(parent, field) = child; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = child; \ + if (RB_PARENT(elm, field) == old) \ + parent = elm; \ + (elm)->field = (old)->field; \ + if (RB_PARENT(old, field)) { \ + if (RB_LEFT(RB_PARENT(old, field), field) == old)\ + RB_LEFT(RB_PARENT(old, field), field) = elm;\ + else \ + RB_RIGHT(RB_PARENT(old, field), field) = elm;\ + RB_AUGMENT(RB_PARENT(old, field)); \ + } else \ + RB_ROOT(head) = elm; \ + RB_PARENT(RB_LEFT(old, field), field) = elm; \ + if (RB_RIGHT(old, field)) \ + RB_PARENT(RB_RIGHT(old, field), field) = elm; \ + if (parent) { \ + left = parent; \ + do { \ + RB_AUGMENT(left); \ + } while ((left = RB_PARENT(left, field))); \ + } \ + goto color; \ + } \ + parent = RB_PARENT(elm, field); \ + color = RB_COLOR(elm, field); \ + if (child) \ + RB_PARENT(child, field) = parent; \ + if (parent) { \ + if (RB_LEFT(parent, field) == elm) \ + RB_LEFT(parent, field) = child; \ + else \ + RB_RIGHT(parent, field) = child; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = child; \ +color: \ + if (color == RB_BLACK) \ + name##_RB_REMOVE_COLOR(head, parent, child); \ + return (old); \ +} \ + \ +/* Inserts a node into the RB tree */ \ +attr struct type * \ +name##_RB_INSERT(struct name *head, struct type *elm) \ +{ \ + struct type *tmp; \ + struct type *parent = NULL; \ + int comp = 0; \ + tmp = RB_ROOT(head); \ + while (tmp) { \ + parent = tmp; \ + comp = (cmp)(elm, parent); \ + if (comp < 0) \ + tmp = RB_LEFT(tmp, field); \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + RB_SET(elm, parent, field); \ + if (parent != NULL) { \ + if (comp < 0) \ + RB_LEFT(parent, field) = elm; \ + else \ + RB_RIGHT(parent, field) = elm; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = elm; \ + name##_RB_INSERT_COLOR(head, elm); \ + return (NULL); \ +} \ + \ +/* Finds the node with the same key as elm */ \ +attr struct type * \ +name##_RB_FIND(struct name *head, struct type *elm) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + int comp; \ + while (tmp) { \ + comp = cmp(elm, tmp); \ + if (comp < 0) \ + tmp = RB_LEFT(tmp, field); \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + return (NULL); \ +} \ + \ +/* Finds the first node greater than or equal to the search key */ \ +attr struct type * \ +name##_RB_NFIND(struct name *head, struct type *elm) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + struct type *res = NULL; \ + int comp; \ + while (tmp) { \ + comp = cmp(elm, tmp); \ + if (comp < 0) { \ + res = tmp; \ + tmp = RB_LEFT(tmp, field); \ + } \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + return (res); \ +} \ + \ +attr struct type * \ +name##_RB_NEXT(struct type *elm) \ +{ \ + if (RB_RIGHT(elm, field)) { \ + elm = RB_RIGHT(elm, field); \ + while (RB_LEFT(elm, field)) \ + elm = RB_LEFT(elm, field); \ + } else { \ + if (RB_PARENT(elm, field) && \ + (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + else { \ + while (RB_PARENT(elm, field) && \ + (elm == RB_RIGHT(RB_PARENT(elm, field), field)))\ + elm = RB_PARENT(elm, field); \ + elm = RB_PARENT(elm, field); \ + } \ + } \ + return (elm); \ +} \ + \ +attr struct type * \ +name##_RB_PREV(struct type *elm) \ +{ \ + if (RB_LEFT(elm, field)) { \ + elm = RB_LEFT(elm, field); \ + while (RB_RIGHT(elm, field)) \ + elm = RB_RIGHT(elm, field); \ + } else { \ + if (RB_PARENT(elm, field) && \ + (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + else { \ + while (RB_PARENT(elm, field) && \ + (elm == RB_LEFT(RB_PARENT(elm, field), field)))\ + elm = RB_PARENT(elm, field); \ + elm = RB_PARENT(elm, field); \ + } \ + } \ + return (elm); \ +} \ + \ +attr struct type * \ +name##_RB_MINMAX(struct name *head, int val) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + struct type *parent = NULL; \ + while (tmp) { \ + parent = tmp; \ + if (val < 0) \ + tmp = RB_LEFT(tmp, field); \ + else \ + tmp = RB_RIGHT(tmp, field); \ + } \ + return (parent); \ +} + +#define RB_NEGINF -1 +#define RB_INF 1 + +#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y) +#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) +#define RB_FIND(name, x, y) name##_RB_FIND(x, y) +#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y) +#define RB_NEXT(name, x, y) name##_RB_NEXT(y) +#define RB_PREV(name, x, y) name##_RB_PREV(y) +#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) +#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) + +#define RB_FOREACH(x, name, head) \ + for ((x) = RB_MIN(name, head); \ + (x) != NULL; \ + (x) = name##_RB_NEXT(x)) + +#define RB_FOREACH_SAFE(x, name, head, y) \ + for ((x) = RB_MIN(name, head); \ + ((x) != NULL) && ((y) = name##_RB_NEXT(x), 1); \ + (x) = (y)) + +#define RB_FOREACH_REVERSE(x, name, head) \ + for ((x) = RB_MAX(name, head); \ + (x) != NULL; \ + (x) = name##_RB_PREV(x)) + +#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \ + for ((x) = RB_MAX(name, head); \ + ((x) != NULL) && ((y) = name##_RB_PREV(x), 1); \ + (x) = (y)) + + +/* + * Copyright (c) 2016 David Gwynne + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +struct rb_type { + int (*t_compare)(const void *, const void *); + void (*t_augment)(void *); + unsigned int t_offset; /* offset of rb_entry in type */ +}; + +struct rb_tree { + struct rb_entry *rbt_root; +}; + +struct rb_entry { + struct rb_entry *rbt_parent; + struct rb_entry *rbt_left; + struct rb_entry *rbt_right; + unsigned int rbt_color; +}; + +#define RBT_HEAD(_name, _type) \ +struct _name { \ + struct rb_tree rbh_root; \ +} + +#define RBT_ENTRY(_type) struct rb_entry + +static inline void +_rb_init(struct rb_tree *rbt) +{ + rbt->rbt_root = NULL; +} + +static inline int +_rb_empty(struct rb_tree *rbt) +{ + return (rbt->rbt_root == NULL); +} + +void *_rb_insert(const struct rb_type *, struct rb_tree *, void *); +void *_rb_remove(const struct rb_type *, struct rb_tree *, void *); +void *_rb_find(const struct rb_type *, struct rb_tree *, const void *); +void *_rb_nfind(const struct rb_type *, struct rb_tree *, const void *); +void *_rb_root(const struct rb_type *, struct rb_tree *); +void *_rb_min(const struct rb_type *, struct rb_tree *); +void *_rb_max(const struct rb_type *, struct rb_tree *); +void *_rb_next(const struct rb_type *, void *); +void *_rb_prev(const struct rb_type *, void *); +void *_rb_left(const struct rb_type *, void *); +void *_rb_right(const struct rb_type *, void *); +void *_rb_parent(const struct rb_type *, void *); +void _rb_set_left(const struct rb_type *, void *, void *); +void _rb_set_right(const struct rb_type *, void *, void *); +void _rb_set_parent(const struct rb_type *, void *, void *); +void _rb_poison(const struct rb_type *, void *, unsigned long); +int _rb_check(const struct rb_type *, void *, unsigned long); + +#define RBT_INITIALIZER(_head) { { NULL } } + +#define RBT_PROTOTYPE(_name, _type, _field, _cmp) \ +extern const struct rb_type *const _name##_RBT_TYPE; \ + \ +__unused static inline void \ +_name##_RBT_INIT(struct _name *head) \ +{ \ + _rb_init(&head->rbh_root); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_INSERT(struct _name *head, struct _type *elm) \ +{ \ + return _rb_insert(_name##_RBT_TYPE, &head->rbh_root, elm); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_REMOVE(struct _name *head, struct _type *elm) \ +{ \ + return _rb_remove(_name##_RBT_TYPE, &head->rbh_root, elm); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_FIND(struct _name *head, const struct _type *key) \ +{ \ + return _rb_find(_name##_RBT_TYPE, &head->rbh_root, key); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_NFIND(struct _name *head, const struct _type *key) \ +{ \ + return _rb_nfind(_name##_RBT_TYPE, &head->rbh_root, key); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_ROOT(struct _name *head) \ +{ \ + return _rb_root(_name##_RBT_TYPE, &head->rbh_root); \ +} \ + \ +__unused static inline int \ +_name##_RBT_EMPTY(struct _name *head) \ +{ \ + return _rb_empty(&head->rbh_root); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_MIN(struct _name *head) \ +{ \ + return _rb_min(_name##_RBT_TYPE, &head->rbh_root); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_MAX(struct _name *head) \ +{ \ + return _rb_max(_name##_RBT_TYPE, &head->rbh_root); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_NEXT(struct _type *elm) \ +{ \ + return _rb_next(_name##_RBT_TYPE, elm); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_PREV(struct _type *elm) \ +{ \ + return _rb_prev(_name##_RBT_TYPE, elm); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_LEFT(struct _type *elm) \ +{ \ + return _rb_left(_name##_RBT_TYPE, elm); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_RIGHT(struct _type *elm) \ +{ \ + return _rb_right(_name##_RBT_TYPE, elm); \ +} \ + \ +__unused static inline struct _type * \ +_name##_RBT_PARENT(struct _type *elm) \ +{ \ + return _rb_parent(_name##_RBT_TYPE, elm); \ +} \ + \ +__unused static inline void \ +_name##_RBT_SET_LEFT(struct _type *elm, struct _type *left) \ +{ \ + _rb_set_left(_name##_RBT_TYPE, elm, left); \ +} \ + \ +__unused static inline void \ +_name##_RBT_SET_RIGHT(struct _type *elm, struct _type *right) \ +{ \ + _rb_set_right(_name##_RBT_TYPE, elm, right); \ +} \ + \ +__unused static inline void \ +_name##_RBT_SET_PARENT(struct _type *elm, struct _type *parent) \ +{ \ + _rb_set_parent(_name##_RBT_TYPE, elm, parent); \ +} \ + \ +__unused static inline void \ +_name##_RBT_POISON(struct _type *elm, unsigned long poison) \ +{ \ + _rb_poison(_name##_RBT_TYPE, elm, poison); \ +} \ + \ +__unused static inline int \ +_name##_RBT_CHECK(struct _type *elm, unsigned long poison) \ +{ \ + return _rb_check(_name##_RBT_TYPE, elm, poison); \ +} + +#define RBT_GENERATE_INTERNAL(_name, _type, _field, _cmp, _aug) \ +static int \ +_name##_RBT_COMPARE(const void *lptr, const void *rptr) \ +{ \ + const struct _type *l = lptr, *r = rptr; \ + return _cmp(l, r); \ +} \ +static const struct rb_type _name##_RBT_INFO = { \ + _name##_RBT_COMPARE, \ + _aug, \ + offsetof(struct _type, _field), \ +}; \ +const struct rb_type *const _name##_RBT_TYPE = &_name##_RBT_INFO + +#define RBT_GENERATE_AUGMENT(_name, _type, _field, _cmp, _aug) \ +static void \ +_name##_RBT_AUGMENT(void *ptr) \ +{ \ + struct _type *p = ptr; \ + return _aug(p); \ +} \ +RBT_GENERATE_INTERNAL(_name, _type, _field, _cmp, _name##_RBT_AUGMENT) + +#define RBT_GENERATE(_name, _type, _field, _cmp) \ + RBT_GENERATE_INTERNAL(_name, _type, _field, _cmp, NULL) + +#define RBT_INIT(_name, _head) _name##_RBT_INIT(_head) +#define RBT_INSERT(_name, _head, _elm) _name##_RBT_INSERT(_head, _elm) +#define RBT_REMOVE(_name, _head, _elm) _name##_RBT_REMOVE(_head, _elm) +#define RBT_FIND(_name, _head, _key) _name##_RBT_FIND(_head, _key) +#define RBT_NFIND(_name, _head, _key) _name##_RBT_NFIND(_head, _key) +#define RBT_ROOT(_name, _head) _name##_RBT_ROOT(_head) +#define RBT_EMPTY(_name, _head) _name##_RBT_EMPTY(_head) +#define RBT_MIN(_name, _head) _name##_RBT_MIN(_head) +#define RBT_MAX(_name, _head) _name##_RBT_MAX(_head) +#define RBT_NEXT(_name, _elm) _name##_RBT_NEXT(_elm) +#define RBT_PREV(_name, _elm) _name##_RBT_PREV(_elm) +#define RBT_LEFT(_name, _elm) _name##_RBT_LEFT(_elm) +#define RBT_RIGHT(_name, _elm) _name##_RBT_RIGHT(_elm) +#define RBT_PARENT(_name, _elm) _name##_RBT_PARENT(_elm) +#define RBT_SET_LEFT(_name, _elm, _l) _name##_RBT_SET_LEFT(_elm, _l) +#define RBT_SET_RIGHT(_name, _elm, _r) _name##_RBT_SET_RIGHT(_elm, _r) +#define RBT_SET_PARENT(_name, _elm, _p) _name##_RBT_SET_PARENT(_elm, _p) +#define RBT_POISON(_name, _elm, _p) _name##_RBT_POISON(_elm, _p) +#define RBT_CHECK(_name, _elm, _p) _name##_RBT_CHECK(_elm, _p) + +#define RBT_FOREACH(_e, _name, _head) \ + for ((_e) = RBT_MIN(_name, (_head)); \ + (_e) != NULL; \ + (_e) = RBT_NEXT(_name, (_e))) + +#define RBT_FOREACH_SAFE(_e, _name, _head, _n) \ + for ((_e) = RBT_MIN(_name, (_head)); \ + (_e) != NULL && ((_n) = RBT_NEXT(_name, (_e)), 1); \ + (_e) = (_n)) + +#define RBT_FOREACH_REVERSE(_e, _name, _head) \ + for ((_e) = RBT_MAX(_name, (_head)); \ + (_e) != NULL; \ + (_e) = RBT_PREV(_name, (_e))) + +#define RBT_FOREACH_REVERSE_SAFE(_e, _name, _head, _n) \ + for ((_e) = RBT_MAX(_name, (_head)); \ + (_e) != NULL && ((_n) = RBT_PREV(_name, (_e)), 1); \ + (_e) = (_n)) + +#endif /* _SYS_TREE_H_ */ diff --git a/module/include/compat/sys/types.h b/module/include/compat/sys/types.h new file mode 100644 index 0000000..335d508 --- /dev/null +++ b/module/include/compat/sys/types.h @@ -0,0 +1,6 @@ +/* PFLINUX compat: */ +#ifndef _PFK_SYS_TYPES_H +#define _PFK_SYS_TYPES_H +#include +typedef unsigned long u_long; +#endif diff --git a/module/include/net/pfvar.h b/module/include/net/pfvar.h new file mode 100644 index 0000000..750fe0e --- /dev/null +++ b/module/include/net/pfvar.h @@ -0,0 +1,2036 @@ +/* $OpenBSD: pfvar.h,v 1.548 2026/02/05 03:26:00 dlg Exp $ */ + +/* + * Copyright (c) 2001 Daniel Hartmeier + * Copyright (c) 2002 - 2013 Henning Brauer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef _NET_PFVAR_H_ +#define _NET_PFVAR_H_ + +#include +#include +#include +#include +#include + +#include + +#include +#include + +struct ip; +struct ip6_hdr; +struct mbuf_list; + +#define PF_TCPS_PROXY_SRC ((TCP_NSTATES)+0) +#define PF_TCPS_PROXY_DST ((TCP_NSTATES)+1) + +#define PF_MD5_DIGEST_LENGTH 16 +#ifdef MD5_DIGEST_LENGTH +#if PF_MD5_DIGEST_LENGTH != MD5_DIGEST_LENGTH +#error md5 digest length mismatch +#endif +#endif + +typedef struct refcnt pf_refcnt_t; +#define PF_REF_INIT(_x) refcnt_init(&(_x)) +#define PF_REF_TAKE(_x) refcnt_take(&(_x)) +#define PF_REF_RELE(_x) refcnt_rele(&(_x)) + +enum { PF_INOUT, PF_IN, PF_OUT, PF_FWD }; +enum { PF_PASS, PF_DROP, PF_SCRUB, PF_NOSCRUB, PF_NAT, PF_NONAT, + PF_BINAT, PF_NOBINAT, PF_RDR, PF_NORDR, PF_SYNPROXY_DROP, PF_DEFER, + PF_MATCH, PF_DIVERT, PF_RT, PF_AFRT }; +enum { PF_TRANS_RULESET, PF_TRANS_TABLE }; +enum { PF_OP_NONE, PF_OP_IRG, PF_OP_EQ, PF_OP_NE, PF_OP_LT, + PF_OP_LE, PF_OP_GT, PF_OP_GE, PF_OP_XRG, PF_OP_RRG }; +enum { PF_CHANGE_NONE, PF_CHANGE_ADD_HEAD, PF_CHANGE_ADD_TAIL, + PF_CHANGE_ADD_BEFORE, PF_CHANGE_ADD_AFTER, + PF_CHANGE_REMOVE, PF_CHANGE_GET_TICKET }; +enum { PF_GET_NONE, PF_GET_CLR_CNTR }; +enum { PF_SK_WIRE, PF_SK_STACK, PF_SK_BOTH }; +enum { PF_PEER_SRC, PF_PEER_DST, PF_PEER_BOTH }; + +/* + * Note about PFTM_*: real indices into pf_rule.timeout[] come before + * PFTM_MAX, special cases afterwards. See pf_state_expires(). + */ +enum { PFTM_TCP_FIRST_PACKET, PFTM_TCP_OPENING, PFTM_TCP_ESTABLISHED, + PFTM_TCP_CLOSING, PFTM_TCP_FIN_WAIT, PFTM_TCP_CLOSED, + PFTM_UDP_FIRST_PACKET, PFTM_UDP_SINGLE, PFTM_UDP_MULTIPLE, + PFTM_ICMP_FIRST_PACKET, PFTM_ICMP_ERROR_REPLY, + PFTM_OTHER_FIRST_PACKET, PFTM_OTHER_SINGLE, + PFTM_OTHER_MULTIPLE, PFTM_FRAG, PFTM_INTERVAL, + PFTM_ADAPTIVE_START, PFTM_ADAPTIVE_END, PFTM_SRC_NODE, + PFTM_TS_DIFF, PFTM_MAX, PFTM_PURGE, PFTM_UNLINKED }; + +/* PFTM default values */ +#define PFTM_TCP_FIRST_PACKET_VAL 120 /* First TCP packet */ +#define PFTM_TCP_OPENING_VAL 30 /* No response yet */ +#define PFTM_TCP_ESTABLISHED_VAL 24*60*60/* Established */ +#define PFTM_TCP_CLOSING_VAL 15 * 60 /* Half closed */ +#define PFTM_TCP_FIN_WAIT_VAL 45 /* Got both FINs */ +#define PFTM_TCP_CLOSED_VAL 90 /* Got a RST */ +#define PFTM_UDP_FIRST_PACKET_VAL 60 /* First UDP packet */ +#define PFTM_UDP_SINGLE_VAL 30 /* Unidirectional */ +#define PFTM_UDP_MULTIPLE_VAL 60 /* Bidirectional */ +#define PFTM_ICMP_FIRST_PACKET_VAL 20 /* First ICMP packet */ +#define PFTM_ICMP_ERROR_REPLY_VAL 10 /* Got error response */ +#define PFTM_OTHER_FIRST_PACKET_VAL 60 /* First packet */ +#define PFTM_OTHER_SINGLE_VAL 30 /* Unidirectional */ +#define PFTM_OTHER_MULTIPLE_VAL 60 /* Bidirectional */ +#define PFTM_FRAG_VAL 60 /* Fragment expire */ +#define PFTM_INTERVAL_VAL 10 /* Expire interval */ +#define PFTM_SRC_NODE_VAL 0 /* Source tracking */ +#define PFTM_TS_DIFF_VAL 30 /* Allowed TS diff */ + +/* + * For each connection (combination of proto,src,dst,af) the number + * of fragments is limited. Over the PFTM_FRAG interval the average + * rate must be less than PF_FRAG_STALE fragments per second. + * Otherwise older fragments are considered stale and are dropped. + */ +#define PF_FRAG_STALE 200 + +/* + * Limit the length of the fragment queue traversal. Remember + * search entry points based on the fragment offset. + */ +#define PF_FRAG_ENTRY_POINTS 16 + +/* + * The number of entries in the fragment queue must be limited + * to avoid DoS by linear searching. Instead of a global limit, + * use a limit per entry point. For large packets these sum up. + */ +#define PF_FRAG_ENTRY_LIMIT 64 + +enum { PF_NOPFROUTE, PF_ROUTETO, PF_DUPTO, PF_REPLYTO }; +enum { PF_LIMIT_STATES, PF_LIMIT_SRC_NODES, PF_LIMIT_FRAGS, + PF_LIMIT_TABLES, PF_LIMIT_TABLE_ENTRIES, PF_LIMIT_PKTDELAY_PKTS, + PF_LIMIT_ANCHORS, PF_LIMIT_MAX }; +#define PF_POOL_IDMASK 0x0f +enum { PF_POOL_NONE, PF_POOL_BITMASK, PF_POOL_RANDOM, + PF_POOL_SRCHASH, PF_POOL_ROUNDROBIN, PF_POOL_LEASTSTATES }; +enum { PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL, + PF_ADDR_TABLE, PF_ADDR_RTLABEL, PF_ADDR_URPFFAILED, + PF_ADDR_RANGE, PF_ADDR_NONE }; +#define PF_POOL_TYPEMASK 0x0f +#define PF_POOL_STICKYADDR 0x20 +#define PF_WSCALE_FLAG 0x80 +#define PF_WSCALE_MASK 0x0f + +#define PF_POOL_DYNTYPE(_o) \ + ((((_o) & PF_POOL_TYPEMASK) == PF_POOL_ROUNDROBIN) || \ + (((_o) & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) || \ + (((_o) & PF_POOL_TYPEMASK) == PF_POOL_RANDOM) || \ + (((_o) & PF_POOL_TYPEMASK) == PF_POOL_SRCHASH)) + +#define PF_LOG 0x01 +#define PF_LOG_ALL 0x02 +#define PF_LOG_USER 0x04 +#define PF_LOG_FORCE 0x08 +#define PF_LOG_MATCHES 0x10 + +struct pf_addr { + union { + struct in_addr v4; + struct in6_addr v6; + u_int8_t addr8[16]; + u_int16_t addr16[8]; + u_int32_t addr32[4]; + } pfa; /* 128-bit address */ +#define v4 pfa.v4 +#define v6 pfa.v6 +#define addr8 pfa.addr8 +#define addr16 pfa.addr16 +#define addr32 pfa.addr32 +}; + +#define PF_TABLE_NAME_SIZE 32 + +#define PFI_AFLAG_NETWORK 0x01 +#define PFI_AFLAG_BROADCAST 0x02 +#define PFI_AFLAG_PEER 0x04 +#define PFI_AFLAG_MODEMASK 0x07 +#define PFI_AFLAG_NOALIAS 0x08 + +struct pf_addr_wrap { + union { + struct { + struct pf_addr addr; + struct pf_addr mask; + } a; + char ifname[IFNAMSIZ]; + char tblname[PF_TABLE_NAME_SIZE]; + char rtlabelname[RTLABEL_LEN]; + u_int32_t rtlabel; + } v; + union { + struct pfi_dynaddr *dyn; + struct pfr_ktable *tbl; + int dyncnt; + int tblcnt; + } p; + u_int8_t type; /* PF_ADDR_* */ + u_int8_t iflags; /* PFI_AFLAG_* */ +}; + +#ifdef _KERNEL +struct pfi_dynaddr { + TAILQ_ENTRY(pfi_dynaddr) entry; + struct pf_addr pfid_addr4; + struct pf_addr pfid_mask4; + struct pf_addr pfid_addr6; + struct pf_addr pfid_mask6; + struct pfr_ktable *pfid_kt; + struct pfi_kif *pfid_kif; + void *pfid_hook_cookie; + int pfid_net; /* mask or 128 */ + int pfid_acnt4; /* address count IPv4 */ + int pfid_acnt6; /* address count IPv6 */ + sa_family_t pfid_af; /* rule af */ + u_int8_t pfid_iflags; /* PFI_AFLAG_* */ +}; +#endif /* _KERNEL */ + + +/* + * Logging macros + */ + +#ifndef PF_DEBUGNAME +#define PF_DEBUGNAME "pf: " +#endif + +#ifdef _KERNEL +#define DPFPRINTF(n, format, x...) \ + do { \ + if (pf_status.debug >= (n)) { \ + log(n, PF_DEBUGNAME); \ + addlog(format, ##x); \ + addlog("\n"); \ + } \ + } while (0) +#else +#ifdef PFDEBUG +#define DPFPRINTF(n, format, x...) \ + do { \ + fprintf(stderr, format, ##x); \ + fprintf(stderr, "\n"); \ + } while (0) +#else +#define DPFPRINTF(n, format, x...) ((void)0) +#endif /* PFDEBUG */ +#endif /* _KERNEL */ + + +/* + * Address manipulation macros + */ + +#define PF_AEQ(a, b, c) \ + ((c == AF_INET && (a)->addr32[0] == (b)->addr32[0]) || \ + (c == AF_INET6 && \ + (a)->addr32[3] == (b)->addr32[3] && \ + (a)->addr32[2] == (b)->addr32[2] && \ + (a)->addr32[1] == (b)->addr32[1] && \ + (a)->addr32[0] == (b)->addr32[0])) \ + +#define PF_ANEQ(a, b, c) \ + ((c == AF_INET && (a)->addr32[0] != (b)->addr32[0]) || \ + (c == AF_INET6 && \ + ((a)->addr32[3] != (b)->addr32[3] || \ + (a)->addr32[2] != (b)->addr32[2] || \ + (a)->addr32[1] != (b)->addr32[1] || \ + (a)->addr32[0] != (b)->addr32[0]))) \ + +#define PF_AZERO(a, c) \ + ((c == AF_INET && !(a)->addr32[0]) || \ + (c == AF_INET6 && \ + !(a)->addr32[0] && !(a)->addr32[1] && \ + !(a)->addr32[2] && !(a)->addr32[3] )) \ + +#define PF_MISMATCHAW(aw, x, af, neg, ifp, rtid) \ + ( \ + (((aw)->type == PF_ADDR_NOROUTE && \ + pf_routable((x), (af), NULL, (rtid))) || \ + (((aw)->type == PF_ADDR_URPFFAILED && (ifp) != NULL && \ + pf_routable((x), (af), (ifp), (rtid))) || \ + ((aw)->type == PF_ADDR_RTLABEL && \ + !pf_rtlabel_match((x), (af), (aw), (rtid))) || \ + ((aw)->type == PF_ADDR_TABLE && \ + !pfr_match_addr((aw)->p.tbl, (x), (af))) || \ + ((aw)->type == PF_ADDR_DYNIFTL && \ + !pfi_match_addr((aw)->p.dyn, (x), (af))) || \ + ((aw)->type == PF_ADDR_RANGE && \ + !pf_match_addr_range(&(aw)->v.a.addr, \ + &(aw)->v.a.mask, (x), (af))) || \ + ((aw)->type == PF_ADDR_ADDRMASK && \ + !PF_AZERO(&(aw)->v.a.mask, (af)) && \ + !pf_match_addr(0, &(aw)->v.a.addr, \ + &(aw)->v.a.mask, (x), (af))))) != \ + (neg) \ + ) + +struct pf_rule_uid { + uid_t uid[2]; + u_int8_t op; +}; + +struct pf_rule_gid { + uid_t gid[2]; + u_int8_t op; +}; + +struct pf_rule_addr { + struct pf_addr_wrap addr; + u_int16_t port[2]; + u_int8_t neg; + u_int8_t port_op; + u_int16_t weight; +}; + +struct pf_threshold { + u_int32_t limit; +#define PF_THRESHOLD_MULT 1000 +#define PF_THRESHOLD_MAX 0xffffffff / PF_THRESHOLD_MULT + u_int32_t seconds; + u_int32_t count; + u_int32_t last; +}; + +struct pf_poolhashkey { + union { + u_int8_t key8[16]; + u_int16_t key16[8]; + u_int32_t key32[4]; + } pfk; /* 128-bit hash key */ +#define key8 pfk.key8 +#define key16 pfk.key16 +#define key32 pfk.key32 +}; + +struct pf_pool { + struct pf_addr_wrap addr; + struct pf_poolhashkey key; + struct pf_addr counter; + char ifname[IFNAMSIZ]; + struct pfi_kif *kif; + int tblidx; + u_int64_t states; + int curweight; + u_int16_t weight; + u_int16_t proxy_port[2]; + u_int8_t port_op; + u_int8_t opts; +}; + +/* A packed Operating System description for fingerprinting */ +typedef u_int32_t pf_osfp_t; +#define PF_OSFP_ANY ((pf_osfp_t)0) +#define PF_OSFP_UNKNOWN ((pf_osfp_t)-1) +#define PF_OSFP_NOMATCH ((pf_osfp_t)-2) + +struct pf_osfp_entry { + SLIST_ENTRY(pf_osfp_entry) fp_entry; + pf_osfp_t fp_os; + int fp_enflags; +#define PF_OSFP_EXPANDED 0x001 /* expanded entry */ +#define PF_OSFP_GENERIC 0x002 /* generic signature */ +#define PF_OSFP_NODETAIL 0x004 /* no p0f details */ +#define PF_OSFP_LEN 32 + u_char fp_class_nm[PF_OSFP_LEN]; + u_char fp_version_nm[PF_OSFP_LEN]; + u_char fp_subtype_nm[PF_OSFP_LEN]; +}; +#define PF_OSFP_ENTRY_EQ(a, b) \ + ((a)->fp_os == (b)->fp_os && \ + memcmp((a)->fp_class_nm, (b)->fp_class_nm, PF_OSFP_LEN) == 0 && \ + memcmp((a)->fp_version_nm, (b)->fp_version_nm, PF_OSFP_LEN) == 0 && \ + memcmp((a)->fp_subtype_nm, (b)->fp_subtype_nm, PF_OSFP_LEN) == 0) + +/* handle pf_osfp_t packing */ +#define _FP_RESERVED_BIT 1 /* For the special negative #defines */ +#define _FP_UNUSED_BITS 1 +#define _FP_CLASS_BITS 10 /* OS Class (Windows, Linux) */ +#define _FP_VERSION_BITS 10 /* OS version (95, 98, NT, 2.4.54, 3.2) */ +#define _FP_SUBTYPE_BITS 10 /* patch level (NT SP4, SP3, ECN patch) */ +#define PF_OSFP_UNPACK(osfp, class, version, subtype) do { \ + (class) = ((osfp) >> (_FP_VERSION_BITS+_FP_SUBTYPE_BITS)) & \ + ((1 << _FP_CLASS_BITS) - 1); \ + (version) = ((osfp) >> _FP_SUBTYPE_BITS) & \ + ((1 << _FP_VERSION_BITS) - 1);\ + (subtype) = (osfp) & ((1 << _FP_SUBTYPE_BITS) - 1); \ +} while(0) +#define PF_OSFP_PACK(osfp, class, version, subtype) do { \ + (osfp) = ((class) & ((1 << _FP_CLASS_BITS) - 1)) << (_FP_VERSION_BITS \ + + _FP_SUBTYPE_BITS); \ + (osfp) |= ((version) & ((1 << _FP_VERSION_BITS) - 1)) << \ + _FP_SUBTYPE_BITS; \ + (osfp) |= (subtype) & ((1 << _FP_SUBTYPE_BITS) - 1); \ +} while(0) + +/* the fingerprint of an OSes TCP SYN packet */ +typedef u_int64_t pf_tcpopts_t; +struct pf_os_fingerprint { + SLIST_HEAD(pf_osfp_enlist, pf_osfp_entry) fp_oses; /* list of matches */ + pf_tcpopts_t fp_tcpopts; /* packed TCP options */ + u_int16_t fp_wsize; /* TCP window size */ + u_int16_t fp_psize; /* ip->ip_len */ + u_int16_t fp_mss; /* TCP MSS */ + u_int16_t fp_flags; +#define PF_OSFP_WSIZE_MOD 0x0001 /* Window modulus */ +#define PF_OSFP_WSIZE_DC 0x0002 /* Window don't care */ +#define PF_OSFP_WSIZE_MSS 0x0004 /* Window multiple of MSS */ +#define PF_OSFP_WSIZE_MTU 0x0008 /* Window multiple of MTU */ +#define PF_OSFP_PSIZE_MOD 0x0010 /* packet size modulus */ +#define PF_OSFP_PSIZE_DC 0x0020 /* packet size don't care */ +#define PF_OSFP_WSCALE 0x0040 /* TCP window scaling */ +#define PF_OSFP_WSCALE_MOD 0x0080 /* TCP window scale modulus */ +#define PF_OSFP_WSCALE_DC 0x0100 /* TCP window scale dont-care */ +#define PF_OSFP_MSS 0x0200 /* TCP MSS */ +#define PF_OSFP_MSS_MOD 0x0400 /* TCP MSS modulus */ +#define PF_OSFP_MSS_DC 0x0800 /* TCP MSS dont-care */ +#define PF_OSFP_DF 0x1000 /* IPv4 don't fragment bit */ +#define PF_OSFP_TS0 0x2000 /* Zero timestamp */ +#define PF_OSFP_INET6 0x4000 /* IPv6 */ + u_int8_t fp_optcnt; /* TCP option count */ + u_int8_t fp_wscale; /* TCP window scaling */ + u_int8_t fp_ttl; /* IPv4 TTL */ +#define PF_OSFP_MAXTTL_OFFSET 40 +/* TCP options packing */ +#define PF_OSFP_TCPOPT_NOP 0x0 /* TCP NOP option */ +#define PF_OSFP_TCPOPT_WSCALE 0x1 /* TCP window scaling option */ +#define PF_OSFP_TCPOPT_MSS 0x2 /* TCP max segment size opt */ +#define PF_OSFP_TCPOPT_SACK 0x3 /* TCP SACK OK option */ +#define PF_OSFP_TCPOPT_TS 0x4 /* TCP timestamp option */ +#define PF_OSFP_TCPOPT_BITS 3 /* bits used by each option */ +#define PF_OSFP_MAX_OPTS \ + (sizeof(((struct pf_os_fingerprint *)0)->fp_tcpopts) * 8) \ + / PF_OSFP_TCPOPT_BITS + + SLIST_ENTRY(pf_os_fingerprint) fp_next; +}; + +struct pf_osfp_ioctl { + struct pf_osfp_entry fp_os; + pf_tcpopts_t fp_tcpopts; /* packed TCP options */ + u_int16_t fp_wsize; /* TCP window size */ + u_int16_t fp_psize; /* ip->ip_len */ + u_int16_t fp_mss; /* TCP MSS */ + u_int16_t fp_flags; + u_int8_t fp_optcnt; /* TCP option count */ + u_int8_t fp_wscale; /* TCP window scaling */ + u_int8_t fp_ttl; /* IPv4 TTL */ + + int fp_getnum; /* DIOCOSFPGET number */ +}; + +struct pf_rule_actions { + int rtableid; + u_int16_t qid; + u_int16_t pqid; + u_int16_t max_mss; + u_int16_t flags; + u_int16_t delay; + u_int8_t log; + u_int8_t set_tos; + u_int8_t min_ttl; + u_int8_t set_prio[2]; + u_int8_t pad[1]; +}; + +union pf_rule_ptr { + struct pf_rule *ptr; + u_int32_t nr; +}; + +#define PF_ANCHOR_STACK_MAX 64 +#define PF_ANCHOR_NAME_SIZE 64 +#define PF_ANCHOR_MAXPATH (PATH_MAX - PF_ANCHOR_NAME_SIZE - 1) +#define PF_ANCHOR_HIWAT 512 +#define PF_OPTIMIZER_TABLE_PFX "__automatic_" + +enum { + PF_LIMITER_NOMATCH, + PF_LIMITER_BLOCK +}; + +#define PF_LIMITER_DEFAULT PF_LIMITER_BLOCK + +struct pf_rule { + struct pf_rule_addr src; + struct pf_rule_addr dst; +#define PF_SKIP_IFP 0 +#define PF_SKIP_DIR 1 +#define PF_SKIP_RDOM 2 +#define PF_SKIP_AF 3 +#define PF_SKIP_PROTO 4 +#define PF_SKIP_SRC_ADDR 5 +#define PF_SKIP_DST_ADDR 6 +#define PF_SKIP_SRC_PORT 7 +#define PF_SKIP_DST_PORT 8 +#define PF_SKIP_COUNT 9 + union pf_rule_ptr skip[PF_SKIP_COUNT]; +#define PF_RULE_LABEL_SIZE 64 + char label[PF_RULE_LABEL_SIZE]; +#define PF_QNAME_SIZE 64 + char ifname[IFNAMSIZ]; + char rcv_ifname[IFNAMSIZ]; + char qname[PF_QNAME_SIZE]; + char pqname[PF_QNAME_SIZE]; +#define PF_TAG_NAME_SIZE 64 + char tagname[PF_TAG_NAME_SIZE]; + char match_tagname[PF_TAG_NAME_SIZE]; + + char overload_tblname[PF_TABLE_NAME_SIZE]; + + TAILQ_ENTRY(pf_rule) entries; + struct pf_pool nat; + struct pf_pool rdr; + struct pf_pool route; + struct pf_threshold pktrate; + + u_int64_t evaluations; + u_int64_t packets[2]; + u_int64_t bytes[2]; + + struct pfi_kif *kif; + struct pfi_kif *rcv_kif; + struct pf_anchor *anchor; + struct pfr_ktable *overload_tbl; + + pf_osfp_t os_fingerprint; + + int rtableid; + int onrdomain; + u_int32_t timeout[PFTM_MAX]; + u_int32_t states_cur; + u_int32_t states_tot; + u_int32_t max_states; + u_int32_t src_nodes; + u_int32_t max_src_nodes; + u_int32_t max_src_states; + u_int32_t max_src_conn; + struct { + u_int32_t limit; + u_int32_t seconds; + } max_src_conn_rate; + u_int32_t qid; + u_int32_t pqid; + u_int32_t rt_listid; + u_int32_t nr; + u_int32_t prob; + uid_t cuid; + pid_t cpid; + + u_int16_t return_icmp; + u_int16_t return_icmp6; + u_int16_t max_mss; + u_int16_t tag; + u_int16_t match_tag; + u_int16_t scrub_flags; + u_int16_t delay; + + struct pf_rule_uid uid; + struct pf_rule_gid gid; + + u_int32_t rule_flag; + u_int8_t action; + u_int8_t direction; + u_int8_t log; + u_int8_t logif; + u_int8_t quick; + u_int8_t ifnot; + u_int8_t match_tag_not; + +#define PF_STATE_NORMAL 0x1 +#define PF_STATE_MODULATE 0x2 +#define PF_STATE_SYNPROXY 0x3 + u_int8_t keep_state; + sa_family_t af; + u_int8_t proto; + u_int16_t type; /* aux. value 256 is legit */ + u_int16_t code; /* aux. value 256 is legit */ + u_int8_t flags; + u_int8_t flagset; + u_int8_t min_ttl; + u_int8_t allow_opts; + u_int8_t rt; + u_int8_t return_ttl; + u_int8_t tos; + u_int8_t set_tos; + u_int8_t anchor_relative; + u_int8_t anchor_wildcard; + +#define PF_FLUSH 0x01 +#define PF_FLUSH_GLOBAL 0x02 + u_int8_t flush; + u_int8_t prio; + u_int8_t set_prio[2]; + sa_family_t naf; + u_int8_t rcvifnot; + struct { + u_int8_t id; + int limiter_action; + } statelim; + struct { + u_int8_t id; + int limiter_action; + } sourcelim; + + struct { + struct pf_addr addr; + u_int16_t port; + u_int8_t type; + } divert; + + time_t exptime; +}; + +/* rule flags */ +#define PFRULE_DROP 0x0000 +#define PFRULE_RETURNRST 0x0001 +#define PFRULE_FRAGMENT 0x0002 +#define PFRULE_RETURNICMP 0x0004 +#define PFRULE_RETURN 0x0008 +#define PFRULE_NOSYNC 0x0010 +#define PFRULE_SRCTRACK 0x0020 /* track source states */ +#define PFRULE_RULESRCTRACK 0x0040 /* per rule */ +#define PFRULE_SETDELAY 0x0080 + +/* rule flags again */ +#define PFRULE_IFBOUND 0x00010000 /* if-bound */ +#define PFRULE_STATESLOPPY 0x00020000 /* sloppy state tracking */ +#define PFRULE_PFLOW 0x00040000 +#define PFRULE_ONCE 0x00100000 /* one shot rule */ +#define PFRULE_AFTO 0x00200000 /* af-to rule */ +#define PFRULE_EXPIRED 0x00400000 /* one shot rule hit by pkt */ + +#define PFSTATE_HIWAT 100000 /* default state table size */ +#define PFSTATE_ADAPT_START 60000 /* default adaptive timeout start */ +#define PFSTATE_ADAPT_END 120000 /* default adaptive timeout end */ +#define PF_PKTDELAY_MAXPKTS 10000 /* max # of pkts held in delay queue */ + +struct pf_rule_item { + SLIST_ENTRY(pf_rule_item) entry; + struct pf_rule *r; +}; + +SLIST_HEAD(pf_rule_slist, pf_rule_item); + +enum pf_sn_types { PF_SN_NONE, PF_SN_NAT, PF_SN_RDR, PF_SN_ROUTE, PF_SN_MAX }; + +struct pf_src_node { + RB_ENTRY(pf_src_node) entry; + struct pf_addr addr; + struct pf_addr raddr; + union pf_rule_ptr rule; + struct pfi_kif *kif; + u_int64_t bytes[2]; + u_int64_t packets[2]; + u_int32_t states; + u_int32_t conn; + struct pf_threshold conn_rate; + int32_t creation; + int32_t expire; + sa_family_t af; + sa_family_t naf; + u_int8_t type; +}; + +struct pf_sn_item { + SLIST_ENTRY(pf_sn_item) next; + struct pf_src_node *sn; +}; + +SLIST_HEAD(pf_sn_head, pf_sn_item); + +#define PFSNODE_HIWAT 10000 /* default source node table size */ + +struct pf_state_scrub { + struct timeval pfss_last; /* time received last packet */ + u_int32_t pfss_tsecr; /* last echoed timestamp */ + u_int32_t pfss_tsval; /* largest timestamp */ + u_int32_t pfss_tsval0; /* original timestamp */ + u_int16_t pfss_flags; +#define PFSS_TIMESTAMP 0x0001 /* modulate timestamp */ +#define PFSS_PAWS 0x0010 /* stricter PAWS checks */ +#define PFSS_PAWS_IDLED 0x0020 /* was idle too long. no PAWS */ +#define PFSS_DATA_TS 0x0040 /* timestamp on data packets */ +#define PFSS_DATA_NOTS 0x0080 /* no timestamp on data packets */ + u_int8_t pfss_ttl; /* stashed TTL */ + u_int8_t pad; + u_int32_t pfss_ts_mod; /* timestamp modulation */ +}; + +struct pf_state_host { + struct pf_addr addr; + u_int16_t port; + u_int16_t pad; +}; + +struct pf_state_peer { + struct pf_state_scrub *scrub; /* state is scrubbed */ + u_int32_t seqlo; /* Max sequence number sent */ + u_int32_t seqhi; /* Max the other end ACKd + win */ + u_int32_t seqdiff; /* Sequence number modulator */ + u_int16_t max_win; /* largest window (pre scaling) */ + u_int16_t mss; /* Maximum segment size option */ + u_int8_t state; /* active state level */ + u_int8_t wscale; /* window scaling factor */ + u_int8_t tcp_est; /* Did we reach TCPS_ESTABLISHED */ + u_int8_t pad[1]; +}; + +TAILQ_HEAD(pf_state_queue, pf_state); + +/* keep synced with struct pf_state_key, used in RB_FIND */ +struct pf_state_key_cmp { + struct pf_addr addr[2]; + u_int16_t port[2]; + u_int16_t rdomain; + u_int16_t hash; + sa_family_t af; + u_int8_t proto; +}; + +/* keep synced with struct pf_state, used in RB_FIND */ +struct pf_state_cmp { + u_int64_t id; + u_int32_t creatorid; + u_int8_t direction; + u_int8_t pad[3]; +}; + +/* struct pf_state.state_flags */ +#define PFSTATE_ALLOWOPTS 0x0001 +#define PFSTATE_SLOPPY 0x0002 +#define PFSTATE_PFLOW 0x0004 +#define PFSTATE_NOSYNC 0x0008 +#define PFSTATE_ACK 0x0010 +#define PFSTATE_NODF 0x0020 +#define PFSTATE_SETTOS 0x0040 +#define PFSTATE_RANDOMID 0x0080 +#define PFSTATE_SCRUB_TCP 0x0100 +#define PFSTATE_SETPRIO 0x0200 +#define PFSTATE_INP_UNLINKED 0x0400 +#define PFSTATE_SCRUBMASK (PFSTATE_NODF|PFSTATE_RANDOMID|PFSTATE_SCRUB_TCP) +#define PFSTATE_SETMASK (PFSTATE_SETTOS|PFSTATE_SETPRIO) + +/* + * Unified state structures for pulling states out of the kernel + * used by pfsync(4) and the pf(4) ioctl. + */ +struct pfsync_state_scrub { + u_int16_t pfss_flags; + u_int8_t pfss_ttl; /* stashed TTL */ +#define PFSYNC_SCRUB_FLAG_VALID 0x01 + u_int8_t scrub_flag; + u_int32_t pfss_ts_mod; /* timestamp modulation */ +} __packed; + +struct pfsync_state_peer { + struct pfsync_state_scrub scrub; /* state is scrubbed */ + u_int32_t seqlo; /* Max sequence number sent */ + u_int32_t seqhi; /* Max the other end ACKd + win */ + u_int32_t seqdiff; /* Sequence number modulator */ + u_int16_t max_win; /* largest window (pre scaling) */ + u_int16_t mss; /* Maximum segment size option */ + u_int8_t state; /* active state level */ + u_int8_t wscale; /* window scaling factor */ + u_int8_t pad[6]; +} __packed; + +struct pfsync_state_key { + struct pf_addr addr[2]; + u_int16_t port[2]; + u_int16_t rdomain; + sa_family_t af; + u_int8_t pad; +}; + +struct pfsync_state { + u_int64_t id; + char ifname[IFNAMSIZ]; + struct pfsync_state_key key[2]; + struct pfsync_state_peer src; + struct pfsync_state_peer dst; + struct pf_addr rt_addr; + u_int32_t rule; + u_int32_t anchor; + u_int32_t nat_rule; + u_int32_t creation; + u_int32_t expire; + u_int32_t packets[2][2]; + u_int32_t bytes[2][2]; + u_int32_t creatorid; + int32_t rtableid[2]; + u_int16_t max_mss; + sa_family_t af; + u_int8_t proto; + u_int8_t direction; + u_int8_t log; + u_int8_t rt; + u_int8_t timeout; + u_int8_t sync_flags; + u_int8_t updates; + u_int8_t min_ttl; + u_int8_t set_tos; + u_int16_t state_flags; + u_int8_t set_prio[2]; +} __packed; + +#define PFSYNC_FLAG_SRCNODE 0x04 +#define PFSYNC_FLAG_NATSRCNODE 0x08 + +#define pf_state_counter_hton(s,d) do { \ + d[0] = htonl((s>>32)&0xffffffff); \ + d[1] = htonl(s&0xffffffff); \ +} while (0) + +#define pf_state_counter_from_pfsync(s) \ + (((u_int64_t)(s[0])<<32) | (u_int64_t)(s[1])) + +#define pf_state_counter_ntoh(s,d) do { \ + d = ntohl(s[0]); \ + d = d<<32; \ + d += ntohl(s[1]); \ +} while (0) + +TAILQ_HEAD(pf_rulequeue, pf_rule); + +struct pf_anchor; + +struct pf_ruleset { + struct { + struct pf_rulequeue queues[2]; + struct { + struct pf_rulequeue *ptr; + u_int32_t rcount; + u_int32_t version; + int open; + } active, inactive; + } rules; + struct pf_anchor *anchor; + u_int32_t tticket; + int tables; + int topen; +}; + +RB_HEAD(pf_anchor_global, pf_anchor); +RB_HEAD(pf_anchor_node, pf_anchor); +struct pf_anchor { + RB_ENTRY(pf_anchor) entry_global; + RB_ENTRY(pf_anchor) entry_node; + struct pf_anchor *parent; + struct pf_anchor_node children; + char name[PF_ANCHOR_NAME_SIZE]; + char path[PATH_MAX]; + struct pf_ruleset ruleset; + int refcnt; /* anchor rules */ + int match; + struct refcnt ref; /* for transactions */ +}; +RB_PROTOTYPE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare) +RB_PROTOTYPE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare) + +#define PF_RESERVED_ANCHOR "_pf" + +#define PFR_TFLAG_PERSIST 0x00000001 +#define PFR_TFLAG_CONST 0x00000002 +#define PFR_TFLAG_ACTIVE 0x00000004 +#define PFR_TFLAG_INACTIVE 0x00000008 +#define PFR_TFLAG_REFERENCED 0x00000010 +#define PFR_TFLAG_REFDANCHOR 0x00000020 +#define PFR_TFLAG_COUNTERS 0x00000040 +/* Adjust masks below when adding flags. */ +#define PFR_TFLAG_USRMASK 0x00000043 +#define PFR_TFLAG_SETMASK 0x0000003C +#define PFR_TFLAG_ALLMASK 0x0000007F + +struct pfr_table { + char pfrt_anchor[PATH_MAX]; + char pfrt_name[PF_TABLE_NAME_SIZE]; + u_int32_t pfrt_flags; + u_int8_t pfrt_fback; +}; + +enum { PFR_FB_NONE, PFR_FB_MATCH, PFR_FB_ADDED, PFR_FB_DELETED, + PFR_FB_CHANGED, PFR_FB_CLEARED, PFR_FB_DUPLICATE, + PFR_FB_NOTMATCH, PFR_FB_CONFLICT, PFR_FB_NOCOUNT, PFR_FB_MAX }; + +struct pfr_addr { + union { + struct in_addr _pfra_ip4addr; + struct in6_addr _pfra_ip6addr; + } pfra_u; + char pfra_ifname[IFNAMSIZ]; + u_int32_t pfra_states; + u_int16_t pfra_weight; + u_int8_t pfra_af; + u_int8_t pfra_net; + u_int8_t pfra_not; + u_int8_t pfra_fback; + u_int8_t pfra_type; + u_int8_t pad[7]; +}; +#define pfra_ip4addr pfra_u._pfra_ip4addr +#define pfra_ip6addr pfra_u._pfra_ip6addr + +enum { PFR_DIR_IN, PFR_DIR_OUT, PFR_DIR_MAX }; +enum { PFR_OP_BLOCK, PFR_OP_MATCH, PFR_OP_PASS, PFR_OP_ADDR_MAX, + PFR_OP_TABLE_MAX }; +#define PFR_OP_XPASS PFR_OP_ADDR_MAX + +struct pfr_astats { + struct pfr_addr pfras_a; + u_int64_t pfras_packets[PFR_DIR_MAX][PFR_OP_ADDR_MAX]; + u_int64_t pfras_bytes[PFR_DIR_MAX][PFR_OP_ADDR_MAX]; + time_t pfras_tzero; +}; + +enum { PFR_REFCNT_RULE, PFR_REFCNT_ANCHOR, PFR_REFCNT_MAX }; + +struct pfr_tstats { + struct pfr_table pfrts_t; + u_int64_t pfrts_packets[PFR_DIR_MAX][PFR_OP_TABLE_MAX]; + u_int64_t pfrts_bytes[PFR_DIR_MAX][PFR_OP_TABLE_MAX]; + u_int64_t pfrts_match; + u_int64_t pfrts_nomatch; + time_t pfrts_tzero; + int pfrts_cnt; + int pfrts_refcnt[PFR_REFCNT_MAX]; +}; +#define pfrts_name pfrts_t.pfrt_name +#define pfrts_flags pfrts_t.pfrt_flags + +struct pfr_kcounters { + u_int64_t pfrkc_packets[PFR_DIR_MAX][PFR_OP_ADDR_MAX]; + u_int64_t pfrkc_bytes[PFR_DIR_MAX][PFR_OP_ADDR_MAX]; + u_int64_t states; +}; + +/* + * XXX ip_ipsp.h's sockaddr_union should be converted to sockaddr * + * passing with correct sa_len, then a good approach for cleaning this + * will become more clear. + */ +union pfsockaddr_union { + struct sockaddr sa; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; +}; + +SLIST_HEAD(pfr_kentryworkq, pfr_kentry); +struct _pfr_kentry { + struct radix_node _pfrke_node[2]; + union pfsockaddr_union _pfrke_sa; + SLIST_ENTRY(pfr_kentry) _pfrke_workq; + SLIST_ENTRY(pfr_kentry) _pfrke_ioq; + struct pfr_kcounters *_pfrke_counters; + time_t _pfrke_tzero; + u_int8_t _pfrke_af; + u_int8_t _pfrke_net; + u_int8_t _pfrke_flags; + u_int8_t _pfrke_type; + u_int8_t _pfrke_fb; +}; +#define PFRKE_FLAG_NOT 0x01 +#define PFRKE_FLAG_MARK 0x02 + +/* pfrke_type */ +enum { PFRKE_PLAIN, PFRKE_ROUTE, PFRKE_COST, PFRKE_MAX }; + +struct pfr_kentry { + union { + struct _pfr_kentry _ke; + } u; +}; +#define pfrke_node u._ke._pfrke_node +#define pfrke_sa u._ke._pfrke_sa +#define pfrke_workq u._ke._pfrke_workq +#define pfrke_ioq u._ke._pfrke_ioq +#define pfrke_counters u._ke._pfrke_counters +#define pfrke_tzero u._ke._pfrke_tzero +#define pfrke_af u._ke._pfrke_af +#define pfrke_net u._ke._pfrke_net +#define pfrke_flags u._ke._pfrke_flags +#define pfrke_type u._ke._pfrke_type +#define pfrke_fb u._ke._pfrke_fb + +struct pfr_kentry_route { + union { + struct _pfr_kentry _ke; + } u; + + struct pfi_kif *kif; + char ifname[IFNAMSIZ]; +}; + +struct pfr_kentry_cost { + union { + struct _pfr_kentry _ke; + } u; + + struct pfi_kif *kif; + char ifname[IFNAMSIZ]; + /* Above overlaps with pfr_kentry route */ + + u_int16_t weight; +}; + +struct pfr_kentry_all { + union { + struct _pfr_kentry _ke; + struct pfr_kentry_route kr; + struct pfr_kentry_cost kc; + } u; +}; +#define pfrke_rkif u.kr.kif +#define pfrke_rifname u.kr.ifname + +SLIST_HEAD(pfr_ktableworkq, pfr_ktable); +RB_HEAD(pfr_ktablehead, pfr_ktable); +struct pfr_ktable { + struct pfr_tstats pfrkt_ts; + RB_ENTRY(pfr_ktable) pfrkt_tree; + SLIST_ENTRY(pfr_ktable) pfrkt_workq; + struct radix_node_head *pfrkt_ip4; + struct radix_node_head *pfrkt_ip6; + struct pfr_ktable *pfrkt_shadow; + struct pfr_ktable *pfrkt_root; + struct pf_ruleset *pfrkt_rs; + long pfrkt_larg; + int pfrkt_nflags; + u_int64_t pfrkt_refcntcost; + u_int16_t pfrkt_gcdweight; + u_int16_t pfrkt_maxweight; +}; +#define pfrkt_t pfrkt_ts.pfrts_t +#define pfrkt_name pfrkt_t.pfrt_name +#define pfrkt_anchor pfrkt_t.pfrt_anchor +#define pfrkt_ruleset pfrkt_t.pfrt_ruleset +#define pfrkt_flags pfrkt_t.pfrt_flags +#define pfrkt_cnt pfrkt_ts.pfrts_cnt +#define pfrkt_refcnt pfrkt_ts.pfrts_refcnt +#define pfrkt_packets pfrkt_ts.pfrts_packets +#define pfrkt_bytes pfrkt_ts.pfrts_bytes +#define pfrkt_match pfrkt_ts.pfrts_match +#define pfrkt_nomatch pfrkt_ts.pfrts_nomatch +#define pfrkt_tzero pfrkt_ts.pfrts_tzero + +RB_HEAD(pfi_ifhead, pfi_kif); + +/* state tables */ +extern struct pf_state_tree pf_statetbl; + +/* keep synced with pfi_kif, used in RB_FIND */ +struct pfi_kif_cmp { + char pfik_name[IFNAMSIZ]; +}; + +struct ifnet; +struct ifg_group; + +struct pfi_kif { + char pfik_name[IFNAMSIZ]; + RB_ENTRY(pfi_kif) pfik_tree; + u_int64_t pfik_packets[2][2][2]; + u_int64_t pfik_bytes[2][2][2]; + time_t pfik_tzero; + int pfik_flags; + int pfik_flags_new; + void *pfik_ah_cookie; + struct ifnet *pfik_ifp; + struct ifg_group *pfik_group; + int pfik_states; + int pfik_rules; + int pfik_routes; + int pfik_srcnodes; + int pfik_flagrefs; + TAILQ_HEAD(, pfi_dynaddr) pfik_dynaddrs; +}; + +enum pfi_kif_refs { + PFI_KIF_REF_NONE, + PFI_KIF_REF_STATE, + PFI_KIF_REF_RULE, + PFI_KIF_REF_ROUTE, + PFI_KIF_REF_SRCNODE, + PFI_KIF_REF_FLAG +}; + +#define PFI_IFLAG_SKIP 0x0100 /* skip filtering on interface */ +#define PFI_IFLAG_ANY 0x0200 /* match any non-loopback interface */ + +/* flags for RDR options */ +#define PF_DPORT_RANGE 0x01 /* Dest port uses range */ +#define PF_RPORT_RANGE 0x02 /* RDR'ed port uses range */ + +/* Reasons code for passing/dropping a packet */ +#define PFRES_MATCH 0 /* Explicit match of a rule */ +#define PFRES_BADOFF 1 /* Bad offset for pull_hdr */ +#define PFRES_FRAG 2 /* Dropping following fragment */ +#define PFRES_SHORT 3 /* Dropping short packet */ +#define PFRES_NORM 4 /* Dropping by normalizer */ +#define PFRES_MEMORY 5 /* Dropped due to lacking mem */ +#define PFRES_TS 6 /* Bad TCP Timestamp (RFC1323) */ +#define PFRES_CONGEST 7 /* Congestion */ +#define PFRES_IPOPTIONS 8 /* IP option */ +#define PFRES_PROTCKSUM 9 /* Protocol checksum invalid */ +#define PFRES_BADSTATE 10 /* State mismatch */ +#define PFRES_STATEINS 11 /* State insertion failure */ +#define PFRES_MAXSTATES 12 /* State limit */ +#define PFRES_SRCLIMIT 13 /* Source node/conn limit */ +#define PFRES_SYNPROXY 14 /* SYN proxy */ +#define PFRES_TRANSLATE 15 /* No translation address available */ +#define PFRES_NOROUTE 16 /* No route found for PBR action */ +#define PFRES_MAX 17 /* total+1 */ + +#define PFRES_NAMES { \ + "match", \ + "bad-offset", \ + "fragment", \ + "short", \ + "normalize", \ + "memory", \ + "bad-timestamp", \ + "congestion", \ + "ip-option", \ + "proto-cksum", \ + "state-mismatch", \ + "state-insert", \ + "state-limit", \ + "src-limit", \ + "synproxy", \ + "translate", \ + "no-route", \ + NULL \ +} + +/* Counters for other things we want to keep track of */ +#define LCNT_STATES 0 /* states */ +#define LCNT_SRCSTATES 1 /* max-src-states */ +#define LCNT_SRCNODES 2 /* max-src-nodes */ +#define LCNT_SRCCONN 3 /* max-src-conn */ +#define LCNT_SRCCONNRATE 4 /* max-src-conn-rate */ +#define LCNT_OVERLOAD_TABLE 5 /* entry added to overload table */ +#define LCNT_OVERLOAD_FLUSH 6 /* state entries flushed */ +#define LCNT_SYNFLOODS 7 /* synfloods detected */ +#define LCNT_SYNCOOKIES_SENT 8 /* syncookies sent */ +#define LCNT_SYNCOOKIES_VALID 9 /* syncookies validated */ +#define LCNT_MAX 10 /* total+1 */ + +#define LCNT_NAMES { \ + "max states per rule", \ + "max-src-states", \ + "max-src-nodes", \ + "max-src-conn", \ + "max-src-conn-rate", \ + "overload table insertion", \ + "overload flush states", \ + "synfloods detected", \ + "syncookies sent", \ + "syncookies validated", \ + NULL \ +} + +/* UDP state enumeration */ +#define PFUDPS_NO_TRAFFIC 0 +#define PFUDPS_SINGLE 1 +#define PFUDPS_MULTIPLE 2 + +#define PFUDPS_NSTATES 3 /* number of state levels */ + +#define PFUDPS_NAMES { \ + "NO_TRAFFIC", \ + "SINGLE", \ + "MULTIPLE", \ + NULL \ +} + +/* Other protocol state enumeration */ +#define PFOTHERS_NO_TRAFFIC 0 +#define PFOTHERS_SINGLE 1 +#define PFOTHERS_MULTIPLE 2 + +#define PFOTHERS_NSTATES 3 /* number of state levels */ + +#define PFOTHERS_NAMES { \ + "NO_TRAFFIC", \ + "SINGLE", \ + "MULTIPLE", \ + NULL \ +} + +#define FCNT_STATE_SEARCH 0 +#define FCNT_STATE_INSERT 1 +#define FCNT_STATE_REMOVALS 2 +#define FCNT_MAX 3 + +#define SCNT_SRC_NODE_SEARCH 0 +#define SCNT_SRC_NODE_INSERT 1 +#define SCNT_SRC_NODE_REMOVALS 2 +#define SCNT_MAX 3 + +#define NCNT_FRAG_SEARCH 0 +#define NCNT_FRAG_INSERT 1 +#define NCNT_FRAG_REMOVALS 2 +#define NCNT_MAX 3 + +#define REASON_SET(a, x) \ + do { \ + if ((void *)(a) != NULL) { \ + *(a) = (x); \ + if (x < PFRES_MAX) \ + pf_status.counters[x]++; \ + } \ + } while (0) + +struct pf_status { + u_int64_t counters[PFRES_MAX]; + u_int64_t lcounters[LCNT_MAX]; /* limit counters */ + u_int64_t fcounters[FCNT_MAX]; + u_int64_t scounters[SCNT_MAX]; + u_int64_t ncounters[NCNT_MAX]; + u_int64_t pcounters[2][2][3]; + u_int64_t bcounters[2][2]; + u_int64_t stateid; + u_int64_t syncookies_inflight[2]; /* unACKed SYNcookies */ + time_t since; + u_int32_t running; + u_int32_t states; + u_int32_t states_halfopen; + u_int32_t src_nodes; + u_int32_t fragments; + u_int32_t debug; + u_int32_t hostid; + u_int32_t reass; /* reassembly */ + u_int8_t syncookies_active; + u_int8_t syncookies_mode; /* never/always/adaptive */ + u_int8_t pad[2]; + char ifname[IFNAMSIZ]; + u_int8_t pf_chksum[PF_MD5_DIGEST_LENGTH]; +}; + +#define PF_REASS_ENABLED 0x01 +#define PF_REASS_NODF 0x02 + +#define PF_SYNCOOKIES_NEVER 0 +#define PF_SYNCOOKIES_ALWAYS 1 +#define PF_SYNCOOKIES_ADAPTIVE 2 +#define PF_SYNCOOKIES_MODE_MAX PF_SYNCOOKIES_ADAPTIVE + +#define PF_SYNCOOKIES_HIWATPCT 25 +#define PF_SYNCOOKIES_LOWATPCT PF_SYNCOOKIES_HIWATPCT/2 + +#define PF_PRIO_ZERO 0xff /* match "prio 0" packets */ + +struct pf_queue_bwspec { + uint64_t absolute; + u_int percent; +}; + +struct pf_queue_scspec { + struct pf_queue_bwspec m1; + struct pf_queue_bwspec m2; + u_int d; +}; + +struct pf_queue_fqspec { + u_int flows; + u_int quantum; + u_int target; + u_int interval; +}; + +struct pf_queuespec { + TAILQ_ENTRY(pf_queuespec) entries; + char qname[PF_QNAME_SIZE]; + char parent[PF_QNAME_SIZE]; + char ifname[IFNAMSIZ]; + struct pf_queue_scspec realtime; + struct pf_queue_scspec linkshare; + struct pf_queue_scspec upperlimit; + struct pf_queue_fqspec flowqueue; + struct pfi_kif *kif; + u_int flags; + u_int qlimit; + u_int32_t qid; + u_int32_t parent_qid; +}; + +#define PFQS_FLOWQUEUE 0x0001 +#define PFQS_ROOTCLASS 0x0002 +#define PFQS_DEFAULT 0x1000 /* maps to HFSC_DEFAULTCLASS */ + +struct priq_opts { + int flags; +}; + +struct hfsc_opts { + /* real-time service curve */ + u_int rtsc_m1; /* slope of the 1st segment in bps */ + u_int rtsc_d; /* the x-projection of m1 in msec */ + u_int rtsc_m2; /* slope of the 2nd segment in bps */ + /* link-sharing service curve */ + u_int lssc_m1; + u_int lssc_d; + u_int lssc_m2; + /* upper-limit service curve */ + u_int ulsc_m1; + u_int ulsc_d; + u_int ulsc_m2; + int flags; +}; + +struct pfq_ops { + void * (*pfq_alloc)(struct ifnet *); + int (*pfq_addqueue)(void *, struct pf_queuespec *); + void (*pfq_free)(void *); + int (*pfq_qstats)(struct pf_queuespec *, void *, int *); + /* Queue manager ops */ + unsigned int (*pfq_qlength)(void *); + struct mbuf * (*pfq_enqueue)(void *, struct mbuf *); + struct mbuf * (*pfq_deq_begin)(void *, void **, struct mbuf_list *); + void (*pfq_deq_commit)(void *, struct mbuf *, void *); + void (*pfq_purge)(void *, struct mbuf_list *); +}; + +struct pf_tagname { + TAILQ_ENTRY(pf_tagname) entries; + char name[PF_TAG_NAME_SIZE]; + u_int16_t tag; + int ref; +}; + +struct pf_divert { + struct pf_addr addr; + u_int16_t port; + u_int16_t rdomain; + u_int8_t type; +}; + +enum pf_divert_types { + PF_DIVERT_NONE, + PF_DIVERT_TO, + PF_DIVERT_REPLY, + PF_DIVERT_PACKET +}; + +struct pf_pktdelay { + struct timeout to; + struct mbuf *m; + u_int ifidx; +}; + +/* Fragment entries reference mbuf clusters, so base the default on that. */ +#define PFFRAG_FRENT_HIWAT (NMBCLUSTERS / 16) /* Number of entries */ +#define PFFRAG_FRAG_HIWAT (NMBCLUSTERS / 32) /* Number of packets */ + +#define PFR_KTABLE_HIWAT 1000 /* Number of tables */ +#define PFR_KENTRY_HIWAT 200000 /* Number of table entries */ +#define PFR_KENTRY_HIWAT_SMALL 100000 /* Number of entries for tiny hosts */ + +/* + * ioctl parameter structures + */ + +struct pfioc_rule { + u_int32_t action; + u_int32_t ticket; + u_int32_t nr; + char anchor[PATH_MAX]; + char anchor_call[PATH_MAX]; + struct pf_rule rule; +}; + +struct pfioc_natlook { + struct pf_addr saddr; + struct pf_addr daddr; + struct pf_addr rsaddr; + struct pf_addr rdaddr; + u_int16_t rdomain; + u_int16_t rrdomain; + u_int16_t sport; + u_int16_t dport; + u_int16_t rsport; + u_int16_t rdport; + sa_family_t af; + u_int8_t proto; + u_int8_t direction; +}; + +struct pfioc_state { + struct pfsync_state state; +}; + +struct pfioc_src_node_kill { + sa_family_t psnk_af; + struct pf_rule_addr psnk_src; + struct pf_rule_addr psnk_dst; + u_int psnk_killed; +}; + +struct pfioc_state_kill { + struct pf_state_cmp psk_pfcmp; + sa_family_t psk_af; + int psk_proto; + struct pf_rule_addr psk_src; + struct pf_rule_addr psk_dst; + char psk_ifname[IFNAMSIZ]; + char psk_label[PF_RULE_LABEL_SIZE]; + u_int psk_killed; + u_int16_t psk_rdomain; +}; + +struct pfioc_states { + size_t ps_len; + union { + caddr_t psu_buf; + struct pfsync_state *psu_states; + } ps_u; +#define ps_buf ps_u.psu_buf +#define ps_states ps_u.psu_states +}; + +struct pfioc_src_nodes { + size_t psn_len; + union { + caddr_t psu_buf; + struct pf_src_node *psu_src_nodes; + } psn_u; +#define psn_buf psn_u.psu_buf +#define psn_src_nodes psn_u.psu_src_nodes +}; + +struct pfioc_tm { + int timeout; + int seconds; +}; + +struct pfioc_limit { + int index; + unsigned limit; +}; + +struct pfioc_ruleset { + u_int32_t nr; + char path[PATH_MAX]; + char name[PF_ANCHOR_NAME_SIZE]; +}; + +struct pfioc_trans { + int size; /* number of elements */ + int esize; /* size of each element in bytes */ + struct pfioc_trans_e { + int type; + char anchor[PATH_MAX]; + u_int32_t ticket; + } *array; +}; + +struct pfioc_queue { + u_int32_t ticket; + u_int nr; + struct pf_queuespec queue; +}; + +struct pfioc_qstats { + u_int32_t ticket; + u_int32_t nr; + struct pf_queuespec queue; + void *buf; + int nbytes; +}; + +#define PFR_FLAG_DUMMY 0x00000002 +#define PFR_FLAG_FEEDBACK 0x00000004 +#define PFR_FLAG_CLSTATS 0x00000008 +#define PFR_FLAG_ADDRSTOO 0x00000010 +#define PFR_FLAG_REPLACE 0x00000020 +#define PFR_FLAG_ALLRSETS 0x00000040 +#define PFR_FLAG_ALLMASK 0x0000007F +#ifdef _KERNEL +#define PFR_FLAG_USERIOCTL 0x10000000 +#endif + +struct pfioc_table { + struct pfr_table pfrio_table; + void *pfrio_buffer; + int pfrio_esize; + int pfrio_size; + int pfrio_size2; + int pfrio_nadd; + int pfrio_ndel; + int pfrio_nchange; + int pfrio_flags; + u_int32_t pfrio_ticket; +}; +#define pfrio_exists pfrio_nadd +#define pfrio_nzero pfrio_nadd +#define pfrio_nmatch pfrio_nadd +#define pfrio_naddr pfrio_size2 +#define pfrio_setflag pfrio_size2 +#define pfrio_clrflag pfrio_nadd + +struct pfioc_iface { + char pfiio_name[IFNAMSIZ]; + void *pfiio_buffer; + int pfiio_esize; + int pfiio_size; + int pfiio_nzero; + int pfiio_flags; +}; + +struct pfioc_synflwats { + u_int32_t hiwat; + u_int32_t lowat; +}; + +#define PF_STATELIM_NAME_LEN 16 /* kstat istr */ +#define PF_STATELIM_DESCR_LEN 64 + +struct pfioc_statelim { + u_int32_t ticket; + + char name[PF_STATELIM_NAME_LEN]; + uint32_t id; +#define PF_STATELIM_ID_NONE 0 +#define PF_STATELIM_ID_MIN 1 +#define PF_STATELIM_ID_MAX 255 /* fits in pf_state uint8_t */ + + /* limit on the total number of states */ + unsigned int limit; +#define PF_STATELIM_LIMIT_MIN 1 +#define PF_STATELIM_LIMIT_MAX (1 << 24) /* pf is pretty scalable */ + + /* rate limit on the creation of states */ + struct { + unsigned int limit; + unsigned int seconds; + } rate; + + char description[PF_STATELIM_DESCR_LEN]; + + /* kernel state for GET ioctls */ + unsigned int inuse; /* gauge */ + uint64_t admitted; /* counter */ + uint64_t hardlimited; /* counter */ + uint64_t ratelimited; /* counter */ +}; + +#define PF_SOURCELIM_NAME_LEN 16 /* kstat istr */ +#define PF_SOURCELIM_DESCR_LEN 64 + +struct pfioc_sourcelim { + u_int32_t ticket; + + char name[PF_SOURCELIM_NAME_LEN]; + uint32_t id; +#define PF_SOURCELIM_ID_NONE 0 +#define PF_SOURCELIM_ID_MIN 1 +#define PF_SOURCELIM_ID_MAX 255 /* fits in pf_state uint8_t */ + + /* limit on the total number of address entries */ + unsigned int entries; + + /* limit on the number of states per address entry */ + unsigned int limit; + + /* rate limit on the creation of states by an address entry */ + struct { + unsigned int limit; + unsigned int seconds; + } rate; + + /* + * when the number of states on an entry exceeds hwm, add + * the address to the specified table. when the number of + * states goes below lwm, remove it from the table. + */ + char overload_tblname[PF_TABLE_NAME_SIZE]; + unsigned int overload_hwm; + unsigned int overload_lwm; + + /* + * mask addresses before they're used for entries. /64s + * everywhere for inet6 makes it easy to use too much memory. + */ + unsigned int inet_prefix; + unsigned int inet6_prefix; + + char description[PF_SOURCELIM_DESCR_LEN]; + + /* kernel state for GET ioctls */ + unsigned int nentries; /* gauge */ + unsigned int inuse; /* gauge */ + + uint64_t addrallocs; /* counter */ + uint64_t addrnomem; /* counter */ + uint64_t admitted; /* counter */ + uint64_t addrlimited; /* counter */ + uint64_t hardlimited; /* counter */ + uint64_t ratelimited; /* counter */ +}; + +struct pfioc_source_entry { + sa_family_t af; + unsigned int rdomain; + struct pf_addr addr; + + /* stats */ + + unsigned int inuse; /* gauge */ + uint64_t admitted; /* counter */ + uint64_t hardlimited; /* counter */ + uint64_t ratelimited; /* counter */ +}; + +struct pfioc_source { + char name[PF_SOURCELIM_NAME_LEN]; + uint32_t id; + + /* copied from the parent source limiter */ + + unsigned int inet_prefix; + unsigned int inet6_prefix; + unsigned int limit; + + /* source entries */ + size_t entry_size; /* sizeof(struct pfioc_source_entry) */ + + struct pfioc_source_entry *key; + struct pfioc_source_entry *entries; + size_t entrieslen; /* bytes */ +}; + +struct pfioc_source_kill { + char name[PF_SOURCELIM_NAME_LEN]; + uint32_t id; + unsigned int rdomain; + sa_family_t af; + struct pf_addr addr; + + unsigned int rmstates; /* kill the states too? */ +}; + +/* + * ioctl operations + */ + +#define DIOCSTART _IO ('D', 1) +#define DIOCSTOP _IO ('D', 2) +#define DIOCADDRULE _IOWR('D', 4, struct pfioc_rule) +#define DIOCGETRULES _IOWR('D', 6, struct pfioc_rule) +#define DIOCGETRULE _IOWR('D', 7, struct pfioc_rule) +/* cut 8 - 17 */ +#define DIOCCLRSTATES _IOWR('D', 18, struct pfioc_state_kill) +#define DIOCGETSTATE _IOWR('D', 19, struct pfioc_state) +#define DIOCSETSTATUSIF _IOWR('D', 20, struct pfioc_iface) +#define DIOCGETSTATUS _IOWR('D', 21, struct pf_status) +#define DIOCCLRSTATUS _IOWR('D', 22, struct pfioc_iface) +#define DIOCNATLOOK _IOWR('D', 23, struct pfioc_natlook) +#define DIOCSETDEBUG _IOWR('D', 24, u_int32_t) +#define DIOCGETSTATES _IOWR('D', 25, struct pfioc_states) +#define DIOCCHANGERULE _IOWR('D', 26, struct pfioc_rule) +/* cut 27 - 28 */ +#define DIOCSETTIMEOUT _IOWR('D', 29, struct pfioc_tm) +#define DIOCGETTIMEOUT _IOWR('D', 30, struct pfioc_tm) +#define DIOCADDSTATE _IOWR('D', 37, struct pfioc_state) +/* cut 38 */ +#define DIOCGETLIMIT _IOWR('D', 39, struct pfioc_limit) +#define DIOCSETLIMIT _IOWR('D', 40, struct pfioc_limit) +#define DIOCKILLSTATES _IOWR('D', 41, struct pfioc_state_kill) +/* cut 42 - 57 */ +#define DIOCGETRULESETS _IOWR('D', 58, struct pfioc_ruleset) +#define DIOCGETRULESET _IOWR('D', 59, struct pfioc_ruleset) +#define DIOCRCLRTABLES _IOWR('D', 60, struct pfioc_table) +#define DIOCRADDTABLES _IOWR('D', 61, struct pfioc_table) +#define DIOCRDELTABLES _IOWR('D', 62, struct pfioc_table) +#define DIOCRGETTABLES _IOWR('D', 63, struct pfioc_table) +#define DIOCRGETTSTATS _IOWR('D', 64, struct pfioc_table) +#define DIOCRCLRTSTATS _IOWR('D', 65, struct pfioc_table) +#define DIOCRCLRADDRS _IOWR('D', 66, struct pfioc_table) +#define DIOCRADDADDRS _IOWR('D', 67, struct pfioc_table) +#define DIOCRDELADDRS _IOWR('D', 68, struct pfioc_table) +#define DIOCRSETADDRS _IOWR('D', 69, struct pfioc_table) +#define DIOCRGETADDRS _IOWR('D', 70, struct pfioc_table) +#define DIOCRGETASTATS _IOWR('D', 71, struct pfioc_table) +#define DIOCRCLRASTATS _IOWR('D', 72, struct pfioc_table) +#define DIOCRTSTADDRS _IOWR('D', 73, struct pfioc_table) +#define DIOCRSETTFLAGS _IOWR('D', 74, struct pfioc_table) +#define DIOCRINADEFINE _IOWR('D', 77, struct pfioc_table) +#define DIOCOSFPFLUSH _IO('D', 78) +#define DIOCOSFPADD _IOWR('D', 79, struct pf_osfp_ioctl) +#define DIOCOSFPGET _IOWR('D', 80, struct pf_osfp_ioctl) +#define DIOCXBEGIN _IOWR('D', 81, struct pfioc_trans) +#define DIOCXCOMMIT _IOWR('D', 82, struct pfioc_trans) +#define DIOCXROLLBACK _IOWR('D', 83, struct pfioc_trans) +#define DIOCGETSRCNODES _IOWR('D', 84, struct pfioc_src_nodes) +#define DIOCCLRSRCNODES _IO('D', 85) +#define DIOCSETHOSTID _IOWR('D', 86, u_int32_t) +#define DIOCIGETIFACES _IOWR('D', 87, struct pfioc_iface) +#define DIOCSETIFFLAG _IOWR('D', 89, struct pfioc_iface) +#define DIOCCLRIFFLAG _IOWR('D', 90, struct pfioc_iface) +#define DIOCKILLSRCNODES _IOWR('D', 91, struct pfioc_src_node_kill) +#define DIOCSETREASS _IOWR('D', 92, u_int32_t) +#define DIOCADDQUEUE _IOWR('D', 93, struct pfioc_queue) +#define DIOCGETQUEUES _IOWR('D', 94, struct pfioc_queue) +#define DIOCGETQUEUE _IOWR('D', 95, struct pfioc_queue) +#define DIOCGETQSTATS _IOWR('D', 96, struct pfioc_qstats) +#define DIOCSETSYNFLWATS _IOWR('D', 97, struct pfioc_synflwats) +#define DIOCSETSYNCOOKIES _IOWR('D', 98, u_int8_t) +#define DIOCGETSYNFLWATS _IOWR('D', 99, struct pfioc_synflwats) +#define DIOCXEND _IOWR('D', 100, u_int32_t) +#define DIOCADDSTATELIM _IOW('D', 101, struct pfioc_statelim) +#define DIOCADDSOURCELIM _IOW('D', 102, struct pfioc_sourcelim) +#define DIOCGETSTATELIM _IOWR('D', 103, struct pfioc_statelim) +#define DIOCGETSOURCELIM _IOWR('D', 104, struct pfioc_sourcelim) +#define DIOCGETSOURCE _IOWR('D', 105, struct pfioc_source) +#define DIOCGETNSTATELIM _IOWR('D', 106, struct pfioc_statelim) +#define DIOCGETNSOURCELIM _IOWR('D', 107, struct pfioc_sourcelim) +#define DIOCGETNSOURCE _IOWR('D', 108, struct pfioc_source) +#define DIOCCLRSOURCE _IOWR('D', 109, struct pfioc_source_kill) + +#ifdef _KERNEL + +struct pf_pdesc; + +RB_HEAD(pf_src_tree, pf_src_node); +RB_PROTOTYPE(pf_src_tree, pf_src_node, entry, pf_src_compare); +extern struct pf_src_tree tree_src_tracking; + +extern struct pf_state_list pf_state_list; + +TAILQ_HEAD(pf_queuehead, pf_queuespec); +extern struct pf_queuehead pf_queues[2]; +extern struct pf_queuehead *pf_queues_active, *pf_queues_inactive; + +extern struct pool pf_src_tree_pl, pf_sn_item_pl, pf_rule_pl; +extern struct pool pf_state_pl, pf_state_key_pl, pf_state_item_pl, + pf_rule_item_pl, pf_queue_pl, + pf_pktdelay_pl, pf_anchor_pl; +extern struct pool pf_state_scrub_pl; +extern struct pf_rule pf_default_rule; + +extern int pf_tbladdr_setup(struct pf_ruleset *, + struct pf_addr_wrap *, int); +extern void pf_tbladdr_remove(struct pf_addr_wrap *); +extern void pf_tbladdr_copyout(struct pf_addr_wrap *); +extern void pf_calc_skip_steps(struct pf_rulequeue *); +extern void pf_purge_expired_src_nodes(void); +extern void pf_remove_state(struct pf_state *); +extern void pf_remove_divert_state(struct inpcb *); +extern void pf_free_state(struct pf_state *); +int pf_insert_src_node(struct pf_src_node **, + struct pf_rule *, enum pf_sn_types, + sa_family_t, struct pf_addr *, + struct pf_addr *, struct pfi_kif *); +void pf_remove_src_node(struct pf_src_node *); +struct pf_src_node *pf_get_src_node(struct pf_state *, + enum pf_sn_types); +void pf_src_tree_remove_state(struct pf_state *); +void pf_state_rm_src_node(struct pf_state *, + struct pf_src_node *); + +extern struct pf_state *pf_find_state_byid(struct pf_state_cmp *); +extern struct pf_state *pf_find_state_all(struct pf_state_key_cmp *, + u_int, int *); +extern void pf_state_export(struct pfsync_state *, + struct pf_state *); +int pf_state_import(const struct pfsync_state *, + int); +int pf_state_alloc_scrub_memory( + const struct pfsync_state_peer *, + struct pf_state_peer *); +extern void pf_print_state(struct pf_state *); +extern void pf_print_flags(u_int8_t); +extern void pf_addrcpy(struct pf_addr *, struct pf_addr *, + sa_family_t); +extern void pf_cksum_fixup(u_int16_t *, u_int16_t, + u_int16_t, u_int8_t); +void pf_rm_rule(struct pf_rulequeue *, + struct pf_rule *); +struct pf_divert *pf_find_divert(struct mbuf *); +int pf_setup_pdesc(struct pf_pdesc *, sa_family_t, + int, struct pfi_kif *, struct mbuf *, + u_short *); + +int pf_test(sa_family_t, int, struct ifnet *, struct mbuf **); + +void pf_poolmask(struct pf_addr *, struct pf_addr*, + struct pf_addr *, struct pf_addr *, sa_family_t); +void pf_addr_inc(struct pf_addr *, sa_family_t); + +void *pf_pull_hdr(struct mbuf *, int, void *, int, u_short *, sa_family_t); +#define PF_HI (true) +#define PF_LO (!PF_HI) +#define PF_ALGNMNT(off) (((off) % 2) == 0 ? PF_HI : PF_LO) +int pf_patch_8(struct pf_pdesc *, u_int8_t *, u_int8_t, bool); +int pf_patch_16(struct pf_pdesc *, u_int16_t *, u_int16_t); +int pf_patch_16_unaligned(struct pf_pdesc *, void *, u_int16_t, bool); +int pf_patch_32(struct pf_pdesc *, u_int32_t *, u_int32_t); +int pf_patch_32_unaligned(struct pf_pdesc *, void *, u_int32_t, bool); +int pflog_packet(struct pf_pdesc *, u_int8_t, struct pf_rule *, + struct pf_rule *, struct pf_ruleset *, struct pf_rule *); +int pf_match_addr(u_int8_t, struct pf_addr *, struct pf_addr *, + struct pf_addr *, sa_family_t); +int pf_match_addr_range(struct pf_addr *, struct pf_addr *, + struct pf_addr *, sa_family_t); +int pf_match(u_int8_t, u_int32_t, u_int32_t, u_int32_t); +int pf_match_port(u_int8_t, u_int16_t, u_int16_t, u_int16_t); +int pf_match_uid(u_int8_t, uid_t, uid_t, uid_t); +int pf_match_gid(u_int8_t, gid_t, gid_t, gid_t); + +struct pf_state_scrub * + pf_state_scrub_get(void); +void pf_state_scrub_put(struct pf_state_scrub *); + +int pf_refragment6(struct mbuf **, struct m_tag *mtag, + struct sockaddr_in6 *, struct ifnet *, struct rtentry *); +void pf_normalize_init(void); +int pf_normalize_ip(struct pf_pdesc *, u_short *); +int pf_normalize_ip6(struct pf_pdesc *, u_short *); +int pf_normalize_tcp(struct pf_pdesc *); +void pf_normalize_tcp_cleanup(struct pf_state *); +int pf_normalize_tcp_init(struct pf_pdesc *, struct pf_state_peer *); +int pf_normalize_tcp_alloc(struct pf_state_peer *); +int pf_normalize_tcp_stateful(struct pf_pdesc *, u_short *, + struct pf_state *, struct pf_state_peer *, struct pf_state_peer *, + int *); +int pf_normalize_mss(struct pf_pdesc *, u_int16_t); +void pf_scrub(struct mbuf *, u_int16_t, sa_family_t, u_int8_t, u_int8_t); +void pf_purge_expired_fragments(void); +int pf_routable(struct pf_addr *addr, sa_family_t af, struct pfi_kif *, + int); +int pf_rtlabel_match(struct pf_addr *, sa_family_t, struct pf_addr_wrap *, + int); +int pf_socket_lookup(struct pf_pdesc *); +struct pf_state_key *pf_alloc_state_key(int); +int pf_ouraddr(struct mbuf *); +void pf_pkt_addr_changed(struct mbuf *); +struct inpcb *pf_inp_lookup(struct mbuf *); +void pf_inp_link(struct mbuf *, struct inpcb *); +void pf_inp_unlink(struct inpcb *); +int pf_translate(struct pf_pdesc *, struct pf_addr *, u_int16_t, + struct pf_addr *, u_int16_t, u_int16_t, int); +int pf_translate_af(struct pf_pdesc *); +void pf_route(struct pf_pdesc *, struct pf_state *); +void pf_route6(struct pf_pdesc *, struct pf_state *); +void pf_init_threshold(struct pf_threshold *, u_int32_t, u_int32_t); +int pf_delay_pkt(struct mbuf *, u_int); + +void pfr_initialize(void); +int pfr_match_addr(struct pfr_ktable *, struct pf_addr *, sa_family_t); +void pfr_update_stats(struct pfr_ktable *, struct pf_addr *, + struct pf_pdesc *, int, int); +int pfr_pool_get(struct pf_pool *, struct pf_addr **, + struct pf_addr **, sa_family_t); +int pfr_states_increase(struct pfr_ktable *, struct pf_addr *, int); +int pfr_states_decrease(struct pfr_ktable *, struct pf_addr *, int); +struct pfr_kentry * + pfr_kentry_byaddr(struct pfr_ktable *, struct pf_addr *, sa_family_t, + int); +void pfr_dynaddr_update(struct pfr_ktable *, struct pfi_dynaddr *); +struct pfr_ktable * + pfr_attach_table(struct pf_ruleset *, char *, int); +void pfr_detach_table(struct pfr_ktable *); +int pfr_clr_tables(struct pfr_table *, int *, int); +int pfr_add_tables(struct pfr_table *, int, int *, int); +int pfr_del_tables(struct pfr_table *, int, int *, int); +int pfr_get_tables(struct pfr_table *, struct pfr_table *, int *, int); +int pfr_get_tstats(struct pfr_table *, struct pfr_tstats *, int *, int); +int pfr_clr_tstats(struct pfr_table *, int, int *, int); +int pfr_set_tflags(struct pfr_table *, int, int, int, int *, int *, int); +int pfr_clr_addrs(struct pfr_table *, int *, int); +int pfr_insert_kentry(struct pfr_ktable *, struct pfr_addr *, time_t); +int pfr_remove_kentry(struct pfr_ktable *, struct pfr_addr *); + +int pfr_add_addrs(struct pfr_table *, struct pfr_addr *, int, int *, + int); +int pfr_del_addrs(struct pfr_table *, struct pfr_addr *, int, int *, + int); +int pfr_set_addrs(struct pfr_table *, struct pfr_addr *, int, int *, + int *, int *, int *, int, u_int32_t); +int pfr_get_addrs(struct pfr_table *, struct pfr_addr *, int *, int); +int pfr_get_astats(struct pfr_table *, struct pfr_astats *, int *, int); +int pfr_clr_astats(struct pfr_table *, struct pfr_addr *, int, int *, + int); +int pfr_tst_addrs(struct pfr_table *, struct pfr_addr *, int, int *, + int); +int pfr_ina_begin(struct pfr_table *, u_int32_t *, int *, int); +int pfr_ina_rollback(struct pfr_table *, u_int32_t, int *, int); +int pfr_ina_commit(struct pfr_table *, u_int32_t, int *, int *, int); +int pfr_ina_define(struct pfr_table *, struct pfr_addr *, int, int *, + int *, u_int32_t, int); +struct pfr_ktable + *pfr_ktable_select_active(struct pfr_ktable *); + +extern struct pfi_kif *pfi_all; + +void pfi_initialize(void); +struct pfi_kif *pfi_kif_alloc(const char *, int); +void pfi_kif_free(struct pfi_kif *); +struct pfi_kif *pfi_kif_find(const char *); +struct pfi_kif *pfi_kif_get(const char *, struct pfi_kif **); +void pfi_kif_ref(struct pfi_kif *, enum pfi_kif_refs); +void pfi_kif_unref(struct pfi_kif *, enum pfi_kif_refs); +int pfi_kif_match(struct pfi_kif *, struct pfi_kif *); +void pfi_attach_ifnet(struct ifnet *); +void pfi_detach_ifnet(struct ifnet *); +void pfi_attach_ifgroup(struct ifg_group *); +void pfi_detach_ifgroup(struct ifg_group *); +void pfi_group_addmember(const char *); +void pfi_group_delmember(const char *); +int pfi_match_addr(struct pfi_dynaddr *, struct pf_addr *, + sa_family_t); +int pfi_dynaddr_setup(struct pf_addr_wrap *, sa_family_t, int); +void pfi_dynaddr_remove(struct pf_addr_wrap *); +void pfi_dynaddr_copyout(struct pf_addr_wrap *); +void pfi_update_status(const char *, struct pf_status *); +void pfi_get_ifaces(const char *, struct pfi_kif *, int *); +int pfi_set_flags(const char *, int); +int pfi_clear_flags(const char *, int); +void pfi_xcommit(void); + +int pf_match_tag(struct mbuf *, struct pf_rule *, int *); +u_int16_t pf_tagname2tag(char *, int); +void pf_tag2tagname(u_int16_t, char *); +void pf_tag_ref(u_int16_t); +void pf_tag_unref(u_int16_t); +void pf_tag_packet(struct mbuf *, int, int); +int pf_addr_compare(const struct pf_addr *, + const struct pf_addr *, sa_family_t); + +const struct pfq_ops + *pf_queue_manager(struct pf_queuespec *); + +extern struct pf_status pf_status; +extern struct pool pf_frent_pl, pf_frag_pl; + +/* + * Protection/ownership of pf_pool_limit: + * I immutable after pfattach() + * p pf_lock + */ + +struct pf_pool_limit { + void *pp; /* [I] */ + unsigned limit; /* [p] */ + unsigned limit_new; /* [p] */ +}; +extern struct pf_pool_limit pf_pool_limits[PF_LIMIT_MAX]; + +#endif /* _KERNEL */ + +extern struct pf_anchor_global pf_anchors; +extern struct pf_anchor pf_main_anchor; +#define pf_main_ruleset pf_main_anchor.ruleset + +struct tcphdr; + +/* these ruleset functions can be linked into userland programs (pfctl) */ +void pf_init_ruleset(struct pf_ruleset *); +int pf_anchor_setup(struct pf_rule *, + const struct pf_ruleset *, const char *); +int pf_anchor_copyout(const struct pf_ruleset *, + const struct pf_rule *, struct pfioc_rule *); +void pf_remove_anchor(struct pf_rule *); +void pf_remove_if_empty_ruleset(struct pf_ruleset *); +struct pf_anchor *pf_find_anchor(const char *); +struct pf_ruleset *pf_find_ruleset(const char *); +struct pf_ruleset *pf_get_leaf_ruleset(char *, char **); +struct pf_anchor *pf_create_anchor(struct pf_anchor *, const char *); +struct pf_ruleset *pf_find_or_create_ruleset(const char *); +void pf_anchor_rele(struct pf_anchor *); +struct pf_anchor *pf_anchor_take(struct pf_anchor *); + +/* The fingerprint functions can be linked into userland programs (tcpdump) */ +int pf_osfp_add(struct pf_osfp_ioctl *); +#ifdef _KERNEL +struct pf_osfp_enlist * + pf_osfp_fingerprint(struct pf_pdesc *); +#endif /* _KERNEL */ +struct pf_osfp_enlist * + pf_osfp_fingerprint_hdr(const struct ip *, const struct ip6_hdr *, + const struct tcphdr *); +void pf_osfp_flush(void); +int pf_osfp_get(struct pf_osfp_ioctl *); +void pf_osfp_initialize(void); +int pf_osfp_match(struct pf_osfp_enlist *, pf_osfp_t); +struct pf_os_fingerprint * + pf_osfp_validate(void); + +#ifdef _KERNEL +void pf_print_host(struct pf_addr *, u_int16_t, + sa_family_t); +int pf_get_transaddr(struct pf_rule *, struct pf_pdesc *, + struct pf_src_node **, struct pf_rule **); +int pf_map_addr(sa_family_t, struct pf_rule *, + struct pf_addr *, struct pf_addr *, + struct pf_addr *, struct pf_src_node **, + struct pf_pool *, enum pf_sn_types); +int pf_postprocess_addr(struct pf_state *); + +void pf_mbuf_link_state_key(struct mbuf *, + struct pf_state_key *); +void pf_mbuf_unlink_state_key(struct mbuf *); +void pf_mbuf_link_inpcb(struct mbuf *, struct inpcb *); +void pf_mbuf_unlink_inpcb(struct mbuf *); + +u_int8_t* pf_find_tcpopt(u_int8_t *, u_int8_t *, size_t, + u_int8_t, u_int8_t); +u_int8_t pf_get_wscale(struct pf_pdesc *); +u_int16_t pf_get_mss(struct pf_pdesc *, uint16_t); +struct mbuf * pf_build_tcp(const struct pf_rule *, sa_family_t, + const struct pf_addr *, const struct pf_addr *, + u_int16_t, u_int16_t, u_int32_t, u_int32_t, + u_int8_t, u_int16_t, u_int16_t, u_int8_t, int, + u_int16_t, u_int, u_int, u_short *); +void pf_send_tcp(const struct pf_rule *, sa_family_t, + const struct pf_addr *, const struct pf_addr *, + u_int16_t, u_int16_t, u_int32_t, u_int32_t, + u_int8_t, u_int16_t, u_int16_t, u_int8_t, int, + u_int16_t, u_int, u_short *); +void pf_syncookies_init(void); +int pf_syncookies_setmode(u_int8_t); +int pf_syncookies_setwats(u_int32_t, u_int32_t); +int pf_syncookies_getwats(struct pfioc_synflwats *); +int pf_synflood_check(struct pf_pdesc *); +void pf_syncookie_send(struct pf_pdesc *, u_short *); +u_int8_t pf_syncookie_validate(struct pf_pdesc *); +struct mbuf * pf_syncookie_recreate_syn(struct pf_pdesc *, + u_short *); +#endif /* _KERNEL */ + +#endif /* _NET_PFVAR_H_ */ diff --git a/module/include/net/pfvar_priv.h b/module/include/net/pfvar_priv.h new file mode 100644 index 0000000..d8bc3cb --- /dev/null +++ b/module/include/net/pfvar_priv.h @@ -0,0 +1,689 @@ +/* $OpenBSD: pfvar_priv.h,v 1.43 2026/09/10 12:28:04 deraadt Exp $ */ + +/* + * Copyright (c) 2001 Daniel Hartmeier + * Copyright (c) 2002 - 2013 Henning Brauer + * Copyright (c) 2016 Alexander Bluhm + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef _NET_PFVAR_PRIV_H_ +#define _NET_PFVAR_PRIV_H_ + +#ifdef _KERNEL + +#include +#include +#include +#include + +/* + * Locks used to protect struct members in this file: + * L pf_inp_mtx link pf to inp mutex + */ + +struct pfsync_deferral; +struct kstat; + +/* + * PF state links + * + * This is used to augment a struct pf_state so it can be + * tracked/referenced by the state and source address limiter things. + * Each limiter maintains a list of the states they "own", and these + * state links are what the limiters use to wire a state into their + * lists. + * + * Without PF state links, the pf_state struct would have to grow + * a lot to support a feature that may not be used. + * + * pfl_entry is used by the pools to add states to their list. + * pfl_state allows the pools to get from their list of states to + * the states themselves. + * + * pfl_link allows operations on states (well, delete) to be able + * to quickly locate the pf_state_link struct so they can be unwired + * from the pools. + */ + +#define PF_STATE_LINK_TYPE_STATELIM 1 +#define PF_STATE_LINK_TYPE_SOURCELIM 2 + +struct pf_state_link { + /* used by source/state pools to get to states */ + TAILQ_ENTRY(pf_state_link) pfl_link; + + /* used by pf_state to get to source/state pools */ + SLIST_ENTRY(pf_state_link) pfl_linkage; + + struct pf_state *pfl_state; + unsigned int pfl_type; +}; + +TAILQ_HEAD(pf_state_link_list, pf_state_link); +SLIST_HEAD(pf_state_linkage, pf_state_link); + +/* + * pf state items - links from pf_state_key to pf_states + */ + +struct pf_state_item { + TAILQ_ENTRY(pf_state_item) + si_entry; + struct pf_state *si_st; +}; + +TAILQ_HEAD(pf_statelisthead, pf_state_item); + +/* + * pf state keys - look up states by address + */ + +struct pf_state_key { + struct pf_addr addr[2]; + u_int16_t port[2]; + u_int16_t rdomain; + u_int16_t hash; + sa_family_t af; + u_int8_t proto; + + RBT_ENTRY(pf_state_key) sk_entry; + struct pf_statelisthead sk_states; + struct pf_state_key *sk_reverse; + struct inpcb *sk_inp; /* [L] */ + pf_refcnt_t sk_refcnt; + u_int8_t sk_removed; +}; + +RBT_HEAD(pf_state_tree, pf_state_key); +RBT_PROTOTYPE(pf_state_tree, pf_state_key, sk_entry, pf_state_compare_key); + +#define PF_REVERSED_KEY(key, family) \ + ((key[PF_SK_WIRE]->af != key[PF_SK_STACK]->af) && \ + (key[PF_SK_WIRE]->af != (family))) + +/* + * pf state + * + * Protection/ownership of pf_state members: + * I immutable after pf_state_insert() + * M pf_state mtx + * P PF_STATE_LOCK + * S pfsync + * L pf_state_list + * g pf_purge gc + */ + +struct pf_state { + u_int64_t id; /* [I] */ + u_int32_t creatorid; /* [I] */ + u_int8_t direction; /* [I] */ + u_int8_t pad[3]; + + TAILQ_ENTRY(pf_state) sync_list; /* [S] */ + struct pfsync_deferral *sync_defer; /* [S] */ + TAILQ_ENTRY(pf_state) entry_list; /* [L] */ + SLIST_ENTRY(pf_state) gc_list; /* [g] */ + RBT_ENTRY(pf_state) entry_id; /* [P] */ + struct pf_state_peer src; + struct pf_state_peer dst; + struct pf_rule_slist match_rules; /* [I] */ + union pf_rule_ptr rule; /* [I] */ + union pf_rule_ptr anchor; /* [I] */ + union pf_rule_ptr natrule; /* [I] */ + struct pf_addr rt_addr; /* [I] */ + struct pf_sn_head src_nodes; /* [I] */ + struct pf_state_key *key[2]; /* [I] stack and wire */ + struct pfi_kif *kif; /* [I] */ + struct mutex mtx; + pf_refcnt_t refcnt; + u_int64_t packets[2]; + u_int64_t bytes[2]; + int32_t creation; /* [I] */ + int32_t expire; + int32_t pfsync_time; /* [S] */ + int rtableid[2]; /* [I] stack and wire */ + u_int16_t qid; /* [I] */ + u_int16_t pqid; /* [I] */ + u_int16_t tag; /* [I] */ + u_int16_t state_flags; /* [M] */ + u_int8_t log; /* [I] */ + u_int8_t timeout; + u_int8_t sync_state; /* [S] PFSYNC_S_x */ + u_int8_t sync_updates; /* [S] */ + u_int8_t min_ttl; /* [I] */ + u_int8_t set_tos; /* [I] */ + u_int8_t set_prio[2]; /* [I] */ + u_int16_t max_mss; /* [I] */ + u_int16_t if_index_in; /* [I] */ + u_int16_t if_index_out; /* [I] */ + u_int16_t delay; /* [I] */ + u_int8_t rt; /* [I] */ + uint8_t statelim; + uint8_t sourcelim; + struct pf_state_linkage linkage; +}; + +RBT_HEAD(pf_state_tree_id, pf_state); +RBT_PROTOTYPE(pf_state_tree_id, pf_state, entry_id, pf_state_compare_id); +extern struct pf_state_tree_id tree_id; + +/* + * states are linked into a global list to support the following + * functionality: + * + * - garbage collection + * - pfsync bulk send operations + * - bulk state fetches via the DIOCGETSTATES ioctl + * - bulk state clearing via the DIOCCLRSTATES ioctl + * + * states are inserted into the global pf_state_list once it has also + * been successfully added to the various trees that make up the state + * table. states are only removed from the pf_state_list by the garbage + * collection process. + * + * the pf_state_list head and tail pointers (ie, the pfs_list TAILQ_HEAD + * structure) and the pointers between the entries on the pf_state_list + * are locked separately. at a high level, this allows for insertion + * of new states into the pf_state_list while other contexts (eg, the + * ioctls) are traversing the state items in the list. for garbage + * collection to remove items from the pf_state_list, it has to exclude + * both modifications to the list head and tail pointers, and traversal + * of the links between the states. + * + * the head and tail pointers are protected by a mutex. the pointers + * between states are protected by an rwlock. + * + * because insertions are only made to the end of the list, if we get + * a snapshot of the head and tail of the list and prevent modifications + * to the links between states, we can safely traverse between the + * head and tail entries. subsequent insertions can add entries after + * our view of the tail, but we don't look past our view. + * + * if both locks must be taken, the rwlock protecting the links between + * states is taken before the mutex protecting the head and tail + * pointer. + * + * insertion into the list follows this pattern: + * + * // serialise list head/tail modifications + * mtx_enter(&pf_state_list.pfs_mtx); + * TAILQ_INSERT_TAIL(&pf_state_list.pfs_list, state, entry_list); + * mtx_leave(&pf_state_list.pfs_mtx); + * + * traversal of the list: + * + * // lock against the gc removing an item from the list + * rw_enter_read(&pf_state_list.pfs_rwl); + * + * // get a snapshot view of the ends of the list + * mtx_enter(&pf_state_list.pfs_mtx); + * head = TAILQ_FIRST(&pf_state_list.pfs_list); + * tail = TAILQ_LAST(&pf_state_list.pfs_list, pf_state_queue); + * mtx_leave(&pf_state_list.pfs_mtx); + * + * state = NULL; + * next = head; + * + * while (state != tail) { + * state = next; + * next = TAILQ_NEXT(state, entry_list); + * + * // look at the state + * } + * + * rw_exit_read(&pf_state_list.pfs_rwl); + * + * removing an item from the list: + * + * // wait for iterators (readers) to get out + * rw_enter_write(&pf_state_list.pfs_rwl); + * + * // serialise list head/tail modifications + * mtx_enter(&pf_state_list.pfs_mtx); + * TAILQ_REMOVE(&pf_state_list.pfs_list, state, entry_list); + * mtx_leave(&pf_state_list.pfs_mtx); + * + * rw_exit_write(&pf_state_list.pfs_rwl); + * + * the lock ordering for pf_state_list locks and the rest of the pf + * locks are: + * + * 1. KERNEL_LOCK + * 2. NET_LOCK + * 3. pf_state_list.pfs_rwl + * 4. PF_LOCK + * 5. PF_STATE_LOCK + * 6. pf_state_list.pfs_mtx + */ + +struct pf_state_list { + /* the list of states in the system */ + struct pf_state_queue pfs_list; + + /* serialise pfs_list head/tail access */ + struct mutex pfs_mtx; + + /* serialise access to pointers between pfs_list entries */ + struct rwlock pfs_rwl; +}; + +#define PF_STATE_LIST_INITIALIZER(_pfs) { \ + .pfs_list = TAILQ_HEAD_INITIALIZER(_pfs.pfs_list), \ + .pfs_mtx = MUTEX_INITIALIZER(IPL_SOFTNET), \ + .pfs_rwl = RWLOCK_INITIALIZER("pfstates"), \ +} + +/* + * State limiter + */ + +struct pf_statelim { + RBT_ENTRY(pf_statelim) pfstlim_id_tree; + RBT_ENTRY(pf_statelim) pfstlim_nm_tree; + TAILQ_ENTRY(pf_statelim) pfstlim_list; + struct kstat *pfstlim_ks; + + uint32_t pfstlim_id; + char pfstlim_nm[PF_STATELIM_NAME_LEN]; + + /* config */ + + unsigned int pfstlim_limit; + struct { + unsigned int limit; + unsigned int seconds; + } pfstlim_rate; + + /* run state */ + struct pc_lock pfstlim_lock; + + /* rate limiter */ + uint64_t pfstlim_rate_ts; + uint64_t pfstlim_rate_token; + uint64_t pfstlim_rate_bucket; + + unsigned int pfstlim_inuse; + struct pf_state_link_list pfstlim_states; + + /* counters */ + + struct { + uint64_t admitted; + uint64_t hardlimited; + uint64_t ratelimited; + } pfstlim_counters; + + struct { + time_t created; + time_t updated; + time_t cleared; + } pfstlim_timestamps; +}; + +RBT_HEAD(pf_statelim_id_tree, pf_statelim); +RBT_PROTOTYPE(pf_statelim_id_tree, pf_statelim, pfstlim_id_tree, cmp); + +RBT_HEAD(pf_statelim_nm_tree, pf_statelim); +RBT_PROTOTYPE(pf_statelim_nm_tree, pf_statelim, pfstlim_nm_tree, cmp); + +TAILQ_HEAD(pf_statelim_list, pf_statelim); + +extern struct pf_statelim_id_tree pf_statelim_id_tree_active; +extern struct pf_statelim_list pf_statelim_list_active; + +extern struct pf_statelim_id_tree pf_statelim_id_tree_inactive; +extern struct pf_statelim_nm_tree pf_statelim_nm_tree_inactive; +extern struct pf_statelim_list pf_statelim_list_inactive; + +static inline unsigned int +pf_statelim_enter(struct pf_statelim *pfstlim) +{ + return (pc_sprod_enter(&pfstlim->pfstlim_lock)); +} + +static inline void +pf_statelim_leave(struct pf_statelim *pfstlim, unsigned int gen) +{ + pc_sprod_leave(&pfstlim->pfstlim_lock, gen); +} + +/* + * Source address pools + */ + +struct pf_sourcelim; + +struct pf_source { + RBT_ENTRY(pf_source) pfsr_tree; + RBT_ENTRY(pf_source) pfsr_ioc_tree; + struct pf_sourcelim *pfsr_parent; + + sa_family_t pfsr_af; + u_int16_t pfsr_rdomain; + struct pf_addr pfsr_addr; + + /* run state */ + + unsigned int pfsr_inuse; + unsigned int pfsr_intable; + struct pf_state_link_list pfsr_states; + time_t pfsr_empty_ts; + TAILQ_ENTRY(pf_source) pfsr_empty_gc; + + /* rate limiter */ + uint64_t pfsr_rate_ts; + + struct { + uint64_t admitted; + uint64_t hardlimited; + uint64_t ratelimited; + } pfsr_counters; +}; + +RBT_HEAD(pf_source_tree, pf_source); +RBT_PROTOTYPE(pf_source_tree, pf_source, pfsr_tree, cmp); + +RBT_HEAD(pf_source_ioc_tree, pf_source); +RBT_PROTOTYPE(pf_source_ioc_tree, pf_source, pfsr_ioc_tree, cmp); + +TAILQ_HEAD(pf_source_list, pf_source); + +struct pf_sourcelim { + RBT_ENTRY(pf_sourcelim) pfsrlim_id_tree; + RBT_ENTRY(pf_sourcelim) pfsrlim_nm_tree; + TAILQ_ENTRY(pf_sourcelim) pfsrlim_list; + struct kstat *pfsrlim_ks; + + uint32_t pfsrlim_id; + char pfsrlim_nm[PF_SOURCELIM_NAME_LEN]; + unsigned int pfsrlim_disabled; + + /* config */ + + unsigned int pfsrlim_entries; + unsigned int pfsrlim_limit; + unsigned int pfsrlim_ipv4_prefix; + unsigned int pfsrlim_ipv6_prefix; + + struct { + unsigned int limit; + unsigned int seconds; + } pfsrlim_rate; + + struct { + char name[PF_TABLE_NAME_SIZE]; + unsigned int hwm; + unsigned int lwm; + struct pfr_ktable *table; + } pfsrlim_overload; + + /* run state */ + struct pc_lock pfsrlim_lock; + + struct pf_addr pfsrlim_ipv4_mask; + struct pf_addr pfsrlim_ipv6_mask; + + uint64_t pfsrlim_rate_token; + uint64_t pfsrlim_rate_bucket; + + /* number of pf_sources */ + unsigned int pfsrlim_nsources; + struct pf_source_tree pfsrlim_sources; + struct pf_source_ioc_tree pfsrlim_ioc_sources; + + struct { + /* number of times pf_source was allocated */ + uint64_t addrallocs; + /* state was rejected because the address limit was hit */ + uint64_t addrlimited; + /* no memory to create address thing */ + uint64_t addrnomem; + + /* sum of pf_source inuse gauges */ + uint64_t inuse; + /* sum of pf_source admitted counters */ + uint64_t admitted; + /* sum of pf_source hardlimited counters */ + uint64_t hardlimited; + /* sum of pf_source ratelimited counters */ + uint64_t ratelimited; + } pfsrlim_counters; +}; + +RBT_HEAD(pf_sourcelim_id_tree, pf_sourcelim); +RBT_PROTOTYPE(pf_sourcelim_id_tree, pf_sourcelim, pfsrlim_id_tree, cmp); + +RBT_HEAD(pf_sourcelim_nm_tree, pf_sourcelim); +RBT_PROTOTYPE(pf_sourcelim_nm_tree, pf_sourcelim, pfsrlim_nm_tree, cmp); + +TAILQ_HEAD(pf_sourcelim_list, pf_sourcelim); + +extern struct pf_sourcelim_id_tree pf_sourcelim_id_tree_active; +extern struct pf_sourcelim_list pf_sourcelim_list_active; + +extern struct pf_sourcelim_id_tree pf_sourcelim_id_tree_inactive; +extern struct pf_sourcelim_nm_tree pf_sourcelim_nm_tree_inactive; +extern struct pf_sourcelim_list pf_sourcelim_list_inactive; + +static inline unsigned int +pf_sourcelim_enter(struct pf_sourcelim *pfsrlim) +{ + return (pc_sprod_enter(&pfsrlim->pfsrlim_lock)); +} + +static inline void +pf_sourcelim_leave(struct pf_sourcelim *pfsrlim, unsigned int gen) +{ + pc_sprod_leave(&pfsrlim->pfsrlim_lock, gen); +} + +/* + * pf internals + */ + +extern struct rwlock pf_lock; + +struct pf_pdesc { + struct { + int done; + uid_t uid; + gid_t gid; + pid_t pid; + } lookup; + u_int64_t tot_len; /* Make Mickey money */ + + struct pf_addr nsaddr; /* src address after NAT */ + struct pf_addr ndaddr; /* dst address after NAT */ + + struct pfi_kif *kif; /* incoming interface */ + struct mbuf *m; /* mbuf containing the packet */ + struct pf_addr *src; /* src address */ + struct pf_addr *dst; /* dst address */ + u_int16_t *pcksum; /* proto cksum */ + u_int16_t *sport; + u_int16_t *dport; + u_int16_t osport; + u_int16_t odport; + u_int16_t hash; + u_int16_t nsport; /* src port after NAT */ + u_int16_t ndport; /* dst port after NAT */ + + u_int32_t off; /* protocol header offset */ + u_int32_t hdrlen; /* protocol header length */ + u_int32_t p_len; /* length of protocol payload */ + u_int32_t extoff; /* extension header offset */ + u_int32_t fragoff; /* fragment header offset */ + u_int32_t jumbolen; /* length from v6 jumbo header */ + u_int32_t badopts; /* v4 options or v6 routing headers */ +#define PF_OPT_OTHER 0x0001 +#define PF_OPT_JUMBO 0x0002 +#define PF_OPT_ROUTER_ALERT 0x0004 + + u_int16_t rdomain; /* original routing domain */ + u_int16_t virtual_proto; +#define PF_VPROTO_FRAGMENT 256 + sa_family_t af; + sa_family_t naf; + u_int8_t proto; + u_int8_t tos; + u_int8_t ttl; + u_int8_t dir; /* direction */ + u_int8_t sidx; /* key index for source */ + u_int8_t didx; /* key index for destination */ + u_int8_t destchg; /* flag set when destination changed */ + u_int8_t pflog; /* flags for packet logging */ + union { + struct tcphdr tcp; + struct udphdr udp; + struct icmp icmp; +#ifdef INET6 + struct icmp6_hdr icmp6; + struct mld_hdr mld; + struct nd_neighbor_solicit nd_ns; +#endif /* INET6 */ + } hdr; +}; + +struct pf_anchor_stackframe { + struct pf_ruleset *sf_rs; + struct pf_rule *sf_anchor; + union { + struct pf_rule *u_r; + struct pf_anchor_stackframe *u_stack_top; + } u; + struct pf_anchor *sf_child; + int sf_jump_target; +}; +#define sf_r u.u_r +#define sf_stack_top u.u_stack_top +enum { + PF_NEXT_RULE, + PF_NEXT_CHILD +}; + +extern struct cpumem *pf_anchor_stack; + +enum pf_trans_type { + PF_TRANS_NONE, + PF_TRANS_GETRULE, + PF_TRANS_MAX +}; + +struct pf_trans { + LIST_ENTRY(pf_trans) pft_entry; + uint32_t pft_unit; /* process id */ + uint64_t pft_ticket; + enum pf_trans_type pft_type; + union { + struct { + u_int32_t gr_version; + struct pf_anchor *gr_anchor; + struct pf_rule *gr_rule; + } u_getrule; + } u; +}; + +#define pftgr_version u.u_getrule.gr_version +#define pftgr_anchor u.u_getrule.gr_anchor +#define pftgr_rule u.u_getrule.gr_rule + +extern struct timeout pf_purge_states_to; +extern struct task pf_purge_task; +extern struct timeout pf_purge_to; + +struct pf_state *pf_state_ref(struct pf_state *); +void pf_state_unref(struct pf_state *); + +extern struct rwlock pf_lock; +extern struct rwlock pf_state_lock; +extern struct mutex pf_frag_mtx; +extern struct mutex pf_inp_mtx; + +#define PF_LOCK() do { \ + rw_enter_write(&pf_lock); \ + } while (0) + +#define PF_UNLOCK() do { \ + PF_ASSERT_LOCKED(); \ + rw_exit_write(&pf_lock); \ + } while (0) + +#define PF_ASSERT_LOCKED() do { \ + if (rw_status(&pf_lock) != RW_WRITE) \ + splassert_fail(RW_WRITE, \ + rw_status(&pf_lock),__func__);\ + } while (0) + +#define PF_ASSERT_UNLOCKED() do { \ + if (rw_status(&pf_lock) == RW_WRITE) \ + splassert_fail(0, rw_status(&pf_lock), __func__);\ + } while (0) + +#define PF_STATE_ENTER_READ() do { \ + rw_enter_read(&pf_state_lock); \ + } while (0) + +#define PF_STATE_EXIT_READ() do { \ + rw_exit_read(&pf_state_lock); \ + } while (0) + +#define PF_STATE_ENTER_WRITE() do { \ + rw_enter_write(&pf_state_lock); \ + } while (0) + +#define PF_STATE_EXIT_WRITE() do { \ + PF_STATE_ASSERT_LOCKED(); \ + rw_exit_write(&pf_state_lock); \ + } while (0) + +#define PF_STATE_ASSERT_LOCKED() do { \ + if (rw_status(&pf_state_lock) != RW_WRITE)\ + splassert_fail(RW_WRITE, \ + rw_status(&pf_state_lock), __func__);\ + } while (0) + +#define PF_FRAG_LOCK() mtx_enter(&pf_frag_mtx) +#define PF_FRAG_UNLOCK() mtx_leave(&pf_frag_mtx) + +/* for copies to/from network byte order */ +void pf_state_peer_hton(const struct pf_state_peer *, + struct pfsync_state_peer *); +void pf_state_peer_ntoh(const struct pfsync_state_peer *, + struct pf_state_peer *); +u_int16_t pf_pkt_hash(sa_family_t, uint8_t, + const struct pf_addr *, const struct pf_addr *, + uint16_t, uint16_t); + +void pf_status_init(void); +void pf_status_clear(void); +int pf_status_read(struct pf_status *); + +#endif /* _KERNEL */ + +#endif /* _NET_PFVAR_PRIV_H_ */ diff --git a/module/include/pfk.h b/module/include/pfk.h new file mode 100644 index 0000000..c33426d --- /dev/null +++ b/module/include/pfk.h @@ -0,0 +1,338 @@ +/* + * PF-on-Linux: master compatibility header (pfk). + * + * Every ported OpenBSD file includes INSTEAD of the original + * #include block. pfk.h pulls Linux headers first, then provides the + * OpenBSD-flavored types/APIs the PF code expects, so the ported logic + * stays line-proximate to upstream (ISC, (c) 2026 PF-on-Linux contributors; + * ported code: OpenBSD project, see LICENSE). + */ +#ifndef _PFK_H +#define _PFK_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* ------------------------------------------------------------ basic types */ +#ifndef u_int8_t +typedef __u8 u_int8_t; +#endif +#ifndef u_int16_t +typedef __u16 u_int16_t; +#endif +#ifndef u_int32_t +typedef __u32 u_int32_t; +#endif +#ifndef u_int64_t +typedef __u64 u_int64_t; +#endif +#ifndef u64 +typedef __u64 u64; +#endif +#ifndef u_int +typedef unsigned int u_int; +#endif +#ifndef u_char +typedef unsigned char u_char; +#endif +/* caddr_t/time_t/timeval: kernel provides caddr_t; BSD time types below */ +#ifndef u_short +typedef unsigned short u_short; +#endif +typedef __be16 pf_in_port_t; +typedef __be32 pf_in_addr_t; +/* uapi linux/in6.h already provides s6_addr/s6_addr16/s6_addr32 macros + * matching OpenBSD usage on the same union layout. */ + +/* roundup/MIN/MAX/rounddown/NULL/PTR_ALIGN are already provided by the + * Linux kernel headers — use those. BSD-only extras kept under unique names. */ +#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) +#define howmany(x, y) (((x)+((y)-1))/(y)) +#define MINIMUM(a, b) (((a) < (b)) ? (a) : (b)) +#define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b)) +#define PFK_PTR_ALIGN(p) ((caddr_t)(((unsigned long)(p) + 3) & ~3UL)) +#define P2ALIGN(x, y) ((x) & -(y)) + +/* OpenBSD rwlock name; the kernel has its own debug `struct rwlock`, so the + * BSD-visible struct is pfk_rwlock + alias macro (no further kernel headers + * are included after pfk.h, so the alias cannot leak). */ +struct pfk_rwlock { + struct rw_semaphore sem; + const char *name; + int is_writer; + atomic_t readers; +}; +#define rwlock pfk_rwlock +#define rwlock_s pfk_rwlock + +/* OpenBSD ioctl encoding: OUR kernel-side and our Linux pfctl use EXACTLY + * these macros so _IOR/_IOW direction bits stay bit-compatible with + * OpenBSD (Linux asm/ioctl.h differs). Ported TUs must include NO further + * kernel headers after pfk.h (see porting-notes). */ +#undef _IO +#undef _IOR +#undef _IOW +#undef _IOWR +#define PFKXIOC_NRBITS 8 +#define PFKXIOC_TYPEBITS 8 +#define PFKXIOC_SIZEBITS 13 +#define PFKXIOC_DIRBITS 2 +#define PFKXIOC_NRSHIFT 0 +#define PFKXIOC_TYPESHIFT (PFKXIOC_NRSHIFT + PFKXIOC_NRBITS) +#define PFKXIOC_SIZESHIFT (PFKXIOC_TYPESHIFT + PFKXIOC_TYPEBITS) +#define PFKXIOC_DIRSHIFT (PFKXIOC_SIZESHIFT + PFKXIOC_SIZEBITS + 1) +#define PFKXIOC_NONE 0U +#define PFKXIOC_WRITE 1U /* OpenBSD IOC_IN (copyin) */ +#define PFKXIOC_READ 2U /* OpenBSD IOC_OUT (copyout) */ +#define PFKXIOC(dir,type,nr,size) \ + (((dir) << PFKXIOC_DIRSHIFT) | ((type) << PFKXIOC_TYPESHIFT) | \ + ((nr) << PFKXIOC_NRSHIFT) | ((size) << PFKXIOC_SIZESHIFT)) +#define _IO(t, n) PFKXIOC(PFKXIOC_NONE, (t), (n), 0) +#define _IOWR(t, n, s) PFKXIOC(PFKXIOC_WRITE|PFKXIOC_READ, (t), (n), sizeof(s)) +#define _IOW(t, n, s) PFKXIOC(PFKXIOC_WRITE, (t), (n), sizeof(s)) +#define _IOR(t, n, s) PFKXIOC(PFKXIOC_READ, (t), (n), sizeof(s)) +#define PFKIOC_TYPE(nr) (((nr) >> PFKXIOC_TYPESHIFT) & ((1U<> PFKXIOC_NRSHIFT) & ((1U<> PFKXIOC_DIRSHIFT) & ((1U< → resolves to the kernel's net/route.h; + * BSD-only bits it expects must be provided here. */ +#define RTLABEL_LEN 32 + +/* syslog levels (BSD numbering == Linux numbering for these) */ +#define LOG_EMERG 0 +#define LOG_ALERT 1 +#define LOG_CRIT 2 +#define LOG_ERR 3 +#define LOG_WARNING 4 +#define LOG_NOTICE 5 +#define LOG_INFO 6 +#define LOG_DEBUG 7 +void pfk_log(int level, const char *fmt, ...); +#define log pfk_log +#define printf pfk_printk_compat +int pfk_printk_compat(const char *fmt, ...); +#define panic(x...) do { pr_emerg("pfk panic: " x); BUG(); } while (0) + +/* time */ +typedef long time_t; +struct timeval { long tv_sec; long tv_usec; }; /* BSD layout (uapi may clash) */ +static inline __u64 pfk_time_sec(void) { return ktime_get_seconds(); } +static inline __u64 pfk_time_ms(void) { return ktime_get_ns() / 1000000ULL; } +struct pfk_timeval { __s64 tv_sec; __s64 tv_usec; }; +static inline void pfk_getmicrotime(struct pfk_timeval *tv) +{ + struct timespec64 ts; + ktime_get_real_ts64(&ts); + tv->tv_sec = ts.tv_sec; + tv->tv_usec = ts.tv_nsec / 1000; +} +static inline __s64 pfk_ntptime_delta(void) { return 0; } /* PFLINUX: ntpd adj not modeled */ + +/* MALLOC / pool */ +#define M_TEMP 0x10000 +#define M_PF 0x10001 +#define M_DEVBUF 0x10002 +#define M_IFADDR 0x10003 +#define M_PFX 0x10004 +#define M_TAG 0x10005 +#define M_PFADDR 0x10006 +#define M_PFRWP 0x10007 +#define M_PFTOC 0x10008 +#define M_PFRTABLE 0x10009 +#define M_IFMADDR 0x1000a +#define M_PFXSRC 0x1000b +#define M_ZOMBIE 0x1000c +#define M_PCR 0x1000d +#define M_PRoute 0x1000e + +#define M_NOWAIT 0x01 +#define M_WAITOK 0x02 +#define M_CANFAIL 0x04 +#define M_ZERO 0x08 + +void *pfk_malloc(size_t sz, int flags); +void pfk_free(void *p); +#define malloc(sz, t, f) pfk_malloc((sz), (f)) +#define free(p, t) pfk_free(p) + +/* + * pools: struct pool backed by kmem_cache when size fixed (pool_init), + * lazily created on first get for simplicity of many small pools. + */ +struct pool { + struct kmem_cache *slab; + size_t p_size; + int p_flags; /* PR_WAITOK semantics via M_* on init */ + unsigned long p_alloc; + unsigned long p_used; + unsigned long p_hardlimit; + struct list_head p_objects; /* for zeroed reuse semantics if needed */ +}; +#define PR_WAITOK 0x01 +#define PR_NOWAIT 0x02 +#define PR_ZERO 0x08 +struct srcptr_static { const char *file; int line; }; +#define SRCPOINT() (&(struct srcptr_static){__FILE__, __LINE__}) + +int pool_init(struct pool *pl, size_t size, int align, int ipl, + const char *use, void *p, int flags, + void (*ih)(void *, void *), void *arg, struct srcptr_static *sp); +void pool_destroy(struct pool *pl); +void *pool_get(struct pool *pl, int flags); +void pool_put(struct pool *pl, void *v); +void pool_sethardlimit(struct pool *pl, unsigned long lim, const char *msg, int msglevel); + +/* timeout.h: OpenBSD embeds `struct timeout` in statics/globals → fixed layout */ +#include "compat/sys/timeout.h" +void timeout_set(struct timeout *to, timeout_fn *fn, void *arg); +void timeout_set_micro(struct timeout *to, timeout_fn *fn, void *arg); +int timeout_add(struct timeout *to, long ms); +int timeout_add_sec(struct timeout *to, int secs); +int timeout_add_usec(struct timeout *to, int us); +int timeout_del(struct timeout *to); +void timeout_barrier(struct timeout *to, int flags); +void timeout_del_sync(struct timeout *to); +int timeout_pending(struct timeout *to); +int tsleep(void *p, int pr, const char *w, int timo); /* PFLINUX: control-path only */ +#define wakeup pfk_wakeup +void pfk_wakeup(void *p); + +/* refcnt.h */ +#include "compat/sys/refcnt.h" + +/* rnd / random */ +static inline u_int32_t arc4random(void) { return get_random_u32(); } +static inline void arc4random_buf(void *b, size_t l) { get_random_bytes(b, l); } +static inline u_int32_t arc4random_uniform(u_int32_t n) { return get_random_u32_below(n); } +static inline u_int32_t rnd(void) { return get_random_u32(); } +static inline u_int32_t random(void) { return get_random_u32(); } +#define karc4random() get_random_u32() +#define karc4random_uniform(n) get_random_u32_below(n) + +/* copyin/copyout */ +#define copyin(u, k, l) (copy_from_user((k), (u), (l)) ? EFAULT : 0) +#define copyout(k, u, l) (copy_to_user((u), (k), (l)) ? EFAULT : 0) + +/* assert-ish */ +#define KASSERT(cond) WARN_ON(!(cond)) +#define __arraycount(a) (sizeof(a) / sizeof((a)[0])) +#define __predictfalse(x) unlikely(x) +#define __predicttrue(x) likely(x) +#define __predict(x, y) ((y) ? likely(x) : unlikely(x)) +#define __UNCONST(a) ((void *)(unsigned long)(const void *)(a)) + +/* NET_LOCK: OpenBSD global network rwlock. PF data path runs under NET_READ; + * ioctls take NET_LOCK (write). We map to a global rw_semaphore. */ +void pfk_net_lock_init(void); +void pfk_net_lock(void); /* write */ +void pfk_net_unlock(void); +void pfk_net_read_enter(void); /* read */ +void pfk_net_read_release(void); +#define NET_LOCK() pfk_net_lock() +#define NET_UNLOCK() pfk_net_unlock() +#define NET_READ_ENTER() pfk_net_read_enter() +#define NET_READ_RELEASE() pfk_net_read_release() +void rw_init(struct rwlock_s *l, const char *name); +void rw_enter(struct rwlock_s *l, int mode); +void rw_exit(struct rwlock_s *l); +int rw_status(struct rwlock_s *l); +#define RW_READER 1 +#define RW_WRITER 2 +#define RW_NAPUTS 0 +#define rw_assert(l, m) do { } while (0) /* PFLINUX: advisory */ + +/* BSD queue.h/tree.h/staged helpers — the Linux kernel's list.h/rbtree.h + * define a few identically-named macros; ported TUs never use Linux's + * list APIs via those names, so we clear and override. */ +#undef LIST_HEAD +#undef LIST_HEAD_INIT +#undef RB_ROOT +#undef RB_CLEAR_NODE +#include "compat/sys/queue.h" +#include "compat/sys/tree.h" +#include "compat/sys/socket.h" +#include "compat/net/if_types.h" +#include "compat/net/if_var.h" + +/* mbuf + BSD wire structs + pf ifnet registry */ +#include "pfk_mbuf.h" +#include "pfk_net.h" +#include "pfk_if.h" + +/* OpenBSD digest + toeplitz helpers (vendored into compat/crypto, compat/net) */ +#include "compat/net/toeplitz.h" +#include "compat/crypto/siphash.h" + +/* pf headers resolve via -I module/include */ +#define NPFSYNC 0 +#define NPFLOG 1 +#define NPFLOW 0 +#define NCARP 0 +#define NPF 1 + +void pfk_mod_init_done(void); + +#endif /* _PFK_H */ diff --git a/module/include/pfk_api.h b/module/include/pfk_api.h new file mode 100644 index 0000000..9a8e15a --- /dev/null +++ b/module/include/pfk_api.h @@ -0,0 +1,13 @@ +/* PFLINUX internal API (module-internal prototypes) */ +#ifndef _PFK_API_H +#define _PFK_API_H +#include +#include + +long pfk_ioctl(struct file *f, unsigned int cmd, unsigned long addr); +int pfk_enable(int on); +void pfk_status(struct pf_status *s); +int pfk_hooks_register(void); +void pfk_hooks_unregister(void); + +#endif diff --git a/module/include/pfk_if.h b/module/include/pfk_if.h new file mode 100644 index 0000000..af6b671 --- /dev/null +++ b/module/include/pfk_if.h @@ -0,0 +1,102 @@ +/* + * PF-on-Linux: ifnet/address registry — OpenBSD `struct ifnet`/`in_ifaddr` + * views over Linux net_device + in_ifaddr lists (ISC 2026). + */ +#ifndef _PFK_IF_H +#define _PFK_IF_H + +struct pfk_ifaddr { + struct pfk_ifaddr *ifa_next; + struct pfk_ifnet *ifa_ifp; + int ifa_refcnt; + int ifa_flags; /* BSD IFA_* */ + struct sockaddr_storage ifa_addr_storage; /* BSD-ish sockaddr */ + struct sockaddr *ifa_addr; /* -> storage */ + struct sockaddr *ifa_mask; + struct net_device *dev; + __be32 addr4; + struct in6_addr addr6; + int family; /* AF_INET/AF_INET6 */ + int scope; /* link/site for v6 */ +}; + +struct pfk_ifqueue; /* M5 */ + +struct pfk_ifnet { + char if_xname[IFNAMSIZ]; + int if_index; + struct net_device *dev; + int if_flags; /* BSD-mapped IFF_* */ + int if_xflags; /* BSD IFFX_* */ + int if_type; /* IFT_* */ + int if_mtu; + void *if_softc; + struct pfk_ifaddr *if_addrlist; /* refreshed snapshot */ + struct pf_kif *if_pf_kif; /* pf_if glue */ + struct pfk_ifqueue *if_snd; /* M5 */ + void *if_pf_rtable; /* unused (rt tables NG) */ + int if_rdomain; /* always 0 (NG), kept for ABI */ + struct rcu_head rcu; + struct list_head link; + int alive; +}; + +#define if_output pfk_if_output_placeholder +struct pfk_ifnet *pfk_ifp_byindex(int idx); /* NULL if gone */ +struct pfk_ifnet *pfk_ifp_byname(const char *name); +struct pfk_ifnet *pfk_ifp_bydev(struct net_device *dev); +int pfk_if_addrlist_refresh(struct pfk_ifnet *ifp); /* NET_LOCK held */ +void pfk_if_free(struct pfk_ifnet *ifp); + +/* BSD IFF_* bits (OpenBSD values) — distinct from Linux! */ +#define PFIFF_UP 0x00000001 +#define PFIFF_BROADCAST 0x00000002 +#define PFIFF_DEBUG 0x00000004 +#define PFIFF_LOOPBACK 0x00000008 +#define PFIFF_POINTOPOINT 0x00000010 +#define PFIFF_RUNNING 0x00000040 +#define PFIFF_PROMISC 0x00000100 +#define PFIFF_ALLMULTI 0x00000200 +#define PFIFF_MULTICAST 0x00008000 +#define PFIFF_RESOLVE 0x02000000 +#define PFIFF_IPV4 0x10000000 +#define PFIFF_IPV6 0x20000000 + +/* NOTE: BSD IFF_* bit values are PFIFF_*; staged port files are sed'ed + * IFF_* → PFIFF_* (IFF_ macros must NEVER alias linux netdev flags). + * BSD IFA_* */ +#define IFA_BROADCAST_ 0x02 +#define IFA_PRIMARY_ 0x04 +#define IFA_SECONDARY_ 0x08 + +struct mbuf_list { struct mbuf *ml_first, *ml_last; int ml_len; }; + +/* egress interface (default-route dev), maintained on fib/net events */ +struct pfk_ifnet *pfk_egress_if(void); +void pfk_egress_refresh(void); + +int pfk_if_init(void); +void pfk_if_exit(void); +void pfk_if_refresh(struct pfk_ifnet *ifp); +struct pfk_ifnet *pfk_if_first(void); +struct pfk_ifnet *pfk_if_next(struct pfk_ifnet *ifp); +struct pfk_ifnet *pfk_if_next_from(int *idp); +struct net_device *ip_rt_get_default_dev(struct net *net); + +/* xmit API used by pf_route/pf output (implemented in pfk_xmit.c) */ +int if_output_tso(struct pfk_ifnet *ifp, struct mbuf **mp, + struct sockaddr *dst, void *rt, int mtu); +int if_output_ml(struct pfk_ifnet *ifp, struct mbuf_list *ml, + struct sockaddr *dst, void *rt); +int if_enqueue(struct pfk_ifnet *ifp, struct mbuf *m); + +/* addr lookups (ifa_ifwithaddr, in_ifwithaddr etc.) */ +struct pfk_ifaddr *pfk_ifwithaddr(const struct sockaddr *sa); +struct pfk_ifaddr *pfk_ifwithroute(int family, const struct sockaddr *dst, + const struct sockaddr *gate, struct pfk_ifnet **ifp_out); + +/* mib-ish status for pfctl DIOCGIFSTATS */ +struct pfk_if_data { unsigned long long ifi_ibytes, ifi_obytes; }; +void pfk_if_stats(struct pfk_ifnet *ifp, struct pfk_if_data *out); + +#endif /* _PFK_IF_H */ diff --git a/module/include/pfk_mbuf.h b/module/include/pfk_mbuf.h new file mode 100644 index 0000000..aee499a --- /dev/null +++ b/module/include/pfk_mbuf.h @@ -0,0 +1,166 @@ +/* + * PF-on-Linux mbuf shim: OpenBSD `struct mbuf` over Linux `sk_buff`. + * + * Design (see spec §4.1): PF-facing mbufs are ALWAYS single-segment + * (linearized on ingress). `m_data`/`m_len` mirror `skb->data`/`skb->len`. + * `m_pkthdr` carries PF's per-packet metadata (pf.* bits, ph.* aliases). + * Chains (m_next) are used only by our own concatenation (m_cat → copy); + * upstream PF never builds multi-segment chains it would hand back to Linux. + * + * (c) 2026 PF-on-Linux contributors — ISC. + */ +#ifndef _PFK_MBUF_H +#define _PFK_MBUF_H + +#include + +struct pfk_ifnet; /* forward (pfk_if.h) */ +struct pf_state_key; +struct inpcb; +struct pf_tag; + +struct m_tag { + struct m_tag *m_tag_next; + int m_tag_type; + u_int m_tag_len; /* opaque: byte count of data[] */ + u_char m_tag_data[]; +}; + +/* mbuf types (OpenBSD numbering) */ +#define MT_FREE 0 +#define MT_DATA 1 +#define MT_HEADER 2 +#define MT_SONAME 3 +#define MT_SBUF 4 +#define MT_ZOMBIE 5 +#define MT_USER 6 +#define MT_RTABLE 7 +#define MT_IFADDR 8 +#define MT_EXT 9 +#define MT_RTMSG 10 +#define MT_SOCKET 11 +#define MT_PFDESC 12 +#define MT_TAG 13 +#define MT_OFDESC 14 + +#define MT_TAGV 10 +#define MT_PFTOC TAG_PF +#define MT_PF TAG_PF +#define TAG_PF 0x50460000 +#define TAG_PF_RR (TAG_PF + 1) +#define MT_PFTOC TAG_PF + +struct pkthdr_pf { + u_int flags; + struct pf_state_key *statekey; + struct inpcb *inp; + u_int32_t qid; + int16_t prio; + u_int8_t delay; + u_int8_t routed; + u_int8_t dir; + u_int8_t reason; + u_int16_t ruleset; + struct pfk_tag *tag; +}; + +struct pkthdr { + int len; + struct pkthdr_pf pf; + u_int csum_flags; + void *ph_cookie; + u_int32_t ph_flowid; + u_int ph_ifidx; + u_int ph_rtableid; + struct pfk_timeval ph_timestamp; + struct pfk_ifnet *ifp; + struct pfk_ifnet *rcvif; + u_short ph; /* tso segs: unused, kept as pad */ + u_int8_t af; + u_int16_t proto; + u_int hdr_len; + struct m_tag *tags; + int pkthdr_len; /* == len mirror */ +}; + +#define M_EXT 0x0001 +#define M_PKTHDR 0x0002 +#define M_EOR 0x0004 +#define M_RO 0x0010 +#define M_BCAST 0x0020 +#define M_MCAST 0x0040 +#define M_LOOP 0x0080 +#define M_SKIP_FIREWALL 0x0100 +#define M_BPF_MCAST 0x0200 +#define M_PROMISC 0x0400 +#define M_READONLY 0x0800 +#define M_CANTFIND (M_READONLY) +#define M_DONTFRAG 0x1000 + +struct mbuf { + struct mbuf *m_next; + struct mbuf *m_nextout; + u_short m_flags; + u_short m_len; + caddr_t m_data; + u_short m_type; + u_short m_maxsize; + int m_refcnt; + struct sk_buff *skb; /* canonical storage (linear) */ + struct pkthdr m_pkthdr; /* valid iff M_PKTHDR */ +}; + +#define MGET(m, f, t) do { (m) = m_get((f), (t)); } while (0) +#define MGETHDR(m, f, t) do { (m) = m_gethdr((f), (t)); } while (0) +#define mtod(m, t) ((t)((m)->m_data)) +#define MTOU(m, t) ((t)((m)->m_data)) +#define MFREE(m, n) ((n) = m_free((m))) + +/* lifecycle */ +struct mbuf *m_get(int how, short type); +struct mbuf *m_gethdr(int how, short type); +struct mbuf *m_alloc_skb(struct sk_buff *skb, int how); /* wrap borrowed skb */ +struct mbuf *m_devget(char *buf, int totlen, int off, + struct pfk_ifnet *ifp, void (*copyin_fc)(caddr_t, int)); +void pfk_m_setpkthdr(struct mbuf *m); + +struct mbuf *m_copym(struct mbuf *m, int off, int len, int wait); +struct mbuf *m_dup(struct mbuf *m, int wait); /* full dup + headroom */ +#define m_copypacket(m, w) m_copym((m), 0, 0, (w)) +void m_adj(struct mbuf *m, int dlen); +void m_trim(struct mbuf *m, int dlen); +int m_cat(struct mbuf *to, struct mbuf *from); /* copies+consumes from */ +caddr_t m_copyback(struct mbuf *m, int off, int len, const void *copied); +void m_copydata(const struct mbuf *m, int off, int len, caddr_t dest); +caddr_t m_getptr(struct mbuf *m, int loc, int *off); +int m_clump(struct mbuf **m0p, int len, int *mp_off, int *mp_len, caddr_t *doff); +void m_free_ext(struct mbuf *m); +struct mbuf *m_free(struct mbuf *m); /* returns next */ +void m_freem(struct mbuf *m); +struct mbuf *m_dtom(struct sk_buff *skb); /* reverse map via skb->cb */ + +static inline struct sk_buff *m_to_skb(struct mbuf *m) { return m->skb; } + +/* linearize: PF ingress guarantee */ +int pfk_mbuf_linearize(struct mbuf *m); /* pskb_expand if fragged */ +void pfk_mbuf_refresh(struct mbuf *m); /* resync m_len/pkthdr from skb */ + +/* m_tag */ +struct m_tag *m_tag_alloc(int type, int len, int wait, caddr_t *align_data); +void m_tag_free(struct m_tag *m); +void m_tag_prepend(struct mbuf *m, struct m_tag *tag); +void m_tag_prepend_packet(struct mbuf *m, struct m_tag *tag); +void m_tag_delete(struct mbuf *m, struct m_tag *tag); +struct m_tag *m_tag_find(struct mbuf *m, int type, struct m_tag *start); +struct m_tag *m_tag_copy(struct m_tag *tag, int how); +int m_tag_copy_chain(struct mbuf *to, struct mbuf *from, int how); +void m_tag_delete_chain(struct mbuf *m, struct m_tag *end); +struct m_tag *m_tag_first(struct mbuf *m); +struct m_tag *m_tag_next(struct mbuf *m, struct m_tag *tag); +void m_tag_attach(struct mbuf *m, struct m_tag *t); /* append order */ + +/* PF flowid/toeplitz ingress hook + sysctl-ish knobs */ +int pfk_mbuf_init(void); +void pfk_mbuf_exit(void); + +#endif /* _PFK_MBUF_H */ diff --git a/module/include/pfk_net.h b/module/include/pfk_net.h new file mode 100644 index 0000000..f292390 --- /dev/null +++ b/module/include/pfk_net.h @@ -0,0 +1,190 @@ +/* + * PF-on-Linux BSD wire-protocol structs + checksum helpers (ISC 2026). + * Field names match OpenBSD headers; staging seds rename `struct ip` etc. + * to the pf_* names defined here so they never collide with Linux uapi. + * Byte layouts below are the little-endian variants (x86/arm64); the + * bitfield orderings replicate OpenBSD netinet headers exactly. + */ +#ifndef _PFK_NET_H +#define _PFK_NET_H + +/* ---- IPv4 header (OpenBSD layout, LE bitfield order) ---- */ +struct pf_ip { +#if defined(__LITTLE_ENDIAN_BITFIELD) + __u8 ip_hl:4, ip_v:4; +#else + __u8 ip_v:4, ip_hl:4; +#endif + __u8 ip_tos; + __be16 ip_len; + __be16 ip_id; + __be16 ip_off; +#define IP_RF 0x8000 +#define IP_OFFLP 0x3fff + __u8 ip_ttl; + __u8 ip_p; + __be16 ip_sum; + struct in_addr ip_src, ip_dst; +}; +#define IP_MAXPACKET 65535 +#define IP_DEFAULT_TTL 64 +#define IPV4_TTL 64 + +/* ---- TCP (OpenBSD names) ---- */ +struct pf_tcphdr { + __be16 th_sport, th_dport; + __be32 th_seq, th_ack; +#if defined(__LITTLE_ENDIAN_BITFIELD) + __u8 th_x2:4, th_off:4; +#else + __u8 th_off:4, th_x2:4; +#endif + __u8 th_flags; + __be16 th_win; + __be16 th_sum; + __be16 th_urp; +}; +#define TH_FIN 0x01 +#define TH_SYN 0x02 +#define TH_RST 0x04 +#define TH_PUSH 0x08 +#define TH_ACK 0x10 +#define TH_URG 0x20 +#define TH_ECE 0x40 +#define TH_CWR 0x80 +#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR) + +/* tcp_fsm.h states (same numeric as Linux TCP_* enum) */ +#define TCPS_CLOSED 0 +#define TCPS_LISTEN 1 +#define TCPS_SYN_SENT 2 +#define TCPS_SYN_RECEIVED 3 +#define TCPS_ESTABLISHED 4 +#define TCPS_CLOSE_WAIT 5 +#define TCPS_FIN_WAIT_1 6 +#define TCPS_CLOSING 7 +#define TCPS_LAST_ACK 8 +#define TCPS_FIN_WAIT_2 9 +#define TCPS_TIME_WAIT 10 + +/* ---- UDP ---- */ +struct pf_udphdr { + __be16 uh_sport, uh_dport; + __be16 uh_ulen; + __be16 uh_sum; +}; + +/* ---- ICMP (OpenBSD names/values) ---- */ +struct pf_icmp { + __u8 icmp_type; + __u8 icmp_code; + __be16 icmp_cksum; + union { + __be16 ih_id[2]; /* id, seq */ + struct { __u8 type, code; __be16 cksum; } ih_type_hdr; + __be32 ih_gwaddr; + struct ih_frags { __be16 ih_rrechk; __be16 ih_length; } ih_frag; + } icmp_hun; +#define icmp_id icmp_hun.ih_id[0] +#define icmp_seq icmp_hun.ih_id[1] +#define icmp_cksum_alt icmp_hun.ih_type_hdr.cksum +#define icmp_gwaddr icmp_hun.ih_gwaddr + union { + __s8 id_pad[8]; + __be16 id_ipid[2]; + struct pf_ip id_ip; + struct ih_pmtu { __be16 reserved; __be16 mtu; } ih_pmtu; + struct ih_rtradv { __u8 irt_num_addrs, irt_wpa; + __be16 lifetime; } ih_rtradv; + } icmp_data; +#define icmp_rip icmp_data.id_ip +#define icmp_ppsmtu icmp_data.ih_pmtu.mtu +}; + +#define ICMP_ECHOREPLY 0 +#define ICMP_UNREACH 3 +#define ICMP_UNREACH_NET 0 +#define ICMP_UNREACH_HOST 1 +#define ICMP_UNREACH_PROTOCOL 2 +#define ICMP_UNREACH_PORT 3 +#define ICMP_UNREACH_NEEDFRAG 4 +#define ICMP_UNREACH_SRCFAIL 5 +#define ICMP_UNREACH_NET_UNKNOWN 6 +#define ICMP_UNREACH_HOST_UNKNOWN 7 +#define ICMP_UNREACH_ISOLATED 8 +#define ICMP_UNREACH_NET_PROHIB 9 +#define ICMP_UNREACH_HOST_PROHIB 10 +#define ICMP_UNREACH_TOSNET 11 +#define ICMP_UNREACH_TOSHOST 12 +#define ICMP_UNREACH_FILTER_PROHIB 13 +#define ICMP_UNREACH_HOST_PRECEDENCE 14 +#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 +#define ICMP_SOURCEQUENCH 4 +#define ICMP_REDIRECT 5 +#define ICMP_ALTHOSTADDR 6 +#define ICMP_ECHO 8 +#define ICMP_ROUTERADVERT 9 +#define ICMP_ROUTERSOLICIT 10 +#define ICMP_TIMXCEED 11 +#define ICMP_TIMXCEED_INTRANS 0 +#define ICMP_TIMXCEED_REASS 1 +#define ICMP_PARAMPROB 12 +#define ICMP_TSTAMP 13 +#define ICMP_TSTAMPREPLY 14 +#define ICMP_INFO_REQUEST 15 +#define ICMP_INFO_REPLY 16 +#define ICMP_ADDRESS 17 +#define ICMP_ADDRESSREPLY 18 +#define ICMP_MAXTYPE 18 + +/* ---- IPv6 (OpenBSD ctl-union + macros) ---- */ +struct pf_ip6_hdr { + union { + struct ip6_hdrctl { + __u32 ip6_un1_flow; + __be16 ip6_un1_plen; + __u8 ip6_un1_nxt; + __u8 ip6_un1_hlim; + } ip6_un1; + } ip6_ctlun; + struct in6_addr ip6_src; + struct in6_addr ip6_dst; +}; +#define ip6_flow ip6_ctlun.ip6_un1->ip6_un1_flow +#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen +#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt +#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim +#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim +/* NOTE ip6_flow above is a pointer trick in OpenBSD; PF reads/writes + * it via explicit helpers only — provide the plain accessor instead: */ +#undef ip6_flow +#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow +#define IPV6_VERSION 0x60 +#define IPV6_VERSION_MASK 0xf0 +#define v_hl i_vhl +#define traffic_class i_tc1, i_tc2 + +/* flow macros (OpenBSD) */ +static inline __u32 PF6_FLOWlabel(const struct pf_ip6_hdr *h) +{ return be32_to_cpu(h->ip6_flow) & 0x000fffff; } +static inline __u8 PF6_VERSION(const struct pf_ip6_hdr *h) +{ return be32_to_cpu(h->ip6_flow) >> 28; } +static inline __u8 PF6_CLASS(const struct pf_ip6_hdr *h) +{ return (be32_to_cpu(h->ip6_flow) >> 20) & 0xff; } + +/* ---- ICMPv6: PF code's field names (icmp6_type/code/cksum/identifier/ + * sequence/mtu) are provided by Linux's own struct + * icmp6hdr + its member macros; staging seds `struct icmp6_hdr` → + * `struct icmp6hdr` (see stage-port.sh). No private definition needed. */ + +/* BSD IPPROTO_ / IP levels (identical numerics to Linux; aliases kept) */ +#define IPPROTO_MAX_ IPPROTO_MAX + +/* ---- checksum helpers (ported in_cksum etc.) ---- */ +u_int16_t pfk_in_cksum(const void *data, int len); /* one's complement sum */ +__sum16 pfk_icmp6_cksum(const struct pf_ip6_hdr *ip6, + const struct icmp6hdr *ic6, int len); +void pfk_send_icmp_error(int family, struct sk_buff *skb_in, int type, + int code, __be32 info); + +#endif /* _PFK_NET_H */ diff --git a/module/pfsrc/.pfk_hooks.o.cmd b/module/pfsrc/.pfk_hooks.o.cmd new file mode 100644 index 0000000..6957573 --- /dev/null +++ b/module/pfsrc/.pfk_hooks.o.cmd @@ -0,0 +1,1826 @@ +savedcmd_pfsrc/pfk_hooks.o := gcc -Wp,-MMD,pfsrc/.pfk_hooks.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_hooks"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o pfsrc/pfk_hooks.o pfsrc/pfk_hooks.c + +source_pfsrc/pfk_hooks.o := pfsrc/pfk_hooks.c + +deps_pfsrc/pfk_hooks.o := \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/IPV6) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + include/pfk_api.h \ + include/net/pfvar.h \ + include/compat/sys/syslimits.h \ + include/compat/netinet/in.h \ + include/compat/net/radix.h \ + include/net/pfvar_priv.h \ + +pfsrc/pfk_hooks.o: $(deps_pfsrc/pfk_hooks.o) + +$(deps_pfsrc/pfk_hooks.o): diff --git a/module/pfsrc/.pfk_mod.o.cmd b/module/pfsrc/.pfk_mod.o.cmd new file mode 100644 index 0000000..c974618 --- /dev/null +++ b/module/pfsrc/.pfk_mod.o.cmd @@ -0,0 +1,1826 @@ +savedcmd_pfsrc/pfk_mod.o := gcc -Wp,-MMD,pfsrc/.pfk_mod.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_mod"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o pfsrc/pfk_mod.o pfsrc/pfk_mod.c + +source_pfsrc/pfk_mod.o := pfsrc/pfk_mod.c + +deps_pfsrc/pfk_mod.o := \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \ + $(wildcard include/config/CC_VERSION_TEXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \ + $(wildcard include/config/CPU_BIG_ENDIAN) \ + $(wildcard include/config/BOOGER) \ + $(wildcard include/config/FOO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \ + $(wildcard include/config/DEBUG_INFO_BTF) \ + $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \ + $(wildcard include/config/FUNCTION_ALIGNMENT) \ + $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \ + $(wildcard include/config/X86_64) \ + $(wildcard include/config/ARM64) \ + $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \ + $(wildcard include/config/LTO_CLANG) \ + $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ + $(wildcard include/config/KCSAN) \ + $(wildcard include/config/CC_HAS_ASSUME) \ + $(wildcard include/config/CC_HAS_COUNTED_BY) \ + $(wildcard include/config/FORTIFY_SOURCE) \ + $(wildcard include/config/UBSAN_BOUNDS) \ + $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \ + $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \ + $(wildcard include/config/CFI) \ + $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \ + $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \ + $(wildcard include/config/CC_HAS_ASM_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \ + $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ + $(wildcard include/config/SHADOW_CALL_STACK) \ + $(wildcard include/config/KCOV) \ + $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \ + $(wildcard include/config/SMP) \ + $(wildcard include/config/CC_HAS_NAMED_AS) \ + $(wildcard include/config/USE_X86_SEG_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \ + include/pfk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \ + $(wildcard include/config/HAVE_UID16) \ + $(wildcard include/config/UID16) \ + $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ + $(wildcard include/config/PHYS_ADDR_T_64BIT) \ + $(wildcard include/config/64BIT) \ + $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ + $(wildcard include/config/KVFREE_RCU_BATCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \ + $(wildcard include/config/X86_32) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \ + $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \ + $(wildcard include/config/PREEMPT_DYNAMIC) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \ + $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \ + $(wildcard include/config/PREEMPT_) \ + $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ + $(wildcard include/config/MMU) \ + $(wildcard include/config/PROVE_LOCKING) \ + $(wildcard include/config/DYNAMIC_FTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \ + $(wildcard include/config/TRACE_BRANCH_PROFILING) \ + $(wildcard include/config/PROFILE_ALL_BRANCHES) \ + $(wildcard include/config/OBJTOOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \ + $(wildcard include/config/KASAN_GENERIC) \ + $(wildcard include/config/KASAN_SW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \ + $(wildcard include/config/KCSAN_WEAK_MEMORY) \ + $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \ + $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \ + $(wildcard include/config/MODVERSIONS) \ + $(wildcard include/config/GENDWARFKSYMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \ + $(wildcard include/config/CALL_PADDING) \ + $(wildcard include/config/MITIGATION_RETHUNK) \ + $(wildcard include/config/MITIGATION_RETPOLINE) \ + $(wildcard include/config/MITIGATION_SLS) \ + $(wildcard include/config/FUNCTION_PADDING_BYTES) \ + $(wildcard include/config/UML) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \ + $(wildcard include/config/X86_KERNEL_IBT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \ + $(wildcard include/config/CALL_THUNKS) \ + $(wildcard include/config/MITIGATION_ITS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \ + $(wildcard include/config/FRAME_POINTER) \ + $(wildcard include/config/NOINSTR_VALIDATION) \ + $(wildcard include/config/MITIGATION_UNRET_ENTRY) \ + $(wildcard include/config/MITIGATION_SRSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \ + $(wildcard include/config/KPROBES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \ + $(wildcard include/config/GENERIC_BUG) \ + $(wildcard include/config/DEBUG_BUGVERBOSE) \ + $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \ + $(wildcard include/config/HAVE_STATIC_CALL) \ + $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \ + $(wildcard include/config/BUG) \ + $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \ + $(wildcard include/config/PANIC_TIMEOUT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \ + $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ + $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ + $(wildcard include/config/EARLY_PRINTK) \ + $(wildcard include/config/PRINTK) \ + $(wildcard include/config/PRINTK_INDEX) \ + $(wildcard include/config/DYNAMIC_DEBUG) \ + $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \ + $(wildcard include/config/MEMORY_HOTPLUG) \ + $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \ + $(wildcard include/config/HZ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \ + $(wildcard include/config/DEBUG_SPINLOCK) \ + $(wildcard include/config/DEBUG_LOCK_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \ + $(wildcard include/config/NR_CPUS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \ + $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ + $(wildcard include/config/LOCKDEP) \ + $(wildcard include/config/LOCK_STAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \ + $(wildcard include/config/X86_CMOV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \ + $(wildcard include/config/DEBUG_ATOMIC) \ + $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \ + $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \ + $(wildcard include/config/KMSAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \ + $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \ + $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ + $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \ + $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \ + $(wildcard include/config/TRACING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \ + $(wildcard include/config/FOO_SUSPEND) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \ + $(wildcard include/config/MODULES) \ + $(wildcard include/config/SYSFS) \ + $(wildcard include/config/MODULES_TREE_LOOKUP) \ + $(wildcard include/config/LIVEPATCH) \ + $(wildcard include/config/STACKTRACE_BUILD_ID) \ + $(wildcard include/config/ARCH_USES_CFI_TRAPS) \ + $(wildcard include/config/MODULE_SIG) \ + $(wildcard include/config/KALLSYMS) \ + $(wildcard include/config/TRACEPOINTS) \ + $(wildcard include/config/TREE_SRCU) \ + $(wildcard include/config/BPF_EVENTS) \ + $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ + $(wildcard include/config/JUMP_LABEL) \ + $(wildcard include/config/EVENT_TRACING) \ + $(wildcard include/config/KUNIT) \ + $(wildcard include/config/MODULE_UNLOAD) \ + $(wildcard include/config/CONSTRUCTORS) \ + $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \ + $(wildcard include/config/LIST_HARDENED) \ + $(wildcard include/config/DEBUG_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \ + $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \ + $(wildcard include/config/POSIX_TIMERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \ + $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \ + $(wildcard include/config/X86_L1_CACHE_SHIFT) \ + $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \ + $(wildcard include/config/X86_VSMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \ + $(wildcard include/config/ARCH_SUPPORTS_INT128) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \ + $(wildcard include/config/X86_VMX_FEATURE_NAMES) \ + $(wildcard include/config/X86_IOPL_IOPERM) \ + $(wildcard include/config/VM86) \ + $(wildcard include/config/X86_USER_SHADOW_STACK) \ + $(wildcard include/config/X86_DEBUG_FPU) \ + $(wildcard include/config/PARAVIRT_XXL) \ + $(wildcard include/config/CPU_SUP_AMD) \ + $(wildcard include/config/XEN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \ + $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \ + $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \ + $(wildcard include/config/AMD_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \ + $(wildcard include/config/X86_MEM_ENCRYPT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \ + $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \ + $(wildcard include/config/PARAVIRT) \ + $(wildcard include/config/IA32_EMULATION) \ + $(wildcard include/config/X86_DEBUGCTLMSR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \ + $(wildcard include/config/XEN_PV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \ + $(wildcard include/config/PHYSICAL_START) \ + $(wildcard include/config/PHYSICAL_ALIGN) \ + $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \ + $(wildcard include/config/PAGE_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \ + $(wildcard include/config/KASAN) \ + $(wildcard include/config/RANDOMIZE_BASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \ + $(wildcard include/config/RANDOMIZE_MEMORY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \ + $(wildcard include/config/PARAVIRT_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \ + $(wildcard include/config/DEBUG_PREEMPT) \ + $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \ + $(wildcard include/config/BASE_SMALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \ + $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \ + $(wildcard include/config/DEBUG_VIRTUAL) \ + $(wildcard include/config/X86_VSYSCALL_EMULATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \ + $(wildcard include/config/DEBUG_VM) \ + $(wildcard include/config/DEBUG_VM_IRQSOFF) \ + $(wildcard include/config/DEBUG_VM_PGFLAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \ + $(wildcard include/config/FLATMEM) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP) \ + $(wildcard include/config/SPARSEMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \ + $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \ + $(wildcard include/config/X86_PAE) \ + $(wildcard include/config/MEM_SOFT_DIRTY) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \ + $(wildcard include/config/PGTABLE_LEVELS) \ + $(wildcard include/config/PROC_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \ + $(wildcard include/config/TRACE_IRQFLAGS) \ + $(wildcard include/config/PREEMPT_RT) \ + $(wildcard include/config/IRQSOFF_TRACER) \ + $(wildcard include/config/PREEMPT_TRACER) \ + $(wildcard include/config/DEBUG_IRQFLAGS) \ + $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \ + $(wildcard include/config/DEBUG_ENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \ + $(wildcard include/config/CALL_THUNKS_DEBUG) \ + $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \ + $(wildcard include/config/MITIGATION_IBPB_ENTRY) \ + $(wildcard include/config/BPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \ + $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \ + $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \ + $(wildcard include/config/ZERO_CALL_USED_REGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \ + $(wildcard include/config/FORCE_NR_CPUS) \ + $(wildcard include/config/HOTPLUG_CPU) \ + $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ + $(wildcard include/config/CPUMASK_OFFSTACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \ + $(wildcard include/config/GENERIC_ATOMIC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \ + $(wildcard include/config/BINARY_PRINTF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \ + $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \ + $(wildcard include/config/KASAN_HW_TAGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \ + $(wildcard include/config/NUMA_KEEP_MEMINFO) \ + $(wildcard include/config/NUMA) \ + $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \ + $(wildcard include/config/HIGHMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \ + $(wildcard include/config/NODES_SHIFT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \ + $(wildcard include/config/VMGENID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \ + $(wildcard include/config/KMALLOC_PARTITION_CACHES) \ + $(wildcard include/config/PAGE_SIZE_4KB) \ + $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \ + $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \ + $(wildcard include/config/MEM_ALLOC_PROFILING) \ + $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \ + $(wildcard include/config/CODE_TAGGING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \ + $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \ + $(wildcard include/config/PREEMPT_COUNT) \ + $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ + $(wildcard include/config/PREEMPTION) \ + $(wildcard include/config/PREEMPT_NOTIFIERS) \ + $(wildcard include/config/PREEMPT_NONE) \ + $(wildcard include/config/PREEMPT_VOLUNTARY) \ + $(wildcard include/config/PREEMPT) \ + $(wildcard include/config/PREEMPT_LAZY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \ + $(wildcard include/config/UP_LATE_INIT) \ + $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \ + $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \ + $(wildcard include/config/THREAD_INFO_IN_TASK) \ + $(wildcard include/config/GENERIC_ENTRY) \ + $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \ + $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ + $(wildcard include/config/SH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \ + $(wildcard include/config/X86_FRED) \ + $(wildcard include/config/COMPAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \ + $(wildcard include/config/DEBUG_NMI_SELFTEST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ + $(wildcard include/config/SCHED_INFO) \ + $(wildcard include/config/SCHEDSTATS) \ + $(wildcard include/config/SCHED_CORE) \ + $(wildcard include/config/FAIR_GROUP_SCHED) \ + $(wildcard include/config/RT_GROUP_SCHED) \ + $(wildcard include/config/RT_MUTEXES) \ + $(wildcard include/config/UCLAMP_TASK) \ + $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ + $(wildcard include/config/KMAP_LOCAL) \ + $(wildcard include/config/SCHED_CLASS_EXT) \ + $(wildcard include/config/CGROUP_SCHED) \ + $(wildcard include/config/CFS_BANDWIDTH) \ + $(wildcard include/config/BLK_DEV_IO_TRACE) \ + $(wildcard include/config/PREEMPT_RCU) \ + $(wildcard include/config/TASKS_RCU) \ + $(wildcard include/config/TASKS_TRACE_RCU) \ + $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \ + $(wildcard include/config/MEMCG_V1) \ + $(wildcard include/config/LRU_GEN) \ + $(wildcard include/config/COMPAT_BRK) \ + $(wildcard include/config/CGROUPS) \ + $(wildcard include/config/BLK_CGROUP) \ + $(wildcard include/config/PSI) \ + $(wildcard include/config/PAGE_OWNER) \ + $(wildcard include/config/EVENTFD) \ + $(wildcard include/config/ARCH_HAS_CPU_PASID) \ + $(wildcard include/config/X86_BUS_LOCK_DETECT) \ + $(wildcard include/config/TASK_DELAY_ACCT) \ + $(wildcard include/config/STACKPROTECTOR) \ + $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ + $(wildcard include/config/NO_HZ_FULL) \ + $(wildcard include/config/POSIX_CPUTIMERS) \ + $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ + $(wildcard include/config/KEYS) \ + $(wildcard include/config/SYSVIPC) \ + $(wildcard include/config/DETECT_HUNG_TASK) \ + $(wildcard include/config/IO_URING) \ + $(wildcard include/config/AUDIT) \ + $(wildcard include/config/AUDITSYSCALL) \ + $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \ + $(wildcard include/config/UBSAN) \ + $(wildcard include/config/UBSAN_TRAP) \ + $(wildcard include/config/COMPACTION) \ + $(wildcard include/config/TASK_XACCT) \ + $(wildcard include/config/CPUSETS) \ + $(wildcard include/config/X86_CPU_RESCTRL) \ + $(wildcard include/config/PERF_EVENTS) \ + $(wildcard include/config/NUMA_BALANCING) \ + $(wildcard include/config/SCHED_CACHE) \ + $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \ + $(wildcard include/config/FAULT_INJECTION) \ + $(wildcard include/config/LATENCYTOP) \ + $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ + $(wildcard include/config/MEMCG) \ + $(wildcard include/config/UPROBES) \ + $(wildcard include/config/BCACHE) \ + $(wildcard include/config/VMAP_STACK) \ + $(wildcard include/config/SECURITY) \ + $(wildcard include/config/BPF_SYSCALL) \ + $(wildcard include/config/KSTACK_ERASE) \ + $(wildcard include/config/KSTACK_ERASE_METRICS) \ + $(wildcard include/config/X86_MCE) \ + $(wildcard include/config/KRETPROBES) \ + $(wildcard include/config/RETHOOK) \ + $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ + $(wildcard include/config/RV) \ + $(wildcard include/config/RV_PER_TASK_MONITORS) \ + $(wildcard include/config/USER_EVENTS) \ + $(wildcard include/config/UNWIND_USER) \ + $(wildcard include/config/SCHED_PROXY_EXEC) \ + $(wildcard include/config/SCHED_MM_CID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \ + $(wildcard include/config/FUTEX) \ + $(wildcard include/config/FUTEX_PRIVATE_HASH) \ + $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \ + $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_MUTEXES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \ + $(wildcard include/config/SECCOMP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \ + $(wildcard include/config/OLD_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \ + $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \ + $(wildcard include/config/MMIOWB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \ + $(wildcard include/config/INLINE_SPIN_LOCK) \ + $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ + $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ + $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/GENERIC_LOCKBREAK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \ + $(wildcard include/config/INLINE_READ_LOCK) \ + $(wildcard include/config/INLINE_WRITE_LOCK) \ + $(wildcard include/config/INLINE_READ_LOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ + $(wildcard include/config/INLINE_READ_TRYLOCK) \ + $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK) \ + $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ + $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ + $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \ + $(wildcard include/config/SYSCALL_USER_DISPATCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \ + $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \ + $(wildcard include/config/NET_ACT_MIRRED) \ + $(wildcard include/config/NET_EGRESS) \ + $(wildcard include/config/NF_DUP_NETDEV) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \ + $(wildcard include/config/TASK_IO_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \ + $(wildcard include/config/RSEQ) \ + $(wildcard include/config/RSEQ_SLICE_EXTENSION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \ + $(wildcard include/config/RV_LTL_MONITOR) \ + $(wildcard include/config/RV_HA_MONITOR) \ + $(wildcard include/config/RV_REACTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \ + $(wildcard include/config/DEBUG_KMAP_LOCAL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \ + $(wildcard include/config/EXT_SUB_SCHED) \ + $(wildcard include/config/EXT_GROUP_SCHED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \ + $(wildcard include/config/MULTIUSER) \ + $(wildcard include/config/USER_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \ + $(wildcard include/config/VMCORE_INFO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \ + $(wildcard include/config/ZONE_DMA) \ + $(wildcard include/config/ZONE_DMA32) \ + $(wildcard include/config/ZONE_DEVICE) \ + $(wildcard include/config/CONTIG_ALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \ + $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \ + $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \ + $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \ + $(wildcard include/config/HUGETLB_PAGE) \ + $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \ + $(wildcard include/config/CMA) \ + $(wildcard include/config/MEMORY_ISOLATION) \ + $(wildcard include/config/ZSMALLOC) \ + $(wildcard include/config/UNACCEPTED_MEMORY) \ + $(wildcard include/config/IOMMU_SUPPORT) \ + $(wildcard include/config/SWAP) \ + $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ + $(wildcard include/config/LRU_GEN_STATS) \ + $(wildcard include/config/LRU_GEN_WALKS_MMU) \ + $(wildcard include/config/MEMORY_FAILURE) \ + $(wildcard include/config/PAGE_EXTENSION) \ + $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ + $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ + $(wildcard include/config/SPARSEMEM_EXTREME) \ + $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \ + $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \ + $(wildcard include/config/CC_IS_GCC) \ + $(wildcard include/config/GCC_VERSION) \ + $(wildcard include/config/UBSAN_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \ + $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \ + $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ + $(wildcard include/config/SLAB_OBJ_EXT) \ + $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \ + $(wildcard include/config/SLAB_FREELIST_HARDENED) \ + $(wildcard include/config/USERFAULTFD) \ + $(wildcard include/config/ANON_VMA_NAME) \ + $(wildcard include/config/PER_VMA_LOCK) \ + $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ + $(wildcard include/config/MEMBARRIER) \ + $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \ + $(wildcard include/config/AIO) \ + $(wildcard include/config/MMU_NOTIFIER) \ + $(wildcard include/config/SPLIT_PMD_PTLOCKS) \ + $(wildcard include/config/IOMMU_MM_DATA) \ + $(wildcard include/config/KSM) \ + $(wildcard include/config/MM_ID) \ + $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \ + $(wildcard include/config/TINY_RCU) \ + $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \ + $(wildcard include/config/RCU_LAZY) \ + $(wildcard include/config/RCU_STALL_COMMON) \ + $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \ + $(wildcard include/config/RCU_NOCB_CPU) \ + $(wildcard include/config/TASKS_RCU_GENERIC) \ + $(wildcard include/config/TASKS_RUDE_RCU) \ + $(wildcard include/config/TREE_RCU) \ + $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ + $(wildcard include/config/PROVE_RCU) \ + $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \ + $(wildcard include/config/CONTEXT_TRACKING_IDLE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \ + $(wildcard include/config/DEBUG_MAPLE_TREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \ + $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ + $(wildcard include/config/DEBUG_RWSEMS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \ + $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ + $(wildcard include/config/NO_HZ_COMMON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \ + $(wildcard include/config/POSIX_AUX_CLOCKS) \ + $(wildcard include/config/GENERIC_CMOS_UPDATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \ + $(wildcard include/config/DEBUG_OBJECTS) \ + $(wildcard include/config/DEBUG_OBJECTS_FREE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \ + $(wildcard include/config/TINY_SRCU) \ + $(wildcard include/config/NEED_SRCU_NMI_SAFE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \ + $(wildcard include/config/DEBUG_OBJECTS_WORK) \ + $(wildcard include/config/FREEZER) \ + $(wildcard include/config/WQ_WATCHDOG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \ + $(wildcard include/config/RCU_FANOUT) \ + $(wildcard include/config/RCU_FANOUT_LEAF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \ + $(wildcard include/config/MODIFY_LDT_SYSCALL) \ + $(wildcard include/config/ADDRESS_MASKING) \ + $(wildcard include/config/BROADCAST_TLB_FLUSH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \ + $(wildcard include/config/PAGE_IDLE_FLAG) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_2) \ + $(wildcard include/config/ARCH_USES_PG_ARCH_3) \ + $(wildcard include/config/MIGRATION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \ + $(wildcard include/config/ZSWAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \ + $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ + $(wildcard include/config/MEMORY_HOTREMOVE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \ + $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ + $(wildcard include/config/SCHED_SMT) \ + $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \ + $(wildcard include/config/X86_LOCAL_APIC) \ + $(wildcard include/config/SCHED_MC_PRIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \ + $(wildcard include/config/EISA) \ + $(wildcard include/config/X86_MPPARSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \ + $(wildcard include/config/HOTPLUG_SMT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \ + $(wildcard include/config/SYSCTL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \ + $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \ + $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ + $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \ + $(wildcard include/config/X86_X32_ABI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \ + $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \ + $(wildcard include/config/COMPAT_OLD_SIGACTION) \ + $(wildcard include/config/HARDENED_USERCOPY) \ + $(wildcard include/config/ODD_RT_SIGACTION) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \ + $(wildcard include/config/ARCH_HAS_COPY_MC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \ + $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \ + $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \ + $(wildcard include/config/FS_POSIX_ACL) \ + $(wildcard include/config/CGROUP_WRITEBACK) \ + $(wildcard include/config/IMA) \ + $(wildcard include/config/FILE_LOCKING) \ + $(wildcard include/config/FSNOTIFY) \ + $(wildcard include/config/EPOLL) \ + $(wildcard include/config/FS_DAX) \ + $(wildcard include/config/BLOCK) \ + $(wildcard include/config/UNICODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \ + $(wildcard include/config/QUOTA) \ + $(wildcard include/config/FS_ENCRYPTION) \ + $(wildcard include/config/FS_VERITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \ + $(wildcard include/config/SHRINKER_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \ + $(wildcard include/config/XARRAY_MULTI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \ + $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \ + $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \ + $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \ + $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \ + $(wildcard include/config/SCHED_AUTOGROUP) \ + $(wildcard include/config/BSD_PROCESS_ACCT) \ + $(wildcard include/config/TASKSTATS) \ + $(wildcard include/config/STACK_GROWSUP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \ + $(wildcard include/config/PROVE_RCU_LIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \ + $(wildcard include/config/DYNAMIC_SIGFRAME) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \ + $(wildcard include/config/HAVE_EXIT_THREAD) \ + $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ + $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \ + $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \ + $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \ + $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \ + $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \ + $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \ + $(wildcard include/config/X86_INTEL_USERCOPY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \ + $(wildcard include/config/DEBUG_WX) \ + $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \ + $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \ + $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \ + $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \ + $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \ + $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \ + $(wildcard include/config/PAGE_TABLE_CHECK) \ + $(wildcard include/config/X86_SGX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \ + $(wildcard include/config/PTE_MARKER_UFFD_WP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \ + $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \ + $(wildcard include/config/X86_IO_APIC) \ + $(wildcard include/config/PCI_MMCONFIG) \ + $(wildcard include/config/ACPI_APEI_GHES) \ + $(wildcard include/config/INTEL_TXT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \ + $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \ + $(wildcard include/config/KEY_NOTIFICATIONS) \ + $(wildcard include/config/NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \ + $(wildcard include/config/ASSOCIATIVE_ARRAY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \ + $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \ + $(wildcard include/config/IOMMUFD) \ + $(wildcard include/config/SECRETMEM) \ + $(wildcard include/config/WATCH_QUEUE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \ + $(wildcard include/config/RTC_CLASS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \ + $(wildcard include/config/HIGH_RES_TIMERS) \ + $(wildcard include/config/TIME_LOW_RES) \ + $(wildcard include/config/TIMERFD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \ + $(wildcard include/config/HRTIMER_REARM_DEFERRED) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \ + $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \ + $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \ + $(wildcard include/config/DCACHE_WORD_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \ + $(wildcard include/config/HAVE_ARCH_HASH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \ + $(wildcard include/config/DEBUG_VFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \ + $(wildcard include/config/ARCH_32BIT_OFF_T) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \ + $(wildcard include/config/BLK_ICQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \ + $(wildcard include/config/FAILSLAB) \ + $(wildcard include/config/KFENCE) \ + $(wildcard include/config/SLUB_TINY) \ + $(wildcard include/config/SLUB_DEBUG) \ + $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \ + $(wildcard include/config/KMALLOC_PARTITION_TYPED) \ + $(wildcard include/config/SLAB_BUCKETS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \ + $(wildcard include/config/KASAN_STACK) \ + $(wildcard include/config/KASAN_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \ + $(wildcard include/config/ARCH_DEFER_KASAN) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \ + $(wildcard include/config/DEBUG_STACK_USAGE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \ + $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \ + $(wildcard include/config/UEVENT_HELPER) \ + $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \ + $(wildcard include/config/KERNFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \ + $(wildcard include/config/ALPHA) \ + $(wildcard include/config/PPC64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \ + $(wildcard include/config/UNWINDER_ORC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \ + $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \ + $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + $(wildcard include/config/PPC32) \ + $(wildcard include/config/RISCV_USER_CFI) \ + $(wildcard include/config/ARM64_GCS) \ + $(wildcard include/config/ARCH_HAS_PKEYS) \ + $(wildcard include/config/ARCH_PKEY_BITS) \ + $(wildcard include/config/PARISC) \ + $(wildcard include/config/SPARC64) \ + $(wildcard include/config/ARM64_MTE) \ + $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \ + $(wildcard include/config/USERFAULTFD_RWP) \ + $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \ + $(wildcard include/config/FIND_NORMAL_PAGE) \ + $(wildcard include/config/SHMEM) \ + $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \ + $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \ + $(wildcard include/config/SPLIT_PTE_PTLOCKS) \ + $(wildcard include/config/HIGHPTE) \ + $(wildcard include/config/DEBUG_VM_RB) \ + $(wildcard include/config/PAGE_POISONING) \ + $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \ + $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \ + $(wildcard include/config/DEBUG_PAGEALLOC) \ + $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \ + $(wildcard include/config/HUGETLBFS) \ + $(wildcard include/config/MAPPING_DIRTY_HELPERS) \ + $(wildcard include/config/PAGE_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \ + $(wildcard include/config/ARCH_STACKWALK) \ + $(wildcard include/config/STACKTRACE) \ + $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \ + $(wildcard include/config/DEBUG_PAGE_REF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \ + $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \ + $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \ + $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \ + $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \ + $(wildcard include/config/X86_ESPFIX64) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \ + $(wildcard include/config/DEVICE_PRIVATE) \ + $(wildcard include/config/PCI_P2PDMA) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \ + $(wildcard include/config/ACPI_PPTT) \ + $(wildcard include/config/ARM) \ + $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \ + $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \ + $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \ + $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \ + $(wildcard include/config/VM_EVENT_COUNTERS) \ + $(wildcard include/config/DEBUG_TLBFLUSH) \ + $(wildcard include/config/PER_VMA_LOCK_STATS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \ + $(wildcard include/config/BALLOON) \ + $(wildcard include/config/BALLOON_MIGRATION) \ + $(wildcard include/config/X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \ + $(wildcard include/config/DCB) \ + $(wildcard include/config/HYPERV_NET) \ + $(wildcard include/config/WLAN) \ + $(wildcard include/config/MAC80211_MESH) \ + $(wildcard include/config/NET_IPIP) \ + $(wildcard include/config/NET_IPGRE) \ + $(wildcard include/config/IPV6_SIT) \ + $(wildcard include/config/IPV6_TUNNEL) \ + $(wildcard include/config/NETPOLL) \ + $(wildcard include/config/XDP_SOCKETS) \ + $(wildcard include/config/BQL) \ + $(wildcard include/config/XPS) \ + $(wildcard include/config/RFS_ACCEL) \ + $(wildcard include/config/FCOE) \ + $(wildcard include/config/XFRM_OFFLOAD) \ + $(wildcard include/config/NET_POLL_CONTROLLER) \ + $(wildcard include/config/LIBFCOE) \ + $(wildcard include/config/NET_SHAPER) \ + $(wildcard include/config/NETFILTER_EGRESS) \ + $(wildcard include/config/NET_XGRESS) \ + $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \ + $(wildcard include/config/WIRELESS_EXT) \ + $(wildcard include/config/NET_L3_MASTER_DEV) \ + $(wildcard include/config/IPV6) \ + $(wildcard include/config/TLS_DEVICE) \ + $(wildcard include/config/VLAN_8021Q) \ + $(wildcard include/config/NET_DSA) \ + $(wildcard include/config/TIPC) \ + $(wildcard include/config/CFG80211) \ + $(wildcard include/config/IEEE802154) \ + $(wildcard include/config/6LOWPAN) \ + $(wildcard include/config/MPLS_ROUTING) \ + $(wildcard include/config/MCTP) \ + $(wildcard include/config/INET_PSP) \ + $(wildcard include/config/NETFILTER_INGRESS) \ + $(wildcard include/config/NET_SCHED) \ + $(wildcard include/config/PCPU_DEV_REFCNT) \ + $(wildcard include/config/GARP) \ + $(wildcard include/config/MRP) \ + $(wildcard include/config/NET_DROP_MONITOR) \ + $(wildcard include/config/CGROUP_NET_PRIO) \ + $(wildcard include/config/MACSEC) \ + $(wildcard include/config/DPLL) \ + $(wildcard include/config/DIMLIB) \ + $(wildcard include/config/RPS) \ + $(wildcard include/config/NET_FLOW_LIMIT) \ + $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \ + $(wildcard include/config/ETHTOOL_NETLINK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \ + $(wildcard include/config/NF_CONNTRACK) \ + $(wildcard include/config/NF_FLOW_TABLE) \ + $(wildcard include/config/UNIX) \ + $(wildcard include/config/IEEE802154_6LOWPAN) \ + $(wildcard include/config/IP_SCTP) \ + $(wildcard include/config/NETFILTER) \ + $(wildcard include/config/NF_TABLES) \ + $(wildcard include/config/WEXT_CORE) \ + $(wildcard include/config/XFRM) \ + $(wildcard include/config/IP_VS) \ + $(wildcard include/config/MPLS) \ + $(wildcard include/config/CAN) \ + $(wildcard include/config/CRYPTO_USER) \ + $(wildcard include/config/SMC) \ + $(wildcard include/config/VSOCKETS) \ + $(wildcard include/config/NET_NS) \ + $(wildcard include/config/NET_NS_REFCNT_TRACKER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \ + $(wildcard include/config/XFRM_STATISTICS) \ + $(wildcard include/config/TLS) \ + $(wildcard include/config/MPTCP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \ + $(wildcard include/config/IP_ROUTE_MULTIPATH) \ + $(wildcard include/config/NET_UDP_TUNNEL) \ + $(wildcard include/config/IP_MULTIPLE_TABLES) \ + $(wildcard include/config/IP_ROUTE_CLASSID) \ + $(wildcard include/config/IP_MROUTE) \ + $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \ + $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \ + $(wildcard include/config/IPV6_MULTIPLE_TABLES) \ + $(wildcard include/config/IPV6_SUBTREES) \ + $(wildcard include/config/IPV6_MROUTE) \ + $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \ + $(wildcard include/config/NF_DEFRAG_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \ + $(wildcard include/config/LWTUNNEL) \ + $(wildcard include/config/NETFILTER_FAMILY_ARP) \ + $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \ + $(wildcard include/config/NF_DEFRAG_IPV4) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \ + $(wildcard include/config/NF_CT_PROTO_SCTP) \ + $(wildcard include/config/NF_CT_PROTO_GRE) \ + $(wildcard include/config/NF_CONNTRACK_EVENTS) \ + $(wildcard include/config/NF_CONNTRACK_LABELS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \ + $(wildcard include/config/SMC_HS_CTRL_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \ + $(wildcard include/config/REF_TRACKER) \ + $(wildcard include/config/DEBUG_FS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \ + $(wildcard include/config/STACKDEPOT) \ + $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \ + $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \ + $(wildcard include/config/IPC_NS) \ + $(wildcard include/config/PID_NS) \ + $(wildcard include/config/TIME_NS) \ + $(wildcard include/config/UTS_NS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \ + $(wildcard include/config/BRIDGE_NETFILTER) \ + $(wildcard include/config/NET_TC_SKB_EXT) \ + $(wildcard include/config/MAX_SKB_FRAGS) \ + $(wildcard include/config/NET_SOCK_MSG) \ + $(wildcard include/config/SKB_EXTENSIONS) \ + $(wildcard include/config/WIRELESS) \ + $(wildcard include/config/IPV6_NDISC_NODETYPE) \ + $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \ + $(wildcard include/config/NET_SWITCHDEV) \ + $(wildcard include/config/NET_REDIRECT) \ + $(wildcard include/config/SKB_DECRYPTED) \ + $(wildcard include/config/NET_RX_BUSY_POLL) \ + $(wildcard include/config/NETWORK_SECMARK) \ + $(wildcard include/config/DEBUG_NET) \ + $(wildcard include/config/FAIL_SKB_REALLOC) \ + $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \ + $(wildcard include/config/MCTP_FLOWS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \ + $(wildcard include/config/CONTEXT_TRACKING_USER) \ + $(wildcard include/config/CONTEXT_TRACKING) \ + $(wildcard include/config/RCU_DYNTICKS_TORTURE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \ + $(wildcard include/config/HWLAT_TRACER) \ + $(wildcard include/config/OSNOISE_TRACER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \ + $(wildcard include/config/VIRT_CPU_ACCOUNTING) \ + $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \ + $(wildcard include/config/IRQ_TIME_ACCOUNTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \ + $(wildcard include/config/X86_THERMAL_VECTOR) \ + $(wildcard include/config/X86_MCE_THRESHOLD) \ + $(wildcard include/config/X86_MCE_AMD) \ + $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \ + $(wildcard include/config/HYPERV) \ + $(wildcard include/config/KVM) \ + $(wildcard include/config/GUEST_PERF_EVENTS) \ + $(wildcard include/config/X86_POSTED_MSI) \ + $(wildcard include/config/CPU_MITIGATIONS) \ + $(wildcard include/config/KVM_INTEL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \ + $(wildcard include/config/GENERIC_CSUM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \ + $(wildcard include/config/DMA_API_DEBUG) \ + $(wildcard include/config/HAS_DMA) \ + $(wildcard include/config/IOMMU_DMA) \ + $(wildcard include/config/DMA_NEED_SYNC) \ + $(wildcard include/config/NEED_DMA_MAP_STATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \ + $(wildcard include/config/GENERIC_MSI_IRQ) \ + $(wildcard include/config/ENERGY_MODEL) \ + $(wildcard include/config/PINCTRL) \ + $(wildcard include/config/ARCH_HAS_DMA_OPS) \ + $(wildcard include/config/DMA_DECLARE_COHERENT) \ + $(wildcard include/config/DMA_CMA) \ + $(wildcard include/config/SWIOTLB) \ + $(wildcard include/config/SWIOTLB_DYNAMIC) \ + $(wildcard include/config/PM) \ + $(wildcard include/config/PM_SLEEP) \ + $(wildcard include/config/OF) \ + $(wildcard include/config/DEVTMPFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \ + $(wildcard include/config/CPU_FREQ) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \ + $(wildcard include/config/SCHED_CLUSTER) \ + $(wildcard include/config/SCHED_MC) \ + $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \ + $(wildcard include/config/VT_CONSOLE_SLEEP) \ + $(wildcard include/config/CXL_SUSPEND) \ + $(wildcard include/config/PM_CLK) \ + $(wildcard include/config/PM_GENERIC_DOMAINS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \ + $(wildcard include/config/ACPI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \ + $(wildcard include/config/HAS_IOMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \ + $(wildcard include/config/NEED_SG_DMA_LENGTH) \ + $(wildcard include/config/NEED_SG_DMA_FLAGS) \ + $(wildcard include/config/DEBUG_SG) \ + $(wildcard include/config/SGL_ALLOC) \ + $(wildcard include/config/ARCH_NO_SG_CHAIN) \ + $(wildcard include/config/SG_POOL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \ + $(wildcard include/config/MTRR) \ + $(wildcard include/config/X86_PAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \ + $(wildcard include/config/GENERIC_EARLY_IOREMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \ + $(wildcard include/config/GENERIC_IOMAP) \ + $(wildcard include/config/TRACE_MMIO_ACCESS) \ + $(wildcard include/config/HAS_IOPORT) \ + $(wildcard include/config/GENERIC_IOREMAP) \ + $(wildcard include/config/HAS_IOPORT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \ + $(wildcard include/config/PCI) \ + $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \ + $(wildcard include/config/GENERIC_PCI_IOMAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \ + $(wildcard include/config/INDIRECT_PIO) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \ + $(wildcard include/config/NET_CLS_ACT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \ + $(wildcard include/config/NET_DEVMEM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \ + $(wildcard include/config/DEBUG_CGROUP_REF) \ + $(wildcard include/config/CGROUP_CPUACCT) \ + $(wildcard include/config/SOCK_CGROUP_DATA) \ + $(wildcard include/config/CGROUP_DATA) \ + $(wildcard include/config/CGROUP_BPF) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \ + $(wildcard include/config/INOTIFY_USER) \ + $(wildcard include/config/FANOTIFY) \ + $(wildcard include/config/BINFMT_MISC) \ + $(wildcard include/config/PERSISTENT_KEYRINGS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \ + $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \ + $(wildcard include/config/IRQ_FORCED_THREADING) \ + $(wildcard include/config/GENERIC_IRQ_PROBE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \ + $(wildcard include/config/PCI_MSI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \ + $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \ + $(wildcard include/config/CGROUP_NET_CLASSID) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \ + $(wildcard include/config/BPF_LSM) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \ + $(wildcard include/config/CGROUP_DEVICE) \ + $(wildcard include/config/CGROUP_FREEZER) \ + $(wildcard include/config/CGROUP_PERF) \ + $(wildcard include/config/CGROUP_HUGETLB) \ + $(wildcard include/config/CGROUP_PIDS) \ + $(wildcard include/config/CGROUP_RDMA) \ + $(wildcard include/config/CGROUP_MISC) \ + $(wildcard include/config/CGROUP_DMEM) \ + $(wildcard include/config/CGROUP_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \ + $(wildcard include/config/SECURITY_NETWORK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \ + $(wildcard include/config/SECURITY_PATH) \ + $(wildcard include/config/SECURITY_INFINIBAND) \ + $(wildcard include/config/SECURITY_NETWORK_XFRM) \ + $(wildcard include/config/SECURITYFS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \ + $(wildcard include/config/DEBUG_KERNEL) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \ + $(wildcard include/config/FINEIBT) \ + $(wildcard include/config/BPF_JIT_ALWAYS_ON) \ + $(wildcard include/config/INET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \ + $(wildcard include/config/BPF_LIRC_MODE2) \ + $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \ + $(wildcard include/config/BPF_KPROBE_OVERRIDE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \ + $(wildcard include/config/KALLSYMS_ALL) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \ + $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \ + $(wildcard include/config/GENERIC_CPU_DEVICES) \ + $(wildcard include/config/PM_SLEEP_SMP) \ + $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \ + $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \ + $(wildcard include/config/HMEM_REPORTING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \ + $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \ + $(wildcard include/config/UML_X86) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \ + $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \ + $(wildcard include/config/FAIL_MAKE_REQUEST) \ + $(wildcard include/config/BLK_CGROUP_IOCOST) \ + $(wildcard include/config/BLK_INLINE_ENCRYPTION) \ + $(wildcard include/config/BLK_DEV_INTEGRITY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \ + $(wildcard include/config/FINEIBT_BHI) \ + $(wildcard include/config/FUNCTION_PADDING_CFI) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \ + $(wildcard include/config/TRACER_SNAPSHOT) \ + $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \ + $(wildcard include/config/FUNCTION_TRACER) \ + $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \ + $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \ + $(wildcard include/config/STACK_TRACER) \ + $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \ + $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \ + $(wildcard include/config/FTRACE_SYSCALLS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \ + $(wildcard include/config/FTRACE_RECORD_RECURSION) \ + $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \ + $(wildcard include/config/MEMFD_CREATE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \ + $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ + $(wildcard include/config/SECCOMP_FILTER) \ + $(wildcard include/config/CHECKPOINT_RESTORE) \ + $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \ + $(wildcard include/config/HAVE_FENTRY) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \ + $(wildcard include/config/QUEUED_SPINLOCKS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \ + $(wildcard include/config/SECURITY_SELINUX) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \ + $(wildcard include/config/SECURITY_SMACK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \ + $(wildcard include/config/SECURITY_APPARMOR) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \ + $(wildcard include/config/IPV6_ROUTER_PREF) \ + $(wildcard include/config/IPV6_ROUTE_INFO) \ + $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \ + $(wildcard include/config/IPV6_SEG6_HMAC) \ + $(wildcard include/config/IPV6_MIP6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \ + $(wildcard include/config/TCP_AO) \ + $(wildcard include/config/BPF) \ + $(wildcard include/config/TCP_MD5SIG) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \ + $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \ + $(wildcard include/config/SOCK_VALIDATE_XMIT) \ + $(wildcard include/config/BT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \ + $(wildcard include/config/NET_INGRESS) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \ + $(wildcard include/config/SYN_COOKIES) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \ + $(wildcard include/config/NF_NAT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \ + $(wildcard include/config/FIREWIRE_NET) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \ + $(wildcard include/config/BPF_STREAM_PARSER) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \ + $(wildcard include/config/HAVE_EBPF_JIT) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \ + $(wildcard include/config/ARCH_WANTS_NO_INSTR) \ + $(wildcard include/config/GENERIC_SCHED_CLOCK) \ + $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \ + $(wildcard include/config/ARCH_HAS_SET_MEMORY) \ + $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \ + $(wildcard include/config/CRC32_ARCH) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \ + $(wildcard include/config/HAVE_ARCH_BITREVERSE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \ + $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \ + $(wildcard include/config/MPTCP_IPV6) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \ + $(wildcard include/config/XFRM_SUB_POLICY) \ + $(wildcard include/config/NET_PKTGEN) \ + $(wildcard include/config/XFRM_MIGRATE) \ + $(wildcard include/config/XFRM_USER_COMPAT) \ + $(wildcard include/config/XFRM_INTERFACE) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \ + $(wildcard include/config/AUDIT_COMPAT_GENERIC) \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \ + /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \ + include/compat/sys/timeout.h \ + include/compat/sys/refcnt.h \ + include/compat/sys/queue.h \ + include/compat/sys/_null.h \ + include/compat/sys/tree.h \ + include/compat/sys/socket.h \ + include/compat/net/if_types.h \ + include/compat/net/if_var.h \ + include/pfk_mbuf.h \ + include/pfk_net.h \ + include/pfk_if.h \ + include/compat/net/toeplitz.h \ + include/compat/crypto/siphash.h \ + include/pfk_api.h \ + include/net/pfvar.h \ + include/compat/sys/syslimits.h \ + include/compat/netinet/in.h \ + include/compat/net/radix.h \ + include/net/pfvar_priv.h \ + +pfsrc/pfk_mod.o: $(deps_pfsrc/pfk_mod.o) + +$(deps_pfsrc/pfk_mod.o): diff --git a/module/pfsrc/fq_codel.c b/module/pfsrc/fq_codel.c new file mode 100644 index 0000000..91cb575 --- /dev/null +++ b/module/pfsrc/fq_codel.c @@ -0,0 +1,871 @@ +/* PFLINUX port of OpenBSD 8.0 net/fq_codel.c — see docs/porting-notes.md */ +#include + +/* #define FQCODEL_DEBUG 1 */ + +#ifdef FQCODEL_DEBUG +#define DPRINTF(x...) printf(x) +#else +#define DPRINTF(x...) +#endif + +struct codel { + struct mbuf_list q; + + unsigned int dropping:1; /* Dropping state */ + unsigned int backlog:31; /* Number of bytes in the queue */ + + unsigned short drops; /* Free running counter of drops */ + unsigned short ldrops; /* Value from the previous run */ + + int64_t start; /* The moment queue was above target */ + int64_t next; /* Next interval */ + int64_t delay; /* Delay incurred by the last packet */ +}; + +struct codel_params { + int64_t target; + int64_t interval; + int64_t grace; + int quantum; + + uint32_t *intervals; +}; + +void codel_initparams(struct codel_params *, unsigned int, + unsigned int, int); +void codel_freeparams(struct codel_params *); +void codel_enqueue(struct codel *, int64_t, struct mbuf *); +struct mbuf *codel_dequeue(struct codel *, struct codel_params *, int64_t, + struct mbuf_list *, uint64_t *, uint64_t *); +struct mbuf *codel_commit(struct codel *, struct mbuf *); +void codel_purge(struct codel *, struct mbuf_list *); + +struct flow { + struct codel cd; + int active:1; + int deficit:31; +#ifdef FQCODEL_DEBUG + uint16_t id; +#endif + SIMPLEQ_ENTRY(flow) flowentry; +}; +SIMPLEQ_HEAD(flowq, flow); + +struct fqcodel { + struct flowq newq; + struct flowq oldq; + + struct flow *flows; + unsigned int qlength; + + struct ifnet *ifp; + + struct codel_params cparams; + + unsigned int nflows; + unsigned int qlimit; + int quantum; + + unsigned int flags; +#define FQCF_FIXED_QUANTUM 0x1 + + /* stats */ + struct fqcodel_pktcntr xmit_cnt; + struct fqcodel_pktcntr drop_cnt; + + struct mbuf_list pending_drops; +}; + +unsigned int fqcodel_idx(unsigned int, const struct mbuf *); +void *fqcodel_alloc(unsigned int, void *); +void fqcodel_free(unsigned int, void *); +struct mbuf *fqcodel_if_enq(struct ifqueue *, struct mbuf *); +struct mbuf *fqcodel_if_deq_begin(struct ifqueue *, void **); +void fqcodel_if_deq_commit(struct ifqueue *, struct mbuf *, void *); +void fqcodel_if_purge(struct ifqueue *, struct mbuf_list *); + +struct mbuf *fqcodel_enq(struct fqcodel *, struct mbuf *); +struct mbuf *fqcodel_deq_begin(struct fqcodel *, void **, + struct mbuf_list *); +void fqcodel_deq_commit(struct fqcodel *, struct mbuf *, void *); +void fqcodel_purge(struct fqcodel *, struct mbuf_list *); + +/* + * ifqueue glue. + */ + +static const struct ifq_ops fqcodel_ops = { + fqcodel_idx, + fqcodel_if_enq, + fqcodel_if_deq_begin, + fqcodel_if_deq_commit, + fqcodel_if_purge, + fqcodel_alloc, + fqcodel_free +}; + +const struct ifq_ops *const ifq_fqcodel_ops = &fqcodel_ops; + +void *fqcodel_pf_alloc(struct ifnet *); +int fqcodel_pf_addqueue(void *, struct pf_queuespec *); +void fqcodel_pf_free(void *); +int fqcodel_pf_qstats(struct pf_queuespec *, void *, int *); +unsigned int fqcodel_pf_qlength(void *); +struct mbuf *fqcodel_pf_enqueue(void *, struct mbuf *); +struct mbuf *fqcodel_pf_deq_begin(void *, void **, struct mbuf_list *); +void fqcodel_pf_deq_commit(void *, struct mbuf *, void *); +void fqcodel_pf_purge(void *, struct mbuf_list *); + +/* + * pf queue glue. + */ + +static const struct pfq_ops fqcodel_pf_ops = { + fqcodel_pf_alloc, + fqcodel_pf_addqueue, + fqcodel_pf_free, + fqcodel_pf_qstats, + fqcodel_pf_qlength, + fqcodel_pf_enqueue, + fqcodel_pf_deq_begin, + fqcodel_pf_deq_commit, + fqcodel_pf_purge +}; + +const struct pfq_ops *const pfq_fqcodel_ops = &fqcodel_pf_ops; + +/* Default aggregate queue depth */ +static const unsigned int fqcodel_qlimit = 1024; + +/* + * CoDel implementation + */ + +/* Delay target, 5ms */ +static const int64_t codel_target = 5000000; + +/* First 399 "100 / sqrt(x)" intervals, ns precision */ +static const uint32_t codel_intervals[] = { + 100000000, 70710678, 57735027, 50000000, 44721360, 40824829, 37796447, + 35355339, 33333333, 31622777, 30151134, 28867513, 27735010, 26726124, + 25819889, 25000000, 24253563, 23570226, 22941573, 22360680, 21821789, + 21320072, 20851441, 20412415, 20000000, 19611614, 19245009, 18898224, + 18569534, 18257419, 17960530, 17677670, 17407766, 17149859, 16903085, + 16666667, 16439899, 16222142, 16012815, 15811388, 15617376, 15430335, + 15249857, 15075567, 14907120, 14744196, 14586499, 14433757, 14285714, + 14142136, 14002801, 13867505, 13736056, 13608276, 13483997, 13363062, + 13245324, 13130643, 13018891, 12909944, 12803688, 12700013, 12598816, + 12500000, 12403473, 12309149, 12216944, 12126781, 12038585, 11952286, + 11867817, 11785113, 11704115, 11624764, 11547005, 11470787, 11396058, + 11322770, 11250879, 11180340, 11111111, 11043153, 10976426, 10910895, + 10846523, 10783277, 10721125, 10660036, 10599979, 10540926, 10482848, + 10425721, 10369517, 10314212, 10259784, 10206207, 10153462, 10101525, + 10050378, 10000000, 9950372, 9901475, 9853293, 9805807, 9759001, + 9712859, 9667365, 9622504, 9578263, 9534626, 9491580, 9449112, + 9407209, 9365858, 9325048, 9284767, 9245003, 9205746, 9166985, + 9128709, 9090909, 9053575, 9016696, 8980265, 8944272, 8908708, + 8873565, 8838835, 8804509, 8770580, 8737041, 8703883, 8671100, + 8638684, 8606630, 8574929, 8543577, 8512565, 8481889, 8451543, + 8421519, 8391814, 8362420, 8333333, 8304548, 8276059, 8247861, + 8219949, 8192319, 8164966, 8137885, 8111071, 8084521, 8058230, + 8032193, 8006408, 7980869, 7955573, 7930516, 7905694, 7881104, + 7856742, 7832604, 7808688, 7784989, 7761505, 7738232, 7715167, + 7692308, 7669650, 7647191, 7624929, 7602859, 7580980, 7559289, + 7537784, 7516460, 7495317, 7474351, 7453560, 7432941, 7412493, + 7392213, 7372098, 7352146, 7332356, 7312724, 7293250, 7273930, + 7254763, 7235746, 7216878, 7198158, 7179582, 7161149, 7142857, + 7124705, 7106691, 7088812, 7071068, 7053456, 7035975, 7018624, + 7001400, 6984303, 6967330, 6950480, 6933752, 6917145, 6900656, + 6884284, 6868028, 6851887, 6835859, 6819943, 6804138, 6788442, + 6772855, 6757374, 6741999, 6726728, 6711561, 6696495, 6681531, + 6666667, 6651901, 6637233, 6622662, 6608186, 6593805, 6579517, + 6565322, 6551218, 6537205, 6523281, 6509446, 6495698, 6482037, + 6468462, 6454972, 6441566, 6428243, 6415003, 6401844, 6388766, + 6375767, 6362848, 6350006, 6337243, 6324555, 6311944, 6299408, + 6286946, 6274558, 6262243, 6250000, 6237829, 6225728, 6213698, + 6201737, 6189845, 6178021, 6166264, 6154575, 6142951, 6131393, + 6119901, 6108472, 6097108, 6085806, 6074567, 6063391, 6052275, + 6041221, 6030227, 6019293, 6008418, 5997601, 5986843, 5976143, + 5965500, 5954913, 5944383, 5933908, 5923489, 5913124, 5902813, + 5892557, 5882353, 5872202, 5862104, 5852057, 5842062, 5832118, + 5822225, 5812382, 5802589, 5792844, 5783149, 5773503, 5763904, + 5754353, 5744850, 5735393, 5725983, 5716620, 5707301, 5698029, + 5688801, 5679618, 5670480, 5661385, 5652334, 5643326, 5634362, + 5625440, 5616560, 5607722, 5598925, 5590170, 5581456, 5572782, + 5564149, 5555556, 5547002, 5538488, 5530013, 5521576, 5513178, + 5504819, 5496497, 5488213, 5479966, 5471757, 5463584, 5455447, + 5447347, 5439283, 5431254, 5423261, 5415304, 5407381, 5399492, + 5391639, 5383819, 5376033, 5368281, 5360563, 5352877, 5345225, + 5337605, 5330018, 5322463, 5314940, 5307449, 5299989, 5292561, + 5285164, 5277798, 5270463, 5263158, 5255883, 5248639, 5241424, + 5234239, 5227084, 5219958, 5212860, 5205792, 5198752, 5191741, + 5184758, 5177804, 5170877, 5163978, 5157106, 5150262, 5143445, + 5136655, 5129892, 5123155, 5116445, 5109761, 5103104, 5096472, + 5089866, 5083286, 5076731, 5070201, 5063697, 5057217, 5050763, + 5044333, 5037927, 5031546, 5025189, 5018856, 5012547, 5006262 +}; + +void +codel_initparams(struct codel_params *cp, unsigned int target, + unsigned int interval, int quantum) +{ + uint64_t mult; + unsigned int i; + + /* + * Update observation intervals table according to the configured + * initial interval value. + */ + if (interval > codel_intervals[0]) { + /* + * Select either specified target or 5% of an interval + * (RFC 8289, section 4.3). + */ + cp->target = MAX(target, interval / 20); + cp->interval = interval; + + /* The coefficient is scaled up by a 1000 */ + mult = ((uint64_t)cp->interval * 1000) / codel_intervals[0]; + + /* Prepare table of intervals */ + cp->intervals = mallocarray(nitems(codel_intervals), + sizeof(codel_intervals[0]), M_DEVBUF, M_WAITOK | M_ZERO); + for (i = 0; i < nitems(codel_intervals); i++) + cp->intervals[i] = ((uint64_t)codel_intervals[i] * + mult) / 1000; + } else { + cp->target = MAX(target, codel_target); + cp->interval = codel_intervals[0]; + cp->intervals = (uint32_t *)codel_intervals; + } + + cp->quantum = quantum; + + /* Grace period for delta reuse (RFC 8289, section 5.5) */ + cp->grace = 16 * cp->interval; +} + +void +codel_freeparams(struct codel_params *cp) +{ + if (cp->intervals != codel_intervals) + free(cp->intervals, M_DEVBUF, nitems(codel_intervals) * + sizeof(codel_intervals[0])); + cp->intervals = NULL; +} + +static inline unsigned int +codel_backlog(struct codel *cd) +{ + return (cd->backlog); +} + +static inline unsigned int +codel_qlength(struct codel *cd) +{ + return (ml_len(&cd->q)); +} + +static inline int64_t +codel_delay(struct codel *cd) +{ + return (cd->delay); +} + +void +codel_enqueue(struct codel *cd, int64_t now, struct mbuf *m) +{ + m->m_pkthdr.ph_timestamp = now; + + ml_enqueue(&cd->q, m); + cd->backlog += m->m_pkthdr.len; +} + +/* + * Select the next interval according to the number of drops + * in the current one relative to the provided timestamp. + */ +static inline void +control_law(struct codel *cd, struct codel_params *cp, int64_t rts) +{ + unsigned int idx; + + KASSERT(cd->drops > 0); + idx = min(cd->drops - 1, nitems(codel_intervals) - 1); + cd->next = rts + cp->intervals[idx]; +} + +/* + * Pick the next enqueued packet and determine the queueing delay + * as well as whether or not it's a good candidate for dropping + * from the queue. + * + * The decision whether to drop the packet or not is made based + * on the queueing delay target of 5ms and on the current queue + * length in bytes which shouldn't be less than the amount of data + * that arrives in a typical interarrival time (MTU-sized packets + * arriving spaced by the amount of time it takes to send such a + * packet on the bottleneck). + */ +static inline struct mbuf * +codel_next_packet(struct codel *cd, struct codel_params *cp, int64_t now, + int *drop) +{ + struct mbuf *m; + + *drop = 0; + + m = MBUF_LIST_FIRST(&cd->q); + if (m == NULL) { + KASSERT(cd->backlog == 0); + /* Empty queue, reset interval */ + cd->start = 0; + return (NULL); + } + + KASSERT(cd->backlog >= m->m_pkthdr.len); + if (now - m->m_pkthdr.ph_timestamp < cp->target || + cd->backlog - m->m_pkthdr.len <= cp->quantum) { + /* + * The minimum delay decreased below the target, reset + * the current observation interval. + */ + cd->start = 0; + return (m); + } + + if (cd->start == 0) { + /* + * This is the first packet to be delayed for more than + * the target, start the first observation interval after + * a single RTT and see if the minimum delay goes below + * the target within the interval, otherwise punish the + * next packet. + */ + cd->start = now + cp->interval; + } else if (now >= cd->start) { + *drop = 1; + } + return (m); +} + +enum { INITIAL, ACCEPTING, FIRSTDROP, DROPPING, CONTROL, RECOVERY }; + +static inline int +codel_state_change(struct codel *cd, int64_t now, struct mbuf *m, int drop, + int state) +{ + if (state == FIRSTDROP) + return (ACCEPTING); + + if (cd->dropping) { + if (!drop) + return (RECOVERY); + else if (now >= cd->next) + return (state == DROPPING ? CONTROL : DROPPING); + } else if (drop) + return (FIRSTDROP); + + if (m == NULL) + return (RECOVERY); + + return (ACCEPTING); +} + +struct mbuf * +codel_dequeue(struct codel *cd, struct codel_params *cp, int64_t now, + struct mbuf_list *free_ml, uint64_t *dpkts, uint64_t *dbytes) +{ + struct mbuf *m; + unsigned short delta; + int drop, state, done = 0; + + state = INITIAL; + + while (!done) { + m = codel_next_packet(cd, cp, now, &drop); + state = codel_state_change(cd, now, m, drop, state); + + switch (state) { + case FIRSTDROP: + m = codel_commit(cd, m); + ml_enqueue(free_ml, m); + + *dpkts += 1; + *dbytes += m->m_pkthdr.len; + + cd->dropping = 1; + + /* + * If we're still within the grace period and not + * meeting our minimal delay target we treat this + * as a continuation of the previous observation + * interval and shrink it further. Otherwise we + * start from the initial one. + */ + delta = cd->drops - cd->ldrops; + if (delta > 1 && (now < cd->next || + now - cd->next < cp->grace)) + cd->drops = delta; + else + cd->drops = 1; + control_law(cd, cp, now); + cd->ldrops = cd->drops; + + /* fetches the next packet and goes to ACCEPTING */ + break; + case DROPPING: + m = codel_commit(cd, m); + ml_enqueue(free_ml, m); + cd->drops++; + + *dpkts += 1; + *dbytes += m->m_pkthdr.len; + + /* fetches the next packet and goes to CONTROL */ + break; + case CONTROL: + if (drop) { + control_law(cd, cp, cd->next); + continue; + } + /* FALLTHROUGH */ + case RECOVERY: + cd->dropping = 0; + /* FALLTHROUGH */ + case ACCEPTING: + done = 1; + break; + } + } + + if (m != NULL) + cd->delay = now - m->m_pkthdr.ph_timestamp; + + return (m); +} + +struct mbuf * +codel_commit(struct codel *cd, struct mbuf *m) +{ + struct mbuf *n; + + n = ml_dequeue(&cd->q); + if (m) + KASSERT(n == m); + KASSERT(n != NULL); + KASSERT(cd->backlog >= n->m_pkthdr.len); + cd->backlog -= n->m_pkthdr.len; + return (n); +} + +void +codel_purge(struct codel *cd, struct mbuf_list *ml) +{ + ml_enlist(ml, &cd->q); + cd->backlog = 0; +} + +/* + * FQ-CoDel implementation + */ + +static inline struct flow * +classify_flow(struct fqcodel *fqc, struct mbuf *m) +{ + unsigned int index = 0; + + if (m->m_pkthdr.csum_flags & M_FLOWID) + index = m->m_pkthdr.ph_flowid % fqc->nflows; + + DPRINTF("%s: %u\n", __func__, index); + + return (&fqc->flows[index]); +} + +struct mbuf * +fqcodel_enq(struct fqcodel *fqc, struct mbuf *m) +{ + struct flow *flow; + unsigned int backlog = 0; + int64_t now; + int i, ndrop; + + flow = classify_flow(fqc, m); + if (flow == NULL) + return (m); + + now = nsecuptime(); + codel_enqueue(&flow->cd, now, m); + fqc->qlength++; + + if (!flow->active) { + SIMPLEQ_INSERT_TAIL(&fqc->newq, flow, flowentry); + flow->deficit = fqc->quantum; + flow->active = 1; + DPRINTF("%s: flow %u active deficit %d\n", __func__, + flow->id, flow->deficit); + } + + /* + * Flush pending_drops first to let PF account them individually. + * When batch dropping (below), we queue multiple packets but can + * only return one per enqueue call to maintain the interface + * contract. + */ + if (!ml_empty(&fqc->pending_drops)) + return (ml_dequeue(&fqc->pending_drops)); + + /* + * If total queue length exceeds the limit, find the flow with the + * largest backlog and drop up to half of its packets, with a + * maximum of 64, from the head. Implements RFC 8290, section 4.1 + * batch drop to handle overload efficiently. Dropped packets are + * queued in pending_drops. + */ + if (fqc->qlength > fqc->qlimit) { + for (i = 0; i < fqc->nflows; i++) { + if (codel_backlog(&fqc->flows[i].cd) > backlog) { + flow = &fqc->flows[i]; + backlog = codel_backlog(&flow->cd); + } + } + + KASSERT(flow != NULL); + + ndrop = MIN(MAX(codel_qlength(&flow->cd) / 2, 1), 64); + + for (i = 0; i < ndrop; i++) { + m = codel_commit(&flow->cd, NULL); + if (m == NULL) + break; + fqc->drop_cnt.packets++; + fqc->drop_cnt.bytes += m->m_pkthdr.len; + fqc->qlength--; + ml_enqueue(&fqc->pending_drops, m); + } + + DPRINTF("%s: batch-dropped %d/%d pkts from flow %u\n", __func__, + i, ndrop, flow->id); + + return (ml_dequeue(&fqc->pending_drops)); + } + + return (NULL); +} + +static inline struct flowq * +select_queue(struct fqcodel *fqc) +{ + struct flowq *fq = NULL; + + if (!SIMPLEQ_EMPTY(&fqc->newq)) + fq = &fqc->newq; + else if (!SIMPLEQ_EMPTY(&fqc->oldq)) + fq = &fqc->oldq; + return (fq); +} + +static inline struct flow * +first_flow(struct fqcodel *fqc, struct flowq **fq) +{ + struct flow *flow; + + while ((*fq = select_queue(fqc)) != NULL) { + while ((flow = SIMPLEQ_FIRST(*fq)) != NULL) { + if (flow->deficit <= 0) { + flow->deficit += fqc->quantum; + SIMPLEQ_REMOVE_HEAD(*fq, flowentry); + SIMPLEQ_INSERT_TAIL(&fqc->oldq, flow, + flowentry); + DPRINTF("%s: flow %u deficit %d\n", __func__, + flow->id, flow->deficit); + } else + return (flow); + } + } + + return (NULL); +} + +static inline struct flow * +next_flow(struct fqcodel *fqc, struct flow *flow, struct flowq **fq) +{ + SIMPLEQ_REMOVE_HEAD(*fq, flowentry); + + if (*fq == &fqc->newq && !SIMPLEQ_EMPTY(&fqc->oldq)) { + /* A packet was dropped, starve the queue */ + SIMPLEQ_INSERT_TAIL(&fqc->oldq, flow, flowentry); + DPRINTF("%s: flow %u ->oldq deficit %d\n", __func__, + flow->id, flow->deficit); + } else { + /* A packet was dropped on a starved queue, disable it */ + flow->active = 0; + DPRINTF("%s: flow %u inactive deficit %d\n", __func__, + flow->id, flow->deficit); + } + + return (first_flow(fqc, fq)); +} + +struct mbuf * +fqcodel_deq_begin(struct fqcodel *fqc, void **cookiep, + struct mbuf_list *free_ml) +{ + struct mbuf_list ml = MBUF_LIST_INITIALIZER(); + struct flowq *fq; + struct flow *flow; + struct mbuf *m; + int64_t now; + + if ((fqc->flags & FQCF_FIXED_QUANTUM) == 0) + fqc->quantum = fqc->ifp->if_mtu + max_linkhdr; + + now = nsecuptime(); + + for (flow = first_flow(fqc, &fq); flow != NULL; + flow = next_flow(fqc, flow, &fq)) { + m = codel_dequeue(&flow->cd, &fqc->cparams, now, &ml, + &fqc->drop_cnt.packets, &fqc->drop_cnt.bytes); + + KASSERT(fqc->qlength >= ml_len(&ml)); + fqc->qlength -= ml_len(&ml); + + ml_enlist(free_ml, &ml); + + if (m != NULL) { + flow->deficit -= m->m_pkthdr.len; + DPRINTF("%s: flow %u deficit %d\n", __func__, + flow->id, flow->deficit); + *cookiep = flow; + return (m); + } + } + + return (NULL); +} + +void +fqcodel_deq_commit(struct fqcodel *fqc, struct mbuf *m, void *cookie) +{ + struct flow *flow = cookie; + + KASSERT(fqc->qlength > 0); + fqc->qlength--; + + fqc->xmit_cnt.packets++; + fqc->xmit_cnt.bytes += m->m_pkthdr.len; + + (void)codel_commit(&flow->cd, m); +} + +void +fqcodel_purge(struct fqcodel *fqc, struct mbuf_list *ml) +{ + unsigned int i; + + for (i = 0; i < fqc->nflows; i++) + codel_purge(&fqc->flows[i].cd, ml); + ml_enlist(ml, &fqc->pending_drops); + fqc->qlength = 0; +} + +struct mbuf * +fqcodel_if_enq(struct ifqueue *ifq, struct mbuf *m) +{ + return fqcodel_enq(ifq->ifq_q, m); +} + +struct mbuf * +fqcodel_if_deq_begin(struct ifqueue *ifq, void **cookiep) +{ + struct mbuf_list free_ml = MBUF_LIST_INITIALIZER(); + struct mbuf *m; + + m = fqcodel_deq_begin(ifq->ifq_q, cookiep, &free_ml); + ifq_mfreeml(ifq, &free_ml); + return (m); +} + +void +fqcodel_if_deq_commit(struct ifqueue *ifq, struct mbuf *m, void *cookie) +{ + return fqcodel_deq_commit(ifq->ifq_q, m, cookie); +} + +void +fqcodel_if_purge(struct ifqueue *ifq, struct mbuf_list *ml) +{ + return fqcodel_purge(ifq->ifq_q, ml); +} + +void * +fqcodel_pf_alloc(struct ifnet *ifp) +{ + struct fqcodel *fqc; + + fqc = malloc(sizeof(struct fqcodel), M_DEVBUF, M_WAITOK | M_ZERO); + + SIMPLEQ_INIT(&fqc->newq); + SIMPLEQ_INIT(&fqc->oldq); + ml_init(&fqc->pending_drops); + + return (fqc); +} + +int +fqcodel_pf_addqueue(void *arg, struct pf_queuespec *qs) +{ + struct ifnet *ifp = qs->kif->pfik_ifp; + struct fqcodel *fqc = arg; + + if (qs->flowqueue.flows == 0 || qs->flowqueue.flows > 0xffff) + return (EINVAL); + + fqc->nflows = qs->flowqueue.flows; + fqc->quantum = qs->flowqueue.quantum; + if (qs->qlimit > 0) + fqc->qlimit = qs->qlimit; + else + fqc->qlimit = fqcodel_qlimit; + if (fqc->quantum > 0) + fqc->flags |= FQCF_FIXED_QUANTUM; + else + fqc->quantum = ifp->if_mtu + max_linkhdr; + + codel_initparams(&fqc->cparams, qs->flowqueue.target, + qs->flowqueue.interval, fqc->quantum); + + fqc->flows = mallocarray(fqc->nflows, sizeof(struct flow), + M_DEVBUF, M_WAITOK | M_ZERO); + +#ifdef FQCODEL_DEBUG + { + unsigned int i; + + for (i = 0; i < fqc->nflows; i++) + fqc->flows[i].id = i; + } +#endif + + fqc->ifp = ifp; + + DPRINTF("fq-codel on %s: %d queues %d deep, quantum %d target %llums " + "interval %llums\n", ifp->if_xname, fqc->nflows, fqc->qlimit, + fqc->quantum, fqc->cparams.target / 1000000, + fqc->cparams.interval / 1000000); + + return (0); +} + +void +fqcodel_pf_free(void *arg) +{ + struct fqcodel *fqc = arg; + + ml_purge(&fqc->pending_drops); + codel_freeparams(&fqc->cparams); + free(fqc->flows, M_DEVBUF, fqc->nflows * sizeof(struct flow)); + free(fqc, M_DEVBUF, sizeof(struct fqcodel)); +} + +int +fqcodel_pf_qstats(struct pf_queuespec *qs, void *ubuf, int *nbytes) +{ + struct ifnet *ifp = qs->kif->pfik_ifp; + struct fqcodel_stats stats; + struct fqcodel *fqc; + int64_t delay; + unsigned int i; + int error = 0; + + if (ifp == NULL) + return (EBADF); + + if (*nbytes < sizeof(stats)) + return (EINVAL); + + memset(&stats, 0, sizeof(stats)); + + /* XXX: multi-q? */ + fqc = ifq_q_enter(&ifp->if_snd, ifq_fqcodel_ops); + if (fqc == NULL) + return (EBADF); + + stats.xmit_cnt = fqc->xmit_cnt; + stats.drop_cnt = fqc->drop_cnt; + + stats.qlength = ifq_len(&ifp->if_snd); + stats.qlimit = fqc->qlimit; + + stats.flows = 0; + stats.delaysum = stats.delaysumsq = 0; + + for (i = 0; i < fqc->nflows; i++) { + if (codel_qlength(&fqc->flows[i].cd) == 0) + continue; + /* Scale down to microseconds to avoid overflows */ + delay = codel_delay(&fqc->flows[i].cd) / 1000; + stats.delaysum += delay; + stats.delaysumsq += delay * delay; + stats.flows++; + } + + ifq_q_leave(&ifp->if_snd, fqc); + + if ((error = copyout((caddr_t)&stats, ubuf, sizeof(stats))) != 0) + return (error); + + *nbytes = sizeof(stats); + return (0); +} + +unsigned int +fqcodel_pf_qlength(void *fqc) +{ + return ((struct fqcodel *)fqc)->qlength; +} + +struct mbuf * +fqcodel_pf_enqueue(void *fqc, struct mbuf *m) +{ + return fqcodel_enq(fqc, m); +} + +struct mbuf * +fqcodel_pf_deq_begin(void *fqc, void **cookiep, struct mbuf_list *free_ml) +{ + return fqcodel_deq_begin(fqc, cookiep, free_ml); +} + +void +fqcodel_pf_deq_commit(void *fqc, struct mbuf *m, void *cookie) +{ + return fqcodel_deq_commit(fqc, m, cookie); +} + +void +fqcodel_pf_purge(void *fqc, struct mbuf_list *ml) +{ + return fqcodel_purge(fqc, ml); +} + +unsigned int +fqcodel_idx(unsigned int nqueues, const struct mbuf *m) +{ + return (0); +} + +void * +fqcodel_alloc(unsigned int idx, void *arg) +{ + /* Allocation is done in fqcodel_pf_alloc */ + return (arg); +} + +void +fqcodel_free(unsigned int idx, void *arg) +{ + fqcodel_pf_free(arg); +} diff --git a/module/pfsrc/hfsc.c b/module/pfsrc/hfsc.c new file mode 100644 index 0000000..838b9a5 --- /dev/null +++ b/module/pfsrc/hfsc.c @@ -0,0 +1,1667 @@ +/* PFLINUX port of OpenBSD 8.0 net/hfsc.c — see docs/porting-notes.md */ +#include + +/* + * kernel internal service curve representation + * coordinates are given by 64 bit unsigned integers. + * x-axis: unit is clock count. for the intel x86 architecture, + * the raw Pentium TSC (Timestamp Counter) value is used. + * virtual time is also calculated in this time scale. + * y-axis: unit is byte. + * + * the service curve parameters are converted to the internal + * representation. + * the slope values are scaled to avoid overflow. + * the inverse slope values as well as the y-projection of the 1st + * segment are kept in order to avoid 64-bit divide operations + * that are expensive on 32-bit architectures. + * + * note: Intel Pentium TSC never wraps around in several thousands of years. + * x-axis doesn't wrap around for 1089 years with 1GHz clock. + * y-axis doesn't wrap around for 4358 years with 1Gbps bandwidth. + */ + +/* kernel internal representation of a service curve */ +struct hfsc_internal_sc { + u_int64_t sm1; /* scaled slope of the 1st segment */ + u_int64_t ism1; /* scaled inverse-slope of the 1st segment */ + u_int64_t dx; /* the x-projection of the 1st segment */ + u_int64_t dy; /* the y-projection of the 1st segment */ + u_int64_t sm2; /* scaled slope of the 2nd segment */ + u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */ +}; + +/* runtime service curve */ +struct hfsc_runtime_sc { + u_int64_t x; /* current starting position on x-axis */ + u_int64_t y; /* current starting position on x-axis */ + u_int64_t sm1; /* scaled slope of the 1st segment */ + u_int64_t ism1; /* scaled inverse-slope of the 1st segment */ + u_int64_t dx; /* the x-projection of the 1st segment */ + u_int64_t dy; /* the y-projection of the 1st segment */ + u_int64_t sm2; /* scaled slope of the 2nd segment */ + u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */ +}; + +struct hfsc_classq { + struct mbuf_list q; /* Queue of packets */ + int qlimit; /* Queue limit */ +}; + +/* for TAILQ based ellist and actlist implementation */ +struct hfsc_class; +TAILQ_HEAD(hfsc_eligible, hfsc_class); +TAILQ_HEAD(hfsc_active, hfsc_class); +#define hfsc_actlist_last(s) TAILQ_LAST(s, hfsc_active) + +struct hfsc_class { + u_int cl_id; /* class id (just for debug) */ + u_int32_t cl_handle; /* class handle */ + int cl_flags; /* misc flags */ + + struct hfsc_class *cl_parent; /* parent class */ + struct hfsc_class *cl_siblings; /* sibling classes */ + struct hfsc_class *cl_children; /* child classes */ + + struct hfsc_classq cl_q; /* class queue structure */ + + const struct pfq_ops *cl_qops; /* queue manager */ + void *cl_qdata; /* queue manager data */ + void *cl_cookie; /* queue manager cookie */ + + u_int64_t cl_total; /* total work in bytes */ + u_int64_t cl_cumul; /* cumulative work in bytes + done by real-time criteria */ + u_int64_t cl_d; /* deadline */ + u_int64_t cl_e; /* eligible time */ + u_int64_t cl_vt; /* virtual time */ + u_int64_t cl_f; /* time when this class will fit for + link-sharing, max(myf, cfmin) */ + u_int64_t cl_myf; /* my fit-time (as calculated from this + class's own upperlimit curve) */ + u_int64_t cl_myfadj; /* my fit-time adjustment + (to cancel history dependence) */ + u_int64_t cl_cfmin; /* earliest children's fit-time (used + with cl_myf to obtain cl_f) */ + u_int64_t cl_cvtmin; /* minimal virtual time among the + children fit for link-sharing + (monotonic within a period) */ + u_int64_t cl_vtadj; /* intra-period cumulative vt + adjustment */ + u_int64_t cl_vtoff; /* inter-period cumulative vt offset */ + u_int64_t cl_cvtmax; /* max child's vt in the last period */ + + u_int64_t cl_initvt; /* init virtual time (for debugging) */ + + struct hfsc_internal_sc *cl_rsc; /* internal real-time service curve */ + struct hfsc_internal_sc *cl_fsc; /* internal fair service curve */ + struct hfsc_internal_sc *cl_usc; /* internal upperlimit service curve */ + struct hfsc_runtime_sc cl_deadline; /* deadline curve */ + struct hfsc_runtime_sc cl_eligible; /* eligible curve */ + struct hfsc_runtime_sc cl_virtual; /* virtual curve */ + struct hfsc_runtime_sc cl_ulimit; /* upperlimit curve */ + + u_int cl_vtperiod; /* vt period sequence no */ + u_int cl_parentperiod; /* parent's vt period seqno */ + int cl_nactive; /* number of active children */ + struct hfsc_active cl_actc; /* active children list */ + + TAILQ_ENTRY(hfsc_class) cl_actlist; /* active children list entry */ + TAILQ_ENTRY(hfsc_class) cl_ellist; /* eligible list entry */ + + struct { + struct hfsc_pktcntr xmit_cnt; + struct hfsc_pktcntr drop_cnt; + u_int period; + } cl_stats; +}; + +/* + * hfsc interface state + */ +struct hfsc_if { + struct hfsc_if *hif_next; /* interface state list */ + struct hfsc_class *hif_rootclass; /* root class */ + struct hfsc_class *hif_defaultclass; /* default class */ + struct hfsc_class **hif_class_tbl; + + u_int64_t hif_microtime; /* time at deq_begin */ + + u_int hif_allocated; /* # of slots in hif_class_tbl */ + u_int hif_classes; /* # of classes in the tree */ + u_int hif_classid; /* class id sequence number */ + + struct hfsc_eligible hif_eligible; /* eligible list */ + struct timeout hif_defer; /* for queues that weren't ready */ +}; + +/* + * function prototypes + */ +struct hfsc_class *hfsc_class_create(struct hfsc_if *, + struct hfsc_sc *, struct hfsc_sc *, + struct hfsc_sc *, struct hfsc_class *, int, + int, int); +int hfsc_class_destroy(struct hfsc_if *, + struct hfsc_class *); +struct hfsc_class *hfsc_nextclass(struct hfsc_class *); + +void hfsc_cl_purge(struct hfsc_if *, struct hfsc_class *, + struct mbuf_list *); + +void hfsc_update_sc(struct hfsc_if *, struct hfsc_class *, int); +void hfsc_deferred(void *); +void hfsc_update_cfmin(struct hfsc_class *); +void hfsc_set_active(struct hfsc_if *, struct hfsc_class *, int); +void hfsc_set_passive(struct hfsc_if *, struct hfsc_class *); +void hfsc_init_ed(struct hfsc_if *, struct hfsc_class *, int); +void hfsc_update_ed(struct hfsc_if *, struct hfsc_class *, int); +void hfsc_update_d(struct hfsc_class *, int); +void hfsc_init_vf(struct hfsc_class *, int); +void hfsc_update_vf(struct hfsc_class *, int, u_int64_t); +void hfsc_ellist_insert(struct hfsc_if *, struct hfsc_class *); +void hfsc_ellist_remove(struct hfsc_if *, struct hfsc_class *); +void hfsc_ellist_update(struct hfsc_if *, struct hfsc_class *); +struct hfsc_class *hfsc_ellist_get_mindl(struct hfsc_if *, u_int64_t); +void hfsc_actlist_insert(struct hfsc_class *); +void hfsc_actlist_remove(struct hfsc_class *); +void hfsc_actlist_update(struct hfsc_class *); + +struct hfsc_class *hfsc_actlist_firstfit(struct hfsc_class *, + u_int64_t); + +static __inline u_int64_t seg_x2y(u_int64_t, u_int64_t); +static __inline u_int64_t seg_y2x(u_int64_t, u_int64_t); +static __inline u_int64_t m2sm(u_int64_t); +static __inline u_int64_t m2ism(u_int64_t); +static __inline u_int64_t d2dx(u_int); +static __inline u_int64_t sm2m(u_int64_t); +static __inline u_int dx2d(u_int64_t); + +void hfsc_sc2isc(struct hfsc_sc *, struct hfsc_internal_sc *); +void hfsc_rtsc_init(struct hfsc_runtime_sc *, + struct hfsc_internal_sc *, u_int64_t, u_int64_t); +u_int64_t hfsc_rtsc_y2x(struct hfsc_runtime_sc *, u_int64_t); +u_int64_t hfsc_rtsc_x2y(struct hfsc_runtime_sc *, u_int64_t); +void hfsc_rtsc_min(struct hfsc_runtime_sc *, + struct hfsc_internal_sc *, u_int64_t, u_int64_t); + +void hfsc_getclstats(struct hfsc_class_stats *, struct hfsc_class *); +struct hfsc_class *hfsc_clh2cph(struct hfsc_if *, u_int32_t); + +#define HFSC_FREQ 1000000000LL +#define HFSC_CLK_PER_TICK tick_nsec +#define HFSC_HT_INFINITY 0xffffffffffffffffLL /* infinite time value */ + +struct pool hfsc_class_pl, hfsc_internal_sc_pl; + +/* + * ifqueue glue. + */ + +unsigned int hfsc_idx(unsigned int, const struct mbuf *); +struct mbuf *hfsc_enq(struct ifqueue *, struct mbuf *); +struct mbuf *hfsc_deq_begin(struct ifqueue *, void **); +void hfsc_deq_commit(struct ifqueue *, struct mbuf *, void *); +void hfsc_purge(struct ifqueue *, struct mbuf_list *); +void *hfsc_alloc(unsigned int, void *); +void hfsc_free(unsigned int, void *); + +const struct ifq_ops hfsc_ops = { + hfsc_idx, + hfsc_enq, + hfsc_deq_begin, + hfsc_deq_commit, + hfsc_purge, + hfsc_alloc, + hfsc_free, +}; + +const struct ifq_ops * const ifq_hfsc_ops = &hfsc_ops; + +/* + * pf queue glue. + */ + +void *hfsc_pf_alloc(struct ifnet *); +int hfsc_pf_addqueue(void *, struct pf_queuespec *); +void hfsc_pf_free(void *); +int hfsc_pf_qstats(struct pf_queuespec *, void *, int *); +unsigned int hfsc_pf_qlength(void *); +struct mbuf * hfsc_pf_enqueue(void *, struct mbuf *); +struct mbuf * hfsc_pf_deq_begin(void *, void **, struct mbuf_list *); +void hfsc_pf_deq_commit(void *, struct mbuf *, void *); +void hfsc_pf_purge(void *, struct mbuf_list *); + +const struct pfq_ops hfsc_pf_ops = { + hfsc_pf_alloc, + hfsc_pf_addqueue, + hfsc_pf_free, + hfsc_pf_qstats, + hfsc_pf_qlength, + hfsc_pf_enqueue, + hfsc_pf_deq_begin, + hfsc_pf_deq_commit, + hfsc_pf_purge +}; + +const struct pfq_ops * const pfq_hfsc_ops = &hfsc_pf_ops; + +/* + * shortcuts for repeated use + */ +static inline unsigned int +hfsc_class_qlength(struct hfsc_class *cl) +{ + /* Only leaf classes have a queue */ + if (cl->cl_qops != NULL) + return cl->cl_qops->pfq_qlength(cl->cl_qdata); + return 0; +} + +static inline struct mbuf * +hfsc_class_enqueue(struct hfsc_class *cl, struct mbuf *m) +{ + return cl->cl_qops->pfq_enqueue(cl->cl_qdata, m); +} + +static inline struct mbuf * +hfsc_class_deq_begin(struct hfsc_class *cl, struct mbuf_list *ml) +{ + return cl->cl_qops->pfq_deq_begin(cl->cl_qdata, &cl->cl_cookie, ml); +} + +static inline void +hfsc_class_deq_commit(struct hfsc_class *cl, struct mbuf *m) +{ + return cl->cl_qops->pfq_deq_commit(cl->cl_qdata, m, cl->cl_cookie); +} + +static inline void +hfsc_class_purge(struct hfsc_class *cl, struct mbuf_list *ml) +{ + /* Only leaf classes have a queue */ + if (cl->cl_qops != NULL) + return cl->cl_qops->pfq_purge(cl->cl_qdata, ml); +} + +static inline u_int +hfsc_more_slots(u_int current) +{ + u_int want = current * 2; + + return (want > HFSC_MAX_CLASSES ? HFSC_MAX_CLASSES : want); +} + +static void +hfsc_grow_class_tbl(struct hfsc_if *hif, u_int howmany) +{ + struct hfsc_class **newtbl, **old; + size_t oldlen = sizeof(void *) * hif->hif_allocated; + + newtbl = mallocarray(howmany, sizeof(void *), M_DEVBUF, + M_WAITOK | M_ZERO); + old = hif->hif_class_tbl; + + memcpy(newtbl, old, oldlen); + hif->hif_class_tbl = newtbl; + hif->hif_allocated = howmany; + + free(old, M_DEVBUF, oldlen); +} + +void +hfsc_initialize(void) +{ + pool_init(&hfsc_class_pl, sizeof(struct hfsc_class), 0, + IPL_NONE, PR_WAITOK, "hfscclass", NULL); + pool_init(&hfsc_internal_sc_pl, sizeof(struct hfsc_internal_sc), 0, + IPL_NONE, PR_WAITOK, "hfscintsc", NULL); +} + +void * +hfsc_pf_alloc(struct ifnet *ifp) +{ + struct hfsc_if *hif; + + KASSERT(ifp != NULL); + + hif = malloc(sizeof(*hif), M_DEVBUF, M_WAITOK | M_ZERO); + TAILQ_INIT(&hif->hif_eligible); + hif->hif_class_tbl = mallocarray(HFSC_DEFAULT_CLASSES, sizeof(void *), + M_DEVBUF, M_WAITOK | M_ZERO); + hif->hif_allocated = HFSC_DEFAULT_CLASSES; + + timeout_set(&hif->hif_defer, hfsc_deferred, ifp); + + return (hif); +} + +int +hfsc_pf_addqueue(void *arg, struct pf_queuespec *q) +{ + struct hfsc_if *hif = arg; + struct hfsc_class *cl, *parent, *np = NULL; + struct hfsc_sc rtsc, lssc, ulsc; + int error = 0; + + KASSERT(hif != NULL); + KASSERT(q->qid != 0); + + /* Root queue must have non-zero linksharing parameters */ + if (q->linkshare.m1.absolute == 0 && q->linkshare.m2.absolute == 0 && + q->parent_qid == 0) + return (EINVAL); + + if (q->parent_qid == 0 && hif->hif_rootclass == NULL) { + np = hfsc_class_create(hif, NULL, NULL, NULL, NULL, + 0, 0, HFSC_ROOT_CLASS | q->qid); + if (np == NULL) + return (EINVAL); + parent = np; + } else if ((parent = hfsc_clh2cph(hif, q->parent_qid)) == NULL) + return (EINVAL); + + if (hfsc_clh2cph(hif, q->qid) != NULL) { + hfsc_class_destroy(hif, np); + return (EBUSY); + } + + rtsc.m1 = q->realtime.m1.absolute; + rtsc.d = q->realtime.d; + rtsc.m2 = q->realtime.m2.absolute; + lssc.m1 = q->linkshare.m1.absolute; + lssc.d = q->linkshare.d; + lssc.m2 = q->linkshare.m2.absolute; + ulsc.m1 = q->upperlimit.m1.absolute; + ulsc.d = q->upperlimit.d; + ulsc.m2 = q->upperlimit.m2.absolute; + + if ((cl = hfsc_class_create(hif, &rtsc, &lssc, &ulsc, + parent, q->qlimit, q->flags, q->qid)) == NULL) { + hfsc_class_destroy(hif, np); + return (ENOMEM); + } + + /* Attach a queue manager if specified */ + cl->cl_qops = pf_queue_manager(q); + /* Realtime class cannot be used with an external queue manager */ + if (cl->cl_qops == NULL || cl->cl_rsc != NULL) { + cl->cl_qops = pfq_hfsc_ops; + cl->cl_qdata = &cl->cl_q; + } else { + cl->cl_qdata = cl->cl_qops->pfq_alloc(q->kif->pfik_ifp); + if (cl->cl_qdata == NULL) { + cl->cl_qops = NULL; + hfsc_class_destroy(hif, cl); + hfsc_class_destroy(hif, np); + return (ENOMEM); + } + error = cl->cl_qops->pfq_addqueue(cl->cl_qdata, q); + if (error) { + cl->cl_qops->pfq_free(cl->cl_qdata); + cl->cl_qops = NULL; + hfsc_class_destroy(hif, cl); + hfsc_class_destroy(hif, np); + return (error); + } + } + + KASSERT(cl->cl_qops != NULL); + KASSERT(cl->cl_qdata != NULL); + + return (0); +} + +int +hfsc_pf_qstats(struct pf_queuespec *q, void *ubuf, int *nbytes) +{ + struct ifnet *ifp = q->kif->pfik_ifp; + struct hfsc_if *hif; + struct hfsc_class *cl; + struct hfsc_class_stats stats; + int error = 0; + + if (ifp == NULL) + return (EBADF); + + if (*nbytes < sizeof(stats)) + return (EINVAL); + + hif = ifq_q_enter(&ifp->if_snd, ifq_hfsc_ops); + if (hif == NULL) + return (EBADF); + + if ((cl = hfsc_clh2cph(hif, q->qid)) == NULL) { + ifq_q_leave(&ifp->if_snd, hif); + return (EINVAL); + } + + hfsc_getclstats(&stats, cl); + ifq_q_leave(&ifp->if_snd, hif); + + if ((error = copyout((caddr_t)&stats, ubuf, sizeof(stats))) != 0) + return (error); + + *nbytes = sizeof(stats); + return (0); +} + +void +hfsc_pf_free(void *arg) +{ + hfsc_free(0, arg); +} + +unsigned int +hfsc_pf_qlength(void *arg) +{ + struct hfsc_classq *cq = arg; + + return ml_len(&cq->q); +} + +struct mbuf * +hfsc_pf_enqueue(void *arg, struct mbuf *m) +{ + struct hfsc_classq *cq = arg; + + if (ml_len(&cq->q) >= cq->qlimit) + return (m); + + ml_enqueue(&cq->q, m); + return (NULL); +} + +struct mbuf * +hfsc_pf_deq_begin(void *arg, void **cookiep, struct mbuf_list *free_ml) +{ + struct hfsc_classq *cq = arg; + + return MBUF_LIST_FIRST(&cq->q); +} + +void +hfsc_pf_deq_commit(void *arg, struct mbuf *m, void *cookie) +{ + struct hfsc_classq *cq = arg; + + ml_dequeue(&cq->q); +} + +void +hfsc_pf_purge(void *arg, struct mbuf_list *ml) +{ + struct hfsc_classq *cq = arg; + + ml_enlist(ml, &cq->q); +} + +unsigned int +hfsc_idx(unsigned int nqueues, const struct mbuf *m) +{ + /* + * hfsc can only function on a single ifq and the stack understands + * this. when the first ifq on an interface is switched to hfsc, + * this gets used to map all mbufs to the first and only ifq that + * is set up for hfsc. + */ + return (0); +} + +void * +hfsc_alloc(unsigned int idx, void *q) +{ + struct hfsc_if *hif = q; + + KASSERT(idx == 0); /* when hfsc is enabled we only use the first ifq */ + KASSERT(hif != NULL); + return (hif); +} + +void +hfsc_free(unsigned int idx, void *q) +{ + struct hfsc_if *hif = q; + struct hfsc_class *cl; + int i, restart; + + KERNEL_ASSERT_LOCKED(); + KASSERT(idx == 0); /* when hfsc is enabled we only use the first ifq */ + + timeout_del(&hif->hif_defer); + + do { + restart = 0; + for (i = 0; i < hif->hif_allocated; i++) { + cl = hif->hif_class_tbl[i]; + if (hfsc_class_destroy(hif, cl) == EBUSY) + restart++; + } + } while (restart > 0); + + free(hif->hif_class_tbl, M_DEVBUF, hif->hif_allocated * sizeof(void *)); + free(hif, M_DEVBUF, sizeof(*hif)); +} + +void +hfsc_purge(struct ifqueue *ifq, struct mbuf_list *ml) +{ + struct hfsc_if *hif = ifq->ifq_q; + struct hfsc_class *cl; + + for (cl = hif->hif_rootclass; cl != NULL; cl = hfsc_nextclass(cl)) + hfsc_cl_purge(hif, cl, ml); +} + +struct hfsc_class * +hfsc_class_create(struct hfsc_if *hif, struct hfsc_sc *rsc, + struct hfsc_sc *fsc, struct hfsc_sc *usc, struct hfsc_class *parent, + int qlimit, int flags, int qid) +{ + struct hfsc_class *cl, *p; + int i, s; + + if (qlimit == 0) + qlimit = HFSC_DEFAULT_QLIMIT; + + if (hif->hif_classes >= hif->hif_allocated) { + u_int newslots = hfsc_more_slots(hif->hif_allocated); + + if (newslots == hif->hif_allocated) + return (NULL); + hfsc_grow_class_tbl(hif, newslots); + } + + cl = pool_get(&hfsc_class_pl, PR_WAITOK | PR_ZERO); + TAILQ_INIT(&cl->cl_actc); + + ml_init(&cl->cl_q.q); + cl->cl_q.qlimit = qlimit; + cl->cl_flags = flags; + + if (rsc != NULL && (rsc->m1 != 0 || rsc->m2 != 0)) { + cl->cl_rsc = pool_get(&hfsc_internal_sc_pl, PR_WAITOK); + hfsc_sc2isc(rsc, cl->cl_rsc); + hfsc_rtsc_init(&cl->cl_deadline, cl->cl_rsc, 0, 0); + hfsc_rtsc_init(&cl->cl_eligible, cl->cl_rsc, 0, 0); + } + if (fsc != NULL && (fsc->m1 != 0 || fsc->m2 != 0)) { + cl->cl_fsc = pool_get(&hfsc_internal_sc_pl, PR_WAITOK); + hfsc_sc2isc(fsc, cl->cl_fsc); + hfsc_rtsc_init(&cl->cl_virtual, cl->cl_fsc, 0, 0); + } + if (usc != NULL && (usc->m1 != 0 || usc->m2 != 0)) { + cl->cl_usc = pool_get(&hfsc_internal_sc_pl, PR_WAITOK); + hfsc_sc2isc(usc, cl->cl_usc); + hfsc_rtsc_init(&cl->cl_ulimit, cl->cl_usc, 0, 0); + } + + cl->cl_id = hif->hif_classid++; + cl->cl_handle = qid; + cl->cl_parent = parent; + + s = splnet(); + hif->hif_classes++; + + /* + * find a free slot in the class table. if the slot matching + * the lower bits of qid is free, use this slot. otherwise, + * use the first free slot. + */ + i = qid % hif->hif_allocated; + if (hif->hif_class_tbl[i] == NULL) + hif->hif_class_tbl[i] = cl; + else { + for (i = 0; i < hif->hif_allocated; i++) + if (hif->hif_class_tbl[i] == NULL) { + hif->hif_class_tbl[i] = cl; + break; + } + if (i == hif->hif_allocated) { + splx(s); + goto err_ret; + } + } + + if (flags & HFSC_DEFAULTCLASS) + hif->hif_defaultclass = cl; + + if (parent == NULL) + hif->hif_rootclass = cl; + else { + /* add this class to the children list of the parent */ + if ((p = parent->cl_children) == NULL) + parent->cl_children = cl; + else { + while (p->cl_siblings != NULL) + p = p->cl_siblings; + p->cl_siblings = cl; + } + } + splx(s); + + return (cl); + +err_ret: + if (cl->cl_fsc != NULL) + pool_put(&hfsc_internal_sc_pl, cl->cl_fsc); + if (cl->cl_rsc != NULL) + pool_put(&hfsc_internal_sc_pl, cl->cl_rsc); + if (cl->cl_usc != NULL) + pool_put(&hfsc_internal_sc_pl, cl->cl_usc); + pool_put(&hfsc_class_pl, cl); + return (NULL); +} + +int +hfsc_class_destroy(struct hfsc_if *hif, struct hfsc_class *cl) +{ + int i, s; + + if (cl == NULL) + return (0); + + if (cl->cl_children != NULL) + return (EBUSY); + + s = splnet(); + KASSERT(hfsc_class_qlength(cl) == 0); + + if (cl->cl_parent != NULL) { + struct hfsc_class *p = cl->cl_parent->cl_children; + + if (p == cl) + cl->cl_parent->cl_children = cl->cl_siblings; + else do { + if (p->cl_siblings == cl) { + p->cl_siblings = cl->cl_siblings; + break; + } + } while ((p = p->cl_siblings) != NULL); + } + + for (i = 0; i < hif->hif_allocated; i++) + if (hif->hif_class_tbl[i] == cl) { + hif->hif_class_tbl[i] = NULL; + break; + } + + hif->hif_classes--; + splx(s); + + KASSERT(TAILQ_EMPTY(&cl->cl_actc)); + + if (cl == hif->hif_rootclass) + hif->hif_rootclass = NULL; + if (cl == hif->hif_defaultclass) + hif->hif_defaultclass = NULL; + + /* Free external queue manager resources */ + if (cl->cl_qops && cl->cl_qops != pfq_hfsc_ops) + cl->cl_qops->pfq_free(cl->cl_qdata); + + if (cl->cl_usc != NULL) + pool_put(&hfsc_internal_sc_pl, cl->cl_usc); + if (cl->cl_fsc != NULL) + pool_put(&hfsc_internal_sc_pl, cl->cl_fsc); + if (cl->cl_rsc != NULL) + pool_put(&hfsc_internal_sc_pl, cl->cl_rsc); + pool_put(&hfsc_class_pl, cl); + + return (0); +} + +/* + * hfsc_nextclass returns the next class in the tree. + * usage: + * for (cl = hif->hif_rootclass; cl != NULL; cl = hfsc_nextclass(cl)) + * do_something; + */ +struct hfsc_class * +hfsc_nextclass(struct hfsc_class *cl) +{ + if (cl->cl_children != NULL) + cl = cl->cl_children; + else if (cl->cl_siblings != NULL) + cl = cl->cl_siblings; + else { + while ((cl = cl->cl_parent) != NULL) + if (cl->cl_siblings) { + cl = cl->cl_siblings; + break; + } + } + + return (cl); +} + +struct mbuf * +hfsc_enq(struct ifqueue *ifq, struct mbuf *m) +{ + struct hfsc_if *hif = ifq->ifq_q; + struct hfsc_class *cl; + struct mbuf *dm; + + if ((cl = hfsc_clh2cph(hif, m->m_pkthdr.pf.qid)) == NULL || + cl->cl_children != NULL) { + cl = hif->hif_defaultclass; + if (cl == NULL) + return (m); + } + + dm = hfsc_class_enqueue(cl, m); + + /* successfully queued. */ + if (dm != m && hfsc_class_qlength(cl) == 1) { + hfsc_set_active(hif, cl, m->m_pkthdr.len); + if (!timeout_pending(&hif->hif_defer)) + timeout_add(&hif->hif_defer, 1); + } + + /* drop occurred. */ + if (dm != NULL) + PKTCNTR_INC(&cl->cl_stats.drop_cnt, dm->m_pkthdr.len); + + return (dm); +} + +struct mbuf * +hfsc_deq_begin(struct ifqueue *ifq, void **cookiep) +{ + struct mbuf_list free_ml = MBUF_LIST_INITIALIZER(); + struct hfsc_if *hif = ifq->ifq_q; + struct hfsc_class *cl, *tcl; + struct mbuf *m; + u_int64_t cur_time; + + cur_time = nsecuptime(); + + /* + * if there are eligible classes, use real-time criteria. + * find the class with the minimum deadline among + * the eligible classes. + */ + cl = hfsc_ellist_get_mindl(hif, cur_time); + if (cl == NULL) { + /* + * use link-sharing criteria + * get the class with the minimum vt in the hierarchy + */ + cl = NULL; + tcl = hif->hif_rootclass; + + while (tcl != NULL && tcl->cl_children != NULL) { + tcl = hfsc_actlist_firstfit(tcl, cur_time); + if (tcl == NULL) + continue; + + /* + * update parent's cl_cvtmin. + * don't update if the new vt is smaller. + */ + if (tcl->cl_parent->cl_cvtmin < tcl->cl_vt) + tcl->cl_parent->cl_cvtmin = tcl->cl_vt; + + cl = tcl; + } + /* XXX HRTIMER plan hfsc_deferred precisely here. */ + if (cl == NULL) + return (NULL); + } + + m = hfsc_class_deq_begin(cl, &free_ml); + ifq_mfreeml(ifq, &free_ml); + if (m == NULL) { + hfsc_update_sc(hif, cl, 0); + return (NULL); + } + + hif->hif_microtime = cur_time; + *cookiep = cl; + return (m); +} + +void +hfsc_deq_commit(struct ifqueue *ifq, struct mbuf *m, void *cookie) +{ + struct hfsc_if *hif = ifq->ifq_q; + struct hfsc_class *cl = cookie; + + hfsc_class_deq_commit(cl, m); + hfsc_update_sc(hif, cl, m->m_pkthdr.len); + + PKTCNTR_INC(&cl->cl_stats.xmit_cnt, m->m_pkthdr.len); +} + +void +hfsc_update_sc(struct hfsc_if *hif, struct hfsc_class *cl, int len) +{ + int next_len, realtime = 0; + u_int64_t cur_time = hif->hif_microtime; + + /* check if the class was scheduled by real-time criteria */ + if (cl->cl_rsc != NULL) + realtime = (cl->cl_e <= cur_time); + + hfsc_update_vf(cl, len, cur_time); + if (realtime) + cl->cl_cumul += len; + + if (hfsc_class_qlength(cl) > 0) { + /* + * Realtime queue needs to look into the future and make + * calculations based on that. This is the reason it can't + * be used with an external queue manager. + */ + if (cl->cl_rsc != NULL) { + struct mbuf *m0; + + /* update ed */ + KASSERT(cl->cl_qops == pfq_hfsc_ops); + m0 = MBUF_LIST_FIRST(&cl->cl_q.q); + next_len = m0->m_pkthdr.len; + + if (realtime) + hfsc_update_ed(hif, cl, next_len); + else + hfsc_update_d(cl, next_len); + } + } else { + /* the class becomes passive */ + hfsc_set_passive(hif, cl); + } +} + +void +hfsc_deferred(void *arg) +{ + struct ifnet *ifp = arg; + struct ifqueue *ifq = &ifp->if_snd; + struct hfsc_if *hif; + + if (!HFSC_ENABLED(ifq)) + return; + + if (!ifq_empty(ifq)) + ifq_start(ifq); + + hif = ifq_q_enter(&ifp->if_snd, ifq_hfsc_ops); + if (hif == NULL) + return; + /* XXX HRTIMER nearest virtual/fit time is likely less than 1/HZ. */ + timeout_add(&hif->hif_defer, 1); + ifq_q_leave(&ifp->if_snd, hif); +} + +void +hfsc_cl_purge(struct hfsc_if *hif, struct hfsc_class *cl, struct mbuf_list *ml) +{ + struct mbuf_list ml2 = MBUF_LIST_INITIALIZER(); + + hfsc_class_purge(cl, &ml2); + if (ml_empty(&ml2)) + return; + + ml_enlist(ml, &ml2); + + hfsc_update_vf(cl, 0, 0); /* remove cl from the actlist */ + hfsc_set_passive(hif, cl); +} + +void +hfsc_set_active(struct hfsc_if *hif, struct hfsc_class *cl, int len) +{ + if (cl->cl_rsc != NULL) + hfsc_init_ed(hif, cl, len); + if (cl->cl_fsc != NULL) + hfsc_init_vf(cl, len); + + cl->cl_stats.period++; +} + +void +hfsc_set_passive(struct hfsc_if *hif, struct hfsc_class *cl) +{ + if (cl->cl_rsc != NULL) + hfsc_ellist_remove(hif, cl); + + /* + * actlist is handled in hfsc_update_vf() so that hfsc_update_vf(cl, 0, + * 0) needs to be called explicitly to remove a class from actlist + */ +} + +void +hfsc_init_ed(struct hfsc_if *hif, struct hfsc_class *cl, int next_len) +{ + u_int64_t cur_time; + + cur_time = nsecuptime(); + + /* update the deadline curve */ + hfsc_rtsc_min(&cl->cl_deadline, cl->cl_rsc, cur_time, cl->cl_cumul); + + /* + * update the eligible curve. + * for concave, it is equal to the deadline curve. + * for convex, it is a linear curve with slope m2. + */ + cl->cl_eligible = cl->cl_deadline; + if (cl->cl_rsc->sm1 <= cl->cl_rsc->sm2) { + cl->cl_eligible.dx = 0; + cl->cl_eligible.dy = 0; + } + + /* compute e and d */ + cl->cl_e = hfsc_rtsc_y2x(&cl->cl_eligible, cl->cl_cumul); + cl->cl_d = hfsc_rtsc_y2x(&cl->cl_deadline, cl->cl_cumul + next_len); + + hfsc_ellist_insert(hif, cl); +} + +void +hfsc_update_ed(struct hfsc_if *hif, struct hfsc_class *cl, int next_len) +{ + cl->cl_e = hfsc_rtsc_y2x(&cl->cl_eligible, cl->cl_cumul); + cl->cl_d = hfsc_rtsc_y2x(&cl->cl_deadline, cl->cl_cumul + next_len); + + hfsc_ellist_update(hif, cl); +} + +void +hfsc_update_d(struct hfsc_class *cl, int next_len) +{ + cl->cl_d = hfsc_rtsc_y2x(&cl->cl_deadline, cl->cl_cumul + next_len); +} + +void +hfsc_init_vf(struct hfsc_class *cl, int len) +{ + struct hfsc_class *max_cl, *p; + u_int64_t vt, f, cur_time; + int go_active; + + cur_time = 0; + go_active = 1; + for ( ; cl->cl_parent != NULL; cl = cl->cl_parent) { + if (go_active && cl->cl_nactive++ == 0) + go_active = 1; + else + go_active = 0; + + if (go_active) { + max_cl = TAILQ_LAST(&cl->cl_parent->cl_actc, + hfsc_active); + if (max_cl != NULL) { + /* + * set vt to the average of the min and max + * classes. if the parent's period didn't + * change, don't decrease vt of the class. + */ + vt = max_cl->cl_vt; + if (cl->cl_parent->cl_cvtmin != 0) + vt = (cl->cl_parent->cl_cvtmin + vt)/2; + + if (cl->cl_parent->cl_vtperiod != + cl->cl_parentperiod || vt > cl->cl_vt) + cl->cl_vt = vt; + } else { + /* + * first child for a new parent backlog period. + * add parent's cvtmax to vtoff of children + * to make a new vt (vtoff + vt) larger than + * the vt in the last period for all children. + */ + vt = cl->cl_parent->cl_cvtmax; + for (p = cl->cl_parent->cl_children; p != NULL; + p = p->cl_siblings) + p->cl_vtoff += vt; + cl->cl_vt = 0; + cl->cl_parent->cl_cvtmax = 0; + cl->cl_parent->cl_cvtmin = 0; + } + cl->cl_initvt = cl->cl_vt; + + /* update the virtual curve */ + vt = cl->cl_vt + cl->cl_vtoff; + hfsc_rtsc_min(&cl->cl_virtual, cl->cl_fsc, vt, + cl->cl_total); + if (cl->cl_virtual.x == vt) { + cl->cl_virtual.x -= cl->cl_vtoff; + cl->cl_vtoff = 0; + } + cl->cl_vtadj = 0; + + cl->cl_vtperiod++; /* increment vt period */ + cl->cl_parentperiod = cl->cl_parent->cl_vtperiod; + if (cl->cl_parent->cl_nactive == 0) + cl->cl_parentperiod++; + cl->cl_f = 0; + + hfsc_actlist_insert(cl); + + if (cl->cl_usc != NULL) { + /* class has upper limit curve */ + if (cur_time == 0) + cur_time = nsecuptime(); + + /* update the ulimit curve */ + hfsc_rtsc_min(&cl->cl_ulimit, cl->cl_usc, cur_time, + cl->cl_total); + /* compute myf */ + cl->cl_myf = hfsc_rtsc_y2x(&cl->cl_ulimit, + cl->cl_total); + cl->cl_myfadj = 0; + } + } + + if (cl->cl_myf > cl->cl_cfmin) + f = cl->cl_myf; + else + f = cl->cl_cfmin; + if (f != cl->cl_f) { + cl->cl_f = f; + hfsc_update_cfmin(cl->cl_parent); + } + } +} + +void +hfsc_update_vf(struct hfsc_class *cl, int len, u_int64_t cur_time) +{ + u_int64_t f, myf_bound, delta; + int go_passive = 0; + + if (hfsc_class_qlength(cl) == 0) + go_passive = 1; + + for (; cl->cl_parent != NULL; cl = cl->cl_parent) { + cl->cl_total += len; + + if (cl->cl_fsc == NULL || cl->cl_nactive == 0) + continue; + + if (go_passive && --cl->cl_nactive == 0) + go_passive = 1; + else + go_passive = 0; + + if (go_passive) { + /* no more active child, going passive */ + + /* update cvtmax of the parent class */ + if (cl->cl_vt > cl->cl_parent->cl_cvtmax) + cl->cl_parent->cl_cvtmax = cl->cl_vt; + + /* remove this class from the vt list */ + hfsc_actlist_remove(cl); + + hfsc_update_cfmin(cl->cl_parent); + + continue; + } + + /* + * update vt and f + */ + cl->cl_vt = hfsc_rtsc_y2x(&cl->cl_virtual, cl->cl_total) + - cl->cl_vtoff + cl->cl_vtadj; + + /* + * if vt of the class is smaller than cvtmin, + * the class was skipped in the past due to non-fit. + * if so, we need to adjust vtadj. + */ + if (cl->cl_vt < cl->cl_parent->cl_cvtmin) { + cl->cl_vtadj += cl->cl_parent->cl_cvtmin - cl->cl_vt; + cl->cl_vt = cl->cl_parent->cl_cvtmin; + } + + /* update the vt list */ + hfsc_actlist_update(cl); + + if (cl->cl_usc != NULL) { + cl->cl_myf = cl->cl_myfadj + + hfsc_rtsc_y2x(&cl->cl_ulimit, cl->cl_total); + + /* + * if myf lags behind by more than one clock tick + * from the current time, adjust myfadj to prevent + * a rate-limited class from going greedy. + * in a steady state under rate-limiting, myf + * fluctuates within one clock tick. + */ + myf_bound = cur_time - HFSC_CLK_PER_TICK; + if (cl->cl_myf < myf_bound) { + delta = cur_time - cl->cl_myf; + cl->cl_myfadj += delta; + cl->cl_myf += delta; + } + } + + /* cl_f is max(cl_myf, cl_cfmin) */ + if (cl->cl_myf > cl->cl_cfmin) + f = cl->cl_myf; + else + f = cl->cl_cfmin; + if (f != cl->cl_f) { + cl->cl_f = f; + hfsc_update_cfmin(cl->cl_parent); + } + } +} + +void +hfsc_update_cfmin(struct hfsc_class *cl) +{ + struct hfsc_class *p; + u_int64_t cfmin; + + if (TAILQ_EMPTY(&cl->cl_actc)) { + cl->cl_cfmin = 0; + return; + } + cfmin = HFSC_HT_INFINITY; + TAILQ_FOREACH(p, &cl->cl_actc, cl_actlist) { + if (p->cl_f == 0) { + cl->cl_cfmin = 0; + return; + } + if (p->cl_f < cfmin) + cfmin = p->cl_f; + } + cl->cl_cfmin = cfmin; +} + +/* + * eligible list holds backlogged classes being sorted by their eligible times. + * there is one eligible list per interface. + */ +void +hfsc_ellist_insert(struct hfsc_if *hif, struct hfsc_class *cl) +{ + struct hfsc_class *p; + + /* check the last entry first */ + if ((p = TAILQ_LAST(&hif->hif_eligible, hfsc_eligible)) == NULL || + p->cl_e <= cl->cl_e) { + TAILQ_INSERT_TAIL(&hif->hif_eligible, cl, cl_ellist); + return; + } + + TAILQ_FOREACH(p, &hif->hif_eligible, cl_ellist) { + if (cl->cl_e < p->cl_e) { + TAILQ_INSERT_BEFORE(p, cl, cl_ellist); + return; + } + } +} + +void +hfsc_ellist_remove(struct hfsc_if *hif, struct hfsc_class *cl) +{ + TAILQ_REMOVE(&hif->hif_eligible, cl, cl_ellist); +} + +void +hfsc_ellist_update(struct hfsc_if *hif, struct hfsc_class *cl) +{ + struct hfsc_class *p, *last; + + /* + * the eligible time of a class increases monotonically. + * if the next entry has a larger eligible time, nothing to do. + */ + p = TAILQ_NEXT(cl, cl_ellist); + if (p == NULL || cl->cl_e <= p->cl_e) + return; + + /* check the last entry */ + last = TAILQ_LAST(&hif->hif_eligible, hfsc_eligible); + if (last->cl_e <= cl->cl_e) { + TAILQ_REMOVE(&hif->hif_eligible, cl, cl_ellist); + TAILQ_INSERT_TAIL(&hif->hif_eligible, cl, cl_ellist); + return; + } + + /* + * the new position must be between the next entry + * and the last entry + */ + while ((p = TAILQ_NEXT(p, cl_ellist)) != NULL) { + if (cl->cl_e < p->cl_e) { + TAILQ_REMOVE(&hif->hif_eligible, cl, cl_ellist); + TAILQ_INSERT_BEFORE(p, cl, cl_ellist); + return; + } + } +} + +/* find the class with the minimum deadline among the eligible classes */ +struct hfsc_class * +hfsc_ellist_get_mindl(struct hfsc_if *hif, u_int64_t cur_time) +{ + struct hfsc_class *p, *cl = NULL; + + TAILQ_FOREACH(p, &hif->hif_eligible, cl_ellist) { + if (p->cl_e > cur_time) + break; + if (cl == NULL || p->cl_d < cl->cl_d) + cl = p; + } + return (cl); +} + +/* + * active children list holds backlogged child classes being sorted + * by their virtual time. + * each intermediate class has one active children list. + */ +void +hfsc_actlist_insert(struct hfsc_class *cl) +{ + struct hfsc_class *p; + + /* check the last entry first */ + if ((p = TAILQ_LAST(&cl->cl_parent->cl_actc, hfsc_active)) == NULL + || p->cl_vt <= cl->cl_vt) { + TAILQ_INSERT_TAIL(&cl->cl_parent->cl_actc, cl, cl_actlist); + return; + } + + TAILQ_FOREACH(p, &cl->cl_parent->cl_actc, cl_actlist) { + if (cl->cl_vt < p->cl_vt) { + TAILQ_INSERT_BEFORE(p, cl, cl_actlist); + return; + } + } +} + +void +hfsc_actlist_remove(struct hfsc_class *cl) +{ + TAILQ_REMOVE(&cl->cl_parent->cl_actc, cl, cl_actlist); +} + +void +hfsc_actlist_update(struct hfsc_class *cl) +{ + struct hfsc_class *p, *last; + + /* + * the virtual time of a class increases monotonically during its + * backlogged period. + * if the next entry has a larger virtual time, nothing to do. + */ + p = TAILQ_NEXT(cl, cl_actlist); + if (p == NULL || cl->cl_vt < p->cl_vt) + return; + + /* check the last entry */ + last = TAILQ_LAST(&cl->cl_parent->cl_actc, hfsc_active); + if (last->cl_vt <= cl->cl_vt) { + TAILQ_REMOVE(&cl->cl_parent->cl_actc, cl, cl_actlist); + TAILQ_INSERT_TAIL(&cl->cl_parent->cl_actc, cl, cl_actlist); + return; + } + + /* + * the new position must be between the next entry + * and the last entry + */ + while ((p = TAILQ_NEXT(p, cl_actlist)) != NULL) { + if (cl->cl_vt < p->cl_vt) { + TAILQ_REMOVE(&cl->cl_parent->cl_actc, cl, cl_actlist); + TAILQ_INSERT_BEFORE(p, cl, cl_actlist); + return; + } + } +} + +struct hfsc_class * +hfsc_actlist_firstfit(struct hfsc_class *cl, u_int64_t cur_time) +{ + struct hfsc_class *p; + + TAILQ_FOREACH(p, &cl->cl_actc, cl_actlist) + if (p->cl_f <= cur_time) + return (p); + + return (NULL); +} + +/* + * service curve support functions + * + * external service curve parameters + * m: bits/sec + * d: msec + * internal service curve parameters + * sm: (bytes/tsc_interval) << SM_SHIFT + * ism: (tsc_count/byte) << ISM_SHIFT + * dx: tsc_count + * + * SM_SHIFT and ISM_SHIFT are scaled in order to keep effective digits. + * we should be able to handle 100K-1Gbps linkspeed with 200Hz-1GHz CPU + * speed. SM_SHIFT and ISM_SHIFT are selected to have at least 3 effective + * digits in decimal using the following table. + * + * bits/sec 100Kbps 1Mbps 10Mbps 100Mbps 1Gbps + * ----------+------------------------------------------------------- + * bytes/nsec 12.5e-6 125e-6 1250e-6 12500e-6 125000e-6 + * sm(500MHz) 25.0e-6 250e-6 2500e-6 25000e-6 250000e-6 + * sm(200MHz) 62.5e-6 625e-6 6250e-6 62500e-6 625000e-6 + * + * nsec/byte 80000 8000 800 80 8 + * ism(500MHz) 40000 4000 400 40 4 + * ism(200MHz) 16000 1600 160 16 1.6 + */ +#define SM_SHIFT 24 +#define ISM_SHIFT 10 + +#define SM_MASK ((1LL << SM_SHIFT) - 1) +#define ISM_MASK ((1LL << ISM_SHIFT) - 1) + +static __inline u_int64_t +seg_x2y(u_int64_t x, u_int64_t sm) +{ + u_int64_t y; + + /* + * compute + * y = x * sm >> SM_SHIFT + * but divide it for the upper and lower bits to avoid overflow + */ + y = (x >> SM_SHIFT) * sm + (((x & SM_MASK) * sm) >> SM_SHIFT); + return (y); +} + +static __inline u_int64_t +seg_y2x(u_int64_t y, u_int64_t ism) +{ + u_int64_t x; + + if (y == 0) + x = 0; + else if (ism == HFSC_HT_INFINITY) + x = HFSC_HT_INFINITY; + else { + x = (y >> ISM_SHIFT) * ism + + (((y & ISM_MASK) * ism) >> ISM_SHIFT); + } + return (x); +} + +static __inline u_int64_t +m2sm(u_int64_t m) +{ + u_int64_t sm; + + sm = (m << SM_SHIFT) / 8 / HFSC_FREQ; + return (sm); +} + +static __inline u_int64_t +m2ism(u_int64_t m) +{ + u_int64_t ism; + + if (m == 0) + ism = HFSC_HT_INFINITY; + else + ism = ((u_int64_t)HFSC_FREQ << ISM_SHIFT) * 8 / m; + return (ism); +} + +static __inline u_int64_t +d2dx(u_int d) +{ + u_int64_t dx; + + dx = ((u_int64_t)d * HFSC_FREQ) / 1000; + return (dx); +} + +static __inline u_int64_t +sm2m(u_int64_t sm) +{ + u_int64_t m; + + m = (sm * 8 * HFSC_FREQ) >> SM_SHIFT; + return (m); +} + +static __inline u_int +dx2d(u_int64_t dx) +{ + u_int64_t d; + + d = dx * 1000 / HFSC_FREQ; + return ((u_int)d); +} + +void +hfsc_sc2isc(struct hfsc_sc *sc, struct hfsc_internal_sc *isc) +{ + isc->sm1 = m2sm(sc->m1); + isc->ism1 = m2ism(sc->m1); + isc->dx = d2dx(sc->d); + isc->dy = seg_x2y(isc->dx, isc->sm1); + isc->sm2 = m2sm(sc->m2); + isc->ism2 = m2ism(sc->m2); +} + +/* + * initialize the runtime service curve with the given internal + * service curve starting at (x, y). + */ +void +hfsc_rtsc_init(struct hfsc_runtime_sc *rtsc, struct hfsc_internal_sc * isc, + u_int64_t x, u_int64_t y) +{ + rtsc->x = x; + rtsc->y = y; + rtsc->sm1 = isc->sm1; + rtsc->ism1 = isc->ism1; + rtsc->dx = isc->dx; + rtsc->dy = isc->dy; + rtsc->sm2 = isc->sm2; + rtsc->ism2 = isc->ism2; +} + +/* + * calculate the y-projection of the runtime service curve by the + * given x-projection value + */ +u_int64_t +hfsc_rtsc_y2x(struct hfsc_runtime_sc *rtsc, u_int64_t y) +{ + u_int64_t x; + + if (y < rtsc->y) + x = rtsc->x; + else if (y <= rtsc->y + rtsc->dy) { + /* x belongs to the 1st segment */ + if (rtsc->dy == 0) + x = rtsc->x + rtsc->dx; + else + x = rtsc->x + seg_y2x(y - rtsc->y, rtsc->ism1); + } else { + /* x belongs to the 2nd segment */ + x = rtsc->x + rtsc->dx + + seg_y2x(y - rtsc->y - rtsc->dy, rtsc->ism2); + } + return (x); +} + +u_int64_t +hfsc_rtsc_x2y(struct hfsc_runtime_sc *rtsc, u_int64_t x) +{ + u_int64_t y; + + if (x <= rtsc->x) + y = rtsc->y; + else if (x <= rtsc->x + rtsc->dx) + /* y belongs to the 1st segment */ + y = rtsc->y + seg_x2y(x - rtsc->x, rtsc->sm1); + else + /* y belongs to the 2nd segment */ + y = rtsc->y + rtsc->dy + + seg_x2y(x - rtsc->x - rtsc->dx, rtsc->sm2); + return (y); +} + +/* + * update the runtime service curve by taking the minimum of the current + * runtime service curve and the service curve starting at (x, y). + */ +void +hfsc_rtsc_min(struct hfsc_runtime_sc *rtsc, struct hfsc_internal_sc *isc, + u_int64_t x, u_int64_t y) +{ + u_int64_t y1, y2, dx, dy; + + if (isc->sm1 <= isc->sm2) { + /* service curve is convex */ + y1 = hfsc_rtsc_x2y(rtsc, x); + if (y1 < y) + /* the current rtsc is smaller */ + return; + rtsc->x = x; + rtsc->y = y; + return; + } + + /* + * service curve is concave + * compute the two y values of the current rtsc + * y1: at x + * y2: at (x + dx) + */ + y1 = hfsc_rtsc_x2y(rtsc, x); + if (y1 <= y) { + /* rtsc is below isc, no change to rtsc */ + return; + } + + y2 = hfsc_rtsc_x2y(rtsc, x + isc->dx); + if (y2 >= y + isc->dy) { + /* rtsc is above isc, replace rtsc by isc */ + rtsc->x = x; + rtsc->y = y; + rtsc->dx = isc->dx; + rtsc->dy = isc->dy; + return; + } + + /* + * the two curves intersect + * compute the offsets (dx, dy) using the reverse + * function of seg_x2y() + * seg_x2y(dx, sm1) == seg_x2y(dx, sm2) + (y1 - y) + */ + dx = ((y1 - y) << SM_SHIFT) / (isc->sm1 - isc->sm2); + /* + * check if (x, y1) belongs to the 1st segment of rtsc. + * if so, add the offset. + */ + if (rtsc->x + rtsc->dx > x) + dx += rtsc->x + rtsc->dx - x; + dy = seg_x2y(dx, isc->sm1); + + rtsc->x = x; + rtsc->y = y; + rtsc->dx = dx; + rtsc->dy = dy; + return; +} + +void +hfsc_getclstats(struct hfsc_class_stats *sp, struct hfsc_class *cl) +{ + sp->class_id = cl->cl_id; + sp->class_handle = cl->cl_handle; + + if (cl->cl_rsc != NULL) { + sp->rsc.m1 = sm2m(cl->cl_rsc->sm1); + sp->rsc.d = dx2d(cl->cl_rsc->dx); + sp->rsc.m2 = sm2m(cl->cl_rsc->sm2); + } else { + sp->rsc.m1 = 0; + sp->rsc.d = 0; + sp->rsc.m2 = 0; + } + if (cl->cl_fsc != NULL) { + sp->fsc.m1 = sm2m(cl->cl_fsc->sm1); + sp->fsc.d = dx2d(cl->cl_fsc->dx); + sp->fsc.m2 = sm2m(cl->cl_fsc->sm2); + } else { + sp->fsc.m1 = 0; + sp->fsc.d = 0; + sp->fsc.m2 = 0; + } + if (cl->cl_usc != NULL) { + sp->usc.m1 = sm2m(cl->cl_usc->sm1); + sp->usc.d = dx2d(cl->cl_usc->dx); + sp->usc.m2 = sm2m(cl->cl_usc->sm2); + } else { + sp->usc.m1 = 0; + sp->usc.d = 0; + sp->usc.m2 = 0; + } + + sp->total = cl->cl_total; + sp->cumul = cl->cl_cumul; + + sp->d = cl->cl_d; + sp->e = cl->cl_e; + sp->vt = cl->cl_vt; + sp->f = cl->cl_f; + + sp->initvt = cl->cl_initvt; + sp->vtperiod = cl->cl_vtperiod; + sp->parentperiod = cl->cl_parentperiod; + sp->nactive = cl->cl_nactive; + sp->vtoff = cl->cl_vtoff; + sp->cvtmax = cl->cl_cvtmax; + sp->myf = cl->cl_myf; + sp->cfmin = cl->cl_cfmin; + sp->cvtmin = cl->cl_cvtmin; + sp->myfadj = cl->cl_myfadj; + sp->vtadj = cl->cl_vtadj; + + sp->cur_time = nsecuptime(); + sp->machclk_freq = HFSC_FREQ; + + sp->qlength = hfsc_class_qlength(cl); + sp->qlimit = cl->cl_q.qlimit; + sp->xmit_cnt = cl->cl_stats.xmit_cnt; + sp->drop_cnt = cl->cl_stats.drop_cnt; + sp->period = cl->cl_stats.period; + + sp->qtype = 0; +} + +/* convert a class handle to the corresponding class pointer */ +struct hfsc_class * +hfsc_clh2cph(struct hfsc_if *hif, u_int32_t chandle) +{ + int i; + struct hfsc_class *cl; + + if (chandle == 0) + return (NULL); + /* + * first, try the slot corresponding to the lower bits of the handle. + * if it does not match, do the linear table search. + */ + i = chandle % hif->hif_allocated; + if ((cl = hif->hif_class_tbl[i]) != NULL && cl->cl_handle == chandle) + return (cl); + for (i = 0; i < hif->hif_allocated; i++) + if ((cl = hif->hif_class_tbl[i]) != NULL && + cl->cl_handle == chandle) + return (cl); + return (NULL); +} diff --git a/module/pfsrc/if_pflog.c b/module/pfsrc/if_pflog.c new file mode 100644 index 0000000..e574e53 --- /dev/null +++ b/module/pfsrc/if_pflog.c @@ -0,0 +1,193 @@ +/* PFLINUX port of OpenBSD 8.0 net/if_pflog.c — see docs/porting-notes.md */ +#include + +#define PFLOGMTU (32768 + MHLEN + MLEN) + +#ifdef PFLOGDEBUG +#define DPRINTF(x) do { if (pflogdebug) printf x ; } while (0) +#else +#define DPRINTF(x) +#endif + +void pflogattach(int); +int pflogoutput(struct ifnet *, struct mbuf *, struct sockaddr *, + struct rtentry *); +int pflogioctl(struct ifnet *, u_long, caddr_t); +int pflog_clone_create(struct if_clone *, int); +int pflog_clone_destroy(struct ifnet *); +struct pflog_softc *pflog_getif(int); + +struct if_clone pflog_cloner = + IF_CLONE_INITIALIZER("pflog", pflog_clone_create, pflog_clone_destroy); + +LIST_HEAD(, pflog_softc) pflog_ifs = LIST_HEAD_INITIALIZER(pflog_ifs); + +void +pflogattach(int npflog) +{ + if_clone_attach(&pflog_cloner); +} + +int +pflog_clone_create(struct if_clone *ifc, int unit) +{ + struct ifnet *ifp; + struct pflog_softc *pflogif; + + pflogif = malloc(sizeof(*pflogif), M_DEVBUF, M_WAITOK|M_ZERO); + pflogif->sc_unit = unit; + ifp = &pflogif->sc_if; + snprintf(ifp->if_xname, sizeof ifp->if_xname, "pflog%d", unit); + ifp->if_softc = pflogif; + ifp->if_mtu = PFLOGMTU; + ifp->if_ioctl = pflogioctl; + ifp->if_output = pflogoutput; + ifp->if_xflags = IFXF_CLONED; + ifp->if_type = IFT_PFLOG; + ifp->if_hdrlen = PFLOG_HDRLEN; + if_attach(ifp); + if_alloc_sadl(ifp); + +#if NBPFILTER > 0 + bpfattach(&pflogif->sc_if.if_bpf, ifp, DLT_PFLOG, PFLOG_HDRLEN); +#endif + + NET_LOCK(); + LIST_INSERT_HEAD(&pflog_ifs, pflogif, sc_entry); + NET_UNLOCK(); + + return (0); +} + +int +pflog_clone_destroy(struct ifnet *ifp) +{ + struct pflog_softc *pflogif = ifp->if_softc; + + NET_LOCK(); + LIST_REMOVE(pflogif, sc_entry); + NET_UNLOCK(); + + if_detach(ifp); + free(pflogif, M_DEVBUF, sizeof(*pflogif)); + + return (0); +} + +int +pflogoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, + struct rtentry *rt) +{ + m_freem(m); /* drop packet */ + return (EAFNOSUPPORT); +} + +int +pflogioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +{ + switch (cmd) { + case SIOCSIFFLAGS: + if (ifp->if_flags & PFIFF_UP) + ifp->if_flags |= PFIFF_RUNNING; + else + ifp->if_flags &= ~PFIFF_RUNNING; + break; + default: + return (ENOTTY); + } + + return (0); +} + +struct pflog_softc * +pflog_getif(int unit) +{ + struct pflog_softc *pflogif; + + NET_ASSERT_LOCKED(); + + LIST_FOREACH(pflogif, &pflog_ifs, sc_entry) { + if (pflogif->sc_unit == unit) + break; + } + + return pflogif; +} + +int +pflog_packet(struct pf_pdesc *pd, u_int8_t reason, struct pf_rule *rm, + struct pf_rule *am, struct pf_ruleset *ruleset, struct pf_rule *trigger) +{ +#if NBPFILTER > 0 + struct pflog_softc *pflogif; + struct ifnet *ifn; + caddr_t if_bpf; + struct pfloghdr hdr; + + if (rm == NULL || pd == NULL || pd->kif == NULL || pd->m == NULL) + return (-1); + if (trigger == NULL) + trigger = rm; + pflogif = pflog_getif(trigger->logif); + if (pflogif == NULL) + return (0); + ifn = &pflogif->sc_if; + if_bpf = ifn->if_bpf; + if (!if_bpf) + return (0); + + bzero(&hdr, sizeof(hdr)); + hdr.length = PFLOG_REAL_HDRLEN; + /* Default rule does not pass packets dropped for other reasons. */ + hdr.action = (rm->nr == (u_int32_t)-1 && reason != PFRES_MATCH) ? + PF_DROP : rm->action; + hdr.reason = reason; + memcpy(hdr.ifname, pd->kif->pfik_name, sizeof(hdr.ifname)); + + if (am == NULL) { + hdr.rulenr = htonl(rm->nr); + hdr.subrulenr = -1; + } else { + hdr.rulenr = htonl(am->nr); + hdr.subrulenr = htonl(rm->nr); + if (ruleset != NULL && ruleset->anchor != NULL) + strlcpy(hdr.ruleset, ruleset->anchor->name, + sizeof(hdr.ruleset)); + } + if (trigger->log & PF_LOG_USER && !pd->lookup.done) + pd->lookup.done = pf_socket_lookup(pd); + if (trigger->log & PF_LOG_USER && pd->lookup.done > 0) { + hdr.uid = pd->lookup.uid; + hdr.pid = pd->lookup.pid; + } else { + hdr.uid = -1; + hdr.pid = NO_PID; + } + hdr.rule_uid = rm->cuid; + hdr.rule_pid = rm->cpid; + hdr.dir = pd->dir; + hdr.af = pd->af; + + if (pd->src != NULL && pd->dst != NULL) { + if (pd->af != pd->naf || + pf_addr_compare(pd->src, &pd->nsaddr, pd->naf) != 0 || + pf_addr_compare(pd->dst, &pd->ndaddr, pd->naf) != 0 || + pd->osport != pd->nsport || + pd->odport != pd->ndport) { + hdr.rewritten = 1; + } + } + hdr.naf = pd->naf; + pf_addrcpy(&hdr.saddr, &pd->nsaddr, pd->naf); + pf_addrcpy(&hdr.daddr, &pd->ndaddr, pd->naf); + hdr.sport = pd->nsport; + hdr.dport = pd->ndport; + + ifn->if_opackets++; + ifn->if_obytes += pd->m->m_pkthdr.len; + + bpf_mtap_hdr(if_bpf, &hdr, sizeof(hdr), pd->m, BPF_DIRECTION_OUT); +#endif + + return (0); +} diff --git a/module/pfsrc/ifq.c b/module/pfsrc/ifq.c new file mode 100644 index 0000000..86b015b --- /dev/null +++ b/module/pfsrc/ifq.c @@ -0,0 +1,983 @@ +/* PFLINUX port of OpenBSD 8.0 net/ifq.c — see docs/porting-notes.md */ +#include +#endif + +/* + * priq glue + */ +unsigned int priq_idx(unsigned int, const struct mbuf *); +struct mbuf *priq_enq(struct ifqueue *, struct mbuf *); +struct mbuf *priq_deq_begin(struct ifqueue *, void **); +void priq_deq_commit(struct ifqueue *, struct mbuf *, void *); +void priq_purge(struct ifqueue *, struct mbuf_list *); + +void *priq_alloc(unsigned int, void *); +void priq_free(unsigned int, void *); + +const struct ifq_ops priq_ops = { + priq_idx, + priq_enq, + priq_deq_begin, + priq_deq_commit, + priq_purge, + priq_alloc, + priq_free, +}; + +const struct ifq_ops * const ifq_priq_ops = &priq_ops; + +/* + * priq internal structures + */ + +struct priq { + struct mbuf_list pq_lists[IFQ_NQUEUES]; +}; + +/* + * ifqueue serialiser + */ + +void ifq_start_task(void *); +void ifq_restart_task(void *); +void ifq_bundle_task(void *); + +static inline void +ifq_run_start(struct ifqueue *ifq) +{ + ifq_serialize(ifq, &ifq->ifq_start); +} + +void +ifq_serialize(struct ifqueue *ifq, struct task *t) +{ + struct task work; + + if (ISSET(t->t_flags, TASK_ONQUEUE)) + return; + + mtx_enter(&ifq->ifq_task_mtx); + if (!ISSET(t->t_flags, TASK_ONQUEUE)) { + SET(t->t_flags, TASK_ONQUEUE); + TAILQ_INSERT_TAIL(&ifq->ifq_task_list, t, t_entry); + } + + if (ifq->ifq_serializer == NULL) { + ifq->ifq_serializer = curcpu(); + + while ((t = TAILQ_FIRST(&ifq->ifq_task_list)) != NULL) { + TAILQ_REMOVE(&ifq->ifq_task_list, t, t_entry); + CLR(t->t_flags, TASK_ONQUEUE); + work = *t; /* copy to caller to avoid races */ + + mtx_leave(&ifq->ifq_task_mtx); + + (*work.t_func)(work.t_arg); + + mtx_enter(&ifq->ifq_task_mtx); + } + + ifq->ifq_serializer = NULL; + } + mtx_leave(&ifq->ifq_task_mtx); +} + +void +ifq_start(struct ifqueue *ifq) +{ + if (ifq_len(ifq) >= min(ifq->ifq_if->if_txmit, ifq->ifq_maxlen)) { + task_del(ifq->ifq_softnet, &ifq->ifq_bundle); + ifq_run_start(ifq); + } else + task_add(ifq->ifq_softnet, &ifq->ifq_bundle); +} + +void +ifq_start_task(void *p) +{ + struct ifqueue *ifq = p; + struct ifnet *ifp = ifq->ifq_if; + + if (!ISSET(ifp->if_flags, PFIFF_RUNNING) || + ifq_empty(ifq) || ifq_is_oactive(ifq)) + return; + + ifp->if_qstart(ifq); +} + +void +ifq_set_oactive(struct ifqueue *ifq) +{ + if (ifq->ifq_oactive) + return; + + mtx_enter(&ifq->ifq_mtx); + if (!ifq->ifq_oactive) { + ifq->ifq_oactive = 1; + ifq->ifq_oactives++; + } + mtx_leave(&ifq->ifq_mtx); +} + +void +ifq_deq_set_oactive(struct ifqueue *ifq) +{ + MUTEX_ASSERT_LOCKED(&ifq->ifq_mtx); + + if (!ifq->ifq_oactive) { + ifq->ifq_oactive = 1; + ifq->ifq_oactives++; + } +} + +void +ifq_restart_task(void *p) +{ + struct ifqueue *ifq = p; + struct ifnet *ifp = ifq->ifq_if; + + ifq_clr_oactive(ifq); + ifp->if_qstart(ifq); +} + +void +ifq_bundle_task(void *p) +{ + struct ifqueue *ifq = p; + + ifq_run_start(ifq); +} + +void +ifq_barrier(struct ifqueue *ifq) +{ + struct cond c = COND_INITIALIZER(); + struct task t = TASK_INITIALIZER(cond_signal_handler, &c); + + task_del(ifq->ifq_softnet, &ifq->ifq_bundle); + + if (ifq->ifq_serializer == NULL) + return; + + ifq_serialize(ifq, &t); + + cond_wait(&c, "ifqbar"); +} + +/* + * ifqueue mbuf queue API + */ + +#if NKSTAT > 0 +struct ifq_kstat_data { + struct kstat_kv kd_packets; + struct kstat_kv kd_bytes; + struct kstat_kv kd_qdrops; + struct kstat_kv kd_errors; + struct kstat_kv kd_qlen; + struct kstat_kv kd_maxqlen; + struct kstat_kv kd_oactive; + struct kstat_kv kd_oactives; +}; + +static const struct ifq_kstat_data ifq_kstat_tpl = { + KSTAT_KV_UNIT_INITIALIZER("packets", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("bytes", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_BYTES), + KSTAT_KV_UNIT_INITIALIZER("qdrops", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("errors", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("qlen", + KSTAT_KV_T_UINT32, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("maxqlen", + KSTAT_KV_T_UINT32, KSTAT_KV_U_PACKETS), + KSTAT_KV_INITIALIZER("oactive", KSTAT_KV_T_BOOL), + KSTAT_KV_INITIALIZER("oactives", KSTAT_KV_T_COUNTER32), +}; + +int +ifq_kstat_copy(struct kstat *ks, void *dst) +{ + struct ifqueue *ifq = ks->ks_softc; + struct ifq_kstat_data *kd = dst; + + *kd = ifq_kstat_tpl; + kstat_kv_u64(&kd->kd_packets) = ifq->ifq_packets; + kstat_kv_u64(&kd->kd_bytes) = ifq->ifq_bytes; + kstat_kv_u64(&kd->kd_qdrops) = ifq->ifq_qdrops; + kstat_kv_u64(&kd->kd_errors) = ifq->ifq_errors; + kstat_kv_u32(&kd->kd_qlen) = ifq->ifq_len; + kstat_kv_u32(&kd->kd_maxqlen) = ifq->ifq_maxlen; + kstat_kv_bool(&kd->kd_oactive) = ifq->ifq_oactive; + kstat_kv_u32(&kd->kd_oactives) = ifq->ifq_oactives; + + return (0); +} +#endif + +void +ifq_init(struct ifqueue *ifq, struct ifnet *ifp, unsigned int idx) +{ + ifq->ifq_if = ifp; + ifq->ifq_softnet = net_tq(idx); + ifq->ifq_softc = NULL; + + mtx_init(&ifq->ifq_mtx, IPL_NET); + + /* default to priq */ + ifq->ifq_ops = &priq_ops; + ifq->ifq_q = priq_ops.ifqop_alloc(idx, NULL); + + ml_init(&ifq->ifq_free); + ifq->ifq_len = 0; + + ifq->ifq_packets = 0; + ifq->ifq_bytes = 0; + ifq->ifq_qdrops = 0; + ifq->ifq_errors = 0; + ifq->ifq_mcasts = 0; + + mtx_init(&ifq->ifq_task_mtx, IPL_NET); + TAILQ_INIT(&ifq->ifq_task_list); + ifq->ifq_serializer = NULL; + task_set(&ifq->ifq_bundle, ifq_bundle_task, ifq); + + task_set(&ifq->ifq_start, ifq_start_task, ifq); + task_set(&ifq->ifq_restart, ifq_restart_task, ifq); + + if (ifq->ifq_maxlen == 0) + ifq_init_maxlen(ifq, IFQ_MAXLEN); + + ifq->ifq_idx = idx; + +#if NKSTAT > 0 + /* XXX xname vs driver name and unit */ + ifq->ifq_kstat = kstat_create(ifp->if_xname, 0, + "txq", ifq->ifq_idx, KSTAT_T_KV, 0); + KASSERT(ifq->ifq_kstat != NULL); + kstat_set_mutex(ifq->ifq_kstat, &ifq->ifq_mtx); + ifq->ifq_kstat->ks_softc = ifq; + ifq->ifq_kstat->ks_datalen = sizeof(ifq_kstat_tpl); + ifq->ifq_kstat->ks_copy = ifq_kstat_copy; + kstat_install(ifq->ifq_kstat); +#endif +} + +void +ifq_attach(struct ifqueue *ifq, const struct ifq_ops *newops, void *opsarg) +{ + struct mbuf_list ml = MBUF_LIST_INITIALIZER(); + struct mbuf_list free_ml = MBUF_LIST_INITIALIZER(); + struct mbuf *m; + const struct ifq_ops *oldops; + void *newq, *oldq; + + newq = newops->ifqop_alloc(ifq->ifq_idx, opsarg); + + mtx_enter(&ifq->ifq_mtx); + ifq->ifq_ops->ifqop_purge(ifq, &ml); + ifq->ifq_len = 0; + + oldops = ifq->ifq_ops; + oldq = ifq->ifq_q; + + ifq->ifq_ops = newops; + ifq->ifq_q = newq; + + while ((m = ml_dequeue(&ml)) != NULL) { + m = ifq->ifq_ops->ifqop_enq(ifq, m); + if (m != NULL) { + ifq->ifq_qdrops++; + ml_enqueue(&free_ml, m); + } else + ifq->ifq_len++; + } + mtx_leave(&ifq->ifq_mtx); + + oldops->ifqop_free(ifq->ifq_idx, oldq); + + ml_purge(&free_ml); +} + +void +ifq_destroy(struct ifqueue *ifq) +{ + struct mbuf_list ml = MBUF_LIST_INITIALIZER(); + +#if NKSTAT > 0 + kstat_destroy(ifq->ifq_kstat); +#endif + + NET_ASSERT_UNLOCKED(); + taskq_del_barrier(ifq->ifq_softnet, &ifq->ifq_bundle); + + /* don't need to lock because this is the last use of the ifq */ + + ifq->ifq_ops->ifqop_purge(ifq, &ml); + ifq->ifq_ops->ifqop_free(ifq->ifq_idx, ifq->ifq_q); + + ml_purge(&ml); +} + +void +ifq_add_data(struct ifqueue *ifq, struct if_data *data) +{ + mtx_enter(&ifq->ifq_mtx); + data->ifi_opackets += ifq->ifq_packets; + data->ifi_obytes += ifq->ifq_bytes; + data->ifi_oqdrops += ifq->ifq_qdrops; + data->ifi_omcasts += ifq->ifq_mcasts; + /* ifp->if_data.ifi_oerrors */ + mtx_leave(&ifq->ifq_mtx); +} + +int +ifq_enqueue(struct ifqueue *ifq, struct mbuf *m) +{ + struct mbuf *dm; + + mtx_enter(&ifq->ifq_mtx); + dm = ifq->ifq_ops->ifqop_enq(ifq, m); + if (dm != m) { + ifq->ifq_packets++; + ifq->ifq_bytes += m->m_pkthdr.len; + if (ISSET(m->m_flags, M_MCAST)) + ifq->ifq_mcasts++; + } + + if (dm == NULL) + ifq->ifq_len++; + else + ifq->ifq_qdrops++; + mtx_leave(&ifq->ifq_mtx); + + if (dm != NULL) + m_freem(dm); + + return (dm == m ? ENOBUFS : 0); +} + +static inline void +ifq_deq_enter(struct ifqueue *ifq) +{ + mtx_enter(&ifq->ifq_mtx); +} + +static inline void +ifq_deq_leave(struct ifqueue *ifq) +{ + struct mbuf_list ml; + + ml = ifq->ifq_free; + ml_init(&ifq->ifq_free); + + mtx_leave(&ifq->ifq_mtx); + + if (!ml_empty(&ml)) + ml_purge(&ml); +} + +struct mbuf * +ifq_deq_begin(struct ifqueue *ifq) +{ + struct mbuf *m = NULL; + void *cookie; + + ifq_deq_enter(ifq); + if (ifq->ifq_len == 0 || + (m = ifq->ifq_ops->ifqop_deq_begin(ifq, &cookie)) == NULL) { + ifq_deq_leave(ifq); + return (NULL); + } + + m->m_pkthdr.ph_cookie = cookie; + + return (m); +} + +void +ifq_deq_commit(struct ifqueue *ifq, struct mbuf *m) +{ + void *cookie; + + KASSERT(m != NULL); + cookie = m->m_pkthdr.ph_cookie; + + ifq->ifq_ops->ifqop_deq_commit(ifq, m, cookie); + ifq->ifq_len--; + ifq_deq_leave(ifq); +} + +void +ifq_deq_rollback(struct ifqueue *ifq, struct mbuf *m) +{ + KASSERT(m != NULL); + + ifq_deq_leave(ifq); +} + +struct mbuf * +ifq_dequeue(struct ifqueue *ifq) +{ + struct mbuf *m; + + m = ifq_deq_begin(ifq); + if (m == NULL) + return (NULL); + + ifq_deq_commit(ifq, m); + + return (m); +} + +int +ifq_deq_sleep(struct ifqueue *ifq, struct mbuf **mp, int nbio, int priority, + const char *wmesg, volatile unsigned int *sleeping, + volatile unsigned int *alive) +{ + struct mbuf *m; + void *cookie; + int error = 0; + + ifq_deq_enter(ifq); + if (ifq->ifq_len == 0 && nbio) + error = EWOULDBLOCK; + else { + for (;;) { + m = ifq->ifq_ops->ifqop_deq_begin(ifq, &cookie); + if (m != NULL) { + ifq->ifq_ops->ifqop_deq_commit(ifq, m, cookie); + ifq->ifq_len--; + *mp = m; + break; + } + + (*sleeping)++; + error = msleep_nsec(ifq, &ifq->ifq_mtx, + priority, wmesg, INFSLP); + (*sleeping)--; + if (error != 0) + break; + if (!(*alive)) { + error = EIO; + break; + } + } + } + ifq_deq_leave(ifq); + + return (error); +} + +int +ifq_hdatalen(struct ifqueue *ifq) +{ + struct mbuf *m; + int len = 0; + + if (ifq_empty(ifq)) + return (0); + + m = ifq_deq_begin(ifq); + if (m != NULL) { + len = m->m_pkthdr.len; + ifq_deq_rollback(ifq, m); + } + + return (len); +} + +void +ifq_init_maxlen(struct ifqueue *ifq, unsigned int maxlen) +{ + /* this is not MP safe, use only during attach */ + ifq->ifq_maxlen = maxlen; +} + +unsigned int +ifq_purge(struct ifqueue *ifq) +{ + struct mbuf_list ml = MBUF_LIST_INITIALIZER(); + unsigned int rv; + + mtx_enter(&ifq->ifq_mtx); + ifq->ifq_ops->ifqop_purge(ifq, &ml); + rv = ifq->ifq_len; + ifq->ifq_len = 0; + ifq->ifq_qdrops += rv; + mtx_leave(&ifq->ifq_mtx); + + KASSERT(rv == ml_len(&ml)); + + ml_purge(&ml); + + return (rv); +} + +void * +ifq_q_enter(struct ifqueue *ifq, const struct ifq_ops *ops) +{ + mtx_enter(&ifq->ifq_mtx); + if (ifq->ifq_ops == ops) + return (ifq->ifq_q); + + mtx_leave(&ifq->ifq_mtx); + + return (NULL); +} + +void +ifq_q_leave(struct ifqueue *ifq, void *q) +{ + KASSERT(q == ifq->ifq_q); + mtx_leave(&ifq->ifq_mtx); +} + +void +ifq_mfreem(struct ifqueue *ifq, struct mbuf *m) +{ + MUTEX_ASSERT_LOCKED(&ifq->ifq_mtx); + + ifq->ifq_len--; + ifq->ifq_qdrops++; + ml_enqueue(&ifq->ifq_free, m); +} + +void +ifq_mfreeml(struct ifqueue *ifq, struct mbuf_list *ml) +{ + MUTEX_ASSERT_LOCKED(&ifq->ifq_mtx); + + ifq->ifq_len -= ml_len(ml); + ifq->ifq_qdrops += ml_len(ml); + ml_enlist(&ifq->ifq_free, ml); +} + +/* + * ifiq + */ + +#if NKSTAT > 0 +struct ifiq_kstat_data { + struct kstat_kv kd_packets; + struct kstat_kv kd_bytes; + struct kstat_kv kd_fdrops; + struct kstat_kv kd_qdrops; + struct kstat_kv kd_errors; + struct kstat_kv kd_qlen; + + struct kstat_kv kd_enqueues; + struct kstat_kv kd_dequeues; +}; + +static const struct ifiq_kstat_data ifiq_kstat_tpl = { + KSTAT_KV_UNIT_INITIALIZER("packets", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("bytes", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_BYTES), + KSTAT_KV_UNIT_INITIALIZER("fdrops", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("qdrops", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("errors", + KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS), + KSTAT_KV_UNIT_INITIALIZER("qlen", + KSTAT_KV_T_UINT32, KSTAT_KV_U_PACKETS), + + KSTAT_KV_INITIALIZER("enqueues", + KSTAT_KV_T_COUNTER64), + KSTAT_KV_INITIALIZER("dequeues", + KSTAT_KV_T_COUNTER64), +}; + +int +ifiq_kstat_copy(struct kstat *ks, void *dst) +{ + struct ifiqueue *ifiq = ks->ks_softc; + struct ifiq_kstat_data *kd = dst; + + *kd = ifiq_kstat_tpl; + kstat_kv_u64(&kd->kd_packets) = ifiq->ifiq_packets; + kstat_kv_u64(&kd->kd_bytes) = ifiq->ifiq_bytes; + kstat_kv_u64(&kd->kd_fdrops) = ifiq->ifiq_fdrops; + kstat_kv_u64(&kd->kd_qdrops) = ifiq->ifiq_qdrops; + kstat_kv_u64(&kd->kd_errors) = ifiq->ifiq_errors; + kstat_kv_u32(&kd->kd_qlen) = ml_len(&ifiq->ifiq_ml); + + kstat_kv_u64(&kd->kd_enqueues) = ifiq->ifiq_enqueues; + kstat_kv_u64(&kd->kd_dequeues) = ifiq->ifiq_dequeues; + + return (0); +} +#endif + +static void ifiq_process(void *); + +void +ifiq_init(struct ifiqueue *ifiq, struct ifnet *ifp, unsigned int idx) +{ + ifiq->ifiq_if = ifp; + ifiq->ifiq_bpfp = NULL; + ifiq->ifiq_softnet = net_tq(idx); + ifiq->ifiq_softc = NULL; + + mtx_init(&ifiq->ifiq_mtx, IPL_NET); + ml_init(&ifiq->ifiq_ml); + task_set(&ifiq->ifiq_task, ifiq_process, ifiq); + ifiq->ifiq_pressure = 0; + + ifiq->ifiq_packets = 0; + ifiq->ifiq_bytes = 0; + ifiq->ifiq_fdrops = 0; + ifiq->ifiq_qdrops = 0; + ifiq->ifiq_errors = 0; + + ifiq->ifiq_idx = idx; + +#if NKSTAT > 0 + /* XXX xname vs driver name and unit */ + ifiq->ifiq_kstat = kstat_create(ifp->if_xname, 0, + "rxq", ifiq->ifiq_idx, KSTAT_T_KV, 0); + KASSERT(ifiq->ifiq_kstat != NULL); + kstat_set_mutex(ifiq->ifiq_kstat, &ifiq->ifiq_mtx); + ifiq->ifiq_kstat->ks_softc = ifiq; + ifiq->ifiq_kstat->ks_datalen = sizeof(ifiq_kstat_tpl); + ifiq->ifiq_kstat->ks_copy = ifiq_kstat_copy; + kstat_install(ifiq->ifiq_kstat); +#endif +} + +void +ifiq_destroy(struct ifiqueue *ifiq) +{ +#if NKSTAT > 0 + kstat_destroy(ifiq->ifiq_kstat); +#endif + + NET_ASSERT_UNLOCKED(); + taskq_del_barrier(ifiq->ifiq_softnet, &ifiq->ifiq_task); + + /* don't need to lock because this is the last use of the ifiq */ + ml_purge(&ifiq->ifiq_ml); +} + +unsigned int ifiq_maxlen_drop = 2048 * 5; +unsigned int ifiq_maxlen_return = 2048 * 3; + +int +ifiq_input(struct ifiqueue *ifiq, struct mbuf_list *ml) +{ + struct ifnet *ifp = ifiq->ifiq_if; + struct mbuf *m; + uint64_t packets; + uint64_t bytes = 0; + uint64_t fdrops = 0; + unsigned int len; +#if NBPFILTER > 0 + caddr_t *ifiq_bpfp, ifiq_bpf = NULL, if_bpf; +#endif + + if (ml_empty(ml)) + return (0); + + MBUF_LIST_FOREACH(ml, m) { + m->m_pkthdr.ph_ifidx = ifp->if_index; + m->m_pkthdr.ph_rtableid = ifp->if_rdomain; + bytes += m->m_pkthdr.len; + } + packets = ml_len(ml); + +#if NBPFILTER > 0 + ifiq_bpfp = READ_ONCE(ifiq->ifiq_bpfp); + if (ifiq_bpfp != NULL) + ifiq_bpf = READ_ONCE(*ifiq_bpfp); + if_bpf = READ_ONCE(ifp->if_bpf); + if (ifiq_bpf || if_bpf) { + struct mbuf_list ml0 = *ml; + + ml_init(ml); + + while ((m = ml_dequeue(&ml0)) != NULL) { + int drop = 0; + if (ifiq_bpf && + (*ifp->if_bpf_mtap)(ifiq_bpf, m, BPF_DIRECTION_IN)) + drop = 1; + if (if_bpf && + (*ifp->if_bpf_mtap)(if_bpf, m, BPF_DIRECTION_IN)) + drop = 1; + if (drop) { + m_freem(m); + fdrops++; + } else + ml_enqueue(ml, m); + } + + if (ml_empty(ml)) { + mtx_enter(&ifiq->ifiq_mtx); + ifiq->ifiq_packets += packets; + ifiq->ifiq_bytes += bytes; + ifiq->ifiq_fdrops += fdrops; + mtx_leave(&ifiq->ifiq_mtx); + + return (0); + } + } +#endif + + mtx_enter(&ifiq->ifiq_mtx); + ifiq->ifiq_packets += packets; + ifiq->ifiq_bytes += bytes; + ifiq->ifiq_fdrops += fdrops; + + len = ml_len(&ifiq->ifiq_ml); + if (__predict_true(!ISSET(ifp->if_xflags, IFXF_MONITOR))) { + if (len > ifiq_maxlen_drop) + ifiq->ifiq_qdrops += ml_len(ml); + else { + ifiq->ifiq_enqueues++; + ml_enlist(&ifiq->ifiq_ml, ml); + } + } + mtx_leave(&ifiq->ifiq_mtx); + + if (ml_empty(ml)) + task_add(ifiq->ifiq_softnet, &ifiq->ifiq_task); + else + ml_purge(ml); + + return (len > ifiq_maxlen_return); +} + +void +ifiq_add_data(struct ifiqueue *ifiq, struct if_data *data) +{ + mtx_enter(&ifiq->ifiq_mtx); + data->ifi_ipackets += ifiq->ifiq_packets; + data->ifi_ibytes += ifiq->ifiq_bytes; + data->ifi_iqdrops += ifiq->ifiq_qdrops; + mtx_leave(&ifiq->ifiq_mtx); +} + +int +ifiq_enqueue_qlim(struct ifiqueue *ifiq, struct mbuf *m, unsigned int qlim) +{ + struct ifnet *ifp = ifiq->ifiq_if; + unsigned int len; +#if NBPFILTER > 0 + caddr_t if_bpf = ifp->if_bpf; +#endif + + m->m_pkthdr.ph_ifidx = ifp->if_index; + m->m_pkthdr.ph_rtableid = ifp->if_rdomain; + +#if NBPFILTER > 0 + if_bpf = ifp->if_bpf; + if (if_bpf) { + if ((*ifp->if_bpf_mtap)(if_bpf, m, BPF_DIRECTION_IN)) { + mtx_enter(&ifiq->ifiq_mtx); + ifiq->ifiq_packets++; + ifiq->ifiq_bytes += m->m_pkthdr.len; + ifiq->ifiq_fdrops++; + mtx_leave(&ifiq->ifiq_mtx); + + m_freem(m); + return (0); + } + } +#endif + + mtx_enter(&ifiq->ifiq_mtx); + ifiq->ifiq_packets++; + ifiq->ifiq_bytes += m->m_pkthdr.len; + + if (qlim && ((len = ml_len(&ifiq->ifiq_ml) >= qlim))) { + ifiq->ifiq_qdrops++; + } else { + ifiq->ifiq_enqueues++; + ml_enqueue(&ifiq->ifiq_ml, m); + m = NULL; + } + + mtx_leave(&ifiq->ifiq_mtx); + + if (m) { + m_freem(m); + return (0); + } + + task_add(ifiq->ifiq_softnet, &ifiq->ifiq_task); + + return (0); +} + +static void +ifiq_process(void *arg) +{ + struct ifiqueue *ifiq = arg; + struct mbuf_list ml; + + if (ifiq_empty(ifiq)) + return; + + mtx_enter(&ifiq->ifiq_mtx); + ifiq->ifiq_dequeues++; + ml = ifiq->ifiq_ml; + ml_init(&ifiq->ifiq_ml); + mtx_leave(&ifiq->ifiq_mtx); + + if_input_process(ifiq->ifiq_if, &ml, ifiq->ifiq_idx); +} + +#ifndef SMALL_KERNEL +int +net_ifiq_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, + void *newp, size_t newlen) +{ + int error = EOPNOTSUPP; +/* pressure is disabled for 6.6-release */ +#if 0 + int val; + + if (namelen != 1) + return (EISDIR); + + switch (name[0]) { + case NET_LINK_IFRXQ_PRESSURE_RETURN: + val = ifiq_pressure_return; + error = sysctl_int(oldp, oldlenp, newp, newlen, &val); + if (error != 0) + return (error); + if (val < 1 || val > ifiq_pressure_drop) + return (EINVAL); + ifiq_pressure_return = val; + break; + case NET_LINK_IFRXQ_PRESSURE_DROP: + val = ifiq_pressure_drop; + error = sysctl_int(oldp, oldlenp, newp, newlen, &val); + if (error != 0) + return (error); + if (ifiq_pressure_return > val) + return (EINVAL); + ifiq_pressure_drop = val; + break; + default: + error = EOPNOTSUPP; + break; + } +#endif + + return (error); +} +#endif /* SMALL_KERNEL */ + +/* + * priq implementation + */ + +unsigned int +priq_idx(unsigned int nqueues, const struct mbuf *m) +{ + unsigned int flow = 0; + + if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) + flow = m->m_pkthdr.ph_flowid; + + return (flow % nqueues); +} + +void * +priq_alloc(unsigned int idx, void *null) +{ + struct priq *pq; + int i; + + pq = malloc(sizeof(struct priq), M_DEVBUF, M_WAITOK); + for (i = 0; i < IFQ_NQUEUES; i++) + ml_init(&pq->pq_lists[i]); + return (pq); +} + +void +priq_free(unsigned int idx, void *pq) +{ + free(pq, M_DEVBUF, sizeof(struct priq)); +} + +struct mbuf * +priq_enq(struct ifqueue *ifq, struct mbuf *m) +{ + struct priq *pq; + struct mbuf_list *pl; + struct mbuf *n = NULL; + unsigned int prio; + + pq = ifq->ifq_q; + KASSERT(m->m_pkthdr.pf.prio <= IFQ_MAXPRIO); + + /* Find a lower priority queue to drop from */ + if (ifq_len(ifq) >= ifq->ifq_maxlen) { + for (prio = 0; prio < m->m_pkthdr.pf.prio; prio++) { + pl = &pq->pq_lists[prio]; + if (ml_len(pl) > 0) { + n = ml_dequeue(pl); + goto enqueue; + } + } + /* + * There's no lower priority queue that we can + * drop from so don't enqueue this one. + */ + return (m); + } + + enqueue: + pl = &pq->pq_lists[m->m_pkthdr.pf.prio]; + ml_enqueue(pl, m); + + return (n); +} + +struct mbuf * +priq_deq_begin(struct ifqueue *ifq, void **cookiep) +{ + struct priq *pq = ifq->ifq_q; + struct mbuf_list *pl; + unsigned int prio = nitems(pq->pq_lists); + struct mbuf *m; + + do { + pl = &pq->pq_lists[--prio]; + m = MBUF_LIST_FIRST(pl); + if (m != NULL) { + *cookiep = pl; + return (m); + } + } while (prio > 0); + + return (NULL); +} + +void +priq_deq_commit(struct ifqueue *ifq, struct mbuf *m, void *cookie) +{ + struct mbuf_list *pl = cookie; + + KASSERT(MBUF_LIST_FIRST(pl) == m); + + ml_dequeue(pl); +} + +void +priq_purge(struct ifqueue *ifq, struct mbuf_list *ml) +{ + struct priq *pq = ifq->ifq_q; + struct mbuf_list *pl; + unsigned int prio = nitems(pq->pq_lists); + + do { + pl = &pq->pq_lists[--prio]; + ml_enlist(ml, pl); + } while (prio > 0); +} diff --git a/module/pfsrc/ip_divert.c b/module/pfsrc/ip_divert.c new file mode 100644 index 0000000..428b63b --- /dev/null +++ b/module/pfsrc/ip_divert.c @@ -0,0 +1,318 @@ +/* PFLINUX port of OpenBSD 8.0 netinet/ip_divert.c — see docs/porting-notes.md */ +#include + +/* + * Locks used to protect data: + * a atomic + */ + +struct inpcbtable divbtable; +struct cpumem *divcounters; + +u_int divert_sendspace = DIVERT_SENDSPACE; /* [a] */ +u_int divert_recvspace = DIVERT_RECVSPACE; /* [a] */ + +const struct sysctl_bounded_args divertctl_vars[] = { + { DIVERTCTL_RECVSPACE, &divert_recvspace, 0, SB_MAX }, + { DIVERTCTL_SENDSPACE, &divert_sendspace, 0, SB_MAX }, +}; + +const struct pr_usrreqs divert_usrreqs = { + .pru_attach = divert_attach, + .pru_detach = divert_detach, + .pru_bind = divert_bind, + .pru_shutdown = divert_shutdown, + .pru_send = divert_send, + .pru_control = in_control, + .pru_sockaddr = in_sockaddr, + .pru_peeraddr = in_peeraddr, +}; + +int divert_output(struct inpcb *, struct mbuf *, struct mbuf *, + struct mbuf *); +void +divert_init(void) +{ + in_pcbinit(&divbtable, DIVERT_HASHSIZE); + divcounters = counters_alloc(divs_ncounters); +} + +int +divert_output(struct inpcb *inp, struct mbuf *m, struct mbuf *nam, + struct mbuf *control) +{ + struct sockaddr_in *sin; + int error, min_hdrlen, off, dir; + struct pf_ip *ip; + + m_freem(control); + + if ((error = in_nam2sin(nam, &sin))) + goto fail; + + if (m->m_pkthdr.len > IP_MAXPACKET) { + error = EMSGSIZE; + goto fail; + } + + m = rip_chkhdr(m, NULL); + if (m == NULL) { + error = EINVAL; + goto fail; + } + + ip = mtod(m, struct pf_ip *); + off = ip->ip_hl << 2; + + dir = (sin->sin_addr.s_addr == INADDR_ANY ? PF_OUT : PF_IN); + + switch (ip->ip_p) { + case IPPROTO_TCP: + min_hdrlen = sizeof(struct pf_tcphdr); + m->m_pkthdr.csum_flags |= M_TCP_CSUM_OUT; + break; + case IPPROTO_UDP: + min_hdrlen = sizeof(struct pf_udphdr); + m->m_pkthdr.csum_flags |= M_UDP_CSUM_OUT; + break; + case IPPROTO_ICMP: + min_hdrlen = ICMP_MINLEN; + m->m_pkthdr.csum_flags |= M_ICMP_CSUM_OUT; + break; + default: + min_hdrlen = 0; + break; + } + if (min_hdrlen && m->m_pkthdr.len < off + min_hdrlen) { + error = EINVAL; + goto fail; + } + + m->m_pkthdr.pf.flags |= PF_TAG_DIVERTED_PACKET; + + if (dir == PF_IN) { + struct rtentry *rt; + struct ifnet *ifp; + + rt = rtalloc(sintosa(sin), 0, inp->inp_rtableid); + if (!rtisvalid(rt) || !ISSET(rt->rt_flags, RTF_LOCAL)) { + rtfree(rt); + error = EADDRNOTAVAIL; + goto fail; + } + m->m_pkthdr.ph_ifidx = rt->rt_ifidx; + rtfree(rt); + + /* + * Recalculate IP and protocol checksums for the inbound packet + * since the userspace application may have modified the packet + * prior to reinjection. + */ + in_hdr_cksum_out(m, NULL); + in_proto_cksum_out(m, NULL); + + ifp = if_get(m->m_pkthdr.ph_ifidx); + if (ifp == NULL) { + error = ENETDOWN; + goto fail; + } + ipv4_input(ifp, m, NULL); + if_put(ifp); + } else { + m->m_pkthdr.ph_rtableid = inp->inp_rtableid; + + error = ip_output(m, NULL, &inp->inp_route, + IP_ALLOWBROADCAST | IP_RAWOUTPUT, NULL, NULL, 0); + } + + divstat_inc(divs_opackets); + return (error); + +fail: + m_freem(m); + divstat_inc(divs_errors); + return (error); +} + +void +divert_packet(struct mbuf *m, int dir, u_int16_t divert_port) +{ + struct inpcb *inp = NULL; + struct socket *so; + struct sockaddr_in sin; + u_int rdomain; + + divstat_inc(divs_ipackets); + + if (m->m_len < sizeof(struct pf_ip) && + (m = m_pullup(m, sizeof(struct pf_ip))) == NULL) { + divstat_inc(divs_errors); + goto bad; + } + + rdomain = rtable_l2(m->m_pkthdr.ph_rtableid); + mtx_enter(&divbtable.inpt_mtx); + TAILQ_FOREACH(inp, &divbtable.inpt_queue, inp_queue) { + if (inp->inp_lport != divert_port || + rtable_l2(inp->inp_rtableid) != rdomain) { + continue; + } + in_pcbref(inp); + break; + } + mtx_leave(&divbtable.inpt_mtx); + if (inp == NULL) { + divstat_inc(divs_noport); + goto bad; + } + + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin./* PFLINUX sin_len */; + + if (dir == PF_IN) { + struct ifaddr *ifa; + struct ifnet *ifp; + + ifp = if_get(m->m_pkthdr.ph_ifidx); + if (ifp == NULL) { + divstat_inc(divs_errors); + goto bad; + } + TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) { + if (ifa->ifa_addr->sa_family != AF_INET) + continue; + sin.sin_addr = satosin(ifa->ifa_addr)->sin_addr; + break; + } + if_put(ifp); + } else { + /* + * Calculate IP and protocol checksums for outbound packet + * diverted to userland. pf rule diverts before cksum offload. + */ + in_hdr_cksum_out(m, NULL); + in_proto_cksum_out(m, NULL); + } + + so = inp->inp_socket; + mtx_enter(&so->so_rcv.sb_mtx); + if (sbappendaddr(&so->so_rcv, sintosa(&sin), m, NULL) == 0) { + mtx_leave(&so->so_rcv.sb_mtx); + divstat_inc(divs_fullsock); + goto bad; + } + mtx_leave(&so->so_rcv.sb_mtx); + sorwakeup(so); + + in_pcbunref(inp); + return; + + bad: + in_pcbunref(inp); + m_freem(m); +} + +int +divert_attach(struct socket *so, int proto, int wait) +{ + int error; + + if (so->so_pcb != NULL) + return EINVAL; + if ((so->so_state & SS_PRIV) == 0) + return EACCES; + + error = soreserve(so, atomic_load_int(&divert_sendspace), + atomic_load_int(&divert_recvspace)); + if (error) + return error; + error = in_pcballoc(so, &divbtable, wait); + if (error) + return error; + + sotoinpcb(so)->inp_flags |= INP_HDRINCL; + return (0); +} + +int +divert_detach(struct socket *so) +{ + struct inpcb *inp = sotoinpcb(so); + + soassertlocked(so); + + if (inp == NULL) + return (EINVAL); + + in_pcbdetach(inp); + return (0); +} + +int +divert_bind(struct socket *so, struct mbuf *addr, struct proc *p) +{ + struct inpcb *inp = sotoinpcb(so); + + soassertlocked(so); + return in_pcbbind(inp, addr, p); +} + +int +divert_shutdown(struct socket *so) +{ + soassertlocked(so); + socantsendmore(so); + return (0); +} + +int +divert_send(struct socket *so, struct mbuf *m, struct mbuf *addr, + struct mbuf *control) +{ + struct inpcb *inp = sotoinpcb(so); + + soassertlocked(so); + return (divert_output(inp, m, addr, control)); +} + +int +divert_sysctl_divstat(void *oldp, size_t *oldlenp, void *newp) +{ + uint64_t counters[divs_ncounters]; + struct divstat divstat; + u_long *words = (u_long *)&divstat; + int i; + + CTASSERT(sizeof(divstat) == (nitems(counters) * sizeof(u_long))); + memset(&divstat, 0, sizeof divstat); + counters_read(divcounters, counters, nitems(counters), NULL); + + for (i = 0; i < nitems(counters); i++) + words[i] = (u_long)counters[i]; + + return (sysctl_rdstruct(oldp, oldlenp, newp, + &divstat, sizeof(divstat))); +} + +/* + * Sysctl for divert variables. + */ +int +divert_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, + size_t newlen) +{ + /* All sysctl names at this level are terminal. */ + if (namelen != 1) + return (ENOTDIR); + + switch (name[0]) { + case DIVERTCTL_STATS: + return (divert_sysctl_divstat(oldp, oldlenp, newp)); + default: + return (sysctl_bounded_arr(divertctl_vars, + nitems(divertctl_vars), name, namelen, oldp, oldlenp, + newp, newlen)); + } + /* NOTREACHED */ +} diff --git a/module/pfsrc/pf.c b/module/pfsrc/pf.c new file mode 100644 index 0000000..afa27a2 --- /dev/null +++ b/module/pfsrc/pf.c @@ -0,0 +1,9101 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf.c — see docs/porting-notes.md */ +#include +#endif /* NPFSYNC > 0 */ + +/* + * Global variables + */ +struct pf_state_tree pf_statetbl; +struct pf_queuehead pf_queues[2]; +struct pf_queuehead *pf_queues_active; +struct pf_queuehead *pf_queues_inactive; + +struct pf_status pf_status; +static struct cpumem *pf_status_fcounters; + +struct mutex pf_inp_mtx = MUTEX_INITIALIZER(IPL_SOFTNET); + +int pf_hdr_limit = 20; /* arbitrary limit, tune in ddb */ + +SHA2_CTX pf_tcp_secret_ctx; +u_char pf_tcp_secret[16]; +int pf_tcp_secret_init; +int pf_tcp_iss_off; + +enum pf_test_status { + PF_TEST_FAIL = -1, + PF_TEST_OK, + PF_TEST_QUICK +}; + +struct pf_test_ctx { + struct pf_pdesc *pd; + struct pf_rule_actions act; + u_int8_t icmpcode; + u_int8_t icmptype; + int icmp_dir; + int state_icmp; + int tag; + int limiter_drop; + u_short reason; + struct pf_rule_item *ri; + struct pf_src_node *sns[PF_SN_MAX]; + struct pf_rule_slist rules; + struct pf_rule *nr; + struct pf_rule **rm; + struct pf_rule *a; + struct pf_rule **am; + struct pf_ruleset **rsm; + struct pf_ruleset *arsm; + struct pf_ruleset *aruleset; + struct pf_tcphdr *th; + struct pf_statelim *statelim; + struct pf_sourcelim *sourcelim; + struct pf_source *source; +}; + +struct pool pf_src_tree_pl, pf_rule_pl, pf_queue_pl; +struct pool pf_state_pl, pf_state_key_pl, pf_state_item_pl; +struct pool pf_rule_item_pl, pf_sn_item_pl, pf_pktdelay_pl; +struct pool pf_statelim_pl, pf_sourcelim_pl, pf_source_pl; +struct pool pf_state_link_pl; + +void pf_add_threshold(struct pf_threshold *); +int pf_check_threshold(struct pf_threshold *); +int pf_check_tcp_cksum(struct mbuf *, int, int, + sa_family_t); +__inline void pf_cksum_fixup(u_int16_t *, u_int16_t, u_int16_t, + u_int8_t); +void pf_cksum_fixup_a(u_int16_t *, const struct pf_addr *, + const struct pf_addr *, sa_family_t, u_int8_t); +int pf_modulate_sack(struct pf_pdesc *, + struct pf_state_peer *); +int pf_icmp_mapping(struct pf_pdesc *, u_int8_t, int *, + u_int16_t *, u_int16_t *); +int pf_change_icmp_af(struct mbuf *, int, + struct pf_pdesc *, struct pf_pdesc *, + struct pf_addr *, struct pf_addr *, sa_family_t, + sa_family_t); +int pf_translate_a(struct pf_pdesc *, struct pf_addr *, + struct pf_addr *); +void pf_translate_icmp(struct pf_pdesc *, struct pf_addr *, + u_int16_t *, struct pf_addr *, struct pf_addr *, + u_int16_t); +int pf_translate_icmp_af(struct pf_pdesc*, int, void *); +void pf_send_icmp(struct mbuf *, u_int8_t, u_int8_t, int, + sa_family_t, struct pf_rule *, u_int); +void pf_detach_state(struct pf_state *); +struct pf_state_key *pf_state_key_attach(struct pf_state_key *, + struct pf_state *, int); +void pf_state_key_detach(struct pf_state *, int); +u_int32_t pf_tcp_iss(struct pf_pdesc *); +void pf_rule_to_actions(struct pf_rule *, + struct pf_rule_actions *); +int pf_test_rule(struct pf_pdesc *, struct pf_rule **, + struct pf_state **, struct pf_rule **, + struct pf_ruleset **, u_short *); +static __inline int pf_create_state(struct pf_pdesc *, struct pf_rule *, + struct pf_rule *, struct pf_rule *, + struct pf_state_key **, struct pf_state_key **, + int *, struct pf_state **, int, + struct pf_rule_slist *, struct pf_rule_actions *, + struct pf_src_node **, struct pf_test_ctx *); +static __inline int pf_state_key_addr_setup(struct pf_pdesc *, void *, + int, struct pf_addr *, int, struct pf_addr *, + int, int); +int pf_state_key_setup(struct pf_pdesc *, struct + pf_state_key **, struct pf_state_key **, int); +int pf_tcp_track_full(struct pf_pdesc *, + struct pf_state **, u_short *, int *, int); +int pf_tcp_track_sloppy(struct pf_pdesc *, + struct pf_state **, u_short *); +static __inline int pf_synproxy_ack(struct pf_rule *, struct pf_pdesc *, + struct pf_state **, struct pf_rule_actions *); +static __inline int pf_synproxy(struct pf_pdesc *, struct pf_state **, + u_short *); +int pf_test_state(struct pf_pdesc *, struct pf_state **, + u_short *); +int pf_icmp_state_lookup(struct pf_pdesc *, + struct pf_state_key_cmp *, struct pf_state **, + u_int16_t, u_int16_t, int, int *, int, int); +int pf_test_state_icmp(struct pf_pdesc *, + struct pf_state **, u_short *); +u_int16_t pf_calc_mss(struct pf_addr *, sa_family_t, int, + uint16_t, uint16_t); +static __inline int pf_set_rt_ifp(struct pf_state *, struct pf_addr *, + sa_family_t, struct pf_src_node **); +struct pf_divert *pf_get_divert(struct mbuf *); +int pf_walk_option(struct pf_pdesc *, struct pf_ip *, + int, int, u_short *); +int pf_walk_header(struct pf_pdesc *, struct pf_ip *, + u_short *); +int pf_walk_option6(struct pf_pdesc *, struct pf_ip6_hdr *, + int, int, u_short *); +int pf_walk_header6(struct pf_pdesc *, struct pf_ip6_hdr *, + u_short *); +void pf_print_state_parts(struct pf_state *, + struct pf_state_key *, struct pf_state_key *); +int pf_addr_wrap_neq(struct pf_addr_wrap *, + struct pf_addr_wrap *); +int pf_compare_state_keys(struct pf_state_key *, + struct pf_state_key *, struct pfi_kif *, u_int); +u_int16_t pf_pkt_hash(sa_family_t, uint8_t, + const struct pf_addr *, const struct pf_addr *, + uint16_t, uint16_t); +int pf_find_state(struct pf_pdesc *, + struct pf_state_key_cmp *, struct pf_state **); +int pf_src_connlimit(struct pf_state **); +int pf_match_rcvif(struct mbuf *, struct pf_rule *); +enum pf_test_status pf_match_rule(struct pf_test_ctx *, + struct pf_ruleset *); +void pf_counters_inc(int, struct pf_pdesc *, + struct pf_state *, struct pf_rule *, + struct pf_rule *); + +int pf_state_insert(struct pfi_kif *, + struct pf_state_key **, struct pf_state_key **, + struct pf_state *); + +int pf_state_key_isvalid(struct pf_state_key *); +struct pf_state_key *pf_state_key_ref(struct pf_state_key *); +void pf_state_key_unref(struct pf_state_key *); +void pf_state_key_link_reverse(struct pf_state_key *, + struct pf_state_key *); +void pf_state_key_unlink_reverse(struct pf_state_key *); +void pf_state_key_link_inpcb(struct pf_state_key *, + struct inpcb *); +void pf_state_key_unlink_inpcb(struct pf_state_key *); +void pf_pktenqueue_delayed(void *); +int32_t pf_state_expires(const struct pf_state *, uint8_t); + +#if NPFLOG > 0 +void pf_log_matches(struct pf_pdesc *, struct pf_rule *, + struct pf_rule *, struct pf_ruleset *, + struct pf_rule_slist *); +#endif /* NPFLOG > 0 */ + +extern struct pool pfr_ktable_pl; +extern struct pool pfr_kentry_pl; + +struct pf_pool_limit pf_pool_limits[PF_LIMIT_MAX] = { + { &pf_state_pl, PFSTATE_HIWAT, PFSTATE_HIWAT }, + { &pf_src_tree_pl, PFSNODE_HIWAT, PFSNODE_HIWAT }, + { &pf_frent_pl, PFFRAG_FRENT_HIWAT, PFFRAG_FRENT_HIWAT }, + { &pfr_ktable_pl, PFR_KTABLE_HIWAT, PFR_KTABLE_HIWAT }, + { &pfr_kentry_pl, PFR_KENTRY_HIWAT, PFR_KENTRY_HIWAT }, + { &pf_pktdelay_pl, PF_PKTDELAY_MAXPKTS, PF_PKTDELAY_MAXPKTS }, + { &pf_anchor_pl, PF_ANCHOR_HIWAT, PF_ANCHOR_HIWAT } +}; + +#define BOUND_IFACE(r, k) \ + ((r)->rule_flag & PFRULE_IFBOUND) ? (k) : pfi_all + +#define STATE_INC_COUNTERS(s) \ + do { \ + struct pf_rule_item *mrm; \ + s->rule.ptr->states_cur++; \ + s->rule.ptr->states_tot++; \ + if (s->anchor.ptr != NULL) { \ + s->anchor.ptr->states_cur++; \ + s->anchor.ptr->states_tot++; \ + } \ + SLIST_FOREACH(mrm, &s->match_rules, entry) \ + mrm->r->states_cur++; \ + } while (0) + +static __inline int pf_src_compare(struct pf_src_node *, struct pf_src_node *); +static inline int pf_state_compare_key(const struct pf_state_key *, + const struct pf_state_key *); +static inline int pf_state_compare_id(const struct pf_state *, + const struct pf_state *); +#ifdef INET6 +static __inline void pf_cksum_uncover(u_int16_t *, u_int16_t, u_int8_t); +static __inline void pf_cksum_cover(u_int16_t *, u_int16_t, u_int8_t); +#endif /* INET6 */ +static __inline void pf_set_protostate(struct pf_state *, int, u_int8_t); + +static inline int +pf_statelim_id_cmp(const struct pf_statelim *a, const struct pf_statelim *b) +{ + if (a->pfstlim_id > b->pfstlim_id) + return (1); + if (a->pfstlim_id < b->pfstlim_id) + return (-1); + + return (0); +} + +RBT_GENERATE(pf_statelim_id_tree, pf_statelim, pfstlim_id_tree, + pf_statelim_id_cmp); + +static inline int +pf_statelim_nm_cmp(const struct pf_statelim *a, const struct pf_statelim *b) +{ + return (strncmp(a->pfstlim_nm, b->pfstlim_nm, sizeof(a->pfstlim_nm))); +} + +RBT_GENERATE(pf_statelim_nm_tree, pf_statelim, pfstlim_nm_tree, + pf_statelim_nm_cmp); + +struct pf_statelim_id_tree pf_statelim_id_tree_active = + RBT_INITIALIZER(pf_statelim_id_tree_active); +struct pf_statelim_list pf_statelim_list_active = + TAILQ_HEAD_INITIALIZER(pf_statelim_list_active); + +struct pf_statelim_id_tree pf_statelim_id_tree_inactive = + RBT_INITIALIZER(pf_statelim_id_tree_inactive); +struct pf_statelim_nm_tree pf_statelim_nm_tree_inactive = + RBT_INITIALIZER(pf_statelim_nm_tree_inactive); +struct pf_statelim_list pf_statelim_list_inactive = + TAILQ_HEAD_INITIALIZER(pf_statelim_list_inactive); + +static inline int +pf_sourcelim_id_cmp(const struct pf_sourcelim *a, const struct pf_sourcelim *b) +{ + if (a->pfsrlim_id > b->pfsrlim_id) + return (1); + if (a->pfsrlim_id < b->pfsrlim_id) + return (-1); + + return (0); +} + +RBT_GENERATE(pf_sourcelim_id_tree, pf_sourcelim, pfsrlim_id_tree, + pf_sourcelim_id_cmp); + +static inline int +pf_sourcelim_nm_cmp(const struct pf_sourcelim *a, const struct pf_sourcelim *b) +{ + return (strncmp(a->pfsrlim_nm, b->pfsrlim_nm, sizeof(a->pfsrlim_nm))); +} + +RBT_GENERATE(pf_sourcelim_nm_tree, pf_sourcelim, pfsrlim_nm_tree, + pf_sourcelim_nm_cmp); + +static inline int +pf_source_cmp(const struct pf_source *a, const struct pf_source *b) +{ + if (a->pfsr_af > b->pfsr_af) + return (1); + if (a->pfsr_af < b->pfsr_af) + return (-1); + if (a->pfsr_rdomain > b->pfsr_rdomain) + return (1); + if (a->pfsr_rdomain < b->pfsr_rdomain) + return (-1); + + return (pf_addr_compare(&a->pfsr_addr, &b->pfsr_addr, a->pfsr_af)); +} + +RBT_GENERATE(pf_source_tree, pf_source, pfsr_tree, pf_source_cmp); + +static inline int +pf_source_ioc_cmp(const struct pf_source *a, const struct pf_source *b) +{ + size_t i; + + if (a->pfsr_af > b->pfsr_af) + return (1); + if (a->pfsr_af < b->pfsr_af) + return (-1); + if (a->pfsr_rdomain > b->pfsr_rdomain) + return (1); + if (a->pfsr_rdomain < b->pfsr_rdomain) + return (-1); + + for (i = 0; i < nitems(a->pfsr_addr.addr32); i++) { + uint32_t wa = ntohl(a->pfsr_addr.addr32[i]); + uint32_t wb = ntohl(b->pfsr_addr.addr32[i]); + + if (wa > wb) + return (1); + if (wa < wb) + return (-1); + } + + return (0); +} + +RBT_GENERATE(pf_source_ioc_tree, pf_source, pfsr_ioc_tree, pf_source_ioc_cmp); + +struct pf_sourcelim_id_tree pf_sourcelim_id_tree_active = + RBT_INITIALIZER(pf_sourcelim_id_tree_active); +struct pf_sourcelim_list pf_sourcelim_list_active = + TAILQ_HEAD_INITIALIZER(pf_sourcelim_list_active); + +struct pf_sourcelim_id_tree pf_sourcelim_id_tree_inactive = + RBT_INITIALIZER(pf_sourcelim_id_tree_inactive); +struct pf_sourcelim_nm_tree pf_sourcelim_nm_tree_inactive = + RBT_INITIALIZER(pf_sourcelim_nm_tree_inactive); +struct pf_sourcelim_list pf_sourcelim_list_inactive = + TAILQ_HEAD_INITIALIZER(pf_sourcelim_list_inactive); + +static inline struct pf_statelim * +pf_statelim_find(uint32_t id) +{ + struct pf_statelim key; + + /* only the id is used in cmp, so don't have to zero all the things */ + key.pfstlim_id = id; + + return (RBT_FIND(pf_statelim_id_tree, + &pf_statelim_id_tree_active, &key)); +} + +static inline struct pf_sourcelim * +pf_sourcelim_find(uint32_t id) +{ + struct pf_sourcelim key; + + /* only the id is used in cmp, so don't have to zero all the things */ + key.pfsrlim_id = id; + + return (RBT_FIND(pf_sourcelim_id_tree, + &pf_sourcelim_id_tree_active, &key)); +} + +struct pf_source_list pf_source_gc = TAILQ_HEAD_INITIALIZER(pf_source_gc); + +static void +pf_source_purge(void) +{ + struct pf_source *sr, *nsr; + time_t now = getuptime(); + + TAILQ_FOREACH_SAFE(sr, &pf_source_gc, pfsr_empty_gc, nsr) { + struct pf_sourcelim *srlim = sr->pfsr_parent; + + if (now <= sr->pfsr_empty_ts + srlim->pfsrlim_rate.seconds + 1) + continue; + + TAILQ_REMOVE(&pf_source_gc, sr, pfsr_empty_gc); + + RBT_REMOVE(pf_source_tree, &srlim->pfsrlim_sources, sr); + RBT_REMOVE(pf_source_ioc_tree, &srlim->pfsrlim_ioc_sources, sr); + srlim->pfsrlim_nsources--; + + pool_put(&pf_source_pl, sr); + } +} + +static void +pf_source_pfr_addr(struct pfr_addr *p, const struct pf_source *sr) +{ + struct pf_sourcelim *srlim = sr->pfsr_parent; + + memset(p, 0, sizeof(*p)); + + p->pfra_af = sr->pfsr_af; + switch (sr->pfsr_af) { + case AF_INET: + p->pfra_net = srlim->pfsrlim_ipv4_prefix; + p->pfra_ip4addr = sr->pfsr_addr.v4; + break; +#ifdef INET6 + case AF_INET6: + p->pfra_net = srlim->pfsrlim_ipv6_prefix; + p->pfra_ip6addr = sr->pfsr_addr.v6; + break; +#endif /* INET6 */ + } +} + +static void +pf_source_used(struct pf_source *sr) +{ + struct pf_sourcelim *srlim = sr->pfsr_parent; + struct pfr_ktable *t; + unsigned int used; + + used = sr->pfsr_inuse++; + sr->pfsr_rate_ts += srlim->pfsrlim_rate_token; + + if (used == 0) + TAILQ_REMOVE(&pf_source_gc, sr, pfsr_empty_gc); + else if ((t = srlim->pfsrlim_overload.table) != NULL && + used >= srlim->pfsrlim_overload.hwm && !sr->pfsr_intable) { + struct pfr_addr p; + + pf_source_pfr_addr(&p, sr); + + pfr_insert_kentry(t, &p, gettime()); + sr->pfsr_intable = 1; + } +} + +static void +pf_source_rele(struct pf_source *sr) +{ + struct pf_sourcelim *srlim = sr->pfsr_parent; + struct pfr_ktable *t; + unsigned int used; + + used = --sr->pfsr_inuse; + + t = srlim->pfsrlim_overload.table; + if (t != NULL && sr->pfsr_intable && + used < srlim->pfsrlim_overload.lwm) { + struct pfr_addr p; + + pf_source_pfr_addr(&p, sr); + + pfr_remove_kentry(t, &p); + sr->pfsr_intable = 0; + } + + if (used == 0) { + TAILQ_INSERT_TAIL(&pf_source_gc, sr, pfsr_empty_gc); + sr->pfsr_empty_ts = getuptime() + srlim->pfsrlim_rate.seconds; + } +} + +static inline void +pf_source_key(struct pf_sourcelim *srlim, struct pf_source *key, + sa_family_t af, unsigned int rdomain, const struct pf_addr *addr) +{ + size_t i; + + /* only af+addr is used for lookup. */ + key->pfsr_af = af; + key->pfsr_rdomain = rdomain; + switch (af) { + case AF_INET: + key->pfsr_addr.addr32[0] = + srlim->pfsrlim_ipv4_mask.v4.s_addr & + addr->v4.s_addr; + + for (i = 1; i < nitems(key->pfsr_addr.addr32); i++) + key->pfsr_addr.addr32[i] = htonl(0); + break; +#ifdef INET6 + case AF_INET6: + for (i = 0; i < nitems(key->pfsr_addr.addr32); i++) { + key->pfsr_addr.addr32[i] = + srlim->pfsrlim_ipv6_mask.addr32[i] & + addr->addr32[i]; + } + break; +#endif + default: + unhandled_af(af); + /* NOTREACHED */ + } +} + +static inline struct pf_source * +pf_source_find(struct pf_sourcelim *srlim, const struct pf_source *key) +{ + return (RBT_FIND(pf_source_tree, &srlim->pfsrlim_sources, key)); +} + +struct pf_src_tree tree_src_tracking; + +struct pf_state_tree_id tree_id; +struct pf_state_list pf_state_list = PF_STATE_LIST_INITIALIZER(pf_state_list); + +RB_GENERATE(pf_src_tree, pf_src_node, entry, pf_src_compare); +RBT_GENERATE(pf_state_tree, pf_state_key, sk_entry, pf_state_compare_key); +RBT_GENERATE(pf_state_tree_id, pf_state, entry_id, pf_state_compare_id); + +int +pf_addr_compare(const struct pf_addr *a, const struct pf_addr *b, + sa_family_t af) +{ + switch (af) { + case AF_INET: + if (a->addr32[0] > b->addr32[0]) + return (1); + if (a->addr32[0] < b->addr32[0]) + return (-1); + break; +#ifdef INET6 + case AF_INET6: + if (a->addr32[3] > b->addr32[3]) + return (1); + if (a->addr32[3] < b->addr32[3]) + return (-1); + if (a->addr32[2] > b->addr32[2]) + return (1); + if (a->addr32[2] < b->addr32[2]) + return (-1); + if (a->addr32[1] > b->addr32[1]) + return (1); + if (a->addr32[1] < b->addr32[1]) + return (-1); + if (a->addr32[0] > b->addr32[0]) + return (1); + if (a->addr32[0] < b->addr32[0]) + return (-1); + break; +#endif /* INET6 */ + } + return (0); +} + +static __inline int +pf_src_compare(struct pf_src_node *a, struct pf_src_node *b) +{ + int diff; + + if (a->rule.ptr > b->rule.ptr) + return (1); + if (a->rule.ptr < b->rule.ptr) + return (-1); + if ((diff = a->type - b->type) != 0) + return (diff); + if ((diff = a->af - b->af) != 0) + return (diff); + if ((diff = pf_addr_compare(&a->addr, &b->addr, a->af)) != 0) + return (diff); + return (0); +} + +static __inline void +pf_set_protostate(struct pf_state *st, int which, u_int8_t newstate) +{ + if (which == PF_PEER_DST || which == PF_PEER_BOTH) + st->dst.state = newstate; + if (which == PF_PEER_DST) + return; + + if (st->src.state == newstate) + return; + if (st->creatorid == pf_status.hostid && + st->key[PF_SK_STACK]->proto == IPPROTO_TCP && + !(TCPS_HAVEESTABLISHED(st->src.state) || + st->src.state == TCPS_CLOSED) && + (TCPS_HAVEESTABLISHED(newstate) || newstate == TCPS_CLOSED)) + atomic_dec_int(&pf_status.states_halfopen); + + st->src.state = newstate; +} + +void +pf_addrcpy(struct pf_addr *dst, struct pf_addr *src, sa_family_t af) +{ + switch (af) { + case AF_INET: + dst->addr32[0] = src->addr32[0]; + break; +#ifdef INET6 + case AF_INET6: + dst->addr32[0] = src->addr32[0]; + dst->addr32[1] = src->addr32[1]; + dst->addr32[2] = src->addr32[2]; + dst->addr32[3] = src->addr32[3]; + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } +} + +void +pf_init_threshold(struct pf_threshold *threshold, + u_int32_t limit, u_int32_t seconds) +{ + threshold->limit = limit * PF_THRESHOLD_MULT; + threshold->seconds = seconds; + threshold->count = 0; + threshold->last = getuptime(); +} + +void +pf_add_threshold(struct pf_threshold *threshold) +{ + u_int32_t t = getuptime(), diff = t - threshold->last; + + if (diff >= threshold->seconds) + threshold->count = 0; + else + threshold->count -= threshold->count * diff / + threshold->seconds; + threshold->count += PF_THRESHOLD_MULT; + threshold->last = t; +} + +int +pf_check_threshold(struct pf_threshold *threshold) +{ + return (threshold->count > threshold->limit); +} + +void +pf_state_list_insert(struct pf_state_list *pfs, struct pf_state *st) +{ + /* + * we can always put states on the end of the list. + * + * things reading the list should take a read lock, then + * the mutex, get the head and tail pointers, release the + * mutex, and then they can iterate between the head and tail. + */ + + pf_state_ref(st); /* get a ref for the list */ + + mtx_enter(&pfs->pfs_mtx); + TAILQ_INSERT_TAIL(&pfs->pfs_list, st, entry_list); + mtx_leave(&pfs->pfs_mtx); +} + +void +pf_state_list_remove(struct pf_state_list *pfs, struct pf_state *st) +{ + /* states can only be removed when the write lock is held */ + rw_assert_wrlock(&pfs->pfs_rwl); + + mtx_enter(&pfs->pfs_mtx); + TAILQ_REMOVE(&pfs->pfs_list, st, entry_list); + mtx_leave(&pfs->pfs_mtx); + + pf_state_unref(st); /* list no longer references the state */ +} + +void +pf_update_state_timeout(struct pf_state *st, int to) +{ + mtx_enter(&st->mtx); + if (st->timeout != PFTM_UNLINKED) + st->timeout = to; + mtx_leave(&st->mtx); +} + +int +pf_src_connlimit(struct pf_state **stp) +{ + int bad = 0; + struct pf_src_node *sn; + u_int32_t sn_conn; + int rv = 0; + + PF_LOCK(); + + if ((sn = pf_get_src_node((*stp), PF_SN_NONE)) == NULL) + goto done; + + /* + * Note: conn limit is bumped on SYN_SENT->ESTBLISHED + * state transition. packet does not hold any locks + * when running here, therefore atomic is needed. + */ + sn_conn = atomic_inc_int_nv(&sn->conn); + + (*stp)->src.tcp_est = 1; + pf_add_threshold(&sn->conn_rate); + + if ((*stp)->rule.ptr->max_src_conn && + (*stp)->rule.ptr->max_src_conn < sn_conn) { + pf_status.lcounters[LCNT_SRCCONN]++; + bad++; + } + + if ((*stp)->rule.ptr->max_src_conn_rate.limit && + pf_check_threshold(&sn->conn_rate)) { + pf_status.lcounters[LCNT_SRCCONNRATE]++; + bad++; + } + + if (!bad) + goto done; + + if ((*stp)->rule.ptr->overload_tbl) { + struct pfr_addr p; + u_int32_t killed = 0; + + pf_status.lcounters[LCNT_OVERLOAD_TABLE]++; + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: pf_src_connlimit: blocking address "); + pf_print_host(&sn->addr, 0, + (*stp)->key[PF_SK_WIRE]->af); + } + + memset(&p, 0, sizeof(p)); + p.pfra_af = (*stp)->key[PF_SK_WIRE]->af; + switch ((*stp)->key[PF_SK_WIRE]->af) { + case AF_INET: + p.pfra_net = 32; + p.pfra_ip4addr = sn->addr.v4; + break; +#ifdef INET6 + case AF_INET6: + p.pfra_net = 128; + p.pfra_ip6addr = sn->addr.v6; + break; +#endif /* INET6 */ + } + + pfr_insert_kentry((*stp)->rule.ptr->overload_tbl, + &p, gettime()); + + /* kill existing states if that's required. */ + if ((*stp)->rule.ptr->flush) { + struct pf_state_key *sk; + struct pf_state *st; + + pf_status.lcounters[LCNT_OVERLOAD_FLUSH]++; + PF_STATE_ENTER_READ(); + RBT_FOREACH(st, pf_state_tree_id, &tree_id) { + sk = st->key[PF_SK_WIRE]; + /* + * Kill states from this source. (Only those + * from the same rule if PF_FLUSH_GLOBAL is not + * set) + */ + if (sk->af == + (*stp)->key[PF_SK_WIRE]->af && + (((*stp)->direction == PF_OUT && + PF_AEQ(&sn->addr, &sk->addr[1], sk->af)) || + ((*stp)->direction == PF_IN && + PF_AEQ(&sn->addr, &sk->addr[0], sk->af))) && + ((*stp)->rule.ptr->flush & + PF_FLUSH_GLOBAL || + (*stp)->rule.ptr == st->rule.ptr)) { + pf_update_state_timeout(st, PFTM_PURGE); + pf_set_protostate(st, PF_PEER_BOTH, + TCPS_CLOSED); + killed++; + } + } + PF_STATE_EXIT_READ(); + if (pf_status.debug >= LOG_NOTICE) + addlog(", %u states killed", killed); + } + if (pf_status.debug >= LOG_NOTICE) + addlog("\n"); + } + + /* kill this state */ + pf_update_state_timeout(*stp, PFTM_PURGE); + pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_CLOSED); + + rv = 1; +done: + PF_UNLOCK(); + + return (rv); +} + +int +pf_insert_src_node(struct pf_src_node **sn, struct pf_rule *rule, + enum pf_sn_types type, sa_family_t af, struct pf_addr *src, + struct pf_addr *raddr, struct pfi_kif *kif) +{ + struct pf_src_node k; + + if (*sn == NULL) { + k.af = af; + k.type = type; + pf_addrcpy(&k.addr, src, af); + k.rule.ptr = rule; + pf_status.scounters[SCNT_SRC_NODE_SEARCH]++; + *sn = RB_FIND(pf_src_tree, &tree_src_tracking, &k); + } + if (*sn == NULL) { + if (!rule->max_src_nodes || + rule->src_nodes < rule->max_src_nodes) + (*sn) = pool_get(&pf_src_tree_pl, PR_NOWAIT | PR_ZERO); + else + pf_status.lcounters[LCNT_SRCNODES]++; + if ((*sn) == NULL) + return (-1); + + pf_init_threshold(&(*sn)->conn_rate, + rule->max_src_conn_rate.limit, + rule->max_src_conn_rate.seconds); + + (*sn)->type = type; + (*sn)->af = af; + (*sn)->rule.ptr = rule; + pf_addrcpy(&(*sn)->addr, src, af); + if (raddr) + pf_addrcpy(&(*sn)->raddr, raddr, af); + if (RB_INSERT(pf_src_tree, + &tree_src_tracking, *sn) != NULL) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: src_tree insert failed: "); + pf_print_host(&(*sn)->addr, 0, af); + addlog("\n"); + } + pool_put(&pf_src_tree_pl, *sn); + return (-1); + } + (*sn)->creation = getuptime(); + (*sn)->rule.ptr->src_nodes++; + if (kif != NULL) { + (*sn)->kif = kif; + pfi_kif_ref(kif, PFI_KIF_REF_SRCNODE); + } + pf_status.scounters[SCNT_SRC_NODE_INSERT]++; + pf_status.src_nodes++; + } else { + if (rule->max_src_states && + (*sn)->states >= rule->max_src_states) { + pf_status.lcounters[LCNT_SRCSTATES]++; + return (-1); + } + } + return (0); +} + +void +pf_remove_src_node(struct pf_src_node *sn) +{ + if (sn->states > 0 || sn->expire > getuptime()) + return; + + sn->rule.ptr->src_nodes--; + if (sn->rule.ptr->states_cur == 0 && + sn->rule.ptr->src_nodes == 0) + pf_rm_rule(NULL, sn->rule.ptr); + RB_REMOVE(pf_src_tree, &tree_src_tracking, sn); + pf_status.scounters[SCNT_SRC_NODE_REMOVALS]++; + pf_status.src_nodes--; + pfi_kif_unref(sn->kif, PFI_KIF_REF_SRCNODE); + pool_put(&pf_src_tree_pl, sn); +} + +struct pf_src_node * +pf_get_src_node(struct pf_state *st, enum pf_sn_types type) +{ + struct pf_sn_item *sni; + + SLIST_FOREACH(sni, &st->src_nodes, next) + if (sni->sn->type == type) + return (sni->sn); + return (NULL); +} + +void +pf_state_rm_src_node(struct pf_state *st, struct pf_src_node *sn) +{ + struct pf_sn_item *sni, *snin, *snip = NULL; + + for (sni = SLIST_FIRST(&st->src_nodes); sni; sni = snin) { + snin = SLIST_NEXT(sni, next); + if (sni->sn == sn) { + if (snip) + SLIST_REMOVE_AFTER(snip, next); + else + SLIST_REMOVE_HEAD(&st->src_nodes, next); + pool_put(&pf_sn_item_pl, sni); + sni = NULL; + sn->states--; + } + if (sni != NULL) + snip = sni; + } +} + +/* state table stuff */ + +static inline int +pf_state_compare_key(const struct pf_state_key *a, + const struct pf_state_key *b) +{ + int diff; + + if ((diff = a->hash - b->hash) != 0) + return (diff); + if ((diff = a->proto - b->proto) != 0) + return (diff); + if ((diff = a->af - b->af) != 0) + return (diff); + if ((diff = pf_addr_compare(&a->addr[0], &b->addr[0], a->af)) != 0) + return (diff); + if ((diff = pf_addr_compare(&a->addr[1], &b->addr[1], a->af)) != 0) + return (diff); + if ((diff = a->port[0] - b->port[0]) != 0) + return (diff); + if ((diff = a->port[1] - b->port[1]) != 0) + return (diff); + if ((diff = a->rdomain - b->rdomain) != 0) + return (diff); + return (0); +} + +static inline int +pf_state_compare_id(const struct pf_state *a, const struct pf_state *b) +{ + if (a->id > b->id) + return (1); + if (a->id < b->id) + return (-1); + if (a->creatorid > b->creatorid) + return (1); + if (a->creatorid < b->creatorid) + return (-1); + + return (0); +} + +/* + * on failure, pf_state_key_attach() releases the pf_state_key + * reference and returns NULL. + */ +struct pf_state_key * +pf_state_key_attach(struct pf_state_key *sk, struct pf_state *st, int idx) +{ + struct pf_state_item *si; + struct pf_state_key *cur; + struct pf_state *oldst = NULL; + + PF_ASSERT_LOCKED(); + + KASSERT(st->key[idx] == NULL); + sk->sk_removed = 0; + cur = RBT_INSERT(pf_state_tree, &pf_statetbl, sk); + if (cur != NULL) { + sk->sk_removed = 1; + /* key exists. check for same kif, if none, add to key */ + TAILQ_FOREACH(si, &cur->sk_states, si_entry) { + struct pf_state *sist = si->si_st; + if (sist->kif == st->kif && + ((sist->key[PF_SK_WIRE]->af == sk->af && + sist->direction == st->direction) || + (sist->key[PF_SK_WIRE]->af != + sist->key[PF_SK_STACK]->af && + sk->af == sist->key[PF_SK_STACK]->af && + sist->direction != st->direction))) { + int reuse = 0; + + if (sk->proto == IPPROTO_TCP && + sist->src.state >= TCPS_FIN_WAIT_2 && + sist->dst.state >= TCPS_FIN_WAIT_2) + reuse = 1; + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: %s key attach %s on %s: ", + (idx == PF_SK_WIRE) ? + "wire" : "stack", + reuse ? "reuse" : "failed", + st->kif->pfik_name); + pf_print_state_parts(st, + (idx == PF_SK_WIRE) ? sk : NULL, + (idx == PF_SK_STACK) ? sk : NULL); + addlog(", existing: "); + pf_print_state_parts(sist, + (idx == PF_SK_WIRE) ? sk : NULL, + (idx == PF_SK_STACK) ? sk : NULL); + addlog("\n"); + } + if (reuse) { + pf_set_protostate(sist, PF_PEER_BOTH, + TCPS_CLOSED); + /* remove late or sks can go away */ + oldst = sist; + } else { + pf_state_key_unref(sk); + return (NULL); /* collision! */ + } + } + } + + /* reuse the existing state key */ + pf_state_key_unref(sk); + sk = cur; + } + + if ((si = pool_get(&pf_state_item_pl, PR_NOWAIT)) == NULL) { + if (TAILQ_EMPTY(&sk->sk_states)) { + KASSERT(cur == NULL); + RBT_REMOVE(pf_state_tree, &pf_statetbl, sk); + sk->sk_removed = 1; + pf_state_key_unref(sk); + } + + return (NULL); + } + + st->key[idx] = pf_state_key_ref(sk); /* give a ref to state */ + si->si_st = pf_state_ref(st); + + /* list is sorted, if-bound states before floating */ + if (st->kif == pfi_all) + TAILQ_INSERT_TAIL(&sk->sk_states, si, si_entry); + else + TAILQ_INSERT_HEAD(&sk->sk_states, si, si_entry); + + if (oldst) + pf_remove_state(oldst); + + /* caller owns the pf_state ref, which owns a pf_state_key ref now */ + return (sk); +} + +void +pf_detach_state(struct pf_state *st) +{ + KASSERT(st->key[PF_SK_WIRE] != NULL); + pf_state_key_detach(st, PF_SK_WIRE); + + KASSERT(st->key[PF_SK_STACK] != NULL); + if (st->key[PF_SK_STACK] != st->key[PF_SK_WIRE]) + pf_state_key_detach(st, PF_SK_STACK); +} + +void +pf_state_key_detach(struct pf_state *st, int idx) +{ + struct pf_state_item *si; + struct pf_state_key *sk; + + PF_ASSERT_LOCKED(); + + sk = st->key[idx]; + if (sk == NULL) + return; + + TAILQ_FOREACH(si, &sk->sk_states, si_entry) { + if (si->si_st == st) + break; + } + if (si == NULL) + return; + + TAILQ_REMOVE(&sk->sk_states, si, si_entry); + pool_put(&pf_state_item_pl, si); + + if (TAILQ_EMPTY(&sk->sk_states)) { + RBT_REMOVE(pf_state_tree, &pf_statetbl, sk); + sk->sk_removed = 1; + pf_state_key_unlink_reverse(sk); + pf_state_key_unlink_inpcb(sk); + pf_state_key_unref(sk); + } + + pf_state_unref(st); +} + +struct pf_state_key * +pf_alloc_state_key(int pool_flags) +{ + struct pf_state_key *sk; + + if ((sk = pool_get(&pf_state_key_pl, pool_flags)) == NULL) + return (NULL); + + PF_REF_INIT(sk->sk_refcnt); + TAILQ_INIT(&sk->sk_states); + sk->sk_removed = 1; + + return (sk); +} + +static __inline int +pf_state_key_addr_setup(struct pf_pdesc *pd, void *arg, int sidx, + struct pf_addr *saddr, int didx, struct pf_addr *daddr, int af, int multi) +{ + struct pf_state_key_cmp *key = arg; +#ifdef INET6 + struct pf_addr *target; + + if (af == AF_INET || pd->proto != IPPROTO_ICMPV6) + goto copy; + + switch (pd->hdr.icmp6.icmp6_type) { + case ND_NEIGHBOR_SOLICIT: + if (multi) + return (-1); + target = (struct pf_addr *)&pd->hdr.nd_ns.nd_ns_target; + daddr = target; + break; + case ND_NEIGHBOR_ADVERT: + if (multi) + return (-1); + target = (struct pf_addr *)&pd->hdr.nd_ns.nd_ns_target; + saddr = target; + if (IN6_IS_ADDR_MULTICAST(&pd->dst->v6)) { + key->addr[didx].addr32[0] = 0; + key->addr[didx].addr32[1] = 0; + key->addr[didx].addr32[2] = 0; + key->addr[didx].addr32[3] = 0; + daddr = NULL; /* overwritten */ + } + break; + default: + if (multi) { + key->addr[sidx].addr32[0] = __IPV6_ADDR_INT32_MLL; + key->addr[sidx].addr32[1] = 0; + key->addr[sidx].addr32[2] = 0; + key->addr[sidx].addr32[3] = __IPV6_ADDR_INT32_ONE; + saddr = NULL; /* overwritten */ + } + } + copy: +#endif /* INET6 */ + if (saddr) + pf_addrcpy(&key->addr[sidx], saddr, af); + if (daddr) + pf_addrcpy(&key->addr[didx], daddr, af); + + return (0); +} + +int +pf_state_key_setup(struct pf_pdesc *pd, struct pf_state_key **skw, + struct pf_state_key **sks, int rtableid) +{ + /* if returning error we MUST pool_put state keys ourselves */ + struct pf_state_key *sk1, *sk2; + u_int wrdom = pd->rdomain; + int afto = pd->af != pd->naf; + + if ((sk1 = pf_alloc_state_key(PR_NOWAIT | PR_ZERO)) == NULL) + return (ENOMEM); + + pf_state_key_addr_setup(pd, sk1, pd->sidx, pd->src, pd->didx, pd->dst, + pd->af, 0); + sk1->port[pd->sidx] = pd->osport; + sk1->port[pd->didx] = pd->odport; + sk1->proto = pd->proto; + sk1->af = pd->af; + sk1->rdomain = pd->rdomain; + sk1->hash = pf_pkt_hash(sk1->af, sk1->proto, + &sk1->addr[0], &sk1->addr[1], sk1->port[0], sk1->port[1]); + if (rtableid >= 0) + wrdom = rtable_l2(rtableid); + + if (PF_ANEQ(&pd->nsaddr, pd->src, pd->af) || + PF_ANEQ(&pd->ndaddr, pd->dst, pd->af) || + pd->nsport != pd->osport || pd->ndport != pd->odport || + wrdom != pd->rdomain || afto) { /* NAT/NAT64 */ + if ((sk2 = pf_alloc_state_key(PR_NOWAIT | PR_ZERO)) == NULL) { + pf_state_key_unref(sk1); + return (ENOMEM); + } + pf_state_key_addr_setup(pd, sk2, afto ? pd->didx : pd->sidx, + &pd->nsaddr, afto ? pd->sidx : pd->didx, &pd->ndaddr, + pd->naf, 0); + sk2->port[afto ? pd->didx : pd->sidx] = pd->nsport; + sk2->port[afto ? pd->sidx : pd->didx] = pd->ndport; + if (afto) { + switch (pd->proto) { + case IPPROTO_ICMP: + sk2->proto = IPPROTO_ICMPV6; + break; + case IPPROTO_ICMPV6: + sk2->proto = IPPROTO_ICMP; + break; + default: + sk2->proto = pd->proto; + } + } else + sk2->proto = pd->proto; + sk2->af = pd->naf; + sk2->rdomain = wrdom; + sk2->hash = pf_pkt_hash(sk2->af, sk2->proto, + &sk2->addr[0], &sk2->addr[1], sk2->port[0], sk2->port[1]); + } else + sk2 = pf_state_key_ref(sk1); + + if (pd->dir == PF_IN) { + *skw = sk1; + *sks = sk2; + } else { + *sks = sk1; + *skw = sk2; + } + + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, "pf: key setup: "); + pf_print_state_parts(NULL, *skw, *sks); + addlog("\n"); + } + + return (0); +} + +/* + * pf_state_insert() does the following: + * - links the pf_state up with pf_state_key(s). + * - inserts the pf_state_keys into pf_state_tree. + * - inserts the pf_state into the into pf_state_tree_id. + * - tells pfsync about the state. + * + * pf_state_insert() owns the references to the pf_state_key structs + * it is given. on failure to insert, these references are released. + * on success, the caller owns a pf_state reference that allows it + * to access the state keys. + */ + +int +pf_state_insert(struct pfi_kif *kif, struct pf_state_key **skwp, + struct pf_state_key **sksp, struct pf_state *st) +{ + struct pf_state_key *skw = *skwp; + struct pf_state_key *sks = *sksp; + int same = (skw == sks); + + PF_ASSERT_LOCKED(); + + st->kif = kif; + PF_STATE_ENTER_WRITE(); + + skw = pf_state_key_attach(skw, st, PF_SK_WIRE); + if (skw == NULL) { + pf_state_key_unref(sks); + PF_STATE_EXIT_WRITE(); + return (-1); + } + + if (same) { + /* pf_state_key_attach might have swapped skw */ + if (skw != sks) { + pf_state_key_unref(sks); + sks = pf_state_key_ref(skw); + } + st->key[PF_SK_STACK] = sks; + } else if (pf_state_key_attach(sks, st, PF_SK_STACK) == NULL) { + pf_state_key_detach(st, PF_SK_WIRE); + PF_STATE_EXIT_WRITE(); + return (-1); + } + + if (st->id == 0 && st->creatorid == 0) { + st->id = htobe64(pf_status.stateid++); + st->creatorid = pf_status.hostid; + } + if (RBT_INSERT(pf_state_tree_id, &tree_id, st) != NULL) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, "pf: state insert failed: " + "id: %016llx creatorid: %08x", + betoh64(st->id), ntohl(st->creatorid)); + addlog("\n"); + } + pf_detach_state(st); + PF_STATE_EXIT_WRITE(); + return (-1); + } + pf_state_list_insert(&pf_state_list, st); + counters_inc(pf_status_fcounters, FCNT_STATE_INSERT); + pf_status.states++; + pfi_kif_ref(kif, PFI_KIF_REF_STATE); + PF_STATE_EXIT_WRITE(); + +#if NPFSYNC > 0 + pfsync_insert_state(st); +#endif /* NPFSYNC > 0 */ + + *skwp = skw; + *sksp = sks; + + return (0); +} + +struct pf_state * +pf_find_state_byid(struct pf_state_cmp *key) +{ + counters_inc(pf_status_fcounters, FCNT_STATE_SEARCH); + + return (RBT_FIND(pf_state_tree_id, &tree_id, (struct pf_state *)key)); +} + +int +pf_compare_state_keys(struct pf_state_key *a, struct pf_state_key *b, + struct pfi_kif *kif, u_int dir) +{ + /* a (from hdr) and b (new) must be exact opposites of each other */ + if (a->af == b->af && a->proto == b->proto && + PF_AEQ(&a->addr[0], &b->addr[1], a->af) && + PF_AEQ(&a->addr[1], &b->addr[0], a->af) && + a->port[0] == b->port[1] && + a->port[1] == b->port[0] && a->rdomain == b->rdomain) + return (0); + else { + /* mismatch. must not happen. */ + if (pf_status.debug >= LOG_ERR) { + log(LOG_ERR, + "pf: state key linking mismatch! dir=%s, " + "if=%s, stored af=%u, a0: ", + dir == PF_OUT ? "OUT" : "IN", + kif->pfik_name, a->af); + pf_print_host(&a->addr[0], a->port[0], a->af); + addlog(", a1: "); + pf_print_host(&a->addr[1], a->port[1], a->af); + addlog(", proto=%u", a->proto); + addlog(", found af=%u, a0: ", b->af); + pf_print_host(&b->addr[0], b->port[0], b->af); + addlog(", a1: "); + pf_print_host(&b->addr[1], b->port[1], b->af); + addlog(", proto=%u", b->proto); + addlog("\n"); + } + return (-1); + } +} + +int +pf_find_state(struct pf_pdesc *pd, struct pf_state_key_cmp *key, + struct pf_state **stp) +{ + struct pf_state_key *sk, *pkt_sk; + struct pf_state_item *si; + struct pf_state *st = NULL; + int didx; + + counters_inc(pf_status_fcounters, FCNT_STATE_SEARCH); + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, "pf: key search, %s on %s: ", + pd->dir == PF_OUT ? "out" : "in", pd->kif->pfik_name); + pf_print_state_parts(NULL, (struct pf_state_key *)key, NULL); + addlog("\n"); + } + + pkt_sk = NULL; + sk = NULL; + if (pd->dir == PF_OUT) { + /* first if block deals with outbound forwarded packet */ + pkt_sk = pd->m->m_pkthdr.pf.statekey; + + if (!pf_state_key_isvalid(pkt_sk)) { + pf_mbuf_unlink_state_key(pd->m); + pkt_sk = NULL; + } + + if (pkt_sk && pf_state_key_isvalid(pkt_sk->sk_reverse)) + sk = pkt_sk->sk_reverse; + + if (pkt_sk == NULL) { + struct inpcb *inp = pd->m->m_pkthdr.pf.inp; + + /* here we deal with local outbound packet */ + if (inp != NULL) { + struct pf_state_key *inp_sk; + + mtx_enter(&pf_inp_mtx); + inp_sk = inp->inp_pf_sk; + if (pf_state_key_isvalid(inp_sk)) { + sk = inp_sk; + mtx_leave(&pf_inp_mtx); + } else if (inp_sk != NULL) { + KASSERT(inp_sk->sk_inp == inp); + inp_sk->sk_inp = NULL; + inp->inp_pf_sk = NULL; + mtx_leave(&pf_inp_mtx); + + pf_state_key_unref(inp_sk); + in_pcbunref(inp); + } else + mtx_leave(&pf_inp_mtx); + } + } + } + + if (sk == NULL) { + if ((sk = RBT_FIND(pf_state_tree, &pf_statetbl, + (struct pf_state_key *)key)) == NULL) + return (PF_DROP); + if (pd->dir == PF_OUT && pkt_sk && + pf_compare_state_keys(pkt_sk, sk, pd->kif, pd->dir) == 0) + pf_state_key_link_reverse(sk, pkt_sk); + else if (pd->dir == PF_OUT) + pf_state_key_link_inpcb(sk, pd->m->m_pkthdr.pf.inp); + } + + /* remove firewall data from outbound packet */ + if (pd->dir == PF_OUT) + pf_pkt_addr_changed(pd->m); + + didx = (pd->dir == PF_IN) ? PF_SK_WIRE : PF_SK_STACK; + + /* list is sorted, if-bound states before floating ones */ + TAILQ_FOREACH(si, &sk->sk_states, si_entry) { + struct pf_state *sist = si->si_st; + if (sist->timeout == PFTM_PURGE) + continue; + if (sist->kif != pfi_all && sist->kif != pd->kif) + continue; + + /* af-to needs to handled specially */ + if (sist->key[PF_SK_WIRE]->af == sist->key[PF_SK_STACK]->af) { + if (sk != sist->key[didx]) + continue; + + /* af-to case */ + } else { + /* + * af-to creates state for incoming (PF_IN) + * connections, and then forces forwarding without + * creating an outgoing state. this means the one + * state covers both sides of the stack, so should + * only match when pd dir is PF_IN. + */ + if (pd->dir != PF_IN) + continue; + + /* one of the st keys has to be sk */ + } + + st = sist; + break; + } + + if (st == NULL) + return (PF_DROP); + if (ISSET(st->state_flags, PFSTATE_INP_UNLINKED)) + return (PF_DROP); + + if (st->rule.ptr->pktrate.limit && pd->dir == st->direction) { + pf_add_threshold(&st->rule.ptr->pktrate); + if (pf_check_threshold(&st->rule.ptr->pktrate)) + return (PF_DROP); + } + + *stp = st; + + return (PF_MATCH); +} + +struct pf_state * +pf_find_state_all(struct pf_state_key_cmp *key, u_int dir, int *more) +{ + struct pf_state_key *sk; + struct pf_state_item *si, *ret = NULL; + + counters_inc(pf_status_fcounters, FCNT_STATE_SEARCH); + + sk = RBT_FIND(pf_state_tree, &pf_statetbl, (struct pf_state_key *)key); + + if (sk != NULL) { + TAILQ_FOREACH(si, &sk->sk_states, si_entry) { + struct pf_state *sist = si->si_st; + if (dir == PF_INOUT || + (sk == (dir == PF_IN ? sist->key[PF_SK_WIRE] : + sist->key[PF_SK_STACK]))) { + if (more == NULL) + return (sist); + + if (ret) + (*more)++; + else + ret = si; + } + } + } + return (ret ? ret->si_st : NULL); +} + +void +pf_state_peer_hton(const struct pf_state_peer *s, struct pfsync_state_peer *d) +{ + d->seqlo = htonl(s->seqlo); + d->seqhi = htonl(s->seqhi); + d->seqdiff = htonl(s->seqdiff); + d->max_win = htons(s->max_win); + d->mss = htons(s->mss); + d->state = s->state; + d->wscale = s->wscale; + if (s->scrub) { + d->scrub.pfss_flags = + htons(s->scrub->pfss_flags & PFSS_TIMESTAMP); + d->scrub.pfss_ttl = (s)->scrub->pfss_ttl; + d->scrub.pfss_ts_mod = htonl((s)->scrub->pfss_ts_mod); + d->scrub.scrub_flag = PFSYNC_SCRUB_FLAG_VALID; + } +} + +void +pf_state_peer_ntoh(const struct pfsync_state_peer *s, struct pf_state_peer *d) +{ + d->seqlo = ntohl(s->seqlo); + d->seqhi = ntohl(s->seqhi); + d->seqdiff = ntohl(s->seqdiff); + d->max_win = ntohs(s->max_win); + d->mss = ntohs(s->mss); + d->state = s->state; + d->wscale = s->wscale; + if (s->scrub.scrub_flag == PFSYNC_SCRUB_FLAG_VALID && + d->scrub != NULL) { + d->scrub->pfss_flags = + ntohs(s->scrub.pfss_flags) & PFSS_TIMESTAMP; + d->scrub->pfss_ttl = s->scrub.pfss_ttl; + d->scrub->pfss_ts_mod = ntohl(s->scrub.pfss_ts_mod); + } +} + +void +pf_state_export(struct pfsync_state *sp, struct pf_state *st) +{ + int32_t expire; + + memset(sp, 0, sizeof(struct pfsync_state)); + + /* copy from state key */ + sp->key[PF_SK_WIRE].addr[0] = st->key[PF_SK_WIRE]->addr[0]; + sp->key[PF_SK_WIRE].addr[1] = st->key[PF_SK_WIRE]->addr[1]; + sp->key[PF_SK_WIRE].port[0] = st->key[PF_SK_WIRE]->port[0]; + sp->key[PF_SK_WIRE].port[1] = st->key[PF_SK_WIRE]->port[1]; + sp->key[PF_SK_WIRE].rdomain = htons(st->key[PF_SK_WIRE]->rdomain); + sp->key[PF_SK_WIRE].af = st->key[PF_SK_WIRE]->af; + sp->key[PF_SK_STACK].addr[0] = st->key[PF_SK_STACK]->addr[0]; + sp->key[PF_SK_STACK].addr[1] = st->key[PF_SK_STACK]->addr[1]; + sp->key[PF_SK_STACK].port[0] = st->key[PF_SK_STACK]->port[0]; + sp->key[PF_SK_STACK].port[1] = st->key[PF_SK_STACK]->port[1]; + sp->key[PF_SK_STACK].rdomain = htons(st->key[PF_SK_STACK]->rdomain); + sp->key[PF_SK_STACK].af = st->key[PF_SK_STACK]->af; + sp->rtableid[PF_SK_WIRE] = htonl(st->rtableid[PF_SK_WIRE]); + sp->rtableid[PF_SK_STACK] = htonl(st->rtableid[PF_SK_STACK]); + sp->proto = st->key[PF_SK_WIRE]->proto; + sp->af = st->key[PF_SK_WIRE]->af; + + /* copy from state */ + strlcpy(sp->ifname, st->kif->pfik_name, sizeof(sp->ifname)); + sp->rt = st->rt; + sp->rt_addr = st->rt_addr; + sp->creation = htonl(getuptime() - st->creation); + expire = pf_state_expires(st, st->timeout); + if (expire <= getuptime()) + sp->expire = htonl(0); + else + sp->expire = htonl(expire - getuptime()); + + sp->direction = st->direction; +#if NPFLOG > 0 + sp->log = st->log; +#endif /* NPFLOG > 0 */ + sp->timeout = st->timeout; + sp->state_flags = htons(st->state_flags); + if (READ_ONCE(st->sync_defer) != NULL) + sp->state_flags |= htons(PFSTATE_ACK); + if (!SLIST_EMPTY(&st->src_nodes)) + sp->sync_flags |= PFSYNC_FLAG_SRCNODE; + + sp->id = st->id; + sp->creatorid = st->creatorid; + pf_state_peer_hton(&st->src, &sp->src); + pf_state_peer_hton(&st->dst, &sp->dst); + + if (st->rule.ptr == NULL) + sp->rule = htonl(-1); + else + sp->rule = htonl(st->rule.ptr->nr); + if (st->anchor.ptr == NULL) + sp->anchor = htonl(-1); + else + sp->anchor = htonl(st->anchor.ptr->nr); + sp->nat_rule = htonl(-1); /* left for compat, nat_rule is gone */ + + pf_state_counter_hton(st->packets[0], sp->packets[0]); + pf_state_counter_hton(st->packets[1], sp->packets[1]); + pf_state_counter_hton(st->bytes[0], sp->bytes[0]); + pf_state_counter_hton(st->bytes[1], sp->bytes[1]); + + sp->max_mss = htons(st->max_mss); + sp->min_ttl = st->min_ttl; + sp->set_tos = st->set_tos; + sp->set_prio[0] = st->set_prio[0]; + sp->set_prio[1] = st->set_prio[1]; +} + +int +pf_state_alloc_scrub_memory(const struct pfsync_state_peer *s, + struct pf_state_peer *d) +{ + if (s->scrub.scrub_flag && d->scrub == NULL) + return (pf_normalize_tcp_alloc(d)); + + return (0); +} + +#if NPFSYNC > 0 +int +pf_state_import(const struct pfsync_state *sp, int flags) +{ + struct pf_state *st = NULL; + struct pf_state_key *skw = NULL, *sks = NULL; + struct pf_rule *r = NULL; + struct pfi_kif *kif; + int pool_flags; + int error = ENOMEM; + int n = 0; + + PF_ASSERT_LOCKED(); + + if (sp->creatorid == 0) { + DPFPRINTF(LOG_NOTICE, "%s: invalid creator id: %08x", __func__, + ntohl(sp->creatorid)); + return (EINVAL); + } + + if ((kif = pfi_kif_get(sp->ifname, NULL)) == NULL) { + DPFPRINTF(LOG_NOTICE, "%s: unknown interface: %s", __func__, + sp->ifname); + if (flags & PFSYNC_SI_IOCTL) + return (EINVAL); + return (0); /* skip this state */ + } + + if (sp->af == 0) + return (0); /* skip this state */ + + /* + * If the ruleset checksums match or the state is coming from the ioctl, + * it's safe to associate the state with the rule of that number. + */ + if (sp->rule != htonl(-1) && sp->anchor == htonl(-1) && + (flags & (PFSYNC_SI_IOCTL | PFSYNC_SI_CKSUM)) && + ntohl(sp->rule) < pf_main_ruleset.rules.active.rcount) { + TAILQ_FOREACH(r, pf_main_ruleset.rules.active.ptr, entries) + if (ntohl(sp->rule) == n++) + break; + } else + r = &pf_default_rule; + + if ((r->max_states && r->states_cur >= r->max_states)) + goto cleanup; + + if (flags & PFSYNC_SI_IOCTL) + pool_flags = PR_WAITOK | PR_LIMITFAIL | PR_ZERO; + else + pool_flags = PR_NOWAIT | PR_LIMITFAIL | PR_ZERO; + + if ((st = pool_get(&pf_state_pl, pool_flags)) == NULL) + goto cleanup; + + if ((skw = pf_alloc_state_key(pool_flags)) == NULL) + goto cleanup; + + if ((sp->key[PF_SK_WIRE].af && + (sp->key[PF_SK_WIRE].af != sp->key[PF_SK_STACK].af)) || + PF_ANEQ(&sp->key[PF_SK_WIRE].addr[0], + &sp->key[PF_SK_STACK].addr[0], sp->af) || + PF_ANEQ(&sp->key[PF_SK_WIRE].addr[1], + &sp->key[PF_SK_STACK].addr[1], sp->af) || + sp->key[PF_SK_WIRE].port[0] != sp->key[PF_SK_STACK].port[0] || + sp->key[PF_SK_WIRE].port[1] != sp->key[PF_SK_STACK].port[1] || + sp->key[PF_SK_WIRE].rdomain != sp->key[PF_SK_STACK].rdomain) { + if ((sks = pf_alloc_state_key(pool_flags)) == NULL) + goto cleanup; + } else + sks = pf_state_key_ref(skw); + + /* allocate memory for scrub info */ + if (pf_state_alloc_scrub_memory(&sp->src, &st->src) || + pf_state_alloc_scrub_memory(&sp->dst, &st->dst)) + goto cleanup; + + /* copy to state key(s) */ + skw->addr[0] = sp->key[PF_SK_WIRE].addr[0]; + skw->addr[1] = sp->key[PF_SK_WIRE].addr[1]; + skw->port[0] = sp->key[PF_SK_WIRE].port[0]; + skw->port[1] = sp->key[PF_SK_WIRE].port[1]; + skw->rdomain = ntohs(sp->key[PF_SK_WIRE].rdomain); + skw->proto = sp->proto; + if (!(skw->af = sp->key[PF_SK_WIRE].af)) + skw->af = sp->af; + skw->hash = pf_pkt_hash(skw->af, skw->proto, + &skw->addr[0], &skw->addr[1], skw->port[0], skw->port[1]); + + if (sks != skw) { + sks->addr[0] = sp->key[PF_SK_STACK].addr[0]; + sks->addr[1] = sp->key[PF_SK_STACK].addr[1]; + sks->port[0] = sp->key[PF_SK_STACK].port[0]; + sks->port[1] = sp->key[PF_SK_STACK].port[1]; + sks->rdomain = ntohs(sp->key[PF_SK_STACK].rdomain); + if (!(sks->af = sp->key[PF_SK_STACK].af)) + sks->af = sp->af; + if (sks->af != skw->af) { + switch (sp->proto) { + case IPPROTO_ICMP: + sks->proto = IPPROTO_ICMPV6; + break; + case IPPROTO_ICMPV6: + sks->proto = IPPROTO_ICMP; + break; + default: + sks->proto = sp->proto; + } + } else + sks->proto = sp->proto; + + if (((sks->af != AF_INET) && (sks->af != AF_INET6)) || + ((skw->af != AF_INET) && (skw->af != AF_INET6))) { + error = EINVAL; + goto cleanup; + } + + sks->hash = pf_pkt_hash(sks->af, sks->proto, + &sks->addr[0], &sks->addr[1], sks->port[0], sks->port[1]); + + } else if ((sks->af != AF_INET) && (sks->af != AF_INET6)) { + error = EINVAL; + goto cleanup; + } + st->rtableid[PF_SK_WIRE] = ntohl(sp->rtableid[PF_SK_WIRE]); + st->rtableid[PF_SK_STACK] = ntohl(sp->rtableid[PF_SK_STACK]); + + /* copy to state */ + st->rt_addr = sp->rt_addr; + st->rt = sp->rt; + st->creation = getuptime() - ntohl(sp->creation); + st->expire = getuptime(); + if (ntohl(sp->expire)) { + u_int32_t timeout; + + timeout = r->timeout[sp->timeout]; + if (!timeout) + timeout = pf_default_rule.timeout[sp->timeout]; + + /* sp->expire may have been adaptively scaled by export. */ + st->expire -= timeout - ntohl(sp->expire); + } + + st->direction = sp->direction; + st->log = sp->log; + st->timeout = sp->timeout; + st->state_flags = ntohs(sp->state_flags); + st->max_mss = ntohs(sp->max_mss); + st->min_ttl = sp->min_ttl; + st->set_tos = sp->set_tos; + st->set_prio[0] = sp->set_prio[0]; + st->set_prio[1] = sp->set_prio[1]; + + st->id = sp->id; + st->creatorid = sp->creatorid; + pf_state_peer_ntoh(&sp->src, &st->src); + pf_state_peer_ntoh(&sp->dst, &st->dst); + + st->rule.ptr = r; + st->anchor.ptr = NULL; + + PF_REF_INIT(st->refcnt); + mtx_init(&st->mtx, IPL_NET); + + /* XXX when we have anchors, use STATE_INC_COUNTERS */ + r->states_cur++; + r->states_tot++; + + st->sync_state = PFSYNC_S_NONE; + st->pfsync_time = getuptime(); +#if NPFSYNC > 0 + pfsync_init_state(st, skw, sks, flags); +#endif + + if (pf_state_insert(kif, &skw, &sks, st) != 0) { + /* XXX when we have anchors, use STATE_DEC_COUNTERS */ + r->states_cur--; + error = EEXIST; + goto cleanup_state; + } + + return (0); + + cleanup: + if (skw != NULL) + pf_state_key_unref(skw); + if (sks != NULL) + pf_state_key_unref(sks); + + cleanup_state: /* pf_state_insert frees the state keys */ + if (st) { + if (st->dst.scrub) + pool_put(&pf_state_scrub_pl, st->dst.scrub); + if (st->src.scrub) + pool_put(&pf_state_scrub_pl, st->src.scrub); + pool_put(&pf_state_pl, st); + } + return (error); +} +#endif /* NPFSYNC > 0 */ + +/* END state table stuff */ + +void pf_purge_states(void *); +struct task pf_purge_states_task = + TASK_INITIALIZER(pf_purge_states, NULL); + +void pf_purge_states_tick(void *); +struct timeout pf_purge_states_to = + TIMEOUT_INITIALIZER(pf_purge_states_tick, NULL); + +unsigned int pf_purge_expired_states(unsigned int, unsigned int); + +/* + * how many states to scan this interval. + * + * this is set when the timeout fires, and reduced by the task. the + * task will reschedule itself until the limit is reduced to zero, + * and then it adds the timeout again. + */ +unsigned int pf_purge_states_limit; + +/* + * limit how many states are processed with locks held per run of + * the state purge task. + */ +unsigned int pf_purge_states_collect = 64; + + void +pf_purge_states_tick(void *null) + { + unsigned int limit = pf_status.states; + unsigned int interval = pf_default_rule.timeout[PFTM_INTERVAL]; + + if (limit == 0) { + timeout_add_sec(&pf_purge_states_to, 1); + return; + } + + /* + * process a fraction of the state table every second + */ + + if (interval > 1) + limit /= interval; + + pf_purge_states_limit = limit; + task_add(systqmp, &pf_purge_states_task); +} + +void +pf_purge_states(void *null) +{ + unsigned int limit; + unsigned int scanned; + + limit = pf_purge_states_limit; + if (limit < pf_purge_states_collect) + limit = pf_purge_states_collect; + + scanned = pf_purge_expired_states(limit, pf_purge_states_collect); + if (scanned >= pf_purge_states_limit) { + /* we've run out of states to scan this "interval" */ + timeout_add_sec(&pf_purge_states_to, 1); + return; + } + + pf_purge_states_limit -= scanned; + task_add(systqmp, &pf_purge_states_task); +} + +void pf_purge_tick(void *); +struct timeout pf_purge_to = + TIMEOUT_INITIALIZER(pf_purge_tick, NULL); + +void pf_purge(void *); +struct task pf_purge_task = + TASK_INITIALIZER(pf_purge, NULL); + +void +pf_purge_tick(void *null) +{ + task_add(systqmp, &pf_purge_task); +} + +void +pf_purge(void *null) +{ + unsigned int interval = max(1, pf_default_rule.timeout[PFTM_INTERVAL]); + + PF_LOCK(); + + pf_purge_expired_src_nodes(); + pf_source_purge(); + + PF_UNLOCK(); + + /* + * Fragments don't require PF_LOCK(), they use their own lock. + */ + pf_purge_expired_fragments(); + + /* interpret the interval as idle time between runs */ + timeout_add_sec(&pf_purge_to, interval); +} + +int32_t +pf_state_expires(const struct pf_state *st, uint8_t stimeout) +{ + u_int32_t timeout; + u_int32_t start; + u_int32_t end; + u_int32_t states; + + /* + * pf_state_expires is used by the state purge task to + * decide if a state is a candidate for cleanup, and by the + * pfsync state export code to populate an expiry time. + * + * this function may be called by the state purge task while + * the state is being modified. avoid inconsistent reads of + * state->timeout by having the caller do the read (and any + * checks it needs to do on the same variable) and then pass + * their view of the timeout in here for this function to use. + * the only consequence of using a stale timeout value is + * that the state won't be a candidate for purging until the + * next pass of the purge task. + */ + + /* handle all PFTM_* >= PFTM_MAX here */ + if (stimeout >= PFTM_MAX) + return (0); + + KASSERT(stimeout < PFTM_MAX); + + timeout = st->rule.ptr->timeout[stimeout]; + if (!timeout) + timeout = pf_default_rule.timeout[stimeout]; + + start = st->rule.ptr->timeout[PFTM_ADAPTIVE_START]; + if (start) { + end = st->rule.ptr->timeout[PFTM_ADAPTIVE_END]; + states = st->rule.ptr->states_cur; + } else { + start = pf_default_rule.timeout[PFTM_ADAPTIVE_START]; + end = pf_default_rule.timeout[PFTM_ADAPTIVE_END]; + states = pf_status.states; + } + if (end && states > start && start < end) { + if (states >= end) + return (0); + + timeout = (u_int64_t)timeout * (end - states) / (end - start); + } + + return (st->expire + timeout); +} + +void +pf_purge_expired_src_nodes(void) +{ + struct pf_src_node *cur, *next; + + PF_ASSERT_LOCKED(); + + RB_FOREACH_SAFE(cur, pf_src_tree, &tree_src_tracking, next) { + if (cur->states == 0 && cur->expire <= getuptime()) { + pf_remove_src_node(cur); + } + } +} + +void +pf_src_tree_remove_state(struct pf_state *st) +{ + u_int32_t timeout; + struct pf_sn_item *sni; + + while ((sni = SLIST_FIRST(&st->src_nodes)) != NULL) { + SLIST_REMOVE_HEAD(&st->src_nodes, next); + if (st->src.tcp_est) + atomic_dec_int(&sni->sn->conn); + if (--sni->sn->states == 0) { + timeout = st->rule.ptr->timeout[PFTM_SRC_NODE]; + if (!timeout) + timeout = + pf_default_rule.timeout[PFTM_SRC_NODE]; + sni->sn->expire = getuptime() + timeout; + } + pool_put(&pf_sn_item_pl, sni); + } +} + +void +pf_remove_state(struct pf_state *st) +{ + struct pf_state_link *pfl; + + PF_ASSERT_LOCKED(); + + mtx_enter(&st->mtx); + if (st->timeout == PFTM_UNLINKED) { + mtx_leave(&st->mtx); + return; + } + st->timeout = PFTM_UNLINKED; + mtx_leave(&st->mtx); + + /* handle load balancing related tasks */ + pf_postprocess_addr(st); + + if (st->src.state == PF_TCPS_PROXY_DST) { + pf_send_tcp(st->rule.ptr, st->key[PF_SK_WIRE]->af, + &st->key[PF_SK_WIRE]->addr[1], + &st->key[PF_SK_WIRE]->addr[0], + st->key[PF_SK_WIRE]->port[1], + st->key[PF_SK_WIRE]->port[0], + st->src.seqhi, st->src.seqlo + 1, + TH_RST|TH_ACK, 0, 0, 0, 1, st->tag, + st->key[PF_SK_WIRE]->rdomain, NULL); + } + if (st->key[PF_SK_STACK]->proto == IPPROTO_TCP) + pf_set_protostate(st, PF_PEER_BOTH, TCPS_CLOSED); + + while ((pfl = SLIST_FIRST(&st->linkage)) != NULL) { + struct pf_state_link_list *list; + unsigned int gen; + + SLIST_REMOVE_HEAD(&st->linkage, pfl_linkage); + + switch (pfl->pfl_type) { + case PF_STATE_LINK_TYPE_STATELIM: { + struct pf_statelim *stlim; + + stlim = pf_statelim_find(st->statelim); + KASSERTMSG(stlim != NULL, + "pf_state %p pfl %p cannot find statelim %u", + st, pfl, st->statelim); + + gen = pf_statelim_enter(stlim); + stlim->pfstlim_inuse--; + pf_statelim_leave(stlim, gen); + + list = &stlim->pfstlim_states; + break; + } + case PF_STATE_LINK_TYPE_SOURCELIM: { + struct pf_sourcelim *srlim; + struct pf_source key, *sr; + int sidx, kidx; + + if (st->direction == PF_IN) { + sidx = 0; + kidx = PF_SK_WIRE; + } else { + sidx = 1; + kidx = PF_SK_STACK; + } + srlim = pf_sourcelim_find(st->sourcelim); + KASSERTMSG(srlim != NULL, + "pf_state %p pfl %p cannot find sourcelim %u", + st, pfl, st->sourcelim); + + pf_source_key(srlim, &key, + st->key[kidx]->af, + st->key[kidx]->rdomain, + &st->key[kidx]->addr[sidx]); + + sr = pf_source_find(srlim, &key); + KASSERTMSG(sr != NULL, + "pf_state %p pfl %p cannot find source in %u", + st, pfl, st->sourcelim); + + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_counters.inuse--; + pf_sourcelim_leave(srlim, gen); + pf_source_rele(sr); + + list = &sr->pfsr_states; + break; + } + default: + panic("%s: unexpected link type on pfl %p", + __func__, pfl); + } + + PF_STATE_ASSERT_LOCKED(); + TAILQ_REMOVE(list, pfl, pfl_link); + pool_put(&pf_state_link_pl, pfl); + } + + RBT_REMOVE(pf_state_tree_id, &tree_id, st); +#if NPFLOW > 0 + if (st->state_flags & PFSTATE_PFLOW) + export_pflow(st); +#endif /* NPFLOW > 0 */ +#if NPFSYNC > 0 + pfsync_delete_state(st); +#endif /* NPFSYNC > 0 */ + pf_src_tree_remove_state(st); + pf_detach_state(st); +} + +void +pf_remove_divert_state(struct inpcb *inp) +{ + struct pf_state_key *sk; + struct pf_state_item *si; + + PF_ASSERT_UNLOCKED(); + + if (READ_ONCE(inp->inp_pf_sk) == NULL) + return; + + mtx_enter(&pf_inp_mtx); + sk = pf_state_key_ref(inp->inp_pf_sk); + mtx_leave(&pf_inp_mtx); + if (sk == NULL) + return; + + PF_LOCK(); + PF_STATE_ENTER_WRITE(); + TAILQ_FOREACH(si, &sk->sk_states, si_entry) { + struct pf_state *sist = si->si_st; + if (sk == sist->key[PF_SK_STACK] && sist->rule.ptr && + (sist->rule.ptr->divert.type == PF_DIVERT_TO || + sist->rule.ptr->divert.type == PF_DIVERT_REPLY)) { + if (sist->key[PF_SK_STACK]->proto == IPPROTO_TCP && + sist->key[PF_SK_WIRE] != sist->key[PF_SK_STACK]) { + /* + * If the local address is translated, keep + * the state for "tcp.closed" seconds to + * prevent its source port from being reused. + */ + if (sist->src.state < TCPS_FIN_WAIT_2 || + sist->dst.state < TCPS_FIN_WAIT_2) { + pf_set_protostate(sist, PF_PEER_BOTH, + TCPS_TIME_WAIT); + pf_update_state_timeout(sist, + PFTM_TCP_CLOSED); + sist->expire = getuptime(); + } + sist->state_flags |= PFSTATE_INP_UNLINKED; + } else + pf_remove_state(sist); + break; + } + } + PF_STATE_EXIT_WRITE(); + PF_UNLOCK(); + + pf_state_key_unref(sk); +} + +void +pf_free_state(struct pf_state *st) +{ + struct pf_rule_item *ri; + + PF_ASSERT_LOCKED(); + +#if NPFSYNC > 0 + if (pfsync_state_in_use(st)) + return; +#endif /* NPFSYNC > 0 */ + + KASSERT(st->timeout == PFTM_UNLINKED); + if (--st->rule.ptr->states_cur == 0 && + st->rule.ptr->src_nodes == 0) + pf_rm_rule(NULL, st->rule.ptr); + if (st->anchor.ptr != NULL) + if (--st->anchor.ptr->states_cur == 0) + pf_rm_rule(NULL, st->anchor.ptr); + while ((ri = SLIST_FIRST(&st->match_rules))) { + SLIST_REMOVE_HEAD(&st->match_rules, entry); + if (--ri->r->states_cur == 0 && + ri->r->src_nodes == 0) + pf_rm_rule(NULL, ri->r); + pool_put(&pf_rule_item_pl, ri); + } + pf_normalize_tcp_cleanup(st); + pfi_kif_unref(st->kif, PFI_KIF_REF_STATE); + pf_state_list_remove(&pf_state_list, st); + if (st->tag) + pf_tag_unref(st->tag); + pf_state_unref(st); + counters_inc(pf_status_fcounters, FCNT_STATE_REMOVALS); + pf_status.states--; +} + +unsigned int +pf_purge_expired_states(const unsigned int limit, const unsigned int collect) +{ + /* + * this task/thread/context/whatever is the only thing that + * removes states from the pf_state_list, so the cur reference + * it holds between calls is guaranteed to still be in the + * list. + */ + static struct pf_state *cur = NULL; + + struct pf_state *head, *tail; + struct pf_state *st; + SLIST_HEAD(pf_state_gcl, pf_state) gcl = SLIST_HEAD_INITIALIZER(gcl); + time_t now; + unsigned int scanned; + unsigned int collected = 0; + + PF_ASSERT_UNLOCKED(); + + rw_enter_read(&pf_state_list.pfs_rwl); + + mtx_enter(&pf_state_list.pfs_mtx); + head = TAILQ_FIRST(&pf_state_list.pfs_list); + tail = TAILQ_LAST(&pf_state_list.pfs_list, pf_state_queue); + mtx_leave(&pf_state_list.pfs_mtx); + + if (head == NULL) { + /* the list is empty */ + rw_exit_read(&pf_state_list.pfs_rwl); + return (limit); + } + + /* (re)start at the front of the list */ + if (cur == NULL) + cur = head; + + now = getuptime(); + + for (scanned = 0; scanned < limit; scanned++) { + uint8_t stimeout = cur->timeout; + unsigned int limited = 0; + + if ((stimeout == PFTM_UNLINKED) || + (pf_state_expires(cur, stimeout) <= now)) { + st = pf_state_ref(cur); + SLIST_INSERT_HEAD(&gcl, st, gc_list); + + if (++collected >= collect) + limited = 1; + } + + /* don't iterate past the end of our view of the list */ + if (cur == tail) { + cur = NULL; + break; + } + + cur = TAILQ_NEXT(cur, entry_list); + + /* don't spend too much time here. */ + if (ISSET(READ_ONCE(curcpu()->ci_schedstate.spc_schedflags), + SPCF_SHOULDYIELD) || limited) + break; + } + + rw_exit_read(&pf_state_list.pfs_rwl); + + if (SLIST_EMPTY(&gcl)) + return (scanned); + + rw_enter_write(&pf_state_list.pfs_rwl); + PF_LOCK(); + PF_STATE_ENTER_WRITE(); + SLIST_FOREACH(st, &gcl, gc_list) { + if (st->timeout != PFTM_UNLINKED) + pf_remove_state(st); + + pf_free_state(st); + } + PF_STATE_EXIT_WRITE(); + PF_UNLOCK(); + rw_exit_write(&pf_state_list.pfs_rwl); + + while ((st = SLIST_FIRST(&gcl)) != NULL) { + SLIST_REMOVE_HEAD(&gcl, gc_list); + pf_state_unref(st); + } + + return (scanned); +} + +int +pf_tbladdr_setup(struct pf_ruleset *rs, struct pf_addr_wrap *aw, int wait) +{ + if (aw->type != PF_ADDR_TABLE) + return (0); + if ((aw->p.tbl = pfr_attach_table(rs, aw->v.tblname, wait)) == NULL) + return (1); + return (0); +} + +void +pf_tbladdr_remove(struct pf_addr_wrap *aw) +{ + if (aw->type != PF_ADDR_TABLE || aw->p.tbl == NULL) + return; + pfr_detach_table(aw->p.tbl); + aw->p.tbl = NULL; +} + +void +pf_tbladdr_copyout(struct pf_addr_wrap *aw) +{ + struct pfr_ktable *kt = aw->p.tbl; + + if (aw->type != PF_ADDR_TABLE || kt == NULL) + return; + if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE) && kt->pfrkt_root != NULL) + kt = kt->pfrkt_root; + aw->p.tbl = NULL; + aw->p.tblcnt = (kt->pfrkt_flags & PFR_TFLAG_ACTIVE) ? + kt->pfrkt_cnt : -1; +} + +void +pf_print_host(struct pf_addr *addr, u_int16_t p, sa_family_t af) +{ + switch (af) { + case AF_INET: { + u_int32_t a = ntohl(addr->addr32[0]); + addlog("%u.%u.%u.%u", (a>>24)&255, (a>>16)&255, + (a>>8)&255, a&255); + if (p) { + p = ntohs(p); + addlog(":%u", p); + } + break; + } +#ifdef INET6 + case AF_INET6: { + u_int16_t b; + u_int8_t i, curstart, curend, maxstart, maxend; + curstart = curend = maxstart = maxend = 255; + for (i = 0; i < 8; i++) { + if (!addr->addr16[i]) { + if (curstart == 255) + curstart = i; + curend = i; + } else { + if ((curend - curstart) > + (maxend - maxstart)) { + maxstart = curstart; + maxend = curend; + } + curstart = curend = 255; + } + } + if ((curend - curstart) > + (maxend - maxstart)) { + maxstart = curstart; + maxend = curend; + } + for (i = 0; i < 8; i++) { + if (i >= maxstart && i <= maxend) { + if (i == 0) + addlog(":"); + if (i == maxend) + addlog(":"); + } else { + b = ntohs(addr->addr16[i]); + addlog("%x", b); + if (i < 7) + addlog(":"); + } + } + if (p) { + p = ntohs(p); + addlog("[%u]", p); + } + break; + } +#endif /* INET6 */ + } +} + +void +pf_print_state(struct pf_state *st) +{ + pf_print_state_parts(st, NULL, NULL); +} + +void +pf_print_state_parts(struct pf_state *st, + struct pf_state_key *skwp, struct pf_state_key *sksp) +{ + struct pf_state_key *skw, *sks; + u_int8_t proto, dir; + + /* Do our best to fill these, but they're skipped if NULL */ + skw = skwp ? skwp : (st ? st->key[PF_SK_WIRE] : NULL); + sks = sksp ? sksp : (st ? st->key[PF_SK_STACK] : NULL); + proto = skw ? skw->proto : (sks ? sks->proto : 0); + dir = st ? st->direction : 0; + + switch (proto) { + case IPPROTO_IPV4: + addlog("IPv4"); + break; + case IPPROTO_IPV6: + addlog("IPv6"); + break; + case IPPROTO_TCP: + addlog("TCP"); + break; + case IPPROTO_UDP: + addlog("UDP"); + break; + case IPPROTO_ICMP: + addlog("ICMP"); + break; + case IPPROTO_ICMPV6: + addlog("ICMPv6"); + break; + default: + addlog("%u", proto); + break; + } + switch (dir) { + case PF_IN: + addlog(" in"); + break; + case PF_OUT: + addlog(" out"); + break; + } + if (skw) { + addlog(" wire: (%d) ", skw->rdomain); + pf_print_host(&skw->addr[0], skw->port[0], skw->af); + addlog(" "); + pf_print_host(&skw->addr[1], skw->port[1], skw->af); + } + if (sks) { + addlog(" stack: (%d) ", sks->rdomain); + if (sks != skw) { + pf_print_host(&sks->addr[0], sks->port[0], sks->af); + addlog(" "); + pf_print_host(&sks->addr[1], sks->port[1], sks->af); + } else + addlog("-"); + } + if (st) { + if (proto == IPPROTO_TCP) { + addlog(" [lo=%u high=%u win=%u modulator=%u", + st->src.seqlo, st->src.seqhi, + st->src.max_win, st->src.seqdiff); + if (st->src.wscale && st->dst.wscale) + addlog(" wscale=%u", + st->src.wscale & PF_WSCALE_MASK); + addlog("]"); + addlog(" [lo=%u high=%u win=%u modulator=%u", + st->dst.seqlo, st->dst.seqhi, + st->dst.max_win, st->dst.seqdiff); + if (st->src.wscale && st->dst.wscale) + addlog(" wscale=%u", + st->dst.wscale & PF_WSCALE_MASK); + addlog("]"); + } + addlog(" %u:%u", st->src.state, st->dst.state); + if (st->rule.ptr) + addlog(" @%d", st->rule.ptr->nr); + } +} + +void +pf_print_flags(u_int8_t f) +{ + if (f) + addlog(" "); + if (f & TH_FIN) + addlog("F"); + if (f & TH_SYN) + addlog("S"); + if (f & TH_RST) + addlog("R"); + if (f & TH_PUSH) + addlog("P"); + if (f & TH_ACK) + addlog("A"); + if (f & TH_URG) + addlog("U"); + if (f & TH_ECE) + addlog("E"); + if (f & TH_CWR) + addlog("W"); +} + +#define PF_SET_SKIP_STEPS(i) \ + do { \ + while (head[i] != cur) { \ + head[i]->skip[i].ptr = cur; \ + head[i] = TAILQ_NEXT(head[i], entries); \ + } \ + } while (0) + +void +pf_calc_skip_steps(struct pf_rulequeue *rules) +{ + struct pf_rule *cur, *prev, *head[PF_SKIP_COUNT]; + int i; + + cur = TAILQ_FIRST(rules); + prev = cur; + for (i = 0; i < PF_SKIP_COUNT; ++i) + head[i] = cur; + while (cur != NULL) { + if (cur->kif != prev->kif || cur->ifnot != prev->ifnot) + PF_SET_SKIP_STEPS(PF_SKIP_IFP); + if (cur->direction != prev->direction) + PF_SET_SKIP_STEPS(PF_SKIP_DIR); + if (cur->onrdomain != prev->onrdomain || + cur->ifnot != prev->ifnot) + PF_SET_SKIP_STEPS(PF_SKIP_RDOM); + if (cur->af != prev->af) + PF_SET_SKIP_STEPS(PF_SKIP_AF); + if (cur->proto != prev->proto) + PF_SET_SKIP_STEPS(PF_SKIP_PROTO); + if (cur->src.neg != prev->src.neg || + pf_addr_wrap_neq(&cur->src.addr, &prev->src.addr)) + PF_SET_SKIP_STEPS(PF_SKIP_SRC_ADDR); + if (cur->dst.neg != prev->dst.neg || + pf_addr_wrap_neq(&cur->dst.addr, &prev->dst.addr)) + PF_SET_SKIP_STEPS(PF_SKIP_DST_ADDR); + if (cur->src.port[0] != prev->src.port[0] || + cur->src.port[1] != prev->src.port[1] || + cur->src.port_op != prev->src.port_op) + PF_SET_SKIP_STEPS(PF_SKIP_SRC_PORT); + if (cur->dst.port[0] != prev->dst.port[0] || + cur->dst.port[1] != prev->dst.port[1] || + cur->dst.port_op != prev->dst.port_op) + PF_SET_SKIP_STEPS(PF_SKIP_DST_PORT); + + prev = cur; + cur = TAILQ_NEXT(cur, entries); + } + for (i = 0; i < PF_SKIP_COUNT; ++i) + PF_SET_SKIP_STEPS(i); +} + +int +pf_addr_wrap_neq(struct pf_addr_wrap *aw1, struct pf_addr_wrap *aw2) +{ + if (aw1->type != aw2->type) + return (1); + switch (aw1->type) { + case PF_ADDR_ADDRMASK: + case PF_ADDR_RANGE: + if (PF_ANEQ(&aw1->v.a.addr, &aw2->v.a.addr, AF_INET6)) + return (1); + if (PF_ANEQ(&aw1->v.a.mask, &aw2->v.a.mask, AF_INET6)) + return (1); + return (0); + case PF_ADDR_DYNIFTL: + return (aw1->p.dyn->pfid_kt != aw2->p.dyn->pfid_kt); + case PF_ADDR_NONE: + case PF_ADDR_NOROUTE: + case PF_ADDR_URPFFAILED: + return (0); + case PF_ADDR_TABLE: + return (aw1->p.tbl != aw2->p.tbl); + case PF_ADDR_RTLABEL: + return (aw1->v.rtlabel != aw2->v.rtlabel); + default: + addlog("invalid address type: %d\n", aw1->type); + return (1); + } +} + +/* This algorithm computes 'a + b - c' in ones-complement using a trick to + * emulate at most one ones-complement subtraction. This thereby limits net + * carries/borrows to at most one, eliminating a reduction step and saving one + * each of +, >>, & and ~. + * + * def. x mod y = x - (x//y)*y for integer x,y + * def. sum = x mod 2^16 + * def. accumulator = (x >> 16) mod 2^16 + * + * The trick works as follows: subtracting exactly one u_int16_t from the + * u_int32_t x incurs at most one underflow, wrapping its upper 16-bits, the + * accumulator, to 2^16 - 1. Adding this to the 16-bit sum preserves the + * ones-complement borrow: + * + * (sum + accumulator) mod 2^16 + * = { assume underflow: accumulator := 2^16 - 1 } + * (sum + 2^16 - 1) mod 2^16 + * = { mod } + * (sum - 1) mod 2^16 + * + * Although this breaks for sum = 0, giving 0xffff, which is ones-complement's + * other zero, not -1, that cannot occur: the 16-bit sum cannot be underflown + * to zero as that requires subtraction of at least 2^16, which exceeds a + * single u_int16_t's range. + * + * We use the following theorem to derive the implementation: + * + * th. (x + (y mod z)) mod z = (x + y) mod z (0) + * proof. + * (x + (y mod z)) mod z + * = { def mod } + * (x + y - (y//z)*z) mod z + * = { (a + b*c) mod c = a mod c } + * (x + y) mod z [end of proof] + * + * ... and thereby obtain: + * + * (sum + accumulator) mod 2^16 + * = { def. accumulator, def. sum } + * (x mod 2^16 + (x >> 16) mod 2^16) mod 2^16 + * = { (0), twice } + * (x + (x >> 16)) mod 2^16 + * = { x mod 2^n = x & (2^n - 1) } + * (x + (x >> 16)) & 0xffff + * + * Note: this serves also as a reduction step for at most one add (as the + * trailing mod 2^16 prevents further reductions by destroying carries). + */ +__inline void +pf_cksum_fixup(u_int16_t *cksum, u_int16_t was, u_int16_t now, + u_int8_t proto) +{ + u_int32_t x; + const int udp = proto == IPPROTO_UDP; + + x = *cksum + was - now; + x = (x + (x >> 16)) & 0xffff; + + /* optimise: eliminate a branch when not udp */ + if (udp && *cksum == 0x0000) + return; + if (udp && x == 0x0000) + x = 0xffff; + + *cksum = (u_int16_t)(x); +} + +#ifdef INET6 +/* pre: coverage(cksum) is superset of coverage(covered_cksum) */ +static __inline void +pf_cksum_uncover(u_int16_t *cksum, u_int16_t covered_cksum, u_int8_t proto) +{ + pf_cksum_fixup(cksum, ~covered_cksum, 0x0, proto); +} + +/* pre: disjoint(coverage(cksum), coverage(uncovered_cksum)) */ +static __inline void +pf_cksum_cover(u_int16_t *cksum, u_int16_t uncovered_cksum, u_int8_t proto) +{ + pf_cksum_fixup(cksum, 0x0, ~uncovered_cksum, proto); +} +#endif /* INET6 */ + +/* pre: *a is 16-bit aligned within its packet + * + * This algorithm emulates 16-bit ones-complement sums on a twos-complement + * machine by conserving ones-complement's otherwise discarded carries in the + * upper bits of x. These accumulated carries when added to the lower 16-bits + * over at least zero 'reduction' steps then complete the ones-complement sum. + * + * def. sum = x mod 2^16 + * def. accumulator = (x >> 16) + * + * At most two reduction steps + * + * x := sum + accumulator + * = { def sum, def accumulator } + * x := x mod 2^16 + (x >> 16) + * = { x mod 2^n = x & (2^n - 1) } + * x := (x & 0xffff) + (x >> 16) + * + * are necessary to incorporate the accumulated carries (at most one per add) + * i.e. to reduce x < 2^16 from at most 16 carries in the upper 16 bits. + * + * The function is also invariant over the endian of the host. Why? + * + * Define the unary transpose operator ~ on a bitstring in python slice + * notation as lambda m: m[P:] + m[:P] , for some constant pivot P. + * + * th. ~ distributes over ones-complement addition, denoted by +_1, i.e. + * + * ~m +_1 ~n = ~(m +_1 n) (for all bitstrings m,n of equal length) + * + * proof. Regard the bitstrings in m +_1 n as split at P, forming at most two + * 'half-adds'. Under ones-complement addition, each half-add carries to the + * other, so the sum of each half-add is unaffected by their relative + * order. Therefore: + * + * ~m +_1 ~n + * = { half-adds invariant under transposition } + * ~s + * = { substitute } + * ~(m +_1 n) [end of proof] + * + * th. Summing two in-memory ones-complement 16-bit variables m,n on a machine + * with the converse endian does not alter the result. + * + * proof. + * { converse machine endian: load/store transposes, P := 8 } + * ~(~m +_1 ~n) + * = { ~ over +_1 } + * ~~m +_1 ~~n + * = { ~ is an involution } + * m +_1 n [end of proof] + * + */ +#define NEG(x) ((u_int16_t)~(x)) +void +pf_cksum_fixup_a(u_int16_t *cksum, const struct pf_addr *a, + const struct pf_addr *an, sa_family_t af, u_int8_t proto) +{ + u_int32_t x; + const u_int16_t *n = an->addr16; + const u_int16_t *o = a->addr16; + const int udp = proto == IPPROTO_UDP; + + switch (af) { + case AF_INET: + x = *cksum + o[0] + NEG(n[0]) + o[1] + NEG(n[1]); + break; +#ifdef INET6 + case AF_INET6: + x = *cksum + o[0] + NEG(n[0]) + o[1] + NEG(n[1]) +\ + o[2] + NEG(n[2]) + o[3] + NEG(n[3]) +\ + o[4] + NEG(n[4]) + o[5] + NEG(n[5]) +\ + o[6] + NEG(n[6]) + o[7] + NEG(n[7]); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + + x = (x & 0xffff) + (x >> 16); + x = (x & 0xffff) + (x >> 16); + + /* optimise: eliminate a branch when not udp */ + if (udp && *cksum == 0x0000) + return; + if (udp && x == 0x0000) + x = 0xffff; + + *cksum = (u_int16_t)(x); +} + +int +pf_patch_8(struct pf_pdesc *pd, u_int8_t *f, u_int8_t v, bool hi) +{ + int rewrite = 0; + + if (*f != v) { + u_int16_t old = htons(hi ? (*f << 8) : *f); + u_int16_t new = htons(hi ? ( v << 8) : v); + + pf_cksum_fixup(pd->pcksum, old, new, pd->proto); + *f = v; + rewrite = 1; + } + + return (rewrite); +} + +/* pre: *f is 16-bit aligned within its packet */ +int +pf_patch_16(struct pf_pdesc *pd, u_int16_t *f, u_int16_t v) +{ + int rewrite = 0; + + if (*f != v) { + pf_cksum_fixup(pd->pcksum, *f, v, pd->proto); + *f = v; + rewrite = 1; + } + + return (rewrite); +} + +int +pf_patch_16_unaligned(struct pf_pdesc *pd, void *f, u_int16_t v, bool hi) +{ + int rewrite = 0; + u_int8_t *fb = (u_int8_t*)f; + u_int8_t *vb = (u_int8_t*)&v; + + if (hi && ALIGNED_POINTER(f, u_int16_t)) { + return (pf_patch_16(pd, f, v)); /* optimise */ + } + + rewrite += pf_patch_8(pd, fb++, *vb++, hi); + rewrite += pf_patch_8(pd, fb++, *vb++,!hi); + + return (rewrite); +} + +/* pre: *f is 16-bit aligned within its packet */ +/* pre: pd->proto != IPPROTO_UDP */ +int +pf_patch_32(struct pf_pdesc *pd, u_int32_t *f, u_int32_t v) +{ + int rewrite = 0; + u_int16_t *pc = pd->pcksum; + u_int8_t proto = pd->proto; + + /* optimise: inline udp fixup code is unused; let compiler scrub it */ + if (proto == IPPROTO_UDP) + panic("%s: udp", __func__); + + /* optimise: skip *f != v guard; true for all use-cases */ + pf_cksum_fixup(pc, *f / (1 << 16), v / (1 << 16), proto); + pf_cksum_fixup(pc, *f % (1 << 16), v % (1 << 16), proto); + + *f = v; + rewrite = 1; + + return (rewrite); +} + +int +pf_patch_32_unaligned(struct pf_pdesc *pd, void *f, u_int32_t v, bool hi) +{ + int rewrite = 0; + u_int8_t *fb = (u_int8_t*)f; + u_int8_t *vb = (u_int8_t*)&v; + + if (hi && ALIGNED_POINTER(f, u_int32_t)) { + return (pf_patch_32(pd, f, v)); /* optimise */ + } + + rewrite += pf_patch_8(pd, fb++, *vb++, hi); + rewrite += pf_patch_8(pd, fb++, *vb++,!hi); + rewrite += pf_patch_8(pd, fb++, *vb++, hi); + rewrite += pf_patch_8(pd, fb++, *vb++,!hi); + + return (rewrite); +} + +int +pf_icmp_mapping(struct pf_pdesc *pd, u_int8_t type, int *icmp_dir, + u_int16_t *virtual_id, u_int16_t *virtual_type) +{ + /* + * ICMP types marked with PF_OUT are typically responses to + * PF_IN, and will match states in the opposite direction. + * PF_IN ICMP types need to match a state with that type. + */ + *icmp_dir = PF_OUT; + + /* Queries (and responses) */ + switch (pd->af) { + case AF_INET: + switch (type) { + case ICMP_ECHO: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP_ECHOREPLY: + *virtual_type = ICMP_ECHO; + *virtual_id = pd->hdr.icmp.icmp_id; + break; + + case ICMP_TSTAMP: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP_TSTAMPREPLY: + *virtual_type = ICMP_TSTAMP; + *virtual_id = pd->hdr.icmp.icmp_id; + break; + + case ICMP_IREQ: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP_IREQREPLY: + *virtual_type = ICMP_IREQ; + *virtual_id = pd->hdr.icmp.icmp_id; + break; + + case ICMP_MASKREQ: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP_MASKREPLY: + *virtual_type = ICMP_MASKREQ; + *virtual_id = pd->hdr.icmp.icmp_id; + break; + + case ICMP_IPV6_WHEREAREYOU: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP_IPV6_IAMHERE: + *virtual_type = ICMP_IPV6_WHEREAREYOU; + *virtual_id = 0; /* Nothing sane to match on! */ + break; + + case ICMP_MOBILE_REGREQUEST: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP_MOBILE_REGREPLY: + *virtual_type = ICMP_MOBILE_REGREQUEST; + *virtual_id = 0; /* Nothing sane to match on! */ + break; + + case ICMP_ROUTERSOLICIT: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP_ROUTERADVERT: + *virtual_type = ICMP_ROUTERSOLICIT; + *virtual_id = 0; /* Nothing sane to match on! */ + break; + + /* These ICMP types map to other connections */ + case ICMP_UNREACH: + case ICMP_SOURCEQUENCH: + case ICMP_REDIRECT: + case ICMP_TIMXCEED: + case ICMP_PARAMPROB: + /* These will not be used, but set them anyway */ + *icmp_dir = PF_IN; + *virtual_type = htons(type); + *virtual_id = 0; + return (1); /* These types match to another state */ + + /* + * All remaining ICMP types get their own states, + * and will only match in one direction. + */ + default: + *icmp_dir = PF_IN; + *virtual_type = type; + *virtual_id = 0; + break; + } + break; +#ifdef INET6 + case AF_INET6: + switch (type) { + case ICMP6_ECHO_REQUEST: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP6_ECHO_REPLY: + *virtual_type = ICMP6_ECHO_REQUEST; + *virtual_id = pd->hdr.icmp6.icmp6_id; + break; + + case MLD_LISTENER_QUERY: + case MLD_LISTENER_REPORT: { + struct mld_hdr *mld = &pd->hdr.mld; + u_int32_t h; + + /* + * Listener Report can be sent by clients + * without an associated Listener Query. + * In addition to that, when Report is sent as a + * reply to a Query its source and destination + * address are different. + */ + *icmp_dir = PF_IN; + *virtual_type = MLD_LISTENER_QUERY; + /* generate fake id for these messages */ + h = mld->mld_addr.s6_addr32[0] ^ + mld->mld_addr.s6_addr32[1] ^ + mld->mld_addr.s6_addr32[2] ^ + mld->mld_addr.s6_addr32[3]; + *virtual_id = (h >> 16) ^ (h & 0xffff); + break; + } + + /* + * ICMP6_FQDN and ICMP6_NI query/reply are the same type as + * ICMP6_WRU + */ + case ICMP6_WRUREQUEST: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ICMP6_WRUREPLY: + *virtual_type = ICMP6_WRUREQUEST; + *virtual_id = 0; /* Nothing sane to match on! */ + break; + + case MLD_MTRACE: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case MLD_MTRACE_RESP: + *virtual_type = MLD_MTRACE; + *virtual_id = 0; /* Nothing sane to match on! */ + break; + + case ND_NEIGHBOR_SOLICIT: + *icmp_dir = PF_IN; + /* FALLTHROUGH */ + case ND_NEIGHBOR_ADVERT: { + struct nd_neighbor_solicit *nd = &pd->hdr.nd_ns; + u_int32_t h; + + *virtual_type = ND_NEIGHBOR_SOLICIT; + /* generate fake id for these messages */ + h = nd->nd_ns_target.s6_addr32[0] ^ + nd->nd_ns_target.s6_addr32[1] ^ + nd->nd_ns_target.s6_addr32[2] ^ + nd->nd_ns_target.s6_addr32[3]; + *virtual_id = (h >> 16) ^ (h & 0xffff); + /* + * the extra work here deals with 'keep state' option + * at pass rule for unsolicited advertisement. By + * returning 1 (state_icmp = 1) we override 'keep + * state' to 'no state' so we don't create state for + * unsolicited advertisements. No one expects answer to + * unsolicited advertisements so we should be good. + */ + if (type == ND_NEIGHBOR_ADVERT) { + *virtual_type = htons(*virtual_type); + return (1); + } + break; + } + + /* + * These ICMP types map to other connections. + * ND_REDIRECT can't be in this list because the triggering + * packet header is optional. + */ + case ICMP6_DST_UNREACH: + case ICMP6_PACKET_TOO_BIG: + case ICMP6_TIME_EXCEEDED: + case ICMP6_PARAM_PROB: + /* These will not be used, but set them anyway */ + *icmp_dir = PF_IN; + *virtual_type = htons(type); + *virtual_id = 0; + return (1); /* These types match to another state */ + /* + * All remaining ICMP6 types get their own states, + * and will only match in one direction. + */ + default: + *icmp_dir = PF_IN; + *virtual_type = type; + *virtual_id = 0; + break; + } + break; +#endif /* INET6 */ + } + *virtual_type = htons(*virtual_type); + return (0); /* These types match to their own state */ +} + +void +pf_translate_icmp(struct pf_pdesc *pd, struct pf_addr *qa, u_int16_t *qp, + struct pf_addr *oa, struct pf_addr *na, u_int16_t np) +{ + /* note: doesn't trouble to fixup quoted checksums, if any */ + + /* change quoted protocol port */ + if (qp != NULL) + pf_patch_16(pd, qp, np); + + /* change quoted ip address */ + pf_cksum_fixup_a(pd->pcksum, qa, na, pd->af, pd->proto); + pf_addrcpy(qa, na, pd->af); + + /* change network-header's ip address */ + if (oa) + pf_translate_a(pd, oa, na); +} + +/* pre: *a is 16-bit aligned within its packet */ +/* *a is a network header src/dst address */ +int +pf_translate_a(struct pf_pdesc *pd, struct pf_addr *a, struct pf_addr *an) +{ + int rewrite = 0; + + /* warning: !PF_ANEQ != PF_AEQ */ + if (!PF_ANEQ(a, an, pd->af)) + return (0); + + /* fixup transport pseudo-header, if any */ + switch (pd->proto) { + case IPPROTO_TCP: /* FALLTHROUGH */ + case IPPROTO_UDP: /* FALLTHROUGH */ + case IPPROTO_ICMPV6: + pf_cksum_fixup_a(pd->pcksum, a, an, pd->af, pd->proto); + break; + default: + break; /* assume no pseudo-header */ + } + + pf_addrcpy(a, an, pd->af); + rewrite = 1; + + return (rewrite); +} + +#ifdef INET6 +/* pf_translate_af() may change pd->m, adjust local copies after calling */ +int +pf_translate_af(struct pf_pdesc *pd) +{ + static const struct pf_addr zero; + struct pf_ip *ip4; + struct pf_ip6_hdr *ip6; + int copyback = 0; + u_int hlen, ohlen, dlen; + u_int16_t *pc; + u_int8_t af_proto, naf_proto; + + hlen = (pd->naf == AF_INET) ? sizeof(*ip4) : sizeof(*ip6); + ohlen = pd->off; + dlen = pd->tot_len - pd->off; + pc = pd->pcksum; + + af_proto = naf_proto = pd->proto; + if (naf_proto == IPPROTO_ICMP) + af_proto = IPPROTO_ICMPV6; + if (naf_proto == IPPROTO_ICMPV6) + af_proto = IPPROTO_ICMP; + + /* uncover stale pseudo-header */ + switch (af_proto) { + case IPPROTO_ICMPV6: + /* optimise: unchanged for TCP/UDP */ + pf_cksum_fixup(pc, htons(af_proto), 0x0, af_proto); + pf_cksum_fixup(pc, htons(dlen), 0x0, af_proto); + /* FALLTHROUGH */ + case IPPROTO_UDP: /* FALLTHROUGH */ + case IPPROTO_TCP: + pf_cksum_fixup_a(pc, pd->src, &zero, pd->af, af_proto); + pf_cksum_fixup_a(pc, pd->dst, &zero, pd->af, af_proto); + copyback = 1; + break; + default: + break; /* assume no pseudo-header */ + } + + /* replace the network header */ + m_adj(pd->m, pd->off); + pd->src = NULL; + pd->dst = NULL; + + if ((M_PREPEND(pd->m, hlen, M_DONTWAIT)) == NULL) { + pd->m = NULL; + return (-1); + } + + pd->off = hlen; + pd->tot_len += hlen - ohlen; + + switch (pd->naf) { + case AF_INET: + ip4 = mtod(pd->m, struct pf_ip *); + memset(ip4, 0, hlen); + ip4->ip_v = IPVERSION; + ip4->ip_hl = hlen >> 2; + ip4->ip_tos = pd->tos; + ip4->ip_len = htons(hlen + dlen); + ip4->ip_id = htons(ip_randomid()); + ip4->ip_off = htons(IP_DF); + ip4->ip_ttl = pd->ttl; + ip4->ip_p = pd->proto; + ip4->ip_src = pd->nsaddr.v4; + ip4->ip_dst = pd->ndaddr.v4; + break; + case AF_INET6: + ip6 = mtod(pd->m, struct pf_ip6_hdr *); + memset(ip6, 0, hlen); + ip6->ip6_vfc = IPV6_VERSION; + ip6->ip6_flow |= htonl((u_int32_t)pd->tos << 20); + ip6->ip6_plen = htons(dlen); + ip6->ip6_nxt = pd->proto; + if (!pd->ttl || pd->ttl > IPV6_DEFHLIM) + ip6->ip6_hlim = IPV6_DEFHLIM; + else + ip6->ip6_hlim = pd->ttl; + ip6->ip6_src = pd->nsaddr.v6; + ip6->ip6_dst = pd->ndaddr.v6; + break; + default: + unhandled_af(pd->naf); + } + + /* UDP over IPv6 must be checksummed per rfc2460 p27 */ + if (naf_proto == IPPROTO_UDP && *pc == 0x0000 && + pd->naf == AF_INET6) { + pd->m->m_pkthdr.csum_flags |= M_UDP_CSUM_OUT; + } + + /* cover fresh pseudo-header */ + switch (naf_proto) { + case IPPROTO_ICMPV6: + /* optimise: unchanged for TCP/UDP */ + pf_cksum_fixup(pc, 0x0, htons(naf_proto), naf_proto); + pf_cksum_fixup(pc, 0x0, htons(dlen), naf_proto); + /* FALLTHROUGH */ + case IPPROTO_UDP: /* FALLTHROUGH */ + case IPPROTO_TCP: + pf_cksum_fixup_a(pc, &zero, &pd->nsaddr, pd->naf, naf_proto); + pf_cksum_fixup_a(pc, &zero, &pd->ndaddr, pd->naf, naf_proto); + copyback = 1; + break; + default: + break; /* assume no pseudo-header */ + } + + /* flush pd->pcksum */ + if (copyback) + m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT); + + return (0); +} + +int +pf_change_icmp_af(struct mbuf *m, int ipoff2, struct pf_pdesc *pd, + struct pf_pdesc *pd2, struct pf_addr *src, struct pf_addr *dst, + sa_family_t af, sa_family_t naf) +{ + struct mbuf *n = NULL; + struct pf_ip *ip4; + struct pf_ip6_hdr *ip6; + u_int hlen, ohlen, dlen; + int d; + + if (af == naf || (af != AF_INET && af != AF_INET6) || + (naf != AF_INET && naf != AF_INET6)) + return (-1); + + /* split the mbuf chain on the quoted ip/ip6 header boundary */ + if ((n = m_split(m, ipoff2, M_DONTWAIT)) == NULL) + return (-1); + + /* new quoted header */ + hlen = naf == AF_INET ? sizeof(*ip4) : sizeof(*ip6); + /* old quoted header */ + ohlen = pd2->off - ipoff2; + + /* trim old quoted header */ + pf_cksum_uncover(pd->pcksum, in_cksum(n, ohlen), pd->proto); + m_adj(n, ohlen); + + /* prepend a new, translated, quoted header */ + if ((M_PREPEND(n, hlen, M_DONTWAIT)) == NULL) + return (-1); + + switch (naf) { + case AF_INET: + ip4 = mtod(n, struct pf_ip *); + memset(ip4, 0, sizeof(*ip4)); + ip4->ip_v = IPVERSION; + ip4->ip_hl = sizeof(*ip4) >> 2; + ip4->ip_len = htons(sizeof(*ip4) + pd2->tot_len - ohlen); + ip4->ip_id = htons(ip_randomid()); + ip4->ip_off = htons(IP_DF); + ip4->ip_ttl = pd2->ttl; + if (pd2->proto == IPPROTO_ICMPV6) + ip4->ip_p = IPPROTO_ICMP; + else + ip4->ip_p = pd2->proto; + ip4->ip_src = src->v4; + ip4->ip_dst = dst->v4; + in_hdr_cksum_out(n, NULL); + break; + case AF_INET6: + ip6 = mtod(n, struct pf_ip6_hdr *); + memset(ip6, 0, sizeof(*ip6)); + ip6->ip6_vfc = IPV6_VERSION; + ip6->ip6_plen = htons(pd2->tot_len - ohlen); + if (pd2->proto == IPPROTO_ICMP) + ip6->ip6_nxt = IPPROTO_ICMPV6; + else + ip6->ip6_nxt = pd2->proto; + if (!pd2->ttl || pd2->ttl > IPV6_DEFHLIM) + ip6->ip6_hlim = IPV6_DEFHLIM; + else + ip6->ip6_hlim = pd2->ttl; + ip6->ip6_src = src->v6; + ip6->ip6_dst = dst->v6; + break; + } + + /* cover new quoted header */ + /* optimise: any new AF_INET header of ours sums to zero */ + if (naf != AF_INET) { + pf_cksum_cover(pd->pcksum, in_cksum(n, hlen), pd->proto); + } + + /* reattach modified quoted packet to outer header */ + { + int nlen = n->m_pkthdr.len; + m_cat(m, n); + m->m_pkthdr.len += nlen; + } + + /* account for altered length */ + d = hlen - ohlen; + + if (pd->proto == IPPROTO_ICMPV6) { + /* fixup pseudo-header */ + dlen = pd->tot_len - pd->off; + pf_cksum_fixup(pd->pcksum, + htons(dlen), htons(dlen + d), pd->proto); + } + + pd->tot_len += d; + pd2->tot_len += d; + pd2->off += d; + + /* note: not bothering to update network headers as + these due for rewrite by pf_translate_af() */ + + return (0); +} + + +#define PTR_IP(field) (offsetof(struct pf_ip, field)) +#define PTR_IP6(field) (offsetof(struct pf_ip6_hdr, field)) + +int +pf_translate_icmp_af(struct pf_pdesc *pd, int af, void *arg) +{ + struct pf_icmp *icmp4; + struct icmp6hdr *icmp6; + u_int32_t mtu; + int32_t ptr = -1; + u_int8_t type; + u_int8_t code; + + switch (af) { + case AF_INET: + icmp6 = arg; + type = icmp6->icmp6_type; + code = icmp6->icmp6_code; + mtu = ntohl(icmp6->icmp6_mtu); + + switch (type) { + case ICMP6_ECHO_REQUEST: + type = ICMP_ECHO; + break; + case ICMP6_ECHO_REPLY: + type = ICMP_ECHOREPLY; + break; + case ICMP6_DST_UNREACH: + type = ICMP_UNREACH; + switch (code) { + case ICMP6_DST_UNREACH_NOROUTE: + case ICMP6_DST_UNREACH_BEYONDSCOPE: + case ICMP6_DST_UNREACH_ADDR: + code = ICMP_UNREACH_HOST; + break; + case ICMP6_DST_UNREACH_ADMIN: + code = ICMP_UNREACH_HOST_PROHIB; + break; + case ICMP6_DST_UNREACH_NOPORT: + code = ICMP_UNREACH_PORT; + break; + default: + return (-1); + } + break; + case ICMP6_PACKET_TOO_BIG: + type = ICMP_UNREACH; + code = ICMP_UNREACH_NEEDFRAG; + mtu -= 20; + break; + case ICMP6_TIME_EXCEEDED: + type = ICMP_TIMXCEED; + break; + case ICMP6_PARAM_PROB: + switch (code) { + case ICMP6_PARAMPROB_HEADER: + type = ICMP_PARAMPROB; + code = ICMP_PARAMPROB_ERRATPTR; + ptr = ntohl(icmp6->icmp6_pptr); + + if (ptr == PTR_IP6(ip6_vfc)) + ; /* preserve */ + else if (ptr == PTR_IP6(ip6_vfc) + 1) + ptr = PTR_IP(ip_tos); + else if (ptr == PTR_IP6(ip6_plen) || + ptr == PTR_IP6(ip6_plen) + 1) + ptr = PTR_IP(ip_len); + else if (ptr == PTR_IP6(ip6_nxt)) + ptr = PTR_IP(ip_p); + else if (ptr == PTR_IP6(ip6_hlim)) + ptr = PTR_IP(ip_ttl); + else if (ptr >= PTR_IP6(ip6_src) && + ptr < PTR_IP6(ip6_dst)) + ptr = PTR_IP(ip_src); + else if (ptr >= PTR_IP6(ip6_dst) && + ptr < sizeof(struct pf_ip6_hdr)) + ptr = PTR_IP(ip_dst); + else { + return (-1); + } + break; + case ICMP6_PARAMPROB_NEXTHEADER: + type = ICMP_UNREACH; + code = ICMP_UNREACH_PROTOCOL; + break; + default: + return (-1); + } + break; + default: + return (-1); + } + + pf_patch_8(pd, &icmp6->icmp6_type, type, PF_HI); + pf_patch_8(pd, &icmp6->icmp6_code, code, PF_LO); + + /* aligns well with a icmpv4 nextmtu */ + pf_patch_32(pd, &icmp6->icmp6_mtu, htonl(mtu)); + + /* icmpv4 pptr is a one most significant byte */ + if (ptr >= 0) + pf_patch_32(pd, &icmp6->icmp6_pptr, htonl(ptr << 24)); + break; + case AF_INET6: + icmp4 = arg; + type = icmp4->icmp_type; + code = icmp4->icmp_code; + mtu = ntohs(icmp4->icmp_nextmtu); + + switch (type) { + case ICMP_ECHO: + type = ICMP6_ECHO_REQUEST; + break; + case ICMP_ECHOREPLY: + type = ICMP6_ECHO_REPLY; + break; + case ICMP_UNREACH: + type = ICMP6_DST_UNREACH; + switch (code) { + case ICMP_UNREACH_NET: + case ICMP_UNREACH_HOST: + case ICMP_UNREACH_NET_UNKNOWN: + case ICMP_UNREACH_HOST_UNKNOWN: + case ICMP_UNREACH_ISOLATED: + case ICMP_UNREACH_TOSNET: + case ICMP_UNREACH_TOSHOST: + code = ICMP6_DST_UNREACH_NOROUTE; + break; + case ICMP_UNREACH_PORT: + code = ICMP6_DST_UNREACH_NOPORT; + break; + case ICMP_UNREACH_NET_PROHIB: + case ICMP_UNREACH_HOST_PROHIB: + case ICMP_UNREACH_FILTER_PROHIB: + case ICMP_UNREACH_PRECEDENCE_CUTOFF: + code = ICMP6_DST_UNREACH_ADMIN; + break; + case ICMP_UNREACH_PROTOCOL: + type = ICMP6_PARAM_PROB; + code = ICMP6_PARAMPROB_NEXTHEADER; + ptr = offsetof(struct pf_ip6_hdr, ip6_nxt); + break; + case ICMP_UNREACH_NEEDFRAG: + type = ICMP6_PACKET_TOO_BIG; + code = 0; + mtu += 20; + break; + default: + return (-1); + } + break; + case ICMP_TIMXCEED: + type = ICMP6_TIME_EXCEEDED; + break; + case ICMP_PARAMPROB: + type = ICMP6_PARAM_PROB; + switch (code) { + case ICMP_PARAMPROB_ERRATPTR: + code = ICMP6_PARAMPROB_HEADER; + break; + case ICMP_PARAMPROB_LENGTH: + code = ICMP6_PARAMPROB_HEADER; + break; + default: + return (-1); + } + + ptr = icmp4->icmp_pptr; + if (ptr == 0 || ptr == PTR_IP(ip_tos)) + ; /* preserve */ + else if (ptr == PTR_IP(ip_len) || + ptr == PTR_IP(ip_len) + 1) + ptr = PTR_IP6(ip6_plen); + else if (ptr == PTR_IP(ip_ttl)) + ptr = PTR_IP6(ip6_hlim); + else if (ptr == PTR_IP(ip_p)) + ptr = PTR_IP6(ip6_nxt); + else if (ptr >= PTR_IP(ip_src) && + ptr < PTR_IP(ip_dst)) + ptr = PTR_IP6(ip6_src); + else if (ptr >= PTR_IP(ip_dst) && + ptr < sizeof(struct pf_ip)) + ptr = PTR_IP6(ip6_dst); + else { + return (-1); + } + break; + default: + return (-1); + } + + pf_patch_8(pd, &icmp4->icmp_type, type, PF_HI); + pf_patch_8(pd, &icmp4->icmp_code, code, PF_LO); + pf_patch_16(pd, &icmp4->icmp_nextmtu, htons(mtu)); + if (ptr >= 0) + pf_patch_32(pd, &icmp4->icmp_void, htonl(ptr)); + break; + } + + return (0); +} +#endif /* INET6 */ + +/* + * Need to modulate the sequence numbers in the TCP SACK option + * (credits to Krzysztof Pfaff for report and patch) + */ +int +pf_modulate_sack(struct pf_pdesc *pd, struct pf_state_peer *dst) +{ + struct sackblk sack; + int copyback = 0, i; + int olen, optsoff; + u_int8_t opts[MAX_TCPOPTLEN], *opt, *eoh; + + olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr); + optsoff = pd->off + sizeof(struct pf_tcphdr); +#define TCPOLEN_MINSACK (TCPOLEN_SACK + 2) + if (olen < TCPOLEN_MINSACK || + !pf_pull_hdr(pd->m, optsoff, opts, olen, NULL, pd->af)) + return (0); + + eoh = opts + olen; + opt = opts; + while ((opt = pf_find_tcpopt(opt, opts, olen, + TCPOPT_SACK, TCPOLEN_MINSACK)) != NULL) + { + size_t safelen = MIN(opt[1], (eoh - opt)); + for (i = 2; i + TCPOLEN_SACK <= safelen; i += TCPOLEN_SACK) { + size_t startoff = (opt + i) - opts; + memcpy(&sack, &opt[i], sizeof(sack)); + pf_patch_32_unaligned(pd, &sack.start, + htonl(ntohl(sack.start) - dst->seqdiff), + PF_ALGNMNT(startoff)); + pf_patch_32_unaligned(pd, &sack.end, + htonl(ntohl(sack.end) - dst->seqdiff), + PF_ALGNMNT(startoff + sizeof(sack.start))); + memcpy(&opt[i], &sack, sizeof(sack)); + } + copyback = 1; + opt += opt[1]; + } + + if (copyback) + m_copyback(pd->m, optsoff, olen, opts, M_NOWAIT); + return (copyback); +} + +struct mbuf * +pf_build_tcp(const struct pf_rule *r, sa_family_t af, + const struct pf_addr *saddr, const struct pf_addr *daddr, + u_int16_t sport, u_int16_t dport, u_int32_t seq, u_int32_t ack, + u_int8_t flags, u_int16_t win, u_int16_t mss, u_int8_t ttl, int tag, + u_int16_t rtag, u_int sack, u_int rdom, u_short *reason) +{ + struct mbuf *m; + int len, tlen; + struct pf_ip *h; +#ifdef INET6 + struct pf_ip6_hdr *h6; +#endif /* INET6 */ + struct pf_tcphdr *th; + char *opt; + + /* maximum segment size tcp option */ + tlen = sizeof(struct pf_tcphdr); + if (mss) + tlen += 4; + if (sack) + tlen += 2; + + switch (af) { + case AF_INET: + len = sizeof(struct pf_ip) + tlen; + break; +#ifdef INET6 + case AF_INET6: + len = sizeof(struct pf_ip6_hdr) + tlen; + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + + /* create outgoing mbuf */ + m = m_gethdr(M_DONTWAIT, MT_HEADER); + if (m == NULL) { + REASON_SET(reason, PFRES_MEMORY); + return (NULL); + } + if (tag) + m->m_pkthdr.pf.flags |= PF_TAG_GENERATED; + m->m_pkthdr.pf.tag = rtag; + m->m_pkthdr.ph_rtableid = rdom; + if (r && (r->scrub_flags & PFSTATE_SETPRIO)) + m->m_pkthdr.pf.prio = r->set_prio[0]; + if (r && r->qid) + m->m_pkthdr.pf.qid = r->qid; + m->m_data += max_linkhdr; + m->m_pkthdr.len = m->m_len = len; + m->m_pkthdr.ph_ifidx = 0; + m->m_pkthdr.csum_flags |= M_TCP_CSUM_OUT; + memset(m->m_data, 0, len); + switch (af) { + case AF_INET: + h = mtod(m, struct pf_ip *); + h->ip_p = IPPROTO_TCP; + h->ip_len = htons(tlen); + h->ip_v = 4; + h->ip_hl = sizeof(*h) >> 2; + h->ip_tos = IPTOS_LOWDELAY; + h->ip_len = htons(len); + h->ip_off = htons(atomic_load_int(&ip_mtudisc) ? IP_DF : 0); + h->ip_ttl = ttl ? ttl : atomic_load_int(&ip_defttl); + h->ip_sum = 0; + h->ip_src.s_addr = saddr->v4.s_addr; + h->ip_dst.s_addr = daddr->v4.s_addr; + + th = (struct pf_tcphdr *)((caddr_t)h + sizeof(struct pf_ip)); + break; +#ifdef INET6 + case AF_INET6: + h6 = mtod(m, struct pf_ip6_hdr *); + h6->ip6_nxt = IPPROTO_TCP; + h6->ip6_plen = htons(tlen); + h6->ip6_vfc |= IPV6_VERSION; + h6->ip6_hlim = IPV6_DEFHLIM; + memcpy(&h6->ip6_src, &saddr->v6, sizeof(struct in6_addr)); + memcpy(&h6->ip6_dst, &daddr->v6, sizeof(struct in6_addr)); + + th = (struct pf_tcphdr *)((caddr_t)h6 + sizeof(struct pf_ip6_hdr)); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + + /* TCP header */ + th->th_sport = sport; + th->th_dport = dport; + th->th_seq = htonl(seq); + th->th_ack = htonl(ack); + th->th_off = tlen >> 2; + th->th_flags = flags; + th->th_win = htons(win); + + opt = (char *)(th + 1); + if (mss) { + opt[0] = TCPOPT_MAXSEG; + opt[1] = 4; + mss = htons(mss); + memcpy((opt + 2), &mss, 2); + opt += 4; + } + if (sack) { + opt[0] = TCPOPT_SACK_PERMITTED; + opt[1] = 2; + opt += 2; + } + + return (m); +} + +void +pf_send_tcp(const struct pf_rule *r, sa_family_t af, + const struct pf_addr *saddr, const struct pf_addr *daddr, + u_int16_t sport, u_int16_t dport, u_int32_t seq, u_int32_t ack, + u_int8_t flags, u_int16_t win, u_int16_t mss, u_int8_t ttl, int tag, + u_int16_t rtag, u_int rdom, u_short *reason) +{ + struct mbuf *m; + + if ((m = pf_build_tcp(r, af, saddr, daddr, sport, dport, seq, ack, + flags, win, mss, ttl, tag, rtag, 0, rdom, reason)) == NULL) + return; + + switch (af) { + case AF_INET: + ip_send(m); + break; +#ifdef INET6 + case AF_INET6: + ip6_send(m); + break; +#endif /* INET6 */ + } +} + +static void +pf_send_challenge_ack(struct pf_pdesc *pd, struct pf_state *st, + struct pf_state_peer *src, struct pf_state_peer *dst, u_short *reason) +{ + /* + * We are sending challenge ACK as a response to SYN packet, which + * matches existing state (modulo TCP window check). Therefore packet + * must be sent on behalf of destination. + * + * We expect sender to remain either silent, or send RST packet + * so both, firewall and remote peer, can purge dead state from + * memory. + */ + pf_send_tcp(st->rule.ptr, pd->af, pd->dst, pd->src, + pd->hdr.tcp.th_dport, pd->hdr.tcp.th_sport, dst->seqlo, + src->seqlo, TH_ACK, 0, 0, st->rule.ptr->return_ttl, 1, 0, + pd->rdomain, reason); +} + +void +pf_send_icmp(struct mbuf *m, u_int8_t type, u_int8_t code, int param, + sa_family_t af, struct pf_rule *r, u_int rdomain) +{ + struct mbuf *m0; + + if ((m0 = m_copym(m, 0, M_COPYALL, M_NOWAIT)) == NULL) + return; + + m0->m_pkthdr.pf.flags |= PF_TAG_GENERATED; + m0->m_pkthdr.ph_rtableid = rdomain; + if (r && (r->scrub_flags & PFSTATE_SETPRIO)) + m0->m_pkthdr.pf.prio = r->set_prio[0]; + if (r && r->qid) + m0->m_pkthdr.pf.qid = r->qid; + + switch (af) { + case AF_INET: + icmp_error(m0, type, code, 0, param); + break; +#ifdef INET6 + case AF_INET6: + icmp6_error(m0, type, code, param); + break; +#endif /* INET6 */ + } +} + +/* + * Return ((n = 0) == (a = b [with mask m])) + * Note: n != 0 => returns (a != b [with mask m]) + */ +int +pf_match_addr(u_int8_t n, struct pf_addr *a, struct pf_addr *m, + struct pf_addr *b, sa_family_t af) +{ + switch (af) { + case AF_INET: + if ((a->addr32[0] & m->addr32[0]) == + (b->addr32[0] & m->addr32[0])) + return (n == 0); + break; +#ifdef INET6 + case AF_INET6: + if (((a->addr32[0] & m->addr32[0]) == + (b->addr32[0] & m->addr32[0])) && + ((a->addr32[1] & m->addr32[1]) == + (b->addr32[1] & m->addr32[1])) && + ((a->addr32[2] & m->addr32[2]) == + (b->addr32[2] & m->addr32[2])) && + ((a->addr32[3] & m->addr32[3]) == + (b->addr32[3] & m->addr32[3]))) + return (n == 0); + break; +#endif /* INET6 */ + } + + return (n != 0); +} + +/* + * Return 1 if b <= a <= e, otherwise return 0. + */ +int +pf_match_addr_range(struct pf_addr *b, struct pf_addr *e, + struct pf_addr *a, sa_family_t af) +{ + switch (af) { + case AF_INET: + if ((ntohl(a->addr32[0]) < ntohl(b->addr32[0])) || + (ntohl(a->addr32[0]) > ntohl(e->addr32[0]))) + return (0); + break; +#ifdef INET6 + case AF_INET6: { + int i; + + /* check a >= b */ + for (i = 0; i < 4; ++i) + if (ntohl(a->addr32[i]) > ntohl(b->addr32[i])) + break; + else if (ntohl(a->addr32[i]) < ntohl(b->addr32[i])) + return (0); + /* check a <= e */ + for (i = 0; i < 4; ++i) + if (ntohl(a->addr32[i]) < ntohl(e->addr32[i])) + break; + else if (ntohl(a->addr32[i]) > ntohl(e->addr32[i])) + return (0); + break; + } +#endif /* INET6 */ + } + return (1); +} + +int +pf_match(u_int8_t op, u_int32_t a1, u_int32_t a2, u_int32_t p) +{ + switch (op) { + case PF_OP_IRG: + return ((p > a1) && (p < a2)); + case PF_OP_XRG: + return ((p < a1) || (p > a2)); + case PF_OP_RRG: + return ((p >= a1) && (p <= a2)); + case PF_OP_EQ: + return (p == a1); + case PF_OP_NE: + return (p != a1); + case PF_OP_LT: + return (p < a1); + case PF_OP_LE: + return (p <= a1); + case PF_OP_GT: + return (p > a1); + case PF_OP_GE: + return (p >= a1); + } + return (0); /* never reached */ +} + +int +pf_match_port(u_int8_t op, u_int16_t a1, u_int16_t a2, u_int16_t p) +{ + return (pf_match(op, ntohs(a1), ntohs(a2), ntohs(p))); +} + +int +pf_match_uid(u_int8_t op, uid_t a1, uid_t a2, uid_t u) +{ + if (u == -1 && op != PF_OP_EQ && op != PF_OP_NE) + return (0); + return (pf_match(op, a1, a2, u)); +} + +int +pf_match_gid(u_int8_t op, gid_t a1, gid_t a2, gid_t g) +{ + if (g == -1 && op != PF_OP_EQ && op != PF_OP_NE) + return (0); + return (pf_match(op, a1, a2, g)); +} + +int +pf_match_tag(struct mbuf *m, struct pf_rule *r, int *tag) +{ + if (*tag == -1) + *tag = m->m_pkthdr.pf.tag; + + return ((!r->match_tag_not && r->match_tag == *tag) || + (r->match_tag_not && r->match_tag != *tag)); +} + +int +pf_match_rcvif(struct mbuf *m, struct pf_rule *r) +{ + struct ifnet *ifp; + struct pfi_kif *kif = NULL; + + if (m->m_pkthdr.ph_ifidx == 0) + return (0); + + smr_read_enter(); + ifp = if_get_smr(m->m_pkthdr.ph_ifidx); + if (ifp != NULL) { + kif = (struct pfi_kif *)ifp->if_pf_kif; +#if NCARP > 0 + if (ifp->if_type == IFT_CARP) { + struct ifnet *ifp0 = if_get_smr(ifp->if_carpdevidx); + if (ifp0 != NULL) + kif = (struct pfi_kif *)ifp0->if_pf_kif; + } +#endif /* NCARP */ + } + smr_read_leave(); + + if (kif == NULL) { + DPFPRINTF(LOG_ERR, + "%s: kif == NULL, @%d via %s", __func__, + r->nr, r->rcv_ifname); + return (0); + } + + return (pfi_kif_match(r->rcv_kif, kif)); +} + +void +pf_tag_packet(struct mbuf *m, int tag, int rtableid) +{ + if (tag > 0) + m->m_pkthdr.pf.tag = tag; + if (rtableid >= 0) + m->m_pkthdr.ph_rtableid = (u_int)rtableid; +} + +void +pf_anchor_stack_init(void) +{ + struct pf_anchor_stackframe *stack; + + stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack); + stack[PF_ANCHOR_STACK_MAX].sf_stack_top = &stack[0]; + cpumem_leave(pf_anchor_stack, stack); +} + +int +pf_anchor_stack_is_full(struct pf_anchor_stackframe *sf) +{ + struct pf_anchor_stackframe *stack; + int rv; + + stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack); + rv = (sf == &stack[PF_ANCHOR_STACK_MAX]); + cpumem_leave(pf_anchor_stack, stack); + + return (rv); +} + +int +pf_anchor_stack_is_empty(struct pf_anchor_stackframe *sf) +{ + struct pf_anchor_stackframe *stack; + int rv; + + stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack); + rv = (sf == &stack[0]); + cpumem_leave(pf_anchor_stack, stack); + + return (rv); +} + +struct pf_anchor_stackframe * +pf_anchor_stack_top(void) +{ + struct pf_anchor_stackframe *stack; + struct pf_anchor_stackframe *top_sf; + + stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack); + top_sf = stack[PF_ANCHOR_STACK_MAX].sf_stack_top; + cpumem_leave(pf_anchor_stack, stack); + + return (top_sf); +} + +int +pf_anchor_stack_push(struct pf_ruleset *rs, struct pf_rule *anchor, + struct pf_rule *r, struct pf_anchor *child, int jump_target) +{ + struct pf_anchor_stackframe *stack; + struct pf_anchor_stackframe *top_sf = pf_anchor_stack_top(); + + top_sf++; + if (pf_anchor_stack_is_full(top_sf)) + return (-1); + + top_sf->sf_rs = rs; + top_sf->sf_anchor = anchor; + top_sf->sf_r = r; + top_sf->sf_child = child; + top_sf->sf_jump_target = jump_target; + + stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack); + + if ((top_sf <= &stack[0]) || (top_sf >= &stack[PF_ANCHOR_STACK_MAX])) + panic("%s: top frame outside of anchor stack range", __func__); + + stack[PF_ANCHOR_STACK_MAX].sf_stack_top = top_sf; + cpumem_leave(pf_anchor_stack, stack); + + return (0); +} + +int +pf_anchor_stack_pop(struct pf_ruleset **rs, struct pf_rule **anchor, + struct pf_rule **r, struct pf_anchor **child, int *jump_target) +{ + struct pf_anchor_stackframe *top_sf = pf_anchor_stack_top(); + struct pf_anchor_stackframe *stack; + int on_top; + + stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack); + if (pf_anchor_stack_is_empty(top_sf)) { + on_top = -1; + } else { + if ((top_sf <= &stack[0]) || + (top_sf >= &stack[PF_ANCHOR_STACK_MAX])) + panic("%s: top frame outside of anchor stack range", + __func__); + + *rs = top_sf->sf_rs; + *anchor = top_sf->sf_anchor; + *r = top_sf->sf_r; + *child = top_sf->sf_child; + *jump_target = top_sf->sf_jump_target; + top_sf--; + stack[PF_ANCHOR_STACK_MAX].sf_stack_top = top_sf; + on_top = 0; + } + cpumem_leave(pf_anchor_stack, stack); + + return (on_top); +} + +void +pf_poolmask(struct pf_addr *naddr, struct pf_addr *raddr, + struct pf_addr *rmask, struct pf_addr *saddr, sa_family_t af) +{ + switch (af) { + case AF_INET: + naddr->addr32[0] = (raddr->addr32[0] & rmask->addr32[0]) | + ((rmask->addr32[0] ^ 0xffffffff ) & saddr->addr32[0]); + break; +#ifdef INET6 + case AF_INET6: + naddr->addr32[0] = (raddr->addr32[0] & rmask->addr32[0]) | + ((rmask->addr32[0] ^ 0xffffffff ) & saddr->addr32[0]); + naddr->addr32[1] = (raddr->addr32[1] & rmask->addr32[1]) | + ((rmask->addr32[1] ^ 0xffffffff ) & saddr->addr32[1]); + naddr->addr32[2] = (raddr->addr32[2] & rmask->addr32[2]) | + ((rmask->addr32[2] ^ 0xffffffff ) & saddr->addr32[2]); + naddr->addr32[3] = (raddr->addr32[3] & rmask->addr32[3]) | + ((rmask->addr32[3] ^ 0xffffffff ) & saddr->addr32[3]); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } +} + +void +pf_addr_inc(struct pf_addr *addr, sa_family_t af) +{ + switch (af) { + case AF_INET: + addr->addr32[0] = htonl(ntohl(addr->addr32[0]) + 1); + break; +#ifdef INET6 + case AF_INET6: + if (addr->addr32[3] == 0xffffffff) { + addr->addr32[3] = 0; + if (addr->addr32[2] == 0xffffffff) { + addr->addr32[2] = 0; + if (addr->addr32[1] == 0xffffffff) { + addr->addr32[1] = 0; + addr->addr32[0] = + htonl(ntohl(addr->addr32[0]) + 1); + } else + addr->addr32[1] = + htonl(ntohl(addr->addr32[1]) + 1); + } else + addr->addr32[2] = + htonl(ntohl(addr->addr32[2]) + 1); + } else + addr->addr32[3] = + htonl(ntohl(addr->addr32[3]) + 1); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } +} + +int +pf_socket_lookup(struct pf_pdesc *pd) +{ + struct pf_addr *saddr, *daddr; + u_int16_t sport, dport; + struct inpcbtable *table; + struct inpcb *inp; + + pd->lookup.uid = -1; + pd->lookup.gid = -1; + pd->lookup.pid = NO_PID; + switch (pd->virtual_proto) { + case IPPROTO_TCP: + sport = pd->hdr.tcp.th_sport; + dport = pd->hdr.tcp.th_dport; + PF_ASSERT_LOCKED(); + NET_ASSERT_LOCKED(); + table = &tcbtable; + break; + case IPPROTO_UDP: + sport = pd->hdr.udp.uh_sport; + dport = pd->hdr.udp.uh_dport; + PF_ASSERT_LOCKED(); + NET_ASSERT_LOCKED(); + table = &udbtable; + break; + default: + return (-1); + } + if (pd->dir == PF_IN) { + saddr = pd->src; + daddr = pd->dst; + } else { + u_int16_t p; + + p = sport; + sport = dport; + dport = p; + saddr = pd->dst; + daddr = pd->src; + } + switch (pd->af) { + case AF_INET: + /* + * Fails when rtable is changed while evaluating the ruleset + * The socket looked up will not match the one hit in the end. + */ + inp = in_pcblookup(table, saddr->v4, sport, daddr->v4, dport, + pd->rdomain); + if (inp == NULL) { + inp = in_pcblookup_listen(table, daddr->v4, dport, + NULL, pd->rdomain); + if (inp == NULL) + return (-1); + } + break; +#ifdef INET6 + case AF_INET6: + if (pd->virtual_proto == IPPROTO_UDP) + table = &udb6table; + if (pd->virtual_proto == IPPROTO_TCP) + table = &tcb6table; + inp = in6_pcblookup(table, &saddr->v6, sport, &daddr->v6, + dport, pd->rdomain); + if (inp == NULL) { + inp = in6_pcblookup_listen(table, &daddr->v6, dport, + NULL, pd->rdomain); + if (inp == NULL) + return (-1); + } + break; +#endif /* INET6 */ + default: + unhandled_af(pd->af); + } + pd->lookup.uid = inp->inp_socket->so_euid; + pd->lookup.gid = inp->inp_socket->so_egid; + pd->lookup.pid = inp->inp_socket->so_cpid; + in_pcbunref(inp); + return (1); +} + +/* post: r => (r[0] == type /\ r[1] >= min_typelen >= 2 "validity" + * /\ (eoh - r) >= min_typelen >= 2 "safety" ) + * + * warning: r + r[1] may exceed opts bounds for r[1] > min_typelen + */ +u_int8_t* +pf_find_tcpopt(u_int8_t *opt, u_int8_t *opts, size_t hlen, u_int8_t type, + u_int8_t min_typelen) +{ + u_int8_t *eoh = opts + hlen; + + if (min_typelen < 2) + return (NULL); + + while ((eoh - opt) >= min_typelen) { + switch (*opt) { + case TCPOPT_EOL: + /* FALLTHROUGH - Workaround the failure of some + systems to NOP-pad their bzero'd option buffers, + producing spurious EOLs */ + case TCPOPT_NOP: + opt++; + continue; + default: + if (opt[0] == type && + opt[1] >= min_typelen) + return (opt); + } + + opt += MAX(opt[1], 2); /* evade infinite loops */ + } + + return (NULL); +} + +u_int8_t +pf_get_wscale(struct pf_pdesc *pd) +{ + int olen; + u_int8_t opts[MAX_TCPOPTLEN], *opt; + u_int8_t wscale = 0; + + olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr); + if (olen < TCPOLEN_WINDOW || !pf_pull_hdr(pd->m, + pd->off + sizeof(struct pf_tcphdr), opts, olen, NULL, pd->af)) + return (0); + + opt = opts; + while ((opt = pf_find_tcpopt(opt, opts, olen, + TCPOPT_WINDOW, TCPOLEN_WINDOW)) != NULL) { + wscale = opt[2]; + wscale = MIN(wscale, TCP_MAX_WINSHIFT); + wscale |= PF_WSCALE_FLAG; + + opt += opt[1]; + } + + return (wscale); +} + +u_int16_t +pf_get_mss(struct pf_pdesc *pd, uint16_t mssdflt) +{ + int olen; + u_int8_t opts[MAX_TCPOPTLEN], *opt; + u_int16_t mss; + + olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr); + if (olen < TCPOLEN_MAXSEG || !pf_pull_hdr(pd->m, + pd->off + sizeof(struct pf_tcphdr), opts, olen, NULL, pd->af)) + return (0); + + mss = mssdflt; + opt = opts; + while ((opt = pf_find_tcpopt(opt, opts, olen, + TCPOPT_MAXSEG, TCPOLEN_MAXSEG)) != NULL) { + memcpy(&mss, (opt + 2), 2); + mss = ntohs(mss); + + opt += opt[1]; + } + return (mss); +} + +u_int16_t +pf_calc_mss(struct pf_addr *addr, sa_family_t af, int rtableid, uint16_t offer, + uint16_t mssdflt) +{ + struct ifnet *ifp; + struct sockaddr_in *dst; +#ifdef INET6 + struct sockaddr_in6 *dst6; +#endif /* INET6 */ + struct rtentry *rt = NULL; + struct sockaddr_storage ss; + int hlen, mss; + + memset(&ss, 0, sizeof(ss)); + + switch (af) { + case AF_INET: + hlen = sizeof(struct pf_ip); + dst = (struct sockaddr_in *)&ss; + dst->sin_family = AF_INET; + dst->/* PFLINUX sin_len */; + dst->sin_addr = addr->v4; + rt = rtalloc(sintosa(dst), 0, rtableid); + break; +#ifdef INET6 + case AF_INET6: + hlen = sizeof(struct pf_ip6_hdr); + dst6 = (struct sockaddr_in6 *)&ss; + dst6->sin6_family = AF_INET6; + dst6->sin6_len = sizeof(*dst6); + dst6->sin6_addr = addr->v6; + rt = rtalloc(sin6tosa(dst6), 0, rtableid); + break; +#endif /* INET6 */ + } + + mss = mssdflt; + if (rt != NULL && (ifp = if_get(rt->rt_ifidx)) != NULL) { + mss = ifp->if_mtu - hlen - sizeof(struct pf_tcphdr); + mss = imax(mss, mssdflt); + if_put(ifp); + } + rtfree(rt); + mss = imin(mss, offer); + mss = imax(mss, 64); /* sanity - at least max opt space */ + return (mss); +} + +static __inline int +pf_set_rt_ifp(struct pf_state *st, struct pf_addr *saddr, sa_family_t af, + struct pf_src_node **sns) +{ + struct pf_rule *r = st->rule.ptr; + int rv; + + if (!r->rt) + return (0); + + rv = pf_map_addr(af, r, saddr, &st->rt_addr, NULL, sns, + &r->route, PF_SN_ROUTE); + if (rv == 0) + st->rt = r->rt; + + return (rv); +} + +u_int32_t +pf_tcp_iss(struct pf_pdesc *pd) +{ + SHA2_CTX ctx; + union { + uint8_t bytes[SHA512_DIGEST_LENGTH]; + uint32_t words[1]; + } digest; + + if (pf_tcp_secret_init == 0) { + arc4random_buf(pf_tcp_secret, sizeof(pf_tcp_secret)); + SHA512Init(&pf_tcp_secret_ctx); + SHA512Update(&pf_tcp_secret_ctx, pf_tcp_secret, + sizeof(pf_tcp_secret)); + pf_tcp_secret_init = 1; + } + ctx = pf_tcp_secret_ctx; + + SHA512Update(&ctx, &pd->rdomain, sizeof(pd->rdomain)); + SHA512Update(&ctx, &pd->hdr.tcp.th_sport, sizeof(u_short)); + SHA512Update(&ctx, &pd->hdr.tcp.th_dport, sizeof(u_short)); + switch (pd->af) { + case AF_INET: + SHA512Update(&ctx, &pd->src->v4, sizeof(struct in_addr)); + SHA512Update(&ctx, &pd->dst->v4, sizeof(struct in_addr)); + break; +#ifdef INET6 + case AF_INET6: + SHA512Update(&ctx, &pd->src->v6, sizeof(struct in6_addr)); + SHA512Update(&ctx, &pd->dst->v6, sizeof(struct in6_addr)); + break; +#endif /* INET6 */ + } + SHA512Final(digest.bytes, &ctx); + pf_tcp_iss_off += 4096; + return (digest.words[0] + READ_ONCE(tcp_iss) + pf_tcp_iss_off); +} + +void +pf_rule_to_actions(struct pf_rule *r, struct pf_rule_actions *a) +{ + if (r->qid) + a->qid = r->qid; + if (r->pqid) + a->pqid = r->pqid; + if (r->rtableid >= 0) + a->rtableid = r->rtableid; +#if NPFLOG > 0 + a->log |= r->log; +#endif /* NPFLOG > 0 */ + if (r->scrub_flags & PFSTATE_SETTOS) + a->set_tos = r->set_tos; + if (r->min_ttl) + a->min_ttl = r->min_ttl; + if (r->max_mss) + a->max_mss = r->max_mss; + a->flags |= (r->scrub_flags & (PFSTATE_NODF|PFSTATE_RANDOMID| + PFSTATE_SETTOS|PFSTATE_SCRUB_TCP|PFSTATE_SETPRIO)); + if (r->scrub_flags & PFSTATE_SETPRIO) { + a->set_prio[0] = r->set_prio[0]; + a->set_prio[1] = r->set_prio[1]; + } + if (r->rule_flag & PFRULE_SETDELAY) + a->delay = r->delay; +} + +#define PF_TEST_ATTRIB(t, a) \ + if (t) { \ + r = a; \ + continue; \ + } else do { \ + } while (0) + +enum pf_test_status +pf_match_rule(struct pf_test_ctx *ctx, struct pf_ruleset *ruleset) +{ + struct pf_rule *r; + struct pf_anchor *child = NULL; + int target; + + pf_anchor_stack_init(); +enter_ruleset: + r = TAILQ_FIRST(ruleset->rules.active.ptr); + while (r != NULL) { + struct pf_statelim *stlim = NULL; + struct pf_sourcelim *srlim = NULL; + struct pf_source *sr = NULL; + unsigned int gen; + + PF_TEST_ATTRIB(r->rule_flag & PFRULE_EXPIRED, + TAILQ_NEXT(r, entries)); + r->evaluations++; + PF_TEST_ATTRIB( + (pfi_kif_match(r->kif, ctx->pd->kif) == r->ifnot), + r->skip[PF_SKIP_IFP].ptr); + PF_TEST_ATTRIB((r->direction && r->direction != ctx->pd->dir), + r->skip[PF_SKIP_DIR].ptr); + PF_TEST_ATTRIB((r->onrdomain >= 0 && + (r->onrdomain == ctx->pd->rdomain) == r->ifnot), + r->skip[PF_SKIP_RDOM].ptr); + PF_TEST_ATTRIB((r->af && r->af != ctx->pd->af), + r->skip[PF_SKIP_AF].ptr); + PF_TEST_ATTRIB((r->proto && r->proto != ctx->pd->proto), + r->skip[PF_SKIP_PROTO].ptr); + PF_TEST_ATTRIB((PF_MISMATCHAW(&r->src.addr, &ctx->pd->nsaddr, + ctx->pd->naf, r->src.neg, ctx->pd->kif, + ctx->act.rtableid)), + r->skip[PF_SKIP_SRC_ADDR].ptr); + PF_TEST_ATTRIB((PF_MISMATCHAW(&r->dst.addr, &ctx->pd->ndaddr, + ctx->pd->af, r->dst.neg, NULL, ctx->act.rtableid)), + r->skip[PF_SKIP_DST_ADDR].ptr); + + switch (ctx->pd->virtual_proto) { + case PF_VPROTO_FRAGMENT: + /* tcp/udp only. port_op always 0 in other cases */ + PF_TEST_ATTRIB((r->src.port_op || r->dst.port_op), + TAILQ_NEXT(r, entries)); + PF_TEST_ATTRIB((ctx->pd->proto == IPPROTO_TCP && + r->flagset), + TAILQ_NEXT(r, entries)); + /* icmp only. type/code always 0 in other cases */ + PF_TEST_ATTRIB((r->type || r->code), + TAILQ_NEXT(r, entries)); + /* tcp/udp only. {uid|gid}.op always 0 in other cases */ + PF_TEST_ATTRIB((r->gid.op || r->uid.op), + TAILQ_NEXT(r, entries)); + break; + + case IPPROTO_TCP: + PF_TEST_ATTRIB(((r->flagset & ctx->th->th_flags) != + r->flags), + TAILQ_NEXT(r, entries)); + PF_TEST_ATTRIB((r->os_fingerprint != PF_OSFP_ANY && + !pf_osfp_match(pf_osfp_fingerprint(ctx->pd), + r->os_fingerprint)), + TAILQ_NEXT(r, entries)); + /* FALLTHROUGH */ + + case IPPROTO_UDP: + /* tcp/udp only. port_op always 0 in other cases */ + PF_TEST_ATTRIB((r->src.port_op && + !pf_match_port(r->src.port_op, r->src.port[0], + r->src.port[1], ctx->pd->nsport)), + r->skip[PF_SKIP_SRC_PORT].ptr); + PF_TEST_ATTRIB((r->dst.port_op && + !pf_match_port(r->dst.port_op, r->dst.port[0], + r->dst.port[1], ctx->pd->ndport)), + r->skip[PF_SKIP_DST_PORT].ptr); + /* tcp/udp only. uid.op always 0 in other cases */ + PF_TEST_ATTRIB((r->uid.op && (ctx->pd->lookup.done || + (ctx->pd->lookup.done = + pf_socket_lookup(ctx->pd), 1)) && + !pf_match_uid(r->uid.op, r->uid.uid[0], + r->uid.uid[1], ctx->pd->lookup.uid)), + TAILQ_NEXT(r, entries)); + /* tcp/udp only. gid.op always 0 in other cases */ + PF_TEST_ATTRIB((r->gid.op && (ctx->pd->lookup.done || + (ctx->pd->lookup.done = + pf_socket_lookup(ctx->pd), 1)) && + !pf_match_gid(r->gid.op, r->gid.gid[0], + r->gid.gid[1], ctx->pd->lookup.gid)), + TAILQ_NEXT(r, entries)); + break; + + case IPPROTO_ICMP: + /* icmp only. type always 0 in other cases */ + PF_TEST_ATTRIB((r->type && + r->type != ctx->icmptype + 1), + TAILQ_NEXT(r, entries)); + /* icmp only. type always 0 in other cases */ + PF_TEST_ATTRIB((r->code && + r->code != ctx->icmpcode + 1), + TAILQ_NEXT(r, entries)); + /* icmp only. don't create states on replies */ + PF_TEST_ATTRIB((r->keep_state && !ctx->state_icmp && + (r->rule_flag & PFRULE_STATESLOPPY) == 0 && + ctx->icmp_dir != PF_IN), + TAILQ_NEXT(r, entries)); + break; + + case IPPROTO_ICMPV6: + /* icmp only. type always 0 in other cases */ + PF_TEST_ATTRIB((r->type && + r->type != ctx->icmptype + 1), + TAILQ_NEXT(r, entries)); + /* icmp only. type always 0 in other cases */ + PF_TEST_ATTRIB((r->code && + r->code != ctx->icmpcode + 1), + TAILQ_NEXT(r, entries)); + /* icmp only. don't create states on replies */ + PF_TEST_ATTRIB((r->keep_state && !ctx->state_icmp && + (r->rule_flag & PFRULE_STATESLOPPY) == 0 && + ctx->icmp_dir != PF_IN && + ctx->icmptype != ND_NEIGHBOR_ADVERT), + TAILQ_NEXT(r, entries)); + break; + + default: + break; + } + + PF_TEST_ATTRIB((r->rule_flag & PFRULE_FRAGMENT && + ctx->pd->virtual_proto != PF_VPROTO_FRAGMENT), + TAILQ_NEXT(r, entries)); + PF_TEST_ATTRIB((r->tos && !(r->tos == ctx->pd->tos)), + TAILQ_NEXT(r, entries)); + PF_TEST_ATTRIB((r->prob && + r->prob <= arc4random_uniform(UINT_MAX - 1) + 1), + TAILQ_NEXT(r, entries)); + PF_TEST_ATTRIB((r->match_tag && + !pf_match_tag(ctx->pd->m, r, &ctx->tag)), + TAILQ_NEXT(r, entries)); + PF_TEST_ATTRIB((r->rcv_kif && pf_match_rcvif(ctx->pd->m, r) == + r->rcvifnot), + TAILQ_NEXT(r, entries)); + PF_TEST_ATTRIB((r->prio && + (r->prio == PF_PRIO_ZERO ? 0 : r->prio) != + ctx->pd->m->m_pkthdr.pf.prio), + TAILQ_NEXT(r, entries)); + + if (r->statelim.id != PF_STATELIM_ID_NONE) { + stlim = pf_statelim_find(r->statelim.id); + + /* + * Treat a missing limiter like an exhausted limiter. + * There is no "backend" to get a resource out of + * so the rule can't create state. + */ + PF_TEST_ATTRIB(stlim == NULL, + TAILQ_NEXT(r, entries)); + + /* + * An overcommitted pool means this rule + * can't create state. + */ + if (stlim->pfstlim_inuse >= stlim->pfstlim_limit) { + gen = pf_statelim_enter(stlim); + stlim->pfstlim_counters.hardlimited++; + pf_statelim_leave(stlim, gen); + if (r->statelim.limiter_action == PF_LIMITER_BLOCK) { + ctx->limiter_drop = 1; + REASON_SET(&ctx->reason, PFRES_MAXSTATES); + break; /* stop rule processing */ + } + + r = TAILQ_NEXT(r, entries); + continue; + } + + /* + * Is access to the pool rate limited? + */ + if (stlim->pfstlim_rate.limit != 0) { + uint64_t ts = getnsecuptime(); + uint64_t diff = ts - stlim->pfstlim_rate_ts; + + if (diff < stlim->pfstlim_rate_token) { + gen = pf_statelim_enter(stlim); + stlim->pfstlim_counters.ratelimited++; + pf_statelim_leave(stlim, gen); + if (r->statelim.limiter_action == + PF_LIMITER_BLOCK) { + ctx->limiter_drop = 1; + REASON_SET(&ctx->reason, + PFRES_MAXSTATES); + /* stop rule processing */ + break; + } + r = TAILQ_NEXT(r, entries); + continue; + } + + if (diff > stlim->pfstlim_rate_bucket) { + stlim->pfstlim_rate_ts = + ts - stlim->pfstlim_rate_bucket; + } + } + } + + if (r->sourcelim.id != PF_SOURCELIM_ID_NONE) { + struct pf_source key; + + srlim = pf_sourcelim_find(r->sourcelim.id); + + /* + * Treat a missing pool like an overcommitted pool. + * There is no "backend" to get a resource out of + * so the rule can't create state. + */ + PF_TEST_ATTRIB(srlim == NULL, + TAILQ_NEXT(r, entries)); + + pf_source_key(srlim, &key, + ctx->pd->af, ctx->pd->rdomain, ctx->pd->src); + sr = pf_source_find(srlim, &key); + if (sr != NULL) { + /* + * An overcommitted limiter means this rule + * can't create state. + */ + if (sr->pfsr_inuse >= srlim->pfsrlim_limit) { + sr->pfsr_counters.hardlimited++; + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_counters.hardlimited++; + pf_sourcelim_leave(srlim, gen); + if (r->sourcelim.limiter_action == + PF_LIMITER_BLOCK) { + ctx->limiter_drop = 1; + REASON_SET(&ctx->reason, + PFRES_SRCLIMIT); + /* stop rule processing */ + break; + } + r = TAILQ_NEXT(r, entries); + continue; + } + + /* + * Is access to the pool rate limited? + */ + if (srlim->pfsrlim_rate.limit != 0) { + uint64_t ts = getnsecuptime(); + uint64_t diff = ts - sr->pfsr_rate_ts; + + if (diff < srlim->pfsrlim_rate_token) { + sr->pfsr_counters.ratelimited++; + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_counters.ratelimited++; + pf_sourcelim_leave(srlim, gen); + if (r->sourcelim.limiter_action == + PF_LIMITER_BLOCK) { + ctx->limiter_drop = 1; + REASON_SET(&ctx->reason, + PFRES_SRCLIMIT); + /* stop rules */ + break; + } + r = TAILQ_NEXT(r, entries); + continue; + } + + if (diff > srlim->pfsrlim_rate_bucket) { + sr->pfsr_rate_ts = ts - + srlim->pfsrlim_rate_bucket; + } + } + } else { + /* + * a new source entry will (should) + * admit a state. + */ + + if (srlim->pfsrlim_nsources >= + srlim->pfsrlim_entries) { + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_counters.addrlimited++; + pf_sourcelim_leave(srlim, gen); + if (r->sourcelim.limiter_action == + PF_LIMITER_BLOCK) { + ctx->limiter_drop = 1; + REASON_SET(&ctx->reason, + PFRES_SRCLIMIT); + /* stop rules processing */ + break; + } + r = TAILQ_NEXT(r, entries); + continue; + } + } + } + + /* must be last! */ + if (r->pktrate.limit) { + pf_add_threshold(&r->pktrate); + PF_TEST_ATTRIB((pf_check_threshold(&r->pktrate)), + TAILQ_NEXT(r, entries)); + } + + /* FALLTHROUGH */ + if (r->tag) + ctx->tag = r->tag; + if (r->anchor == NULL) { + + if (r->rule_flag & PFRULE_ONCE) { + u_int32_t rule_flag; + + rule_flag = r->rule_flag; + if (((rule_flag & PFRULE_EXPIRED) == 0) && + atomic_cas_uint(&r->rule_flag, rule_flag, + rule_flag | PFRULE_EXPIRED) == rule_flag) { + r->exptime = gettime(); + } else { + r = TAILQ_NEXT(r, entries); + continue; + } + } + + if (r->action == PF_MATCH) { + if ((ctx->ri = pool_get(&pf_rule_item_pl, + PR_NOWAIT)) == NULL) { + REASON_SET(&ctx->reason, PFRES_MEMORY); + return (PF_TEST_FAIL); + } + ctx->ri->r = r; + /* order is irrelevant */ + SLIST_INSERT_HEAD(&ctx->rules, ctx->ri, entry); + ctx->ri = NULL; + pf_rule_to_actions(r, &ctx->act); + if (r->rule_flag & PFRULE_AFTO) + ctx->pd->naf = r->naf; + if (pf_get_transaddr(r, ctx->pd, ctx->sns, + &ctx->nr) == -1) { + REASON_SET(&ctx->reason, + PFRES_TRANSLATE); + return (PF_TEST_FAIL); + } +#if NPFLOG > 0 + if (r->log) { + REASON_SET(&ctx->reason, PFRES_MATCH); + pflog_packet(ctx->pd, ctx->reason, r, + ctx->a, ruleset, NULL); + } +#endif /* NPFLOG > 0 */ + } else { + /* + * found matching r + */ + *ctx->rm = r; + /* + * anchor, with ruleset, where r belongs to + */ + *ctx->am = ctx->a; + /* + * ruleset where r belongs to + */ + *ctx->rsm = ruleset; + /* + * ruleset, where anchor belongs to. + */ + ctx->arsm = ctx->aruleset; + /* + * state/source pools + */ + + ctx->statelim = stlim; + ctx->sourcelim = srlim; + ctx->source = sr; + } + +#if NPFLOG > 0 + if (ctx->act.log & PF_LOG_MATCHES) + pf_log_matches(ctx->pd, r, ctx->a, ruleset, + &ctx->rules); +#endif /* NPFLOG > 0 */ + + if (r->quick) + return (PF_TEST_QUICK); + } else { + ctx->aruleset = &r->anchor->ruleset; + if (r->anchor_wildcard) { + RB_FOREACH(child, pf_anchor_node, + &r->anchor->children) { + if (pf_anchor_stack_push(ruleset, + ctx->a, r, child, + PF_NEXT_CHILD) != 0) + return (PF_TEST_FAIL); + + ctx->a = r; + ruleset = &child->ruleset; + goto enter_ruleset; +next_child: + continue; /* with RB_FOREACH() */ + } + } else { + if (pf_anchor_stack_push(ruleset, ctx->a, + r, child, PF_NEXT_RULE) != 0) + return (PF_TEST_FAIL); + + ctx->a = r; + ruleset = &r->anchor->ruleset; + child = NULL; + goto enter_ruleset; +next_rule: + ; + } + } + r = TAILQ_NEXT(r, entries); + } + + if (pf_anchor_stack_pop(&ruleset, &ctx->a, &r, &child, + &target) == 0) { + + /* stop if any rule matched within quick anchors. */ + if (r->quick && *ctx->am == r) + return (PF_TEST_QUICK); + + switch (target) { + case PF_NEXT_CHILD: + goto next_child; + case PF_NEXT_RULE: + goto next_rule; + default: + panic("%s: unknown jump target", __func__); + } + } + + return (PF_TEST_OK); +} + +int +pf_test_rule(struct pf_pdesc *pd, struct pf_rule **rm, struct pf_state **sm, + struct pf_rule **am, struct pf_ruleset **rsm, u_short *reason) +{ + struct pf_rule *r = NULL; + struct pf_rule *a = NULL; + struct pf_ruleset *ruleset = NULL; + struct pf_state_key *skw = NULL, *sks = NULL; + int rewrite = 0; + u_int16_t virtual_type, virtual_id; + int action = PF_DROP; + struct pf_test_ctx ctx; + int rv; + + PF_ASSERT_LOCKED(); + + memset(&ctx, 0, sizeof(ctx)); + ctx.pd = pd; + ctx.rm = rm; + ctx.am = am; + ctx.rsm = rsm; + ctx.th = &pd->hdr.tcp; + ctx.act.rtableid = pd->rdomain; + ctx.tag = -1; + SLIST_INIT(&ctx.rules); + + if (pd->dir == PF_IN && if_congested()) { + REASON_SET(&ctx.reason, PFRES_CONGEST); + return (PF_DROP); + } + + switch (pd->virtual_proto) { + case IPPROTO_ICMP: + ctx.icmptype = pd->hdr.icmp.icmp_type; + ctx.icmpcode = pd->hdr.icmp.icmp_code; + ctx.state_icmp = pf_icmp_mapping(pd, ctx.icmptype, + &ctx.icmp_dir, &virtual_id, &virtual_type); + if (ctx.icmp_dir == PF_IN) { + pd->osport = pd->nsport = virtual_id; + pd->odport = pd->ndport = virtual_type; + } else { + pd->osport = pd->nsport = virtual_type; + pd->odport = pd->ndport = virtual_id; + } + break; +#ifdef INET6 + case IPPROTO_ICMPV6: + ctx.icmptype = pd->hdr.icmp6.icmp6_type; + ctx.icmpcode = pd->hdr.icmp6.icmp6_code; + ctx.state_icmp = pf_icmp_mapping(pd, ctx.icmptype, + &ctx.icmp_dir, &virtual_id, &virtual_type); + if (ctx.icmp_dir == PF_IN) { + pd->osport = pd->nsport = virtual_id; + pd->odport = pd->ndport = virtual_type; + } else { + pd->osport = pd->nsport = virtual_type; + pd->odport = pd->ndport = virtual_id; + } + break; +#endif /* INET6 */ + } + + ruleset = &pf_main_ruleset; + rv = pf_match_rule(&ctx, ruleset); + if (rv == PF_TEST_FAIL || ctx.limiter_drop == 1) { + REASON_SET(reason, ctx.reason); + goto cleanup; + } + + r = *ctx.rm; /* matching rule */ + a = *ctx.am; /* rule that defines an anchor containing 'r' */ + ruleset = *ctx.rsm;/* ruleset of the anchor defined by the rule 'a' */ + ctx.aruleset = ctx.arsm;/* ruleset of the 'a' rule itself */ + + /* apply actions for last matching pass/block rule */ + pf_rule_to_actions(r, &ctx.act); + if (r->rule_flag & PFRULE_AFTO) + pd->naf = r->naf; + if (pf_get_transaddr(r, pd, ctx.sns, &ctx.nr) == -1) { + REASON_SET(&ctx.reason, PFRES_TRANSLATE); + goto cleanup; + } + REASON_SET(&ctx.reason, PFRES_MATCH); + +#if NPFLOG > 0 + if (r->log) + pflog_packet(pd, ctx.reason, r, a, ruleset, NULL); + if (ctx.act.log & PF_LOG_MATCHES) + pf_log_matches(pd, r, a, ruleset, &ctx.rules); +#endif /* NPFLOG > 0 */ + + if (pd->virtual_proto != PF_VPROTO_FRAGMENT && + (r->action == PF_DROP) && + ((r->rule_flag & PFRULE_RETURNRST) || + (r->rule_flag & PFRULE_RETURNICMP) || + (r->rule_flag & PFRULE_RETURN))) { + if (pd->proto == IPPROTO_TCP && + ((r->rule_flag & PFRULE_RETURNRST) || + (r->rule_flag & PFRULE_RETURN)) && + !(ctx.th->th_flags & TH_RST)) { + u_int32_t ack = + ntohl(ctx.th->th_seq) + pd->p_len; + + if (pf_check_tcp_cksum(pd->m, pd->off, + pd->tot_len - pd->off, pd->af)) + REASON_SET(&ctx.reason, PFRES_PROTCKSUM); + else { + if (ctx.th->th_flags & TH_SYN) + ack++; + if (ctx.th->th_flags & TH_FIN) + ack++; + pf_send_tcp(r, pd->af, pd->dst, + pd->src, ctx.th->th_dport, + ctx.th->th_sport, ntohl(ctx.th->th_ack), + ack, TH_RST|TH_ACK, 0, 0, r->return_ttl, + 1, 0, pd->rdomain, &ctx.reason); + } + } else if ((pd->proto != IPPROTO_ICMP || + ICMP_INFOTYPE(ctx.icmptype)) && pd->af == AF_INET && + r->return_icmp) + pf_send_icmp(pd->m, r->return_icmp >> 8, + r->return_icmp & 255, 0, pd->af, r, pd->rdomain); + else if ((pd->proto != IPPROTO_ICMPV6 || + (ctx.icmptype >= ICMP6_ECHO_REQUEST && + ctx.icmptype != ND_REDIRECT)) && pd->af == AF_INET6 && + r->return_icmp6) + pf_send_icmp(pd->m, r->return_icmp6 >> 8, + r->return_icmp6 & 255, 0, pd->af, r, pd->rdomain); + } + + if (r->action == PF_DROP) + goto cleanup; + + pf_tag_packet(pd->m, ctx.tag, ctx.act.rtableid); + if (ctx.act.rtableid >= 0 && + rtable_l2(ctx.act.rtableid) != pd->rdomain) + pd->destchg = 1; + + if (r->action == PF_PASS && pd->badopts != 0 && ! r->allow_opts) { + REASON_SET(&ctx.reason, PFRES_IPOPTIONS); +#if NPFLOG > 0 + pd->pflog |= PF_LOG_FORCE; +#endif /* NPFLOG > 0 */ + DPFPRINTF(LOG_NOTICE, "dropping packet with " + "ip/ipv6 options in pf_test_rule()"); + goto cleanup; + } + + if (pd->virtual_proto != PF_VPROTO_FRAGMENT + && !ctx.state_icmp && r->keep_state) { + + if (r->rule_flag & PFRULE_SRCTRACK && + pf_insert_src_node(&ctx.sns[PF_SN_NONE], r, PF_SN_NONE, + pd->af, pd->src, NULL, NULL) != 0) { + REASON_SET(&ctx.reason, PFRES_SRCLIMIT); + goto cleanup; + } + + if (r->max_states && (r->states_cur >= r->max_states)) { + pf_status.lcounters[LCNT_STATES]++; + REASON_SET(&ctx.reason, PFRES_MAXSTATES); + goto cleanup; + } + + action = pf_create_state(pd, r, a, ctx.nr, &skw, &sks, + &rewrite, sm, ctx.tag, &ctx.rules, &ctx.act, ctx.sns, + &ctx); + + if (action != PF_PASS) + goto cleanup; + + if (pd->proto == IPPROTO_TCP && + r->keep_state == PF_STATE_SYNPROXY && pd->dir == PF_IN) { + action = pf_synproxy_ack(r, pd, sm, &ctx.act); + if (action != PF_PASS) + return (action); /* PF_SYNPROXY_DROP */ + } + + if (sks != skw) { + struct pf_state_key *sk; + + if (pd->dir == PF_IN) + sk = sks; + else + sk = skw; + rewrite += pf_translate(pd, + &sk->addr[pd->af == pd->naf ? pd->sidx : pd->didx], + sk->port[pd->af == pd->naf ? pd->sidx : pd->didx], + &sk->addr[pd->af == pd->naf ? pd->didx : pd->sidx], + sk->port[pd->af == pd->naf ? pd->didx : pd->sidx], + virtual_type, ctx.icmp_dir); + } + +#ifdef INET6 + if (rewrite && skw->af != sks->af) + action = PF_AFRT; +#endif /* INET6 */ + + } else { + action = PF_PASS; + + while ((ctx.ri = SLIST_FIRST(&ctx.rules))) { + SLIST_REMOVE_HEAD(&ctx.rules, entry); + pool_put(&pf_rule_item_pl, ctx.ri); + } + } + + /* copy back packet headers if needed */ + if (rewrite && pd->hdrlen) { + m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT); + } + +#if NPFSYNC > 0 + if (*sm != NULL && !ISSET((*sm)->state_flags, PFSTATE_NOSYNC) && + pd->dir == PF_OUT && pfsync_is_up()) { + /* + * We want the state created, but we dont + * want to send this in case a partner + * firewall has to know about it to allow + * replies through it. + */ + if (pfsync_defer(*sm, pd->m)) + return (PF_DEFER); + } +#endif /* NPFSYNC > 0 */ + + return (action); + +cleanup: + while ((ctx.ri = SLIST_FIRST(&ctx.rules))) { + SLIST_REMOVE_HEAD(&ctx.rules, entry); + pool_put(&pf_rule_item_pl, ctx.ri); + } + + return (action); +} + +static __inline int +pf_create_state(struct pf_pdesc *pd, struct pf_rule *r, struct pf_rule *a, + struct pf_rule *nr, struct pf_state_key **skw, struct pf_state_key **sks, + int *rewrite, struct pf_state **sm, int tag, struct pf_rule_slist *rules, + struct pf_rule_actions *act, struct pf_src_node *sns[PF_SN_MAX], + struct pf_test_ctx *ctx) +{ + struct pf_state *st = NULL; + struct pf_statelim *stlim = NULL; + struct pf_sourcelim *srlim = NULL; + struct pf_source *sr = NULL; + struct pf_state_link *pfl; + struct pf_tcphdr *th = &pd->hdr.tcp; + u_short reason; + u_int i; + + st = pool_get(&pf_state_pl, PR_NOWAIT | PR_ZERO); + if (st == NULL) { + REASON_SET(&reason, PFRES_MEMORY); + goto csfailed; + } + st->rule.ptr = r; + st->anchor.ptr = a; + st->natrule.ptr = nr; + if (r->allow_opts) + st->state_flags |= PFSTATE_ALLOWOPTS; + if (r->rule_flag & PFRULE_STATESLOPPY) + st->state_flags |= PFSTATE_SLOPPY; + if (r->rule_flag & PFRULE_PFLOW) + st->state_flags |= PFSTATE_PFLOW; + if (r->rule_flag & PFRULE_NOSYNC) + st->state_flags |= PFSTATE_NOSYNC; +#if NPFLOG > 0 + st->log = act->log & PF_LOG_ALL; +#endif /* NPFLOG > 0 */ + st->qid = act->qid; + st->pqid = act->pqid; + st->rtableid[pd->didx] = act->rtableid; + st->rtableid[pd->sidx] = -1; /* return traffic is routed normally */ + st->min_ttl = act->min_ttl; + st->set_tos = act->set_tos; + st->max_mss = act->max_mss; + st->state_flags |= act->flags; +#if NPFSYNC > 0 + st->sync_state = PFSYNC_S_NONE; +#endif /* NPFSYNC > 0 */ + st->set_prio[0] = act->set_prio[0]; + st->set_prio[1] = act->set_prio[1]; + st->delay = act->delay; + SLIST_INIT(&st->src_nodes); + SLIST_INIT(&st->linkage); + + /* + * must initialize refcnt, before pf_state_insert() gets called. + * pf_state_inserts() grabs reference for pfsync! + */ + PF_REF_INIT(st->refcnt); + mtx_init(&st->mtx, IPL_NET); + + switch (pd->proto) { + case IPPROTO_TCP: + st->src.seqlo = ntohl(th->th_seq); + st->src.seqhi = st->src.seqlo + pd->p_len + 1; + if ((th->th_flags & (TH_SYN|TH_ACK)) == TH_SYN && + r->keep_state == PF_STATE_MODULATE) { + /* Generate sequence number modulator */ + st->src.seqdiff = pf_tcp_iss(pd) - st->src.seqlo; + if (st->src.seqdiff == 0) + st->src.seqdiff = 1; + pf_patch_32(pd, &th->th_seq, + htonl(st->src.seqlo + st->src.seqdiff)); + *rewrite = 1; + } else + st->src.seqdiff = 0; + if (th->th_flags & TH_SYN) { + st->src.seqhi++; + st->src.wscale = pf_get_wscale(pd); + } + st->src.max_win = MAX(ntohs(th->th_win), 1); + if (st->src.wscale & PF_WSCALE_MASK) { + /* Remove scale factor from initial window */ + int win = st->src.max_win; + win += 1 << (st->src.wscale & PF_WSCALE_MASK); + st->src.max_win = (win - 1) >> + (st->src.wscale & PF_WSCALE_MASK); + } + if (th->th_flags & TH_FIN) + st->src.seqhi++; + st->dst.seqhi = 1; + st->dst.max_win = 1; + pf_set_protostate(st, PF_PEER_SRC, TCPS_SYN_SENT); + pf_set_protostate(st, PF_PEER_DST, TCPS_CLOSED); + st->timeout = PFTM_TCP_FIRST_PACKET; + atomic_inc_int(&pf_status.states_halfopen); + break; + case IPPROTO_UDP: + pf_set_protostate(st, PF_PEER_SRC, PFUDPS_SINGLE); + pf_set_protostate(st, PF_PEER_DST, PFUDPS_NO_TRAFFIC); + st->timeout = PFTM_UDP_FIRST_PACKET; + break; + case IPPROTO_ICMP: +#ifdef INET6 + case IPPROTO_ICMPV6: +#endif /* INET6 */ + st->timeout = PFTM_ICMP_FIRST_PACKET; + break; + default: + pf_set_protostate(st, PF_PEER_SRC, PFOTHERS_SINGLE); + pf_set_protostate(st, PF_PEER_DST, PFOTHERS_NO_TRAFFIC); + st->timeout = PFTM_OTHER_FIRST_PACKET; + } + + st->creation = st->expire = getuptime(); + + if (pd->proto == IPPROTO_TCP) { + if (st->state_flags & PFSTATE_SCRUB_TCP && + pf_normalize_tcp_init(pd, &st->src)) { + REASON_SET(&reason, PFRES_MEMORY); + goto csfailed; + } + if (st->state_flags & PFSTATE_SCRUB_TCP && st->src.scrub && + pf_normalize_tcp_stateful(pd, &reason, st, + &st->src, &st->dst, rewrite)) { + /* This really shouldn't happen!!! */ + DPFPRINTF(LOG_ERR, + "%s: tcp normalize failed on first pkt", __func__); + goto csfailed; + } + } + st->direction = pd->dir; + + if (pf_state_key_setup(pd, skw, sks, act->rtableid)) { + REASON_SET(&reason, PFRES_MEMORY); + goto csfailed; + } + + if (pf_set_rt_ifp(st, pd->src, (*skw)->af, sns) != 0) { + REASON_SET(&reason, PFRES_NOROUTE); + goto csfailed; + } + + for (i = 0; i < PF_SN_MAX; i++) + if (sns[i] != NULL) { + struct pf_sn_item *sni; + + sni = pool_get(&pf_sn_item_pl, PR_NOWAIT); + if (sni == NULL) { + REASON_SET(&reason, PFRES_MEMORY); + goto csfailed; + } + sni->sn = sns[i]; + SLIST_INSERT_HEAD(&st->src_nodes, sni, next); + sni->sn->states++; + } + + stlim = ctx->statelim; + if (stlim != NULL) { + unsigned int gen; + + PF_ASSERT_LOCKED(); + pfl = pool_get(&pf_state_link_pl, PR_NOWAIT); + if (pfl == NULL) { + REASON_SET(&reason, PFRES_MEMORY); + goto csfailed; + } + + gen = pf_statelim_enter(stlim); + stlim->pfstlim_counters.admitted++; + stlim->pfstlim_inuse++; + pf_statelim_leave(stlim, gen); + + stlim->pfstlim_rate_ts += stlim->pfstlim_rate_token; + + st->statelim = stlim->pfstlim_id; + pfl->pfl_state = st; + pfl->pfl_type = PF_STATE_LINK_TYPE_STATELIM; + + TAILQ_INSERT_TAIL(&stlim->pfstlim_states, pfl, pfl_link); + SLIST_INSERT_HEAD(&st->linkage, pfl, pfl_linkage); + } + + srlim = ctx->sourcelim; + if (srlim != NULL) { + unsigned int gen; + + sr = ctx->source; + if (sr == NULL) { + sr = pool_get(&pf_source_pl, PR_NOWAIT|PR_ZERO); + if (sr == NULL) { + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_counters.addrnomem++; + pf_sourcelim_leave(srlim, gen); + REASON_SET(&reason, PFRES_MEMORY); + goto csfailed; + } + + sr->pfsr_parent = srlim; + pf_source_key(srlim, sr, + ctx->pd->af, ctx->pd->rdomain, ctx->pd->src); + TAILQ_INIT(&sr->pfsr_states); + + if (RBT_INSERT(pf_source_tree, + &srlim->pfsrlim_sources, sr) != NULL) { + panic("%s: source pool %u (%p) " + "insert collision %p?!", __func__, + srlim->pfsrlim_id, srlim, sr); + } + + if (RBT_INSERT(pf_source_ioc_tree, + &srlim->pfsrlim_ioc_sources, sr) != NULL) { + panic("%s: source pool %u (%p) ioc " + "insert collision (%p)?!", __func__, + srlim->pfsrlim_id, srlim, sr); + } + + sr->pfsr_empty_ts = getuptime(); + TAILQ_INSERT_TAIL(&pf_source_gc, sr, + pfsr_empty_gc); + + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_nsources++; + srlim->pfsrlim_counters.addrallocs++; + pf_sourcelim_leave(srlim, gen); + } else { + KASSERT(sr->pfsr_parent == srlim); + } + + PF_ASSERT_LOCKED(); + pfl = pool_get(&pf_state_link_pl, PR_NOWAIT); + if (pfl == NULL) { + REASON_SET(&reason, PFRES_MEMORY); + goto csfailed; + } + + pf_source_used(sr); + + sr->pfsr_counters.admitted++; + + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_counters.inuse++; + srlim->pfsrlim_counters.admitted++; + pf_sourcelim_leave(srlim, gen); + + st->sourcelim = srlim->pfsrlim_id; + pfl->pfl_state = st; + pfl->pfl_type = PF_STATE_LINK_TYPE_SOURCELIM; + + TAILQ_INSERT_TAIL(&sr->pfsr_states, pfl, pfl_link); + SLIST_INSERT_HEAD(&st->linkage, pfl, pfl_linkage); + } + +#if NPFSYNC > 0 + pfsync_init_state(st, *skw, *sks, 0); +#endif + + if (pf_state_insert(BOUND_IFACE(r, pd->kif), skw, sks, st)) { + *sks = *skw = NULL; + REASON_SET(&reason, PFRES_STATEINS); + goto csfailed; + } else + *sm = st; + + /* + * Make state responsible for rules it binds here. + */ + memcpy(&st->match_rules, rules, sizeof(st->match_rules)); + memset(rules, 0, sizeof(*rules)); + STATE_INC_COUNTERS(st); + + if (tag > 0) { + pf_tag_ref(tag); + st->tag = tag; + } + if (pd->proto == IPPROTO_TCP && (th->th_flags & (TH_SYN|TH_ACK)) == + TH_SYN && r->keep_state == PF_STATE_SYNPROXY && pd->dir == PF_IN) { + int rtid; + uint16_t mss, mssdflt; + + rtid = (act->rtableid >= 0) ? act->rtableid : pd->rdomain; + pf_set_protostate(st, PF_PEER_SRC, PF_TCPS_PROXY_SRC); + st->src.seqhi = arc4random(); + /* Find mss option */ + mssdflt = atomic_load_int(&tcp_mssdflt); + mss = pf_get_mss(pd, mssdflt); + mss = pf_calc_mss(pd->src, pd->af, rtid, mss, mssdflt); + mss = pf_calc_mss(pd->dst, pd->af, rtid, mss, mssdflt); + st->src.mss = mss; + pf_send_tcp(r, pd->af, pd->dst, pd->src, th->th_dport, + th->th_sport, st->src.seqhi, ntohl(th->th_seq) + 1, + TH_SYN|TH_ACK, 0, st->src.mss, 0, 1, 0, pd->rdomain, + &reason); + REASON_SET(&reason, PFRES_SYNPROXY); + return (PF_SYNPROXY_DROP); + } + + return (PF_PASS); + +csfailed: + if (st) { + struct pf_state_link *npfl; + + SLIST_FOREACH_SAFE(pfl, &st->linkage, pfl_linkage, npfl) { + struct pf_state_link_list *list; + unsigned int gen; + + /* who needs KASSERTS when we have NULL derefs */ + + switch (pfl->pfl_type) { + case PF_STATE_LINK_TYPE_STATELIM: + gen = pf_statelim_enter(stlim); + stlim->pfstlim_inuse--; + pf_statelim_leave(stlim, gen); + + stlim->pfstlim_rate_ts -= + stlim->pfstlim_rate_token; + list = &stlim->pfstlim_states; + break; + case PF_STATE_LINK_TYPE_SOURCELIM: + gen = pf_sourcelim_enter(srlim); + srlim->pfsrlim_counters.inuse--; + pf_sourcelim_leave(srlim, gen); + + sr->pfsr_rate_ts -= + srlim->pfsrlim_rate_token; + pf_source_rele(sr); + + list = &sr->pfsr_states; + break; + default: + panic("%s: unexpected link type on pfl %p", + __func__, pfl); + } + + TAILQ_REMOVE(list, pfl, pfl_link); + PF_ASSERT_LOCKED(); + pool_put(&pf_state_link_pl, pfl); + } + + pf_normalize_tcp_cleanup(st); /* safe even w/o init */ + pf_src_tree_remove_state(st); + pool_put(&pf_state_pl, st); + } + + for (i = 0; i < PF_SN_MAX; i++) + if (sns[i] != NULL) + pf_remove_src_node(sns[i]); + + return (PF_DROP); +} + +int +pf_translate(struct pf_pdesc *pd, struct pf_addr *saddr, u_int16_t sport, + struct pf_addr *daddr, u_int16_t dport, u_int16_t virtual_type, + int icmp_dir) +{ + int rewrite = 0; + int afto = pd->af != pd->naf; + + if (afto || PF_ANEQ(daddr, pd->dst, pd->af)) + pd->destchg = 1; + + switch (pd->proto) { + case IPPROTO_TCP: /* FALLTHROUGH */ + case IPPROTO_UDP: + rewrite += pf_patch_16(pd, pd->sport, sport); + rewrite += pf_patch_16(pd, pd->dport, dport); + break; + + case IPPROTO_ICMP: + if (pd->af != AF_INET) + return (0); + +#ifdef INET6 + if (afto) { + if (pf_translate_icmp_af(pd, AF_INET6, &pd->hdr.icmp)) + return (0); + pd->proto = IPPROTO_ICMPV6; + rewrite = 1; + } +#endif /* INET6 */ + if (virtual_type == htons(ICMP_ECHO)) { + u_int16_t icmpid = (icmp_dir == PF_IN) ? sport : dport; + rewrite += pf_patch_16(pd, + &pd->hdr.icmp.icmp_id, icmpid); + } + break; + +#ifdef INET6 + case IPPROTO_ICMPV6: + if (pd->af != AF_INET6) + return (0); + + if (afto) { + if (pf_translate_icmp_af(pd, AF_INET, &pd->hdr.icmp6)) + return (0); + pd->proto = IPPROTO_ICMP; + rewrite = 1; + } + if (virtual_type == htons(ICMP6_ECHO_REQUEST)) { + u_int16_t icmpid = (icmp_dir == PF_IN) ? sport : dport; + rewrite += pf_patch_16(pd, + &pd->hdr.icmp6.icmp6_id, icmpid); + } + break; +#endif /* INET6 */ + } + + if (!afto) { + rewrite += pf_translate_a(pd, pd->src, saddr); + rewrite += pf_translate_a(pd, pd->dst, daddr); + } + + return (rewrite); +} + +int +pf_tcp_track_full(struct pf_pdesc *pd, struct pf_state **stp, u_short *reason, + int *copyback, int reverse) +{ + struct pf_tcphdr *th = &pd->hdr.tcp; + struct pf_state_peer *src, *dst; + u_int16_t win = ntohs(th->th_win); + u_int32_t ack, orig_ack, end, data_end, seq, orig_seq; + u_int8_t sws, dws, psrc, pdst; + int ackskew; + + if ((pd->dir == (*stp)->direction && !reverse) || + (pd->dir != (*stp)->direction && reverse)) { + src = &(*stp)->src; + dst = &(*stp)->dst; + psrc = PF_PEER_SRC; + pdst = PF_PEER_DST; + } else { + src = &(*stp)->dst; + dst = &(*stp)->src; + psrc = PF_PEER_DST; + pdst = PF_PEER_SRC; + } + + if (src->wscale && dst->wscale && !(th->th_flags & TH_SYN)) { + sws = src->wscale & PF_WSCALE_MASK; + dws = dst->wscale & PF_WSCALE_MASK; + } else + sws = dws = 0; + + /* + * Sequence tracking algorithm from Guido van Rooij's paper: + * http://www.madison-gurkha.com/publications/tcp_filtering/ + * tcp_filtering.ps + */ + + orig_seq = seq = ntohl(th->th_seq); + if (src->seqlo == 0) { + /* First packet from this end. Set its state */ + + if (((*stp)->state_flags & PFSTATE_SCRUB_TCP || dst->scrub) && + src->scrub == NULL) { + if (pf_normalize_tcp_init(pd, src)) { + REASON_SET(reason, PFRES_MEMORY); + return (PF_DROP); + } + } + + /* Deferred generation of sequence number modulator */ + if (dst->seqdiff && !src->seqdiff) { + /* use random iss for the TCP server */ + while ((src->seqdiff = arc4random() - seq) == 0) + continue; + ack = ntohl(th->th_ack) - dst->seqdiff; + pf_patch_32(pd, &th->th_seq, htonl(seq + src->seqdiff)); + pf_patch_32(pd, &th->th_ack, htonl(ack)); + *copyback = 1; + } else { + ack = ntohl(th->th_ack); + } + + end = seq + pd->p_len; + if (th->th_flags & TH_SYN) { + end++; + if (dst->wscale & PF_WSCALE_FLAG) { + src->wscale = pf_get_wscale(pd); + if (src->wscale & PF_WSCALE_FLAG) { + /* Remove scale factor from initial + * window */ + sws = src->wscale & PF_WSCALE_MASK; + win = ((u_int32_t)win + (1 << sws) - 1) + >> sws; + dws = dst->wscale & PF_WSCALE_MASK; + } else { + /* fixup other window */ + dst->max_win = MIN(TCP_MAXWIN, + (u_int32_t)dst->max_win << + (dst->wscale & PF_WSCALE_MASK)); + /* in case of a retrans SYN|ACK */ + dst->wscale = 0; + } + } + } + data_end = end; + if (th->th_flags & TH_FIN) + end++; + + src->seqlo = seq; + if (src->state < TCPS_SYN_SENT) + pf_set_protostate(*stp, psrc, TCPS_SYN_SENT); + + /* + * May need to slide the window (seqhi may have been set by + * the crappy stack check or if we picked up the connection + * after establishment) + */ + if (src->seqhi == 1 || + SEQ_GEQ(end + MAX(1, dst->max_win << dws), src->seqhi)) + src->seqhi = end + MAX(1, dst->max_win << dws); + if (win > src->max_win) + src->max_win = win; + + } else { + ack = ntohl(th->th_ack) - dst->seqdiff; + if (src->seqdiff) { + /* Modulate sequence numbers */ + pf_patch_32(pd, &th->th_seq, htonl(seq + src->seqdiff)); + pf_patch_32(pd, &th->th_ack, htonl(ack)); + *copyback = 1; + } + end = seq + pd->p_len; + if (th->th_flags & TH_SYN) + end++; + data_end = end; + if (th->th_flags & TH_FIN) + end++; + } + orig_ack = ack; + + if ((th->th_flags & TH_ACK) == 0) { + /* Let it pass through the ack skew check */ + ack = dst->seqlo; + } else if ((ack == 0 && + (th->th_flags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)) || + /* broken tcp stacks do not set ack */ + (dst->state < TCPS_SYN_SENT)) { + /* + * Many stacks (ours included) will set the ACK number in an + * FIN|ACK if the SYN times out -- no sequence to ACK. + */ + ack = dst->seqlo; + } + + if (seq == end) { + /* Ease sequencing restrictions on no data packets */ + seq = src->seqlo; + data_end = end = seq; + } + + ackskew = dst->seqlo - ack; + + + /* + * Need to demodulate the sequence numbers in any TCP SACK options + * (Selective ACK). We could optionally validate the SACK values + * against the current ACK window, either forwards or backwards, but + * I'm not confident that SACK has been implemented properly + * everywhere. It wouldn't surprise me if several stacks accidentally + * SACK too far backwards of previously ACKed data. There really aren't + * any security implications of bad SACKing unless the target stack + * doesn't validate the option length correctly. Someone trying to + * spoof into a TCP connection won't bother blindly sending SACK + * options anyway. + */ + if (dst->seqdiff && (th->th_off << 2) > sizeof(struct pf_tcphdr)) { + if (pf_modulate_sack(pd, dst)) + *copyback = 1; + } + + +#define MAXACKWINDOW (0xffff + 1500) /* 1500 is an arbitrary fudge factor */ + if (SEQ_GEQ(src->seqhi, data_end) && + /* Last octet inside other's window space */ + SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) && + /* Retrans: not more than one window back */ + (ackskew >= -MAXACKWINDOW) && + /* Acking not more than one reassembled fragment backwards */ + (ackskew <= (MAXACKWINDOW << sws)) && + /* Acking not more than one window forward */ + ((th->th_flags & TH_RST) == 0 || orig_seq == src->seqlo || + (orig_seq == src->seqlo + 1) || (orig_seq + 1 == src->seqlo) || + /* Require an exact/+1 sequence match on resets when possible */ + (SEQ_GEQ(orig_seq, src->seqlo - (dst->max_win << dws)) && + SEQ_LEQ(orig_seq, src->seqlo + 1) && orig_ack == dst->seqlo && + (th->th_flags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)))) { + /* Allow resets to match sequence window if ack is perfect match */ + + if (dst->scrub || src->scrub) { + if (pf_normalize_tcp_stateful(pd, reason, *stp, src, + dst, copyback)) + return (PF_DROP); + } + + /* update max window */ + if (src->max_win < win) + src->max_win = win; + /* synchronize sequencing */ + if (SEQ_GT(end, src->seqlo)) + src->seqlo = end; + /* slide the window of what the other end can send */ + if (SEQ_GEQ(ack + (win << sws), dst->seqhi)) + dst->seqhi = ack + MAX((win << sws), 1); + + /* update states */ + if (th->th_flags & TH_SYN) + if (src->state < TCPS_SYN_SENT) + pf_set_protostate(*stp, psrc, TCPS_SYN_SENT); + if (th->th_flags & TH_FIN) + if (src->state < TCPS_CLOSING) + pf_set_protostate(*stp, psrc, TCPS_CLOSING); + if (th->th_flags & TH_ACK) { + if (dst->state == TCPS_SYN_SENT) { + pf_set_protostate(*stp, pdst, + TCPS_ESTABLISHED); + if (src->state == TCPS_ESTABLISHED && + !SLIST_EMPTY(&(*stp)->src_nodes) && + pf_src_connlimit(stp)) { + REASON_SET(reason, PFRES_SRCLIMIT); + return (PF_DROP); + } + } else if (dst->state == TCPS_CLOSING) + pf_set_protostate(*stp, pdst, + TCPS_FIN_WAIT_2); + } + if (th->th_flags & TH_RST) + pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_TIME_WAIT); + + /* update expire time */ + (*stp)->expire = getuptime(); + if (src->state >= TCPS_FIN_WAIT_2 && + dst->state >= TCPS_FIN_WAIT_2) + pf_update_state_timeout(*stp, PFTM_TCP_CLOSED); + else if (src->state >= TCPS_CLOSING && + dst->state >= TCPS_CLOSING) + pf_update_state_timeout(*stp, PFTM_TCP_FIN_WAIT); + else if (src->state < TCPS_ESTABLISHED || + dst->state < TCPS_ESTABLISHED) + pf_update_state_timeout(*stp, PFTM_TCP_OPENING); + else if (src->state >= TCPS_CLOSING || + dst->state >= TCPS_CLOSING) + pf_update_state_timeout(*stp, PFTM_TCP_CLOSING); + else + pf_update_state_timeout(*stp, PFTM_TCP_ESTABLISHED); + + /* Fall through to PASS packet */ + } else if ((dst->state < TCPS_SYN_SENT || + dst->state >= TCPS_FIN_WAIT_2 || + src->state >= TCPS_FIN_WAIT_2) && + SEQ_GEQ(src->seqhi + MAXACKWINDOW, data_end) && + /* Within a window forward of the originating packet */ + SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW)) { + /* Within a window backward of the originating packet */ + + /* + * This currently handles three situations: + * 1) Stupid stacks will shotgun SYNs before their peer + * replies. + * 2) When PF catches an already established stream (the + * firewall rebooted, the state table was flushed, routes + * changed...) + * 3) Packets get funky immediately after the connection + * closes (this should catch Solaris spurious ACK|FINs + * that web servers like to spew after a close) + * + * This must be a little more careful than the above code + * since packet floods will also be caught here. We don't + * update the TTL here to mitigate the damage of a packet + * flood and so the same code can handle awkward establishment + * and a loosened connection close. + * In the establishment case, a correct peer response will + * validate the connection, go through the normal state code + * and keep updating the state TTL. + */ + + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, "pf: loose state match: "); + pf_print_state(*stp); + pf_print_flags(th->th_flags); + addlog(" seq=%u (%u) ack=%u len=%u ackskew=%d " + "pkts=%llu:%llu dir=%s,%s\n", seq, orig_seq, ack, + pd->p_len, ackskew, (*stp)->packets[0], + (*stp)->packets[1], + pd->dir == PF_IN ? "in" : "out", + pd->dir == (*stp)->direction ? "fwd" : "rev"); + } + + if (dst->scrub || src->scrub) { + if (pf_normalize_tcp_stateful(pd, reason, *stp, src, + dst, copyback)) + return (PF_DROP); + } + + /* update max window */ + if (src->max_win < win) + src->max_win = win; + /* synchronize sequencing */ + if (SEQ_GT(end, src->seqlo)) + src->seqlo = end; + /* slide the window of what the other end can send */ + if (SEQ_GEQ(ack + (win << sws), dst->seqhi)) + dst->seqhi = ack + MAX((win << sws), 1); + + /* + * Cannot set dst->seqhi here since this could be a shotgunned + * SYN and not an already established connection. + */ + if (th->th_flags & TH_FIN) + if (src->state < TCPS_CLOSING) + pf_set_protostate(*stp, psrc, TCPS_CLOSING); + if (th->th_flags & TH_RST) + pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_TIME_WAIT); + + /* Fall through to PASS packet */ + } else { + if ((*stp)->dst.state == TCPS_SYN_SENT && + (*stp)->src.state == TCPS_SYN_SENT) { + /* Send RST for state mismatches during handshake */ + if (!(th->th_flags & TH_RST)) + pf_send_tcp((*stp)->rule.ptr, pd->af, + pd->dst, pd->src, th->th_dport, + th->th_sport, ntohl(th->th_ack), 0, + TH_RST, 0, 0, + (*stp)->rule.ptr->return_ttl, 1, 0, + pd->rdomain, reason); + src->seqlo = 0; + src->seqhi = 1; + src->max_win = 1; + } else if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, "pf: BAD state: "); + pf_print_state(*stp); + pf_print_flags(th->th_flags); + addlog(" seq=%u (%u) ack=%u len=%u ackskew=%d " + "pkts=%llu:%llu dir=%s,%s\n", + seq, orig_seq, ack, pd->p_len, ackskew, + (*stp)->packets[0], (*stp)->packets[1], + pd->dir == PF_IN ? "in" : "out", + pd->dir == (*stp)->direction ? "fwd" : "rev"); + addlog("pf: State failure on: %c %c %c %c | %c %c\n", + SEQ_GEQ(src->seqhi, data_end) ? ' ' : '1', + SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) ? + ' ': '2', + (ackskew >= -MAXACKWINDOW) ? ' ' : '3', + (ackskew <= (MAXACKWINDOW << sws)) ? ' ' : '4', + SEQ_GEQ(src->seqhi + MAXACKWINDOW, data_end) ? + ' ' :'5', + SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW) ?' ' :'6'); + } + REASON_SET(reason, PFRES_BADSTATE); + return (PF_DROP); + } + + return (PF_PASS); +} + +int +pf_tcp_track_sloppy(struct pf_pdesc *pd, struct pf_state **stp, + u_short *reason) +{ + struct pf_tcphdr *th = &pd->hdr.tcp; + struct pf_state_peer *src, *dst; + u_int8_t psrc, pdst; + + if (pd->dir == (*stp)->direction) { + src = &(*stp)->src; + dst = &(*stp)->dst; + psrc = PF_PEER_SRC; + pdst = PF_PEER_DST; + } else { + src = &(*stp)->dst; + dst = &(*stp)->src; + psrc = PF_PEER_DST; + pdst = PF_PEER_SRC; + } + + if (th->th_flags & TH_SYN) + if (src->state < TCPS_SYN_SENT) + pf_set_protostate(*stp, psrc, TCPS_SYN_SENT); + if (th->th_flags & TH_FIN) + if (src->state < TCPS_CLOSING) + pf_set_protostate(*stp, psrc, TCPS_CLOSING); + if (th->th_flags & TH_ACK) { + if (dst->state == TCPS_SYN_SENT) { + pf_set_protostate(*stp, pdst, TCPS_ESTABLISHED); + if (src->state == TCPS_ESTABLISHED && + !SLIST_EMPTY(&(*stp)->src_nodes) && + pf_src_connlimit(stp)) { + REASON_SET(reason, PFRES_SRCLIMIT); + return (PF_DROP); + } + } else if (dst->state == TCPS_CLOSING) { + pf_set_protostate(*stp, pdst, TCPS_FIN_WAIT_2); + } else if (src->state == TCPS_SYN_SENT && + dst->state < TCPS_SYN_SENT) { + /* + * Handle a special sloppy case where we only see one + * half of the connection. If there is a ACK after + * the initial SYN without ever seeing a packet from + * the destination, set the connection to established. + */ + pf_set_protostate(*stp, PF_PEER_BOTH, + TCPS_ESTABLISHED); + if (!SLIST_EMPTY(&(*stp)->src_nodes) && + pf_src_connlimit(stp)) { + REASON_SET(reason, PFRES_SRCLIMIT); + return (PF_DROP); + } + } else if (src->state == TCPS_CLOSING && + dst->state == TCPS_ESTABLISHED && + dst->seqlo == 0) { + /* + * Handle the closing of half connections where we + * don't see the full bidirectional FIN/ACK+ACK + * handshake. + */ + pf_set_protostate(*stp, pdst, TCPS_CLOSING); + } + } + if (th->th_flags & TH_RST) + pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_TIME_WAIT); + + /* update expire time */ + (*stp)->expire = getuptime(); + if (src->state >= TCPS_FIN_WAIT_2 && + dst->state >= TCPS_FIN_WAIT_2) + pf_update_state_timeout(*stp, PFTM_TCP_CLOSED); + else if (src->state >= TCPS_CLOSING && + dst->state >= TCPS_CLOSING) + pf_update_state_timeout(*stp, PFTM_TCP_FIN_WAIT); + else if (src->state < TCPS_ESTABLISHED || + dst->state < TCPS_ESTABLISHED) + pf_update_state_timeout(*stp, PFTM_TCP_OPENING); + else if (src->state >= TCPS_CLOSING || + dst->state >= TCPS_CLOSING) + pf_update_state_timeout(*stp, PFTM_TCP_CLOSING); + else + pf_update_state_timeout(*stp, PFTM_TCP_ESTABLISHED); + + return (PF_PASS); +} + +static __inline int +pf_synproxy(struct pf_pdesc *pd, struct pf_state **stp, u_short *reason) +{ + struct pf_state_key *sk = (*stp)->key[pd->didx]; + + if ((*stp)->src.state == PF_TCPS_PROXY_SRC) { + struct pf_tcphdr *th = &pd->hdr.tcp; + + if (pd->dir != (*stp)->direction) { + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_SYNPROXY_DROP); + } + if (th->th_flags & TH_SYN) { + if (ntohl(th->th_seq) != (*stp)->src.seqlo) { + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_DROP); + } + pf_send_tcp((*stp)->rule.ptr, pd->af, pd->dst, + pd->src, th->th_dport, th->th_sport, + (*stp)->src.seqhi, ntohl(th->th_seq) + 1, + TH_SYN|TH_ACK, 0, (*stp)->src.mss, 0, 1, + 0, pd->rdomain, reason); + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_SYNPROXY_DROP); + } else if ((th->th_flags & (TH_ACK|TH_RST|TH_FIN)) != TH_ACK || + (ntohl(th->th_ack) != (*stp)->src.seqhi + 1) || + (ntohl(th->th_seq) != (*stp)->src.seqlo + 1)) { + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_DROP); + } else if (!SLIST_EMPTY(&(*stp)->src_nodes) && + pf_src_connlimit(stp)) { + REASON_SET(reason, PFRES_SRCLIMIT); + return (PF_DROP); + } else + pf_set_protostate(*stp, PF_PEER_SRC, + PF_TCPS_PROXY_DST); + } + if ((*stp)->src.state == PF_TCPS_PROXY_DST) { + struct pf_tcphdr *th = &pd->hdr.tcp; + + if (pd->dir == (*stp)->direction) { + if (((th->th_flags & (TH_SYN|TH_ACK)) != TH_ACK) || + (ntohl(th->th_ack) != (*stp)->src.seqhi + 1) || + (ntohl(th->th_seq) != (*stp)->src.seqlo + 1)) { + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_DROP); + } + (*stp)->src.max_win = MAX(ntohs(th->th_win), 1); + if ((*stp)->dst.seqhi == 1) + (*stp)->dst.seqhi = arc4random(); + pf_send_tcp((*stp)->rule.ptr, pd->af, + &sk->addr[pd->sidx], &sk->addr[pd->didx], + sk->port[pd->sidx], sk->port[pd->didx], + (*stp)->dst.seqhi, 0, TH_SYN, 0, + (*stp)->src.mss, 0, 0, (*stp)->tag, + sk->rdomain, reason); + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_SYNPROXY_DROP); + } else if (((th->th_flags & (TH_SYN|TH_ACK)) != + (TH_SYN|TH_ACK)) || + (ntohl(th->th_ack) != (*stp)->dst.seqhi + 1)) { + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_DROP); + } else { + (*stp)->dst.max_win = MAX(ntohs(th->th_win), 1); + (*stp)->dst.seqlo = ntohl(th->th_seq); + pf_send_tcp((*stp)->rule.ptr, pd->af, pd->dst, + pd->src, th->th_dport, th->th_sport, + ntohl(th->th_ack), ntohl(th->th_seq) + 1, + TH_ACK, (*stp)->src.max_win, 0, 0, 0, + (*stp)->tag, pd->rdomain, reason); + pf_send_tcp((*stp)->rule.ptr, pd->af, + &sk->addr[pd->sidx], &sk->addr[pd->didx], + sk->port[pd->sidx], sk->port[pd->didx], + (*stp)->src.seqhi + 1, (*stp)->src.seqlo + 1, + TH_ACK, (*stp)->dst.max_win, 0, 0, 1, + 0, sk->rdomain, reason); + (*stp)->src.seqdiff = (*stp)->dst.seqhi - + (*stp)->src.seqlo; + (*stp)->dst.seqdiff = (*stp)->src.seqhi - + (*stp)->dst.seqlo; + (*stp)->src.seqhi = (*stp)->src.seqlo + + (*stp)->dst.max_win; + (*stp)->dst.seqhi = (*stp)->dst.seqlo + + (*stp)->src.max_win; + (*stp)->src.wscale = (*stp)->dst.wscale = 0; + pf_set_protostate(*stp, PF_PEER_BOTH, + TCPS_ESTABLISHED); + REASON_SET(reason, PFRES_SYNPROXY); + return (PF_SYNPROXY_DROP); + } + } + return (PF_PASS); +} + +static __inline int +pf_synproxy_ack(struct pf_rule *r, struct pf_pdesc *pd, struct pf_state **sm, + struct pf_rule_actions *act) +{ + struct pf_tcphdr *th = &pd->hdr.tcp; + struct pf_state *s; + u_int16_t mss, mssdflt; + int rtid; + u_short reason; + + if ((th->th_flags & (TH_SYN|TH_ACK)) != TH_SYN) + return (PF_PASS); + + s = *sm; + rtid = (act->rtableid >= 0) ? act->rtableid : pd->rdomain; + + pf_set_protostate(s, PF_PEER_SRC, PF_TCPS_PROXY_SRC); + s->src.seqhi = arc4random(); + /* Find mss option */ + mssdflt = atomic_load_int(&tcp_mssdflt); + mss = pf_get_mss(pd, mssdflt); + mss = pf_calc_mss(pd->src, pd->af, rtid, mss, mssdflt); + mss = pf_calc_mss(pd->dst, pd->af, rtid, mss, mssdflt); + s->src.mss = mss; + + pf_send_tcp(r, pd->af, pd->dst, pd->src, th->th_dport, + th->th_sport, s->src.seqhi, ntohl(th->th_seq) + 1, + TH_SYN|TH_ACK, 0, s->src.mss, 0, 1, 0, pd->rdomain, NULL); + + REASON_SET(&reason, PFRES_SYNPROXY); + return (PF_SYNPROXY_DROP); +} + +int +pf_test_state(struct pf_pdesc *pd, struct pf_state **stp, u_short *reason) +{ + int copyback = 0; + struct pf_state_peer *src, *dst; + int action; + u_int8_t psrc, pdst; + + action = PF_PASS; + if (pd->dir == (*stp)->direction) { + src = &(*stp)->src; + dst = &(*stp)->dst; + psrc = PF_PEER_SRC; + pdst = PF_PEER_DST; + } else { + src = &(*stp)->dst; + dst = &(*stp)->src; + psrc = PF_PEER_DST; + pdst = PF_PEER_SRC; + } + + switch (pd->virtual_proto) { + case IPPROTO_TCP: + if ((action = pf_synproxy(pd, stp, reason)) != PF_PASS) + return (action); + if ((pd->hdr.tcp.th_flags & (TH_SYN|TH_ACK)) == TH_SYN) { + + if (dst->state >= TCPS_FIN_WAIT_2 && + src->state >= TCPS_FIN_WAIT_2) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, "pf: state reuse "); + pf_print_state(*stp); + pf_print_flags(pd->hdr.tcp.th_flags); + addlog("\n"); + } + /* XXX make sure it's the same direction ?? */ + pf_update_state_timeout(*stp, PFTM_PURGE); + pf_state_unref(*stp); + *stp = NULL; + return (PF_DROP); + } else if (dst->state >= TCPS_ESTABLISHED && + src->state >= TCPS_ESTABLISHED) { + /* + * SYN matches existing state??? + * Typically happens when sender boots up after + * sudden panic. Certain protocols (NFSv3) are + * always using same port numbers. Challenge + * ACK enables all parties (firewall and peers) + * to get in sync again. + */ + pf_send_challenge_ack(pd, *stp, src, dst, + reason); + return (PF_DROP); + } + } + + if ((*stp)->state_flags & PFSTATE_SLOPPY) { + if (pf_tcp_track_sloppy(pd, stp, reason) == PF_DROP) + return (PF_DROP); + } else { + if (pf_tcp_track_full(pd, stp, reason, ©back, + PF_REVERSED_KEY((*stp)->key, pd->af)) == PF_DROP) + return (PF_DROP); + } + break; + case IPPROTO_UDP: + /* update states */ + if (src->state < PFUDPS_SINGLE) + pf_set_protostate(*stp, psrc, PFUDPS_SINGLE); + if (dst->state == PFUDPS_SINGLE) + pf_set_protostate(*stp, pdst, PFUDPS_MULTIPLE); + + /* update expire time */ + (*stp)->expire = getuptime(); + if (src->state == PFUDPS_MULTIPLE && + dst->state == PFUDPS_MULTIPLE) + pf_update_state_timeout(*stp, PFTM_UDP_MULTIPLE); + else + pf_update_state_timeout(*stp, PFTM_UDP_SINGLE); + break; + default: + /* update states */ + if (src->state < PFOTHERS_SINGLE) + pf_set_protostate(*stp, psrc, PFOTHERS_SINGLE); + if (dst->state == PFOTHERS_SINGLE) + pf_set_protostate(*stp, pdst, PFOTHERS_MULTIPLE); + + /* update expire time */ + (*stp)->expire = getuptime(); + if (src->state == PFOTHERS_MULTIPLE && + dst->state == PFOTHERS_MULTIPLE) + pf_update_state_timeout(*stp, PFTM_OTHER_MULTIPLE); + else + pf_update_state_timeout(*stp, PFTM_OTHER_SINGLE); + break; + } + + /* translate source/destination address, if necessary */ + if ((*stp)->key[PF_SK_WIRE] != (*stp)->key[PF_SK_STACK]) { + struct pf_state_key *nk; + int afto, sidx, didx; + + if (PF_REVERSED_KEY((*stp)->key, pd->af)) + nk = (*stp)->key[pd->sidx]; + else + nk = (*stp)->key[pd->didx]; + + afto = pd->af != nk->af; + sidx = afto ? pd->didx : pd->sidx; + didx = afto ? pd->sidx : pd->didx; + +#ifdef INET6 + if (afto) { + pf_addrcpy(&pd->nsaddr, &nk->addr[sidx], nk->af); + pf_addrcpy(&pd->ndaddr, &nk->addr[didx], nk->af); + pd->naf = nk->af; + action = PF_AFRT; + } +#endif /* INET6 */ + + if (!afto) + pf_translate_a(pd, pd->src, &nk->addr[sidx]); + + if (pd->sport != NULL) + pf_patch_16(pd, pd->sport, nk->port[sidx]); + + if (afto || PF_ANEQ(pd->dst, &nk->addr[didx], pd->af) || + pd->rdomain != nk->rdomain) + pd->destchg = 1; + + if (!afto) + pf_translate_a(pd, pd->dst, &nk->addr[didx]); + + if (pd->dport != NULL) + pf_patch_16(pd, pd->dport, nk->port[didx]); + + pd->m->m_pkthdr.ph_rtableid = nk->rdomain; + copyback = 1; + } + + if (copyback && pd->hdrlen > 0) { + m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT); + } + + return (action); +} + +int +pf_icmp_state_lookup(struct pf_pdesc *pd, struct pf_state_key_cmp *key, + struct pf_state **stp, u_int16_t icmpid, u_int16_t type, + int icmp_dir, int *iidx, int multi, int inner) +{ + int direction, action; + + key->af = pd->af; + key->proto = pd->proto; + key->rdomain = pd->rdomain; + if (icmp_dir == PF_IN) { + *iidx = pd->sidx; + key->port[pd->sidx] = icmpid; + key->port[pd->didx] = type; + } else { + *iidx = pd->didx; + key->port[pd->sidx] = type; + key->port[pd->didx] = icmpid; + } + + if (pf_state_key_addr_setup(pd, key, pd->sidx, pd->src, pd->didx, + pd->dst, pd->af, multi)) + return (PF_DROP); + + key->hash = pf_pkt_hash(key->af, key->proto, + &key->addr[0], &key->addr[1], 0, 0); + + action = pf_find_state(pd, key, stp); + if (action != PF_MATCH) + return (action); + + if ((*stp)->state_flags & PFSTATE_SLOPPY) + return (-1); + + /* Is this ICMP message flowing in right direction? */ + if ((*stp)->key[PF_SK_WIRE]->af != (*stp)->key[PF_SK_STACK]->af) + direction = (pd->af == (*stp)->key[PF_SK_WIRE]->af) ? + PF_IN : PF_OUT; + else + direction = (*stp)->direction; + if ((((!inner && direction == pd->dir) || + (inner && direction != pd->dir)) ? + PF_IN : PF_OUT) != icmp_dir) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: icmp type %d in wrong direction (%d): ", + ntohs(type), icmp_dir); + pf_print_state(*stp); + addlog("\n"); + } + return (PF_DROP); + } + return (-1); +} + +int +pf_test_state_icmp(struct pf_pdesc *pd, struct pf_state **stp, + u_short *reason) +{ + u_int16_t virtual_id, virtual_type; + u_int8_t icmptype, icmpcode; + int icmp_dir, iidx, ret, copyback = 0; + + struct pf_state_key_cmp key; + + switch (pd->proto) { + case IPPROTO_ICMP: + icmptype = pd->hdr.icmp.icmp_type; + icmpcode = pd->hdr.icmp.icmp_code; + break; +#ifdef INET6 + case IPPROTO_ICMPV6: + icmptype = pd->hdr.icmp6.icmp6_type; + icmpcode = pd->hdr.icmp6.icmp6_code; + break; +#endif /* INET6 */ + default: + panic("unhandled proto %d", pd->proto); + } + + if (pf_icmp_mapping(pd, icmptype, &icmp_dir, &virtual_id, + &virtual_type) == 0) { + /* + * ICMP query/reply message not related to a TCP/UDP packet. + * Search for an ICMP state. + */ + ret = pf_icmp_state_lookup(pd, &key, stp, + virtual_id, virtual_type, icmp_dir, &iidx, + 0, 0); + /* IPv6? try matching a multicast address */ + if (ret == PF_DROP && pd->af == AF_INET6 && icmp_dir == PF_OUT) + ret = pf_icmp_state_lookup(pd, &key, stp, virtual_id, + virtual_type, icmp_dir, &iidx, 1, 0); + if (ret >= 0) + return (ret); + + (*stp)->expire = getuptime(); + pf_update_state_timeout(*stp, PFTM_ICMP_ERROR_REPLY); + + /* translate source/destination address, if necessary */ + if ((*stp)->key[PF_SK_WIRE] != (*stp)->key[PF_SK_STACK]) { + struct pf_state_key *nk; + int afto, sidx, didx; + + if (PF_REVERSED_KEY((*stp)->key, pd->af)) + nk = (*stp)->key[pd->sidx]; + else + nk = (*stp)->key[pd->didx]; + + afto = pd->af != nk->af; + sidx = afto ? pd->didx : pd->sidx; + didx = afto ? pd->sidx : pd->didx; + iidx = afto ? !iidx : iidx; +#ifdef INET6 + if (afto) { + pf_addrcpy(&pd->nsaddr, &nk->addr[sidx], + nk->af); + pf_addrcpy(&pd->ndaddr, &nk->addr[didx], + nk->af); + pd->naf = nk->af; + } +#endif /* INET6 */ + if (!afto) { + pf_translate_a(pd, pd->src, &nk->addr[sidx]); + pf_translate_a(pd, pd->dst, &nk->addr[didx]); + } + + if (pd->rdomain != nk->rdomain) + pd->destchg = 1; + if (!afto && PF_ANEQ(pd->dst, + &nk->addr[didx], pd->af)) + pd->destchg = 1; + pd->m->m_pkthdr.ph_rtableid = nk->rdomain; + + switch (pd->af) { + case AF_INET: +#ifdef INET6 + if (afto) { + if (pf_translate_icmp_af(pd, AF_INET6, + &pd->hdr.icmp)) + return (PF_DROP); + pd->proto = IPPROTO_ICMPV6; + } +#endif /* INET6 */ + pf_patch_16(pd, + &pd->hdr.icmp.icmp_id, nk->port[iidx]); + + m_copyback(pd->m, pd->off, ICMP_MINLEN, + &pd->hdr.icmp, M_NOWAIT); + copyback = 1; + break; +#ifdef INET6 + case AF_INET6: + if (afto) { + if (pf_translate_icmp_af(pd, AF_INET, + &pd->hdr.icmp6)) + return (PF_DROP); + pd->proto = IPPROTO_ICMP; + } + + pf_patch_16(pd, + &pd->hdr.icmp6.icmp6_id, nk->port[iidx]); + + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), &pd->hdr.icmp6, + M_NOWAIT); + copyback = 1; + break; +#endif /* INET6 */ + } +#ifdef INET6 + if (afto) + return (PF_AFRT); +#endif /* INET6 */ + } + } else { + /* + * ICMP error message in response to a TCP/UDP packet. + * Extract the inner TCP/UDP header and search for that state. + */ + struct pf_pdesc pd2; + struct pf_ip h2; +#ifdef INET6 + struct pf_ip6_hdr h2_6; +#endif /* INET6 */ + int ipoff2; + + /* Initialize pd2 fields valid for both packets with pd. */ + memset(&pd2, 0, sizeof(pd2)); + pd2.af = pd->af; + pd2.dir = pd->dir; + pd2.kif = pd->kif; + pd2.m = pd->m; + pd2.rdomain = pd->rdomain; + /* Payload packet is from the opposite direction. */ + pd2.sidx = (pd2.dir == PF_IN) ? 1 : 0; + pd2.didx = (pd2.dir == PF_IN) ? 0 : 1; + switch (pd->af) { + case AF_INET: + /* offset of h2 in mbuf chain */ + ipoff2 = pd->off + ICMP_MINLEN; + + if (!pf_pull_hdr(pd2.m, ipoff2, &h2, sizeof(h2), + reason, pd2.af)) { + DPFPRINTF(LOG_NOTICE, + "ICMP error message too short (ip)"); + return (PF_DROP); + } + /* + * ICMP error messages don't refer to non-first + * fragments + */ + if (h2.ip_off & htons(IP_OFFMASK)) { + REASON_SET(reason, PFRES_FRAG); + return (PF_DROP); + } + + /* offset of protocol header that follows h2 */ + pd2.off = ipoff2; + if (pf_walk_header(&pd2, &h2, reason) != PF_PASS) + return (PF_DROP); + + pd2.tot_len = ntohs(h2.ip_len); + pd2.ttl = h2.ip_ttl; + pd2.src = (struct pf_addr *)&h2.ip_src; + pd2.dst = (struct pf_addr *)&h2.ip_dst; + break; +#ifdef INET6 + case AF_INET6: + ipoff2 = pd->off + sizeof(struct icmp6hdr); + + if (!pf_pull_hdr(pd2.m, ipoff2, &h2_6, sizeof(h2_6), + reason, pd2.af)) { + DPFPRINTF(LOG_NOTICE, + "ICMP error message too short (ip6)"); + return (PF_DROP); + } + + pd2.off = ipoff2; + if (pf_walk_header6(&pd2, &h2_6, reason) != PF_PASS) + return (PF_DROP); + + pd2.tot_len = ntohs(h2_6.ip6_plen) + + sizeof(struct pf_ip6_hdr); + pd2.ttl = h2_6.ip6_hlim; + pd2.src = (struct pf_addr *)&h2_6.ip6_src; + pd2.dst = (struct pf_addr *)&h2_6.ip6_dst; + break; +#endif /* INET6 */ + default: + unhandled_af(pd->af); + } + + if (PF_ANEQ(pd->dst, pd2.src, pd->af)) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: BAD ICMP %d:%d outer dst: ", + icmptype, icmpcode); + pf_print_host(pd->src, 0, pd->af); + addlog(" -> "); + pf_print_host(pd->dst, 0, pd->af); + addlog(" inner src: "); + pf_print_host(pd2.src, 0, pd2.af); + addlog(" -> "); + pf_print_host(pd2.dst, 0, pd2.af); + addlog("\n"); + } + REASON_SET(reason, PFRES_BADSTATE); + return (PF_DROP); + } + + switch (pd2.proto) { + case IPPROTO_TCP: { + struct pf_tcphdr *th = &pd2.hdr.tcp; + u_int32_t seq; + struct pf_state_peer *src, *dst; + u_int8_t dws; + int action; + + /* + * Only the first 8 bytes of the TCP header can be + * expected. Don't access any TCP header fields after + * th_seq, an ackskew test is not possible. + */ + if (!pf_pull_hdr(pd2.m, pd2.off, th, 8, reason, + pd2.af)) { + DPFPRINTF(LOG_NOTICE, + "ICMP error message too short (tcp)"); + return (PF_DROP); + } + + key.af = pd2.af; + key.proto = IPPROTO_TCP; + key.rdomain = pd2.rdomain; + pf_addrcpy(&key.addr[pd2.sidx], pd2.src, key.af); + pf_addrcpy(&key.addr[pd2.didx], pd2.dst, key.af); + key.port[pd2.sidx] = th->th_sport; + key.port[pd2.didx] = th->th_dport; + key.hash = pf_pkt_hash(pd2.af, pd2.proto, + pd2.src, pd2.dst, th->th_sport, th->th_dport); + + action = pf_find_state(&pd2, &key, stp); + if (action != PF_MATCH) + return (action); + + if (pd2.dir == (*stp)->direction) { + if (PF_REVERSED_KEY((*stp)->key, pd->af)) { + src = &(*stp)->src; + dst = &(*stp)->dst; + } else { + src = &(*stp)->dst; + dst = &(*stp)->src; + } + } else { + if (PF_REVERSED_KEY((*stp)->key, pd->af)) { + src = &(*stp)->dst; + dst = &(*stp)->src; + } else { + src = &(*stp)->src; + dst = &(*stp)->dst; + } + } + + if (src->wscale && dst->wscale) + dws = dst->wscale & PF_WSCALE_MASK; + else + dws = 0; + + /* Demodulate sequence number */ + seq = ntohl(th->th_seq) - src->seqdiff; + if (src->seqdiff) { + pf_patch_32(pd, &th->th_seq, htonl(seq)); + copyback = 1; + } + + if (!((*stp)->state_flags & PFSTATE_SLOPPY) && + (!SEQ_GEQ(src->seqhi, seq) || !SEQ_GEQ(seq, + src->seqlo - (dst->max_win << dws)))) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: BAD ICMP %d:%d ", + icmptype, icmpcode); + pf_print_host(pd->src, 0, pd->af); + addlog(" -> "); + pf_print_host(pd->dst, 0, pd->af); + addlog(" state: "); + pf_print_state(*stp); + addlog(" seq=%u\n", seq); + } + REASON_SET(reason, PFRES_BADSTATE); + return (PF_DROP); + } else { + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, + "pf: OK ICMP %d:%d ", + icmptype, icmpcode); + pf_print_host(pd->src, 0, pd->af); + addlog(" -> "); + pf_print_host(pd->dst, 0, pd->af); + addlog(" state: "); + pf_print_state(*stp); + addlog(" seq=%u\n", seq); + } + } + + /* translate source/destination address, if necessary */ + if ((*stp)->key[PF_SK_WIRE] != + (*stp)->key[PF_SK_STACK]) { + struct pf_state_key *nk; + int afto, sidx, didx; + + if (PF_REVERSED_KEY((*stp)->key, pd->af)) + nk = (*stp)->key[pd->sidx]; + else + nk = (*stp)->key[pd->didx]; + + afto = pd->af != nk->af; + sidx = afto ? pd2.didx : pd2.sidx; + didx = afto ? pd2.sidx : pd2.didx; + +#ifdef INET6 + if (afto) { + if (pf_translate_icmp_af(pd, nk->af, + &pd->hdr.icmp)) + return (PF_DROP); + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), + &pd->hdr.icmp6, M_NOWAIT); + if (pf_change_icmp_af(pd->m, ipoff2, + pd, &pd2, &nk->addr[sidx], + &nk->addr[didx], pd->af, nk->af)) + return (PF_DROP); + pd->m->m_pkthdr.ph_rtableid = + nk->rdomain; + pd->destchg = 1; + pf_addrcpy(&pd->nsaddr, + &nk->addr[pd2.sidx], nk->af); + pf_addrcpy(&pd->ndaddr, + &nk->addr[pd2.didx], nk->af); + if (nk->af == AF_INET) { + pd->proto = IPPROTO_ICMP; + } else { + pd->proto = IPPROTO_ICMPV6; + /* + * IPv4 becomes IPv6 so we must + * copy IPv4 src addr to least + * 32bits in IPv6 address to + * keep traceroute/icmp + * working. + */ + pd->nsaddr.addr32[3] = + pd->src->addr32[0]; + } + pd->naf = nk->af; + + pf_patch_16(pd, + &th->th_sport, nk->port[sidx]); + pf_patch_16(pd, + &th->th_dport, nk->port[didx]); + + m_copyback(pd2.m, pd2.off, 8, th, + M_NOWAIT); + return (PF_AFRT); + } +#endif /* INET6 */ + if (PF_ANEQ(pd2.src, + &nk->addr[pd2.sidx], pd2.af) || + nk->port[pd2.sidx] != th->th_sport) + pf_translate_icmp(pd, pd2.src, + &th->th_sport, pd->dst, + &nk->addr[pd2.sidx], + nk->port[pd2.sidx]); + + if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx], + pd2.af) || pd2.rdomain != nk->rdomain) + pd->destchg = 1; + pd->m->m_pkthdr.ph_rtableid = nk->rdomain; + + if (PF_ANEQ(pd2.dst, + &nk->addr[pd2.didx], pd2.af) || + nk->port[pd2.didx] != th->th_dport) + pf_translate_icmp(pd, pd2.dst, + &th->th_dport, pd->src, + &nk->addr[pd2.didx], + nk->port[pd2.didx]); + copyback = 1; + } + + if (copyback) { + switch (pd2.af) { + case AF_INET: + m_copyback(pd->m, pd->off, ICMP_MINLEN, + &pd->hdr.icmp, M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2), + &h2, M_NOWAIT); + break; +#ifdef INET6 + case AF_INET6: + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), + &pd->hdr.icmp6, M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2_6), + &h2_6, M_NOWAIT); + break; +#endif /* INET6 */ + } + m_copyback(pd2.m, pd2.off, 8, th, M_NOWAIT); + } + break; + } + case IPPROTO_UDP: { + struct pf_udphdr *uh = &pd2.hdr.udp; + int action; + + if (!pf_pull_hdr(pd2.m, pd2.off, uh, sizeof(*uh), + reason, pd2.af)) { + DPFPRINTF(LOG_NOTICE, + "ICMP error message too short (udp)"); + return (PF_DROP); + } + + key.af = pd2.af; + key.proto = IPPROTO_UDP; + key.rdomain = pd2.rdomain; + pf_addrcpy(&key.addr[pd2.sidx], pd2.src, key.af); + pf_addrcpy(&key.addr[pd2.didx], pd2.dst, key.af); + key.port[pd2.sidx] = uh->uh_sport; + key.port[pd2.didx] = uh->uh_dport; + key.hash = pf_pkt_hash(pd2.af, pd2.proto, + pd2.src, pd2.dst, uh->uh_sport, uh->uh_dport); + + action = pf_find_state(&pd2, &key, stp); + if (action != PF_MATCH) + return (action); + + /* translate source/destination address, if necessary */ + if ((*stp)->key[PF_SK_WIRE] != + (*stp)->key[PF_SK_STACK]) { + struct pf_state_key *nk; + int afto, sidx, didx; + + if (PF_REVERSED_KEY((*stp)->key, pd->af)) + nk = (*stp)->key[pd->sidx]; + else + nk = (*stp)->key[pd->didx]; + + afto = pd->af != nk->af; + sidx = afto ? pd2.didx : pd2.sidx; + didx = afto ? pd2.sidx : pd2.didx; + +#ifdef INET6 + if (afto) { + if (pf_translate_icmp_af(pd, nk->af, + &pd->hdr.icmp)) + return (PF_DROP); + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), + &pd->hdr.icmp6, M_NOWAIT); + if (pf_change_icmp_af(pd->m, ipoff2, + pd, &pd2, &nk->addr[sidx], + &nk->addr[didx], pd->af, nk->af)) + return (PF_DROP); + pd->m->m_pkthdr.ph_rtableid = + nk->rdomain; + pd->destchg = 1; + pf_addrcpy(&pd->nsaddr, + &nk->addr[pd2.sidx], nk->af); + pf_addrcpy(&pd->ndaddr, + &nk->addr[pd2.didx], nk->af); + if (nk->af == AF_INET) { + pd->proto = IPPROTO_ICMP; + } else { + pd->proto = IPPROTO_ICMPV6; + /* + * IPv4 becomes IPv6 so we must + * copy IPv4 src addr to least + * 32bits in IPv6 address to + * keep traceroute/icmp + * working. + */ + pd->nsaddr.addr32[3] = + pd->src->addr32[0]; + } + pd->naf = nk->af; + + pf_patch_16(pd, + &uh->uh_sport, nk->port[sidx]); + pf_patch_16(pd, + &uh->uh_dport, nk->port[didx]); + + m_copyback(pd2.m, pd2.off, sizeof(*uh), + uh, M_NOWAIT); + return (PF_AFRT); + } +#endif /* INET6 */ + + if (PF_ANEQ(pd2.src, + &nk->addr[pd2.sidx], pd2.af) || + nk->port[pd2.sidx] != uh->uh_sport) + pf_translate_icmp(pd, pd2.src, + &uh->uh_sport, pd->dst, + &nk->addr[pd2.sidx], + nk->port[pd2.sidx]); + + if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx], + pd2.af) || pd2.rdomain != nk->rdomain) + pd->destchg = 1; + pd->m->m_pkthdr.ph_rtableid = nk->rdomain; + + if (PF_ANEQ(pd2.dst, + &nk->addr[pd2.didx], pd2.af) || + nk->port[pd2.didx] != uh->uh_dport) + pf_translate_icmp(pd, pd2.dst, + &uh->uh_dport, pd->src, + &nk->addr[pd2.didx], + nk->port[pd2.didx]); + + switch (pd2.af) { + case AF_INET: + m_copyback(pd->m, pd->off, ICMP_MINLEN, + &pd->hdr.icmp, M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2), + &h2, M_NOWAIT); + break; +#ifdef INET6 + case AF_INET6: + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), + &pd->hdr.icmp6, M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2_6), + &h2_6, M_NOWAIT); + break; +#endif /* INET6 */ + } + /* Avoid recomputing quoted UDP checksum. + * note: udp6 0 csum invalid per rfc2460 p27. + * but presumed nothing cares in this context */ + pf_patch_16(pd, &uh->uh_sum, 0); + m_copyback(pd2.m, pd2.off, sizeof(*uh), uh, + M_NOWAIT); + copyback = 1; + } + break; + } + case IPPROTO_ICMP: { + struct pf_icmp *iih = &pd2.hdr.icmp; + + if (pd2.af != AF_INET) { + REASON_SET(reason, PFRES_NORM); + return (PF_DROP); + } + + if (!pf_pull_hdr(pd2.m, pd2.off, iih, ICMP_MINLEN, + reason, pd2.af)) { + DPFPRINTF(LOG_NOTICE, + "ICMP error message too short (icmp)"); + return (PF_DROP); + } + + pf_icmp_mapping(&pd2, iih->icmp_type, + &icmp_dir, &virtual_id, &virtual_type); + + ret = pf_icmp_state_lookup(&pd2, &key, stp, + virtual_id, virtual_type, icmp_dir, &iidx, 0, 1); + if (ret >= 0) + return (ret); + + /* translate source/destination address, if necessary */ + if ((*stp)->key[PF_SK_WIRE] != + (*stp)->key[PF_SK_STACK]) { + struct pf_state_key *nk; + int afto, sidx, didx; + + if (PF_REVERSED_KEY((*stp)->key, pd->af)) + nk = (*stp)->key[pd->sidx]; + else + nk = (*stp)->key[pd->didx]; + + afto = pd->af != nk->af; + sidx = afto ? pd2.didx : pd2.sidx; + didx = afto ? pd2.sidx : pd2.didx; + iidx = afto ? !iidx : iidx; + +#ifdef INET6 + if (afto) { + if (nk->af != AF_INET6) + return (PF_DROP); + if (pf_translate_icmp_af(pd, nk->af, + &pd->hdr.icmp)) + return (PF_DROP); + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), + &pd->hdr.icmp6, M_NOWAIT); + if (pf_change_icmp_af(pd->m, ipoff2, + pd, &pd2, &nk->addr[sidx], + &nk->addr[didx], pd->af, nk->af)) + return (PF_DROP); + pd->proto = IPPROTO_ICMPV6; + if (pf_translate_icmp_af(pd, + nk->af, iih)) + return (PF_DROP); + if (virtual_type == htons(ICMP_ECHO)) + pf_patch_16(pd, &iih->icmp_id, + nk->port[iidx]); + m_copyback(pd2.m, pd2.off, ICMP_MINLEN, + iih, M_NOWAIT); + pd->m->m_pkthdr.ph_rtableid = + nk->rdomain; + pd->destchg = 1; + pf_addrcpy(&pd->nsaddr, + &nk->addr[pd2.sidx], nk->af); + pf_addrcpy(&pd->ndaddr, + &nk->addr[pd2.didx], nk->af); + /* + * IPv4 becomes IPv6 so we must copy + * IPv4 src addr to least 32bits in + * IPv6 address to keep traceroute + * working. + */ + pd->nsaddr.addr32[3] = + pd->src->addr32[0]; + pd->naf = nk->af; + return (PF_AFRT); + } +#endif /* INET6 */ + + if (PF_ANEQ(pd2.src, + &nk->addr[pd2.sidx], pd2.af) || + (virtual_type == htons(ICMP_ECHO) && + nk->port[iidx] != iih->icmp_id)) + pf_translate_icmp(pd, pd2.src, + (virtual_type == htons(ICMP_ECHO)) ? + &iih->icmp_id : NULL, + pd->dst, &nk->addr[pd2.sidx], + (virtual_type == htons(ICMP_ECHO)) ? + nk->port[iidx] : 0); + + if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx], + pd2.af) || pd2.rdomain != nk->rdomain) + pd->destchg = 1; + pd->m->m_pkthdr.ph_rtableid = nk->rdomain; + + if (PF_ANEQ(pd2.dst, + &nk->addr[pd2.didx], pd2.af)) + pf_translate_icmp(pd, pd2.dst, NULL, + pd->src, &nk->addr[pd2.didx], 0); + + m_copyback(pd->m, pd->off, ICMP_MINLEN, + &pd->hdr.icmp, M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2), &h2, + M_NOWAIT); + m_copyback(pd2.m, pd2.off, ICMP_MINLEN, iih, + M_NOWAIT); + copyback = 1; + } + break; + } +#ifdef INET6 + case IPPROTO_ICMPV6: { + struct icmp6hdr *iih = &pd2.hdr.icmp6; + + if (pd2.af != AF_INET6) { + REASON_SET(reason, PFRES_NORM); + return (PF_DROP); + } + + if (!pf_pull_hdr(pd2.m, pd2.off, iih, + sizeof(struct icmp6hdr), reason, pd2.af)) { + DPFPRINTF(LOG_NOTICE, + "ICMP error message too short (icmp6)"); + return (PF_DROP); + } + + pf_icmp_mapping(&pd2, iih->icmp6_type, + &icmp_dir, &virtual_id, &virtual_type); + ret = pf_icmp_state_lookup(&pd2, &key, stp, + virtual_id, virtual_type, icmp_dir, &iidx, 0, 1); + /* IPv6? try matching a multicast address */ + if (ret == PF_DROP && pd2.af == AF_INET6 && + icmp_dir == PF_OUT) + ret = pf_icmp_state_lookup(&pd2, &key, stp, + virtual_id, virtual_type, icmp_dir, &iidx, + 1, 1); + if (ret >= 0) + return (ret); + + /* translate source/destination address, if necessary */ + if ((*stp)->key[PF_SK_WIRE] != + (*stp)->key[PF_SK_STACK]) { + struct pf_state_key *nk; + int afto, sidx, didx; + + if (PF_REVERSED_KEY((*stp)->key, pd->af)) + nk = (*stp)->key[pd->sidx]; + else + nk = (*stp)->key[pd->didx]; + + afto = pd->af != nk->af; + sidx = afto ? pd2.didx : pd2.sidx; + didx = afto ? pd2.sidx : pd2.didx; + iidx = afto ? !iidx : iidx; + + if (afto) { + if (nk->af != AF_INET) + return (PF_DROP); + if (pf_translate_icmp_af(pd, nk->af, + &pd->hdr.icmp)) + return (PF_DROP); + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), + &pd->hdr.icmp6, M_NOWAIT); + if (pf_change_icmp_af(pd->m, ipoff2, + pd, &pd2, &nk->addr[sidx], + &nk->addr[didx], pd->af, nk->af)) + return (PF_DROP); + pd->proto = IPPROTO_ICMP; + if (pf_translate_icmp_af(pd, + nk->af, iih)) + return (PF_DROP); + if (virtual_type == + htons(ICMP6_ECHO_REQUEST)) + pf_patch_16(pd, &iih->icmp6_id, + nk->port[iidx]); + m_copyback(pd2.m, pd2.off, + sizeof(struct icmp6hdr), iih, + M_NOWAIT); + pd->m->m_pkthdr.ph_rtableid = + nk->rdomain; + pd->destchg = 1; + pf_addrcpy(&pd->nsaddr, + &nk->addr[pd2.sidx], nk->af); + pf_addrcpy(&pd->ndaddr, + &nk->addr[pd2.didx], nk->af); + pd->naf = nk->af; + return (PF_AFRT); + } + + if (PF_ANEQ(pd2.src, + &nk->addr[pd2.sidx], pd2.af) || + ((virtual_type == + htons(ICMP6_ECHO_REQUEST)) && + nk->port[pd2.sidx] != iih->icmp6_id)) + pf_translate_icmp(pd, pd2.src, + (virtual_type == + htons(ICMP6_ECHO_REQUEST)) + ? &iih->icmp6_id : NULL, + pd->dst, &nk->addr[pd2.sidx], + (virtual_type == + htons(ICMP6_ECHO_REQUEST)) + ? nk->port[iidx] : 0); + + if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx], + pd2.af) || pd2.rdomain != nk->rdomain) + pd->destchg = 1; + pd->m->m_pkthdr.ph_rtableid = nk->rdomain; + + if (PF_ANEQ(pd2.dst, + &nk->addr[pd2.didx], pd2.af)) + pf_translate_icmp(pd, pd2.dst, NULL, + pd->src, &nk->addr[pd2.didx], 0); + + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), &pd->hdr.icmp6, + M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2_6), &h2_6, + M_NOWAIT); + m_copyback(pd2.m, pd2.off, + sizeof(struct icmp6hdr), iih, M_NOWAIT); + copyback = 1; + } + break; + } +#endif /* INET6 */ + default: { + int action; + + key.af = pd2.af; + key.proto = pd2.proto; + key.rdomain = pd2.rdomain; + pf_addrcpy(&key.addr[pd2.sidx], pd2.src, key.af); + pf_addrcpy(&key.addr[pd2.didx], pd2.dst, key.af); + key.port[0] = key.port[1] = 0; + key.hash = pf_pkt_hash(pd2.af, pd2.proto, + pd2.src, pd2.dst, 0, 0); + + action = pf_find_state(&pd2, &key, stp); + if (action != PF_MATCH) + return (action); + + /* translate source/destination address, if necessary */ + if ((*stp)->key[PF_SK_WIRE] != + (*stp)->key[PF_SK_STACK]) { + struct pf_state_key *nk = + (*stp)->key[pd->didx]; + + if (PF_ANEQ(pd2.src, + &nk->addr[pd2.sidx], pd2.af)) + pf_translate_icmp(pd, pd2.src, NULL, + pd->dst, &nk->addr[pd2.sidx], 0); + + if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx], + pd2.af) || pd2.rdomain != nk->rdomain) + pd->destchg = 1; + pd->m->m_pkthdr.ph_rtableid = nk->rdomain; + + if (PF_ANEQ(pd2.dst, + &nk->addr[pd2.didx], pd2.af)) + pf_translate_icmp(pd, pd2.dst, NULL, + pd->src, &nk->addr[pd2.didx], 0); + + switch (pd2.af) { + case AF_INET: + m_copyback(pd->m, pd->off, ICMP_MINLEN, + &pd->hdr.icmp, M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2), + &h2, M_NOWAIT); + break; +#ifdef INET6 + case AF_INET6: + m_copyback(pd->m, pd->off, + sizeof(struct icmp6hdr), + &pd->hdr.icmp6, M_NOWAIT); + m_copyback(pd2.m, ipoff2, sizeof(h2_6), + &h2_6, M_NOWAIT); + break; +#endif /* INET6 */ + } + copyback = 1; + } + break; + } + } + } + if (copyback) { + m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT); + } + + return (PF_PASS); +} + +/* + * ipoff and off are measured from the start of the mbuf chain. + * h must be at "ipoff" on the mbuf chain. + */ +void * +pf_pull_hdr(struct mbuf *m, int off, void *p, int len, + u_short *reasonp, sa_family_t af) +{ + int iplen = 0; + + switch (af) { + case AF_INET: { + struct pf_ip *h = mtod(m, struct pf_ip *); + u_int16_t fragoff = (ntohs(h->ip_off) & IP_OFFMASK) << 3; + + if (fragoff) { + REASON_SET(reasonp, PFRES_FRAG); + return (NULL); + } + iplen = ntohs(h->ip_len); + break; + } +#ifdef INET6 + case AF_INET6: { + struct pf_ip6_hdr *h = mtod(m, struct pf_ip6_hdr *); + + iplen = ntohs(h->ip6_plen) + sizeof(struct pf_ip6_hdr); + break; + } +#endif /* INET6 */ + } + if (m->m_pkthdr.len < off + len || iplen < off + len) { + REASON_SET(reasonp, PFRES_SHORT); + return (NULL); + } + m_copydata(m, off, len, p); + return (p); +} + +int +pf_routable(struct pf_addr *addr, sa_family_t af, struct pfi_kif *kif, + int rtableid) +{ + struct sockaddr_storage ss; + struct sockaddr_in *dst; + int ret = 1; + int check_mpath; +#ifdef INET6 + struct sockaddr_in6 *dst6; +#endif /* INET6 */ + struct rtentry *rt = NULL; + + check_mpath = 0; + memset(&ss, 0, sizeof(ss)); + switch (af) { + case AF_INET: + dst = (struct sockaddr_in *)&ss; + dst->sin_family = AF_INET; + dst->/* PFLINUX sin_len */; + dst->sin_addr = addr->v4; + if (atomic_load_int(&ipmultipath)) + check_mpath = 1; + break; +#ifdef INET6 + case AF_INET6: + /* + * Skip check for addresses with embedded interface scope, + * as they would always match anyway. + */ + if (IN6_IS_SCOPE_EMBED(&addr->v6)) + goto out; + dst6 = (struct sockaddr_in6 *)&ss; + dst6->sin6_family = AF_INET6; + dst6->sin6_len = sizeof(*dst6); + dst6->sin6_addr = addr->v6; + if (atomic_load_int(&ip6_multipath)) + check_mpath = 1; + break; +#endif /* INET6 */ + } + + /* Skip checks for ipsec interfaces */ + if (kif != NULL && kif->pfik_ifp->if_type == IFT_ENC) + goto out; + + rt = rtalloc(sstosa(&ss), 0, rtableid); + if (rt != NULL) { + /* No interface given, this is a no-route check */ + if (kif == NULL) + goto out; + + if (kif->pfik_ifp == NULL) { + ret = 0; + goto out; + } + + /* Perform uRPF check if passed input interface */ + ret = 0; + do { + if (rt->rt_ifidx == kif->pfik_ifp->if_index) { + ret = 1; +#if NCARP > 0 + } else { + struct ifnet *ifp; + + smr_read_enter(); + ifp = if_get_smr(rt->rt_ifidx); + if (ifp != NULL && ifp->if_type == IFT_CARP && + ifp->if_carpdevidx == + kif->pfik_ifp->if_index) + ret = 1; + smr_read_leave(); +#endif /* NCARP */ + } + + rt = rtable_iterate(rt); + } while (check_mpath == 1 && rt != NULL && ret == 0); + } else + ret = 0; +out: + rtfree(rt); + return (ret); +} + +int +pf_rtlabel_match(struct pf_addr *addr, sa_family_t af, struct pf_addr_wrap *aw, + int rtableid) +{ + struct sockaddr_storage ss; + struct sockaddr_in *dst; +#ifdef INET6 + struct sockaddr_in6 *dst6; +#endif /* INET6 */ + struct rtentry *rt; + int ret = 0; + + memset(&ss, 0, sizeof(ss)); + switch (af) { + case AF_INET: + dst = (struct sockaddr_in *)&ss; + dst->sin_family = AF_INET; + dst->/* PFLINUX sin_len */; + dst->sin_addr = addr->v4; + break; +#ifdef INET6 + case AF_INET6: + dst6 = (struct sockaddr_in6 *)&ss; + dst6->sin6_family = AF_INET6; + dst6->sin6_len = sizeof(*dst6); + dst6->sin6_addr = addr->v6; + break; +#endif /* INET6 */ + } + + rt = rtalloc(sstosa(&ss), RT_RESOLVE, rtableid); + if (rt != NULL) { + if (rt->rt_labelid == aw->v.rtlabel) + ret = 1; + rtfree(rt); + } + + return (ret); +} + +/* pf_route() may change pd->m, adjust local copies after calling */ +void +pf_route(struct pf_pdesc *pd, struct pf_state *st) +{ + struct mbuf *m0; + struct mbuf_list ml; + struct sockaddr_in *dst, sin; + struct rtentry *rt = NULL; + struct pf_ip *ip; + struct ifnet *ifp = NULL; + unsigned int rtableid; + + if (pd->m->m_pkthdr.pf.routed++ > 3) { + m_freem(pd->m); + pd->m = NULL; + return; + } + + if (st->rt == PF_DUPTO) { + if ((m0 = m_dup_pkt(pd->m, max_linkhdr, M_NOWAIT)) == NULL) + return; + } else { + if ((st->rt == PF_REPLYTO) == (st->direction == pd->dir)) + return; + m0 = pd->m; + pd->m = NULL; + } + + if (m0->m_len < sizeof(struct pf_ip)) { + DPFPRINTF(LOG_ERR, + "%s: m0->m_len < sizeof(struct pf_ip)", __func__); + goto bad; + } + + ip = mtod(m0, struct pf_ip *); + + if (pd->dir == PF_IN) { + if (ip->ip_ttl <= IPTTLDEC) { + if (st->rt != PF_DUPTO) { + pf_send_icmp(m0, ICMP_TIMXCEED, + ICMP_TIMXCEED_INTRANS, 0, + pd->af, st->rule.ptr, pd->rdomain); + } + goto bad; + } + ip->ip_ttl -= IPTTLDEC; + } + + memset(&sin, 0, sizeof(sin)); + dst = &sin; + dst->sin_family = AF_INET; + dst->/* PFLINUX sin_len */; + dst->sin_addr = st->rt_addr.v4; + rtableid = m0->m_pkthdr.ph_rtableid; + + rt = rtalloc_mpath(sintosa(dst), &ip->ip_src.s_addr, rtableid); + if (!rtisvalid(rt)) { + if (st->rt != PF_DUPTO) { + pf_send_icmp(m0, ICMP_UNREACH, ICMP_UNREACH_HOST, + 0, pd->af, st->rule.ptr, pd->rdomain); + } + ipstat_inc(ips_noroute); + goto bad; + } + + ifp = if_get(rt->rt_ifidx); + if (ifp == NULL) + goto bad; + + /* A locally generated packet may have invalid source address. */ + if ((ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET && + (ifp->if_flags & PFIFF_LOOPBACK) == 0) + ip->ip_src = ifatoia(rt->rt_ifa)->ia_addr.sin_addr; + + if (st->rt != PF_DUPTO && pd->dir == PF_IN) { + if (pf_test(AF_INET, PF_OUT, ifp, &m0) != PF_PASS) + goto bad; + else if (m0 == NULL) + goto done; + if (m0->m_len < sizeof(struct pf_ip)) { + DPFPRINTF(LOG_ERR, + "%s: m0->m_len < sizeof(struct pf_ip)", __func__); + goto bad; + } + ip = mtod(m0, struct pf_ip *); + } + + if (if_output_tso(ifp, &m0, sintosa(dst), rt, ifp->if_mtu) || + m0 == NULL) + goto done; + + /* + * Too large for interface; fragment if possible. + * Must be able to put at least 8 bytes per fragment. + */ + if (ip->ip_off & htons(IP_DF)) { + ipstat_inc(ips_cantfrag); + if (st->rt != PF_DUPTO) + pf_send_icmp(m0, ICMP_UNREACH, ICMP_UNREACH_NEEDFRAG, + ifp->if_mtu, pd->af, st->rule.ptr, pd->rdomain); + goto bad; + } + + if (ip_fragment(m0, &ml, ifp, ifp->if_mtu) || + if_output_ml(ifp, &ml, sintosa(dst), rt)) + goto done; + ipstat_inc(ips_fragmented); + +done: + if_put(ifp); + rtfree(rt); + return; + +bad: + m_freem(m0); + goto done; +} + +#ifdef INET6 +/* pf_route6() may change pd->m, adjust local copies after calling */ +void +pf_route6(struct pf_pdesc *pd, struct pf_state *st) +{ + struct mbuf *m0; + struct sockaddr_in6 *dst, sin6; + struct rtentry *rt = NULL; + struct pf_ip6_hdr *ip6; + struct ifnet *ifp = NULL; + struct m_tag *mtag; + unsigned int rtableid; + + if (pd->m->m_pkthdr.pf.routed++ > 3) { + m_freem(pd->m); + pd->m = NULL; + return; + } + + if (st->rt == PF_DUPTO) { + if ((m0 = m_dup_pkt(pd->m, max_linkhdr, M_NOWAIT)) == NULL) + return; + } else { + if ((st->rt == PF_REPLYTO) == (st->direction == pd->dir)) + return; + m0 = pd->m; + pd->m = NULL; + } + + if (m0->m_len < sizeof(struct pf_ip6_hdr)) { + DPFPRINTF(LOG_ERR, + "%s: m0->m_len < sizeof(struct pf_ip6_hdr)", __func__); + goto bad; + } + ip6 = mtod(m0, struct pf_ip6_hdr *); + + if (pd->dir == PF_IN) { + if (ip6->ip6_hlim <= IPV6_HLIMDEC) { + if (st->rt != PF_DUPTO) { + pf_send_icmp(m0, ICMP6_TIME_EXCEEDED, + ICMP6_TIME_EXCEED_TRANSIT, 0, + pd->af, st->rule.ptr, pd->rdomain); + } + goto bad; + } + ip6->ip6_hlim -= IPV6_HLIMDEC; + } + + memset(&sin6, 0, sizeof(sin6)); + dst = &sin6; + dst->sin6_family = AF_INET6; + dst->sin6_len = sizeof(*dst); + dst->sin6_addr = st->rt_addr.v6; + rtableid = m0->m_pkthdr.ph_rtableid; + + rt = rtalloc_mpath(sin6tosa(dst), &ip6->ip6_src.s6_addr32[0], + rtableid); + if (!rtisvalid(rt)) { + if (st->rt != PF_DUPTO) { + pf_send_icmp(m0, ICMP6_DST_UNREACH, + ICMP6_DST_UNREACH_NOROUTE, 0, + pd->af, st->rule.ptr, pd->rdomain); + } + ip6stat_inc(ip6s_noroute); + goto bad; + } + + ifp = if_get(rt->rt_ifidx); + if (ifp == NULL) + goto bad; + + /* A locally generated packet may have invalid source address. */ + if (IN6_IS_ADDR_LOOPBACK(&ip6->ip6_src) && + (ifp->if_flags & PFIFF_LOOPBACK) == 0) + ip6->ip6_src = ifatoia6(rt->rt_ifa)->ia_addr.sin6_addr; + + if (st->rt != PF_DUPTO && pd->dir == PF_IN) { + if (pf_test(AF_INET6, PF_OUT, ifp, &m0) != PF_PASS) + goto bad; + else if (m0 == NULL) + goto done; + if (m0->m_len < sizeof(struct pf_ip6_hdr)) { + DPFPRINTF(LOG_ERR, + "%s: m0->m_len < sizeof(struct pf_ip6_hdr)", __func__); + goto bad; + } + } + + /* + * If packet has been reassembled by PF earlier, we have to + * use pf_refragment6() here to turn it back to fragments. + */ + if ((mtag = m_tag_find(m0, PACKET_TAG_PF_REASSEMBLED, NULL))) { + (void) pf_refragment6(&m0, mtag, dst, ifp, rt); + goto done; + } + + if (if_output_tso(ifp, &m0, sin6tosa(dst), rt, ifp->if_mtu) || + m0 == NULL) + goto done; + + ip6stat_inc(ip6s_cantfrag); + if (st->rt != PF_DUPTO) + pf_send_icmp(m0, ICMP6_PACKET_TOO_BIG, 0, + ifp->if_mtu, pd->af, st->rule.ptr, pd->rdomain); + goto bad; + +done: + if_put(ifp); + rtfree(rt); + return; + +bad: + m_freem(m0); + goto done; +} +#endif /* INET6 */ + +/* + * check TCP checksum and set mbuf flag + * off is the offset where the protocol header starts + * len is the total length of protocol header plus payload + * returns 0 when the checksum is valid, otherwise returns 1. + * if the _OUT flag is set the checksum isn't done yet, consider these ok + */ +int +pf_check_tcp_cksum(struct mbuf *m, int off, int len, sa_family_t af) +{ + u_int16_t sum; + + if (m->m_pkthdr.csum_flags & + (M_TCP_CSUM_IN_OK | M_TCP_CSUM_OUT)) { + return (0); + } + if (m->m_pkthdr.csum_flags & M_TCP_CSUM_IN_BAD || + off < sizeof(struct pf_ip) || + m->m_pkthdr.len < off + len) { + return (1); + } + + /* need to do it in software */ + tcpstat_inc(tcps_inswcsum); + + switch (af) { + case AF_INET: + if (m->m_len < sizeof(struct pf_ip)) + return (1); + + sum = in4_cksum(m, IPPROTO_TCP, off, len); + break; +#ifdef INET6 + case AF_INET6: + if (m->m_len < sizeof(struct pf_ip6_hdr)) + return (1); + + sum = in6_cksum(m, IPPROTO_TCP, off, len); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + if (sum) { + tcpstat_inc(tcps_rcvbadsum); + m->m_pkthdr.csum_flags |= M_TCP_CSUM_IN_BAD; + return (1); + } + + m->m_pkthdr.csum_flags |= M_TCP_CSUM_IN_OK; + return (0); +} + +struct pf_divert * +pf_find_divert(struct mbuf *m) +{ + struct m_tag *mtag; + + if ((mtag = m_tag_find(m, PACKET_TAG_PF_DIVERT, NULL)) == NULL) + return (NULL); + + return ((struct pf_divert *)(mtag + 1)); +} + +struct pf_divert * +pf_get_divert(struct mbuf *m) +{ + struct m_tag *mtag; + + if ((mtag = m_tag_find(m, PACKET_TAG_PF_DIVERT, NULL)) == NULL) { + mtag = m_tag_get(PACKET_TAG_PF_DIVERT, sizeof(struct pf_divert), + M_NOWAIT); + if (mtag == NULL) + return (NULL); + memset(mtag + 1, 0, sizeof(struct pf_divert)); + m_tag_prepend(m, mtag); + } + + return ((struct pf_divert *)(mtag + 1)); +} + +int +pf_walk_option(struct pf_pdesc *pd, struct pf_ip *h, int off, int end, + u_short *reason) +{ + uint8_t type, length, opts[15 * 4 - sizeof(struct pf_ip)]; + + /* IP header in payload of ICMP packet may be too short */ + if (pd->m->m_pkthdr.len < end) { + DPFPRINTF(LOG_NOTICE, "IP option too short"); + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + + KASSERT(end - off <= sizeof(opts)); + m_copydata(pd->m, off, end - off, opts); + end -= off; + off = 0; + + while (off < end) { + type = opts[off]; + if (type == IPOPT_EOL) + break; + if (type == IPOPT_NOP) { + off++; + continue; + } + if (off + 2 > end) { + DPFPRINTF(LOG_NOTICE, "IP length opt"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + length = opts[off + 1]; + if (length < 2) { + DPFPRINTF(LOG_NOTICE, "IP short opt"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + if (off + length > end) { + DPFPRINTF(LOG_NOTICE, "IP long opt"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + switch (type) { + case IPOPT_RA: + SET(pd->badopts, PF_OPT_ROUTER_ALERT); + break; + default: + SET(pd->badopts, PF_OPT_OTHER); + break; + } + off += length; + } + + return (PF_PASS); +} + +int +pf_walk_header(struct pf_pdesc *pd, struct pf_ip *h, u_short *reason) +{ + struct ip6_ext ext; + u_int32_t hlen, end; + int hdr_cnt; + + hlen = h->ip_hl << 2; + if (hlen < sizeof(struct pf_ip) || hlen > ntohs(h->ip_len)) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + if (hlen != sizeof(struct pf_ip)) { + if (pf_walk_option(pd, h, pd->off + sizeof(struct pf_ip), + pd->off + hlen, reason) != PF_PASS) + return (PF_DROP); + /* header options which contain only padding is fishy */ + if (pd->badopts == 0) + SET(pd->badopts, PF_OPT_OTHER); + } + end = pd->off + ntohs(h->ip_len); + pd->off += hlen; + pd->proto = h->ip_p; + /* IGMP packets have router alert options, allow them */ + if (pd->proto == IPPROTO_IGMP) { + /* + * According to RFC 1112 ttl must be set to 1 in all IGMP + * packets sent to 224.0.0.1 + */ + if ((h->ip_ttl != 1) && + (h->ip_dst.s_addr == INADDR_ALLHOSTS_GROUP)) { + DPFPRINTF(LOG_NOTICE, "Invalid IGMP"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + CLR(pd->badopts, PF_OPT_ROUTER_ALERT); + } + /* stop walking over non initial fragments */ + if ((h->ip_off & htons(IP_OFFMASK)) != 0) + return (PF_PASS); + + for (hdr_cnt = 0; hdr_cnt < pf_hdr_limit; hdr_cnt++) { + switch (pd->proto) { + case IPPROTO_AH: + /* fragments may be short */ + if ((h->ip_off & htons(IP_MF | IP_OFFMASK)) != 0 && + end < pd->off + sizeof(ext)) + return (PF_PASS); + if (!pf_pull_hdr(pd->m, pd->off, &ext, sizeof(ext), + reason, AF_INET)) { + DPFPRINTF(LOG_NOTICE, "IP short exthdr"); + return (PF_DROP); + } + pd->off += (ext.ip6e_len + 2) * 4; + pd->proto = ext.ip6e_nxt; + break; + default: + return (PF_PASS); + } + } + DPFPRINTF(LOG_NOTICE, "IPv4 nested authentication header limit"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); +} + +#ifdef INET6 +int +pf_walk_option6(struct pf_pdesc *pd, struct pf_ip6_hdr *h, int off, int end, + u_short *reason) +{ + struct ip6_opt opt; + struct ip6_opt_jumbo jumbo; + + while (off < end) { + if (!pf_pull_hdr(pd->m, off, &opt.ip6o_type, + sizeof(opt.ip6o_type), reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short opt type"); + return (PF_DROP); + } + if (opt.ip6o_type == IP6OPT_PAD1) { + off++; + continue; + } + if (!pf_pull_hdr(pd->m, off, &opt, sizeof(opt), + reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short opt"); + return (PF_DROP); + } + if (off + sizeof(opt) + opt.ip6o_len > end) { + DPFPRINTF(LOG_NOTICE, "IPv6 long opt"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + switch (opt.ip6o_type) { + case IP6OPT_PADN: + break; + case IP6OPT_JUMBO: + SET(pd->badopts, PF_OPT_JUMBO); + if (pd->jumbolen != 0) { + DPFPRINTF(LOG_NOTICE, "IPv6 multiple jumbo"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + if (ntohs(h->ip6_plen) != 0) { + DPFPRINTF(LOG_NOTICE, "IPv6 bad jumbo plen"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + if (!pf_pull_hdr(pd->m, off, &jumbo, sizeof(jumbo), + reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short jumbo"); + return (PF_DROP); + } + memcpy(&pd->jumbolen, jumbo.ip6oj_jumbo_len, + sizeof(pd->jumbolen)); + pd->jumbolen = ntohl(pd->jumbolen); + if (pd->jumbolen < IPV6_MAXPACKET) { + DPFPRINTF(LOG_NOTICE, "IPv6 short jumbolen"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + break; + case IP6OPT_ROUTER_ALERT: + SET(pd->badopts, PF_OPT_ROUTER_ALERT); + break; + default: + SET(pd->badopts, PF_OPT_OTHER); + break; + } + off += sizeof(opt) + opt.ip6o_len; + } + + return (PF_PASS); +} + +int +pf_walk_header6(struct pf_pdesc *pd, struct pf_ip6_hdr *h, u_short *reason) +{ + struct ip6_frag frag; + struct ip6_ext ext; + struct icmp6hdr icmp6; + struct ip6_rthdr rthdr; + u_int32_t end; + int hdr_cnt, fraghdr_cnt = 0, rthdr_cnt = 0; + + pd->off += sizeof(struct pf_ip6_hdr); + end = pd->off + ntohs(h->ip6_plen); + pd->fragoff = pd->extoff = pd->jumbolen = 0; + pd->proto = h->ip6_nxt; + + for (hdr_cnt = 0; hdr_cnt < pf_hdr_limit; hdr_cnt++) { + switch (pd->proto) { + case IPPROTO_ROUTING: + case IPPROTO_DSTOPTS: + SET(pd->badopts, PF_OPT_OTHER); + break; + case IPPROTO_HOPOPTS: + if (!pf_pull_hdr(pd->m, pd->off, &ext, sizeof(ext), + reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short exthdr"); + return (PF_DROP); + } + if (pf_walk_option6(pd, h, pd->off + sizeof(ext), + pd->off + (ext.ip6e_len + 1) * 8, reason) + != PF_PASS) + return (PF_DROP); + /* option header which contains only padding is fishy */ + if (pd->badopts == 0) + SET(pd->badopts, PF_OPT_OTHER); + break; + } + switch (pd->proto) { + case IPPROTO_FRAGMENT: + if (fraghdr_cnt++) { + DPFPRINTF(LOG_NOTICE, "IPv6 multiple fragment"); + REASON_SET(reason, PFRES_FRAG); + return (PF_DROP); + } + /* jumbo payload packets cannot be fragmented */ + if (pd->jumbolen != 0) { + DPFPRINTF(LOG_NOTICE, "IPv6 fragmented jumbo"); + REASON_SET(reason, PFRES_FRAG); + return (PF_DROP); + } + if (!pf_pull_hdr(pd->m, pd->off, &frag, sizeof(frag), + reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short fragment"); + return (PF_DROP); + } + /* stop walking over non initial fragments */ + if (ntohs((frag.ip6f_offlg & IP6F_OFF_MASK)) != 0) { + pd->fragoff = pd->off; + return (PF_PASS); + } + /* RFC6946: reassemble only non atomic fragments */ + if (frag.ip6f_offlg & IP6F_MORE_FRAG) + pd->fragoff = pd->off; + pd->off += sizeof(frag); + pd->proto = frag.ip6f_nxt; + break; + case IPPROTO_ROUTING: + if (rthdr_cnt++) { + DPFPRINTF(LOG_NOTICE, "IPv6 multiple rthdr"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + /* fragments may be short */ + if (pd->fragoff != 0 && end < pd->off + sizeof(rthdr)) { + pd->off = pd->fragoff; + pd->proto = IPPROTO_FRAGMENT; + return (PF_PASS); + } + if (!pf_pull_hdr(pd->m, pd->off, &rthdr, sizeof(rthdr), + reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short rthdr"); + return (PF_DROP); + } + if (rthdr.ip6r_type == IPV6_RTHDR_TYPE_0) { + DPFPRINTF(LOG_NOTICE, "IPv6 rthdr0"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + /* FALLTHROUGH */ + case IPPROTO_HOPOPTS: + /* RFC2460 4.1: Hop-by-Hop only after IPv6 header */ + if (pd->proto == IPPROTO_HOPOPTS && hdr_cnt > 0) { + DPFPRINTF(LOG_NOTICE, "IPv6 hopopts not first"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + /* FALLTHROUGH */ + case IPPROTO_AH: + case IPPROTO_DSTOPTS: + /* fragments may be short */ + if (pd->fragoff != 0 && end < pd->off + sizeof(ext)) { + pd->off = pd->fragoff; + pd->proto = IPPROTO_FRAGMENT; + return (PF_PASS); + } + if (!pf_pull_hdr(pd->m, pd->off, &ext, sizeof(ext), + reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short exthdr"); + return (PF_DROP); + } + /* reassembly needs the ext header before the frag */ + if (pd->fragoff == 0) + pd->extoff = pd->off; + if (pd->proto == IPPROTO_HOPOPTS && pd->fragoff == 0 && + ntohs(h->ip6_plen) == 0 && pd->jumbolen != 0) { + DPFPRINTF(LOG_NOTICE, "IPv6 missing jumbo"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + if (pd->proto == IPPROTO_AH) + pd->off += (ext.ip6e_len + 2) * 4; + else + pd->off += (ext.ip6e_len + 1) * 8; + pd->proto = ext.ip6e_nxt; + break; + case IPPROTO_ICMPV6: + /* fragments may be short, ignore inner header then */ + if (pd->fragoff != 0 && end < pd->off + sizeof(icmp6)) { + pd->off = pd->fragoff; + pd->proto = IPPROTO_FRAGMENT; + return (PF_PASS); + } + if (!pf_pull_hdr(pd->m, pd->off, &icmp6, sizeof(icmp6), + reason, AF_INET6)) { + DPFPRINTF(LOG_NOTICE, "IPv6 short icmp6hdr"); + return (PF_DROP); + } + /* ICMP multicast packets have router alert options */ + switch (icmp6.icmp6_type) { + case MLD_LISTENER_QUERY: + case MLD_LISTENER_REPORT: + case MLD_LISTENER_DONE: + case MLDV2_LISTENER_REPORT: + /* + * According to RFC 2710 all MLD messages are + * sent with hop-limit (ttl) set to 1, and link + * local source address. If either one is + * missing then MLD message is invalid and + * should be discarded. + * RFC 3590 clarifies that during initial + * duplicate address detection nodes may not + * have an address, so are permitted to use + * the unspecified address, but only for Report + * and Done messages. + */ + if ((h->ip6_hlim != 1) || + (!IN6_IS_ADDR_LINKLOCAL(&h->ip6_src) && + icmp6.icmp6_type == MLD_LISTENER_QUERY) || + (!IN6_IS_ADDR_LINKLOCAL(&h->ip6_src) && + !IN6_IS_ADDR_UNSPECIFIED(&h->ip6_src))) { + DPFPRINTF(LOG_NOTICE, "Invalid MLD"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); + } + CLR(pd->badopts, PF_OPT_ROUTER_ALERT); + break; + } + return (PF_PASS); + case IPPROTO_TCP: + case IPPROTO_UDP: + /* fragments may be short, ignore inner header then */ + if (pd->fragoff != 0 && end < pd->off + + (pd->proto == IPPROTO_TCP ? sizeof(struct pf_tcphdr) : + pd->proto == IPPROTO_UDP ? sizeof(struct pf_udphdr) : + sizeof(struct icmp6hdr))) { + pd->off = pd->fragoff; + pd->proto = IPPROTO_FRAGMENT; + } + /* FALLTHROUGH */ + default: + return (PF_PASS); + } + } + DPFPRINTF(LOG_NOTICE, "IPv6 nested extension header limit"); + REASON_SET(reason, PFRES_IPOPTIONS); + return (PF_DROP); +} +#endif /* INET6 */ + +u_int16_t +pf_pkt_hash(sa_family_t af, uint8_t proto, + const struct pf_addr *src, const struct pf_addr *dst, + uint16_t sport, uint16_t dport) +{ + uint32_t hash; + + hash = src->addr32[0] ^ dst->addr32[0]; +#ifdef INET6 + if (af == AF_INET6) { + hash ^= src->addr32[1] ^ dst->addr32[1]; + hash ^= src->addr32[2] ^ dst->addr32[2]; + hash ^= src->addr32[3] ^ dst->addr32[3]; + } +#endif + + switch (proto) { + case IPPROTO_TCP: + case IPPROTO_UDP: + hash ^= sport ^ dport; + break; + } + + return stoeplitz_n32(hash); +} + +int +pf_setup_pdesc(struct pf_pdesc *pd, sa_family_t af, int dir, + struct pfi_kif *kif, struct mbuf *m, u_short *reason) +{ + memset(pd, 0, sizeof(*pd)); + pd->dir = dir; + pd->kif = kif; /* kif is NULL when called by pflog */ + pd->m = m; + pd->sidx = (dir == PF_IN) ? 0 : 1; + pd->didx = (dir == PF_IN) ? 1 : 0; + pd->af = pd->naf = af; + pd->rdomain = rtable_l2(pd->m->m_pkthdr.ph_rtableid); + + switch (pd->af) { + case AF_INET: { + struct pf_ip *h; + + /* Check for illegal packets */ + if (pd->m->m_pkthdr.len < (int)sizeof(struct pf_ip)) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + + h = mtod(pd->m, struct pf_ip *); + if (pd->m->m_pkthdr.len < ntohs(h->ip_len)) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + + if (pf_walk_header(pd, h, reason) != PF_PASS) + return (PF_DROP); + + pd->src = (struct pf_addr *)&h->ip_src; + pd->dst = (struct pf_addr *)&h->ip_dst; + pd->tot_len = ntohs(h->ip_len); + pd->tos = h->ip_tos & ~IPTOS_ECN_MASK; + pd->ttl = h->ip_ttl; + pd->virtual_proto = (h->ip_off & htons(IP_MF | IP_OFFMASK)) ? + PF_VPROTO_FRAGMENT : pd->proto; + + break; + } +#ifdef INET6 + case AF_INET6: { + struct pf_ip6_hdr *h; + + /* Check for illegal packets */ + if (pd->m->m_pkthdr.len < (int)sizeof(struct pf_ip6_hdr)) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + + h = mtod(pd->m, struct pf_ip6_hdr *); + if (pd->m->m_pkthdr.len < + sizeof(struct pf_ip6_hdr) + ntohs(h->ip6_plen)) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + + if (pf_walk_header6(pd, h, reason) != PF_PASS) + return (PF_DROP); + +#if 1 + /* + * we do not support jumbogram yet. if we keep going, zero + * ip6_plen will do something bad, so drop the packet for now. + */ + if (pd->jumbolen != 0) { + REASON_SET(reason, PFRES_NORM); + return (PF_DROP); + } +#endif /* 1 */ + + pd->src = (struct pf_addr *)&h->ip6_src; + pd->dst = (struct pf_addr *)&h->ip6_dst; + pd->tot_len = ntohs(h->ip6_plen) + sizeof(struct pf_ip6_hdr); + pd->tos = (ntohl(h->ip6_flow) & 0x0fc00000) >> 20; + pd->ttl = h->ip6_hlim; + pd->virtual_proto = (pd->fragoff != 0) ? + PF_VPROTO_FRAGMENT : pd->proto; + + break; + } +#endif /* INET6 */ + default: + panic("pf_setup_pdesc called with illegal af %u", pd->af); + + } + + pf_addrcpy(&pd->nsaddr, pd->src, pd->af); + pf_addrcpy(&pd->ndaddr, pd->dst, pd->af); + + switch (pd->virtual_proto) { + case IPPROTO_TCP: { + struct pf_tcphdr *th = &pd->hdr.tcp; + + if (!pf_pull_hdr(pd->m, pd->off, th, sizeof(*th), + reason, pd->af)) + return (PF_DROP); + pd->hdrlen = sizeof(*th); + if (th->th_dport == 0 || + pd->off + (th->th_off << 2) > pd->tot_len || + (th->th_off << 2) < sizeof(struct pf_tcphdr)) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + pd->p_len = pd->tot_len - pd->off - (th->th_off << 2); + pd->sport = &th->th_sport; + pd->dport = &th->th_dport; + pd->pcksum = &th->th_sum; + break; + } + case IPPROTO_UDP: { + struct pf_udphdr *uh = &pd->hdr.udp; + + if (!pf_pull_hdr(pd->m, pd->off, uh, sizeof(*uh), + reason, pd->af)) + return (PF_DROP); + pd->hdrlen = sizeof(*uh); + if (uh->uh_dport == 0 || + pd->off + ntohs(uh->uh_ulen) > pd->tot_len || + ntohs(uh->uh_ulen) < sizeof(struct pf_udphdr)) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + pd->sport = &uh->uh_sport; + pd->dport = &uh->uh_dport; + pd->pcksum = &uh->uh_sum; + break; + } + case IPPROTO_ICMP: { + if (!pf_pull_hdr(pd->m, pd->off, &pd->hdr.icmp, ICMP_MINLEN, + reason, pd->af)) + return (PF_DROP); + pd->hdrlen = ICMP_MINLEN; + if (pd->off + pd->hdrlen > pd->tot_len) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + pd->pcksum = &pd->hdr.icmp.icmp_cksum; + break; + } +#ifdef INET6 + case IPPROTO_ICMPV6: { + size_t icmp_hlen = sizeof(struct icmp6hdr); + + if (!pf_pull_hdr(pd->m, pd->off, &pd->hdr.icmp6, icmp_hlen, + reason, pd->af)) + return (PF_DROP); + /* ICMP headers we look further into to match state */ + switch (pd->hdr.icmp6.icmp6_type) { + case MLD_LISTENER_QUERY: + case MLD_LISTENER_REPORT: + icmp_hlen = sizeof(struct mld_hdr); + break; + case ND_NEIGHBOR_SOLICIT: + case ND_NEIGHBOR_ADVERT: + icmp_hlen = sizeof(struct nd_neighbor_solicit); + /* FALLTHROUGH */ + case ND_ROUTER_SOLICIT: + case ND_ROUTER_ADVERT: + case ND_REDIRECT: + if (pd->ttl != 255) { + REASON_SET(reason, PFRES_NORM); + return (PF_DROP); + } + break; + } + if (icmp_hlen > sizeof(struct icmp6hdr) && + !pf_pull_hdr(pd->m, pd->off, &pd->hdr.icmp6, icmp_hlen, + reason, pd->af)) + return (PF_DROP); + pd->hdrlen = icmp_hlen; + if (pd->off + pd->hdrlen > pd->tot_len) { + REASON_SET(reason, PFRES_SHORT); + return (PF_DROP); + } + pd->pcksum = &pd->hdr.icmp6.icmp6_cksum; + break; + } +#endif /* INET6 */ + } + + if (pd->sport) + pd->osport = pd->nsport = *pd->sport; + if (pd->dport) + pd->odport = pd->ndport = *pd->dport; + + pd->hash = pf_pkt_hash(pd->af, pd->proto, + pd->src, pd->dst, pd->osport, pd->odport); + + return (PF_PASS); +} + +void +pf_counters_inc(int action, struct pf_pdesc *pd, struct pf_state *st, + struct pf_rule *r, struct pf_rule *a) +{ + int dirndx; + pd->kif->pfik_bytes[pd->af == AF_INET6][pd->dir == PF_OUT] + [action != PF_PASS] += pd->tot_len; + pd->kif->pfik_packets[pd->af == AF_INET6][pd->dir == PF_OUT] + [action != PF_PASS]++; + + if (action == PF_PASS || action == PF_AFRT || r->action == PF_DROP) { + dirndx = (pd->dir == PF_OUT); + r->packets[dirndx]++; + r->bytes[dirndx] += pd->tot_len; + if (a != NULL) { + a->packets[dirndx]++; + a->bytes[dirndx] += pd->tot_len; + } + if (st != NULL) { + struct pf_rule_item *ri; + struct pf_sn_item *sni; + + SLIST_FOREACH(sni, &st->src_nodes, next) { + sni->sn->packets[dirndx]++; + sni->sn->bytes[dirndx] += pd->tot_len; + } + dirndx = (pd->dir == st->direction) ? 0 : 1; + st->packets[dirndx]++; + st->bytes[dirndx] += pd->tot_len; + + SLIST_FOREACH(ri, &st->match_rules, entry) { + ri->r->packets[dirndx]++; + ri->r->bytes[dirndx] += pd->tot_len; + + if (ri->r->src.addr.type == PF_ADDR_TABLE) + pfr_update_stats(ri->r->src.addr.p.tbl, + &st->key[(st->direction == PF_IN)]-> + addr[(st->direction == PF_OUT)], + pd, ri->r->action, ri->r->src.neg); + if (ri->r->dst.addr.type == PF_ADDR_TABLE) + pfr_update_stats(ri->r->dst.addr.p.tbl, + &st->key[(st->direction == PF_IN)]-> + addr[(st->direction == PF_IN)], + pd, ri->r->action, ri->r->dst.neg); + } + } + if (r->src.addr.type == PF_ADDR_TABLE) + pfr_update_stats(r->src.addr.p.tbl, + (st == NULL) ? pd->src : + &st->key[(st->direction == PF_IN)]-> + addr[(st->direction == PF_OUT)], + pd, r->action, r->src.neg); + if (r->dst.addr.type == PF_ADDR_TABLE) + pfr_update_stats(r->dst.addr.p.tbl, + (st == NULL) ? pd->dst : + &st->key[(st->direction == PF_IN)]-> + addr[(st->direction == PF_IN)], + pd, r->action, r->dst.neg); + } +} + +int +pf_test(sa_family_t af, int fwdir, struct ifnet *ifp, struct mbuf **m0) +{ + struct pfi_kif *kif = NULL; + u_short action, reason = 0; + struct pf_rule *a = NULL, *r = &pf_default_rule; + struct pf_state *st = NULL; + struct pf_state_key_cmp key; + struct pf_ruleset *ruleset = NULL; + struct pf_pdesc pd; + int dir = (fwdir == PF_FWD) ? PF_OUT : fwdir; + u_int32_t qid, pqid = 0; + int have_pf_lock = 0; + + if (!pf_status.running) + return (PF_PASS); + +#if NCARP > 0 + if (ifp->if_type == IFT_CARP) { + struct ifnet *ifp0; + + smr_read_enter(); + ifp0 = if_get_smr(ifp->if_carpdevidx); + if (ifp0 != NULL) + kif = (struct pfi_kif *)ifp0->if_pf_kif; + smr_read_leave(); + } else +#endif /* NCARP */ + kif = (struct pfi_kif *)ifp->if_pf_kif; + + if (kif == NULL) { + DPFPRINTF(LOG_ERR, + "%s: kif == NULL, if_xname %s", __func__, ifp->if_xname); + return (PF_DROP); + } + if (kif->pfik_flags & PFI_IFLAG_SKIP) + return (PF_PASS); + +#ifdef DIAGNOSTIC + if (((*m0)->m_flags & M_PKTHDR) == 0) + panic("non-M_PKTHDR is passed to pf_test"); +#endif /* DIAGNOSTIC */ + + if ((*m0)->m_pkthdr.pf.flags & PF_TAG_GENERATED) + return (PF_PASS); + + if ((*m0)->m_pkthdr.pf.flags & PF_TAG_DIVERTED_PACKET) { + (*m0)->m_pkthdr.pf.flags &= ~PF_TAG_DIVERTED_PACKET; + return (PF_PASS); + } + + if ((*m0)->m_pkthdr.pf.flags & PF_TAG_REFRAGMENTED) { + (*m0)->m_pkthdr.pf.flags &= ~PF_TAG_REFRAGMENTED; + return (PF_PASS); + } + + action = pf_setup_pdesc(&pd, af, dir, kif, *m0, &reason); + if (action != PF_PASS) { +#if NPFLOG > 0 + pd.pflog |= PF_LOG_FORCE; +#endif /* NPFLOG > 0 */ + goto done; + } + + /* packet normalization and reassembly */ + switch (pd.af) { + case AF_INET: + action = pf_normalize_ip(&pd, &reason); + break; +#ifdef INET6 + case AF_INET6: + action = pf_normalize_ip6(&pd, &reason); + break; +#endif /* INET6 */ + } + *m0 = pd.m; + /* if packet sits in reassembly queue, return without error */ + if (pd.m == NULL) + return PF_PASS; + + if (action != PF_PASS) { +#if NPFLOG > 0 + pd.pflog |= PF_LOG_FORCE; +#endif /* NPFLOG > 0 */ + goto done; + } + + /* if packet has been reassembled, update packet description */ + if (pf_status.reass && pd.virtual_proto == PF_VPROTO_FRAGMENT) { + action = pf_setup_pdesc(&pd, af, dir, kif, pd.m, &reason); + if (action != PF_PASS) { +#if NPFLOG > 0 + pd.pflog |= PF_LOG_FORCE; +#endif /* NPFLOG > 0 */ + goto done; + } + } + pd.m->m_pkthdr.pf.flags |= PF_TAG_PROCESSED; + + /* + * Avoid pcb-lookups from the forwarding path. They should never + * match and would cause MP locking problems. + */ + if (fwdir == PF_FWD) { + pd.lookup.done = -1; + pd.lookup.uid = -1; + pd.lookup.gid = -1; + pd.lookup.pid = NO_PID; + } + + switch (pd.virtual_proto) { + + case PF_VPROTO_FRAGMENT: { + /* + * handle fragments that aren't reassembled by + * normalization + */ + PF_LOCK(); + have_pf_lock = 1; + action = pf_test_rule(&pd, &r, &st, &a, &ruleset, &reason); + st = pf_state_ref(st); + if (action != PF_PASS) + REASON_SET(&reason, PFRES_FRAG); + break; + } + + case IPPROTO_ICMP: { + if (pd.af != AF_INET) { + action = PF_DROP; + REASON_SET(&reason, PFRES_NORM); + DPFPRINTF(LOG_NOTICE, + "dropping IPv6 packet with ICMPv4 payload"); + break; + } + PF_STATE_ENTER_READ(); + action = pf_test_state_icmp(&pd, &st, &reason); + st = pf_state_ref(st); + PF_STATE_EXIT_READ(); + if (action == PF_PASS || action == PF_AFRT) { +#if NPFSYNC > 0 + pfsync_update_state(st); +#endif /* NPFSYNC > 0 */ + r = st->rule.ptr; + a = st->anchor.ptr; +#if NPFLOG > 0 + pd.pflog |= st->log; +#endif /* NPFLOG > 0 */ + } else if (st == NULL) { + PF_LOCK(); + have_pf_lock = 1; + action = pf_test_rule(&pd, &r, &st, &a, &ruleset, + &reason); + st = pf_state_ref(st); + } + break; + } + +#ifdef INET6 + case IPPROTO_ICMPV6: { + if (pd.af != AF_INET6) { + action = PF_DROP; + REASON_SET(&reason, PFRES_NORM); + DPFPRINTF(LOG_NOTICE, + "dropping IPv4 packet with ICMPv6 payload"); + break; + } + PF_STATE_ENTER_READ(); + action = pf_test_state_icmp(&pd, &st, &reason); + st = pf_state_ref(st); + PF_STATE_EXIT_READ(); + if (action == PF_PASS || action == PF_AFRT) { +#if NPFSYNC > 0 + pfsync_update_state(st); +#endif /* NPFSYNC > 0 */ + r = st->rule.ptr; + a = st->anchor.ptr; +#if NPFLOG > 0 + pd.pflog |= st->log; +#endif /* NPFLOG > 0 */ + } else if (st == NULL) { + PF_LOCK(); + have_pf_lock = 1; + action = pf_test_rule(&pd, &r, &st, &a, &ruleset, + &reason); + st = pf_state_ref(st); + } + break; + } +#endif /* INET6 */ + + case IPPROTO_TCP: + if (pd.dir == PF_IN && + (pd.hdr.tcp.th_flags & (TH_SYN|TH_ACK)) == TH_SYN && + pf_synflood_check(&pd)) { + PF_LOCK(); + have_pf_lock = 1; + pf_syncookie_send(&pd, &reason); + action = PF_DROP; + break; + } + if ((pd.hdr.tcp.th_flags & TH_ACK) && pd.p_len == 0) + pqid = 1; + action = pf_normalize_tcp(&pd); + if (action == PF_DROP) + break; + + /* FALLTHROUGH */ + default: + key.af = pd.af; + key.proto = pd.virtual_proto; + key.rdomain = pd.rdomain; + pf_addrcpy(&key.addr[pd.sidx], pd.src, key.af); + pf_addrcpy(&key.addr[pd.didx], pd.dst, key.af); + key.port[pd.sidx] = pd.osport; + key.port[pd.didx] = pd.odport; + key.hash = pd.hash; + + PF_STATE_ENTER_READ(); + action = pf_find_state(&pd, &key, &st); + st = pf_state_ref(st); + PF_STATE_EXIT_READ(); + + /* check for syncookies if tcp ack and no active state */ + if (pd.dir == PF_IN && pd.virtual_proto == IPPROTO_TCP && + (st == NULL || (st->src.state >= TCPS_FIN_WAIT_2 && + st->dst.state >= TCPS_FIN_WAIT_2)) && + (pd.hdr.tcp.th_flags & (TH_SYN|TH_ACK|TH_RST)) == TH_ACK && + pf_syncookie_validate(&pd)) { + struct mbuf *msyn; + msyn = pf_syncookie_recreate_syn(&pd, &reason); + if (msyn) { + action = pf_test(af, fwdir, ifp, &msyn); + m_freem(msyn); + if (action == PF_PASS || action == PF_AFRT) { + PF_STATE_ENTER_READ(); + pf_state_unref(st); + action = pf_find_state(&pd, &key, &st); + st = pf_state_ref(st); + PF_STATE_EXIT_READ(); + if (st == NULL) + return (PF_DROP); + st->src.seqhi = st->dst.seqhi = + ntohl(pd.hdr.tcp.th_ack) - 1; + st->src.seqlo = + ntohl(pd.hdr.tcp.th_seq) - 1; + pf_set_protostate(st, PF_PEER_SRC, + PF_TCPS_PROXY_DST); + } + } else + action = PF_DROP; + } + + if (action == PF_MATCH) + action = pf_test_state(&pd, &st, &reason); + + if (action == PF_PASS || action == PF_AFRT) { +#if NPFSYNC > 0 + pfsync_update_state(st); +#endif /* NPFSYNC > 0 */ + r = st->rule.ptr; + a = st->anchor.ptr; +#if NPFLOG > 0 + pd.pflog |= st->log; +#endif /* NPFLOG > 0 */ + } else if (st == NULL) { + PF_LOCK(); + have_pf_lock = 1; + action = pf_test_rule(&pd, &r, &st, &a, &ruleset, + &reason); + st = pf_state_ref(st); + } + + if (pd.virtual_proto == IPPROTO_TCP) { + if (st) { + if (st->max_mss) + pf_normalize_mss(&pd, st->max_mss); + } else if (r->max_mss) + pf_normalize_mss(&pd, r->max_mss); + } + + break; + } + + if (have_pf_lock != 0) + PF_UNLOCK(); + + /* + * At the moment, we rely on NET_LOCK() to prevent removal of items + * we've collected above ('r', 'anchor' and 'ruleset'). They'll have + * to be refcounted when NET_LOCK() is gone. + */ + +done: + if (action != PF_DROP) { + if (st) { + /* The non-state case is handled in pf_test_rule() */ + if (action == PF_PASS && pd.badopts != 0 && + !(st->state_flags & PFSTATE_ALLOWOPTS)) { + action = PF_DROP; + REASON_SET(&reason, PFRES_IPOPTIONS); +#if NPFLOG > 0 + pd.pflog |= PF_LOG_FORCE; +#endif /* NPFLOG > 0 */ + DPFPRINTF(LOG_NOTICE, "dropping packet with " + "ip/ipv6 options in pf_test()"); + } + + pf_scrub(pd.m, st->state_flags, pd.af, st->min_ttl, + st->set_tos); + pf_tag_packet(pd.m, st->tag, st->rtableid[pd.didx]); + if (pqid || (pd.tos & IPTOS_LOWDELAY)) { + qid = st->pqid; + if (st->state_flags & PFSTATE_SETPRIO) { + pd.m->m_pkthdr.pf.prio = + st->set_prio[1]; + } + } else { + qid = st->qid; + if (st->state_flags & PFSTATE_SETPRIO) { + pd.m->m_pkthdr.pf.prio = + st->set_prio[0]; + } + } + pd.m->m_pkthdr.pf.delay = st->delay; + } else { + pf_scrub(pd.m, r->scrub_flags, pd.af, r->min_ttl, + r->set_tos); + if (pqid || (pd.tos & IPTOS_LOWDELAY)) { + qid = r->pqid; + if (r->scrub_flags & PFSTATE_SETPRIO) + pd.m->m_pkthdr.pf.prio = r->set_prio[1]; + } else { + qid = r->qid; + if (r->scrub_flags & PFSTATE_SETPRIO) + pd.m->m_pkthdr.pf.prio = r->set_prio[0]; + } + pd.m->m_pkthdr.pf.delay = r->delay; + } + } + + if (action == PF_PASS && qid) + pd.m->m_pkthdr.pf.qid = qid; + if (st != NULL) { + struct mbuf *m = pd.m; + struct inpcb *inp = m->m_pkthdr.pf.inp; + + if (pd.dir == PF_IN) { + KASSERT(inp == NULL); + pf_mbuf_link_state_key(m, st->key[PF_SK_STACK]); + } else if (pd.dir == PF_OUT) + pf_state_key_link_inpcb(st->key[PF_SK_STACK], inp); + + if (!ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) { + m->m_pkthdr.ph_flowid = st->key[PF_SK_WIRE]->hash; + SET(m->m_pkthdr.csum_flags, M_FLOWID); + } + } + + /* + * connections redirected to loopback should not match sockets + * bound specifically to loopback due to security implications, + * see in_pcblookup_listen(). + */ + if (pd.destchg) + if ((pd.af == AF_INET && (ntohl(pd.dst->v4.s_addr) >> + IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) || + (pd.af == AF_INET6 && IN6_IS_ADDR_LOOPBACK(&pd.dst->v6))) + pd.m->m_pkthdr.pf.flags |= PF_TAG_TRANSLATE_LOCALHOST; + /* We need to redo the route lookup on outgoing routes. */ + if (pd.destchg && pd.dir == PF_OUT) + pd.m->m_pkthdr.pf.flags |= PF_TAG_REROUTE; + + if (pd.dir == PF_IN && action == PF_PASS && + (r->divert.type == PF_DIVERT_TO || + r->divert.type == PF_DIVERT_REPLY)) { + struct pf_divert *divert; + + if ((divert = pf_get_divert(pd.m))) { + pd.m->m_pkthdr.pf.flags |= PF_TAG_DIVERTED; + divert->addr = r->divert.addr; + divert->port = r->divert.port; + divert->rdomain = pd.rdomain; + divert->type = r->divert.type; + } + } + + if (action == PF_PASS && r->divert.type == PF_DIVERT_PACKET) + action = PF_DIVERT; + +#if NPFLOG > 0 + if (pd.pflog) { + struct pf_rule_item *ri; + + if (pd.pflog & PF_LOG_FORCE || r->log & PF_LOG_ALL) + pflog_packet(&pd, reason, r, a, ruleset, NULL); + if (st) { + SLIST_FOREACH(ri, &st->match_rules, entry) + if (ri->r->log & PF_LOG_ALL) + pflog_packet(&pd, reason, ri->r, a, + ruleset, NULL); + } + } +#endif /* NPFLOG > 0 */ + + pf_counters_inc(action, &pd, st, r, a); + + switch (action) { + case PF_SYNPROXY_DROP: + m_freem(pd.m); + /* FALLTHROUGH */ + case PF_DEFER: + pd.m = NULL; + action = PF_PASS; + break; + case PF_DIVERT: + switch (pd.af) { + case AF_INET: + divert_packet(pd.m, pd.dir, r->divert.port); + pd.m = NULL; + break; +#ifdef INET6 + case AF_INET6: + divert6_packet(pd.m, pd.dir, r->divert.port); + pd.m = NULL; + break; +#endif /* INET6 */ + } + action = PF_PASS; + break; +#ifdef INET6 + case PF_AFRT: + if (pf_translate_af(&pd)) { + action = PF_DROP; + goto out; + } + pd.m->m_pkthdr.pf.flags |= PF_TAG_GENERATED; + switch (pd.naf) { + case AF_INET: + if (pd.dir == PF_IN) { + int flags = IP_REDIRECT; + + switch (atomic_load_int(&ip_forwarding)) { + case 2: + SET(flags, IP_FORWARDING_IPSEC); + /* FALLTHROUGH */ + case 1: + SET(flags, IP_FORWARDING); + break; + default: + ipstat_inc(ips_cantforward); + action = PF_DROP; + goto out; + } + if (atomic_load_int(&ip_directedbcast)) + SET(flags, IP_ALLOWBROADCAST); + ip_forward(pd.m, ifp, NULL, flags); + } else + ip_output(pd.m, NULL, NULL, 0, NULL, NULL, 0); + break; + case AF_INET6: + if (pd.dir == PF_IN) { + int flags = IPV6_REDIRECT; + + switch (atomic_load_int(&ip6_forwarding)) { + case 2: + SET(flags, IPV6_FORWARDING_IPSEC); + /* FALLTHROUGH */ + case 1: + SET(flags, IPV6_FORWARDING); + break; + default: + ip6stat_inc(ip6s_cantforward); + action = PF_DROP; + goto out; + } + ip6_forward(pd.m, NULL, flags); + } else + ip6_output(pd.m, NULL, NULL, 0, NULL, NULL); + break; + } + pd.m = NULL; + action = PF_PASS; + break; +#endif /* INET6 */ + case PF_DROP: + m_freem(pd.m); + pd.m = NULL; + break; + default: + if (st && st->rt) { + switch (pd.af) { + case AF_INET: + pf_route(&pd, st); + break; +#ifdef INET6 + case AF_INET6: + pf_route6(&pd, st); + break; +#endif /* INET6 */ + } + } + break; + } + +#ifdef INET6 + /* if reassembled packet passed, create new fragments */ + if (pf_status.reass && action == PF_PASS && pd.m && fwdir == PF_FWD && + pd.af == AF_INET6) { + struct m_tag *mtag; + + if ((mtag = m_tag_find(pd.m, PACKET_TAG_PF_REASSEMBLED, NULL))) + action = pf_refragment6(&pd.m, mtag, NULL, NULL, NULL); + } +#endif /* INET6 */ + if (st && action != PF_DROP) { + if (!st->if_index_in && dir == PF_IN) + st->if_index_in = ifp->if_index; + else if (!st->if_index_out && dir == PF_OUT) + st->if_index_out = ifp->if_index; + } + +#ifdef INET6 +out: +#endif /* INET6 */ + *m0 = pd.m; + + pf_state_unref(st); + + return (action); +} + +int +pf_ouraddr(struct mbuf *m) +{ + struct pf_state_key *sk; + + if (m->m_pkthdr.pf.flags & PF_TAG_DIVERTED) + return (1); + + sk = m->m_pkthdr.pf.statekey; + if (sk != NULL) { + if (READ_ONCE(sk->sk_inp) != NULL) + return (1); + } + + return (-1); +} + +/* + * must be called whenever any addressing information such as + * address, port, protocol has changed + */ +void +pf_pkt_addr_changed(struct mbuf *m) +{ + pf_mbuf_unlink_state_key(m); + pf_mbuf_unlink_inpcb(m); +} + +struct inpcb * +pf_inp_lookup(struct mbuf *m) +{ + struct inpcb *inp = NULL; + struct pf_state_key *sk = m->m_pkthdr.pf.statekey; + + if (!pf_state_key_isvalid(sk)) + pf_mbuf_unlink_state_key(m); + else if (READ_ONCE(sk->sk_inp) != NULL) { + mtx_enter(&pf_inp_mtx); + inp = in_pcbref(sk->sk_inp); + mtx_leave(&pf_inp_mtx); + } + + return (inp); +} + +void +pf_inp_link(struct mbuf *m, struct inpcb *inp) +{ + struct pf_state_key *sk = m->m_pkthdr.pf.statekey; + + if (!pf_state_key_isvalid(sk)) { + pf_mbuf_unlink_state_key(m); + return; + } + + /* + * we don't need to grab PF-lock here. At worst case we link inp to + * state, which might be just being marked as deleted by another + * thread. + */ + pf_state_key_link_inpcb(sk, inp); + + /* The statekey has finished finding the inp, it is no longer needed. */ + pf_mbuf_unlink_state_key(m); +} + +void +pf_inp_unlink(struct inpcb *inp) +{ + struct pf_state_key *sk; + + if (READ_ONCE(inp->inp_pf_sk) == NULL) + return; + + mtx_enter(&pf_inp_mtx); + sk = inp->inp_pf_sk; + if (sk == NULL) { + mtx_leave(&pf_inp_mtx); + return; + } + KASSERT(sk->sk_inp == inp); + sk->sk_inp = NULL; + inp->inp_pf_sk = NULL; + mtx_leave(&pf_inp_mtx); + + pf_state_key_unref(sk); + in_pcbunref(inp); +} + +void +pf_state_key_link_reverse(struct pf_state_key *sk, struct pf_state_key *skrev) +{ + struct pf_state_key *old_reverse; + + old_reverse = atomic_cas_ptr(&sk->sk_reverse, NULL, skrev); + if (old_reverse != NULL) + KASSERT(old_reverse == skrev); + else { + pf_state_key_ref(skrev); + + /* + * NOTE: if sk == skrev, then KASSERT() below holds true, we + * still want to grab a reference in such case, because + * pf_state_key_unlink_reverse() does not check whether keys + * are identical or not. + */ + old_reverse = atomic_cas_ptr(&skrev->sk_reverse, NULL, sk); + if (old_reverse != NULL) + KASSERT(old_reverse == sk); + + pf_state_key_ref(sk); + } +} + +#if NPFLOG > 0 +void +pf_log_matches(struct pf_pdesc *pd, struct pf_rule *rm, struct pf_rule *am, + struct pf_ruleset *ruleset, struct pf_rule_slist *matchrules) +{ + struct pf_rule_item *ri; + + /* if this is the log(matches) rule, packet has been logged already */ + if (rm->log & PF_LOG_MATCHES) + return; + + SLIST_FOREACH(ri, matchrules, entry) + if (ri->r->log & PF_LOG_MATCHES) + pflog_packet(pd, PFRES_MATCH, rm, am, ruleset, ri->r); +} +#endif /* NPFLOG > 0 */ + +struct pf_state_key * +pf_state_key_ref(struct pf_state_key *sk) +{ + if (sk != NULL) + PF_REF_TAKE(sk->sk_refcnt); + + return (sk); +} + +void +pf_state_key_unref(struct pf_state_key *sk) +{ + if (PF_REF_RELE(sk->sk_refcnt)) { + /* state key must be removed from tree */ + KASSERT(!pf_state_key_isvalid(sk)); + /* state key must be unlinked from reverse key */ + KASSERT(sk->sk_reverse == NULL); + /* state key must be unlinked from socket */ + KASSERT(sk->sk_inp == NULL); + pool_put(&pf_state_key_pl, sk); + } +} + +int +pf_state_key_isvalid(struct pf_state_key *sk) +{ + return ((sk != NULL) && (sk->sk_removed == 0)); +} + +void +pf_mbuf_link_state_key(struct mbuf *m, struct pf_state_key *sk) +{ + KASSERT(m->m_pkthdr.pf.statekey == NULL); + m->m_pkthdr.pf.statekey = pf_state_key_ref(sk); +} + +void +pf_mbuf_unlink_state_key(struct mbuf *m) +{ + struct pf_state_key *sk = m->m_pkthdr.pf.statekey; + + if (sk != NULL) { + m->m_pkthdr.pf.statekey = NULL; + pf_state_key_unref(sk); + } +} + +void +pf_mbuf_link_inpcb(struct mbuf *m, struct inpcb *inp) +{ + KASSERT(m->m_pkthdr.pf.inp == NULL); + m->m_pkthdr.pf.inp = in_pcbref(inp); +} + +void +pf_mbuf_unlink_inpcb(struct mbuf *m) +{ + struct inpcb *inp = m->m_pkthdr.pf.inp; + + if (inp != NULL) { + m->m_pkthdr.pf.inp = NULL; + in_pcbunref(inp); + } +} + +void +pf_state_key_link_inpcb(struct pf_state_key *sk, struct inpcb *inp) +{ + if (inp == NULL || READ_ONCE(sk->sk_inp) != NULL) + return; + + mtx_enter(&pf_inp_mtx); + if (inp->inp_pf_sk != NULL || sk->sk_inp != NULL) { + mtx_leave(&pf_inp_mtx); + return; + } + sk->sk_inp = in_pcbref(inp); + inp->inp_pf_sk = pf_state_key_ref(sk); + mtx_leave(&pf_inp_mtx); +} + +void +pf_state_key_unlink_inpcb(struct pf_state_key *sk) +{ + struct inpcb *inp; + + if (READ_ONCE(sk->sk_inp) == NULL) + return; + + mtx_enter(&pf_inp_mtx); + inp = sk->sk_inp; + if (inp == NULL) { + mtx_leave(&pf_inp_mtx); + return; + } + KASSERT(inp->inp_pf_sk == sk); + sk->sk_inp = NULL; + inp->inp_pf_sk = NULL; + mtx_leave(&pf_inp_mtx); + + pf_state_key_unref(sk); + in_pcbunref(inp); +} + +void +pf_state_key_unlink_reverse(struct pf_state_key *sk) +{ + struct pf_state_key *skrev = sk->sk_reverse; + + /* Note that sk and skrev may be equal, then we unref twice. */ + if (skrev != NULL) { + KASSERT(skrev->sk_reverse == sk); + sk->sk_reverse = NULL; + skrev->sk_reverse = NULL; + pf_state_key_unref(skrev); + pf_state_key_unref(sk); + } +} + +struct pf_state * +pf_state_ref(struct pf_state *st) +{ + if (st != NULL) + PF_REF_TAKE(st->refcnt); + return (st); +} + +void +pf_state_unref(struct pf_state *st) +{ + if ((st != NULL) && PF_REF_RELE(st->refcnt)) { + /* never inserted or removed */ +#if NPFSYNC > 0 + KASSERT((TAILQ_NEXT(st, sync_list) == NULL) || + ((TAILQ_NEXT(st, sync_list) == _Q_INVALID) && + (st->sync_state >= PFSYNC_S_NONE))); +#endif /* NPFSYNC */ + KASSERT((TAILQ_NEXT(st, entry_list) == NULL) || + (TAILQ_NEXT(st, entry_list) == _Q_INVALID)); + + pf_state_key_unref(st->key[PF_SK_WIRE]); + pf_state_key_unref(st->key[PF_SK_STACK]); + + KASSERT(SLIST_EMPTY(&st->linkage)); + + pool_put(&pf_state_pl, st); + } +} + +int +pf_delay_pkt(struct mbuf *m, u_int ifidx) +{ + struct pf_pktdelay *pdy; + + if ((pdy = pool_get(&pf_pktdelay_pl, PR_NOWAIT)) == NULL) { + m_freem(m); + return (ENOBUFS); + } + pdy->ifidx = ifidx; + pdy->m = m; + timeout_set(&pdy->to, pf_pktenqueue_delayed, pdy); + timeout_add_msec(&pdy->to, m->m_pkthdr.pf.delay); + m->m_pkthdr.pf.delay = 0; + return (0); +} + +void +pf_pktenqueue_delayed(void *arg) +{ + struct pf_pktdelay *pdy = arg; + struct ifnet *ifp; + + ifp = if_get(pdy->ifidx); + if (ifp != NULL) { + if_enqueue(ifp, pdy->m); + if_put(ifp); + } else + m_freem(pdy->m); + + pool_put(&pf_pktdelay_pl, pdy); +} + +void +pf_status_init(void) +{ + memset(&pf_status, 0, sizeof(pf_status)); + pf_status.debug = LOG_ERR; + pf_status.reass = PF_REASS_ENABLED; + + /* XXX do our best to avoid a conflict */ + pf_status.hostid = arc4random(); + + pf_status_fcounters = counters_alloc(FCNT_MAX); +} + +void +pf_status_clear(void) +{ + PF_ASSERT_LOCKED(); + counters_zero(pf_status_fcounters, FCNT_MAX); +} + +int +pf_status_read(struct pf_status *pfs) +{ + uint64_t scratch[FCNT_MAX]; + + if (strnlen(pfs->ifname, sizeof(pfs->ifname)) >= + sizeof(pfs->ifname)) + return ENAMETOOLONG; + NET_LOCK(); + PF_LOCK(); + PF_FRAG_LOCK(); + memcpy(pfs, &pf_status, sizeof(struct pf_status)); + PF_FRAG_UNLOCK(); + pfi_update_status(pfs->ifname, pfs); + PF_UNLOCK(); + NET_UNLOCK(); + + counters_read(pf_status_fcounters, pfs->fcounters, FCNT_MAX, scratch); + return 0; +} diff --git a/module/pfsrc/pf_if.c b/module/pfsrc/pf_if.c new file mode 100644 index 0000000..d558a47 --- /dev/null +++ b/module/pfsrc/pf_if.c @@ -0,0 +1,910 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_if.c — see docs/porting-notes.md */ +#include + +#define isupper(c) ((c) >= 'A' && (c) <= 'Z') +#define islower(c) ((c) >= 'a' && (c) <= 'z') +#define isalpha(c) (isupper(c)||islower(c)) + +struct pfi_kif *pfi_all = NULL; +struct pool pfi_addr_pl; +struct pfi_ifhead pfi_ifs; +long pfi_update = 1; +struct pfr_addr *pfi_buffer; +int pfi_buffer_cnt; +int pfi_buffer_max; + +void pfi_kif_update(struct pfi_kif *); +void pfi_dynaddr_update(struct pfi_dynaddr *dyn); +void pfi_table_update(struct pfr_ktable *, struct pfi_kif *, + u_int8_t, int); +void pfi_kifaddr_update(void *); +void pfi_instance_add(struct ifnet *, u_int8_t, int); +void pfi_address_add(struct sockaddr *, sa_family_t, u_int8_t); +int pfi_if_compare(struct pfi_kif *, struct pfi_kif *); +int pfi_skip_if(const char *, struct pfi_kif *); +int pfi_unmask(void *); +void pfi_group_change(const char *); + +RB_PROTOTYPE(pfi_ifhead, pfi_kif, pfik_tree, pfi_if_compare); +RB_GENERATE(pfi_ifhead, pfi_kif, pfik_tree, pfi_if_compare); + +#define PFI_BUFFER_MAX 0x10000 +#define PFI_MTYPE M_PF + +struct pfi_kif * +pfi_kif_alloc(const char *kif_name, int mflags) +{ + struct pfi_kif *kif; + + kif = malloc(sizeof(*pfi_all), PFI_MTYPE, mflags|M_ZERO); + if (kif == NULL) + return (NULL); + strlcpy(kif->pfik_name, kif_name, sizeof(kif->pfik_name)); + kif->pfik_tzero = gettime(); + TAILQ_INIT(&kif->pfik_dynaddrs); + + if (!strcmp(kif->pfik_name, "any")) { + /* both so it works in the ioctl and the regular case */ + kif->pfik_flags |= PFI_IFLAG_ANY; + kif->pfik_flags_new |= PFI_IFLAG_ANY; + } + + return (kif); +} + +void +pfi_kif_free(struct pfi_kif *kif) +{ + if (kif == NULL) + return; + + if (kif->pfik_rules || kif->pfik_states || kif->pfik_routes || + kif->pfik_srcnodes || kif->pfik_flagrefs) + panic("kif is still alive"); + + free(kif, PFI_MTYPE, sizeof(*kif)); +} + +void +pfi_initialize(void) +{ + /* + * The first time we arrive here is during kernel boot, + * when if_attachsetup() for the first time. No locking + * is needed in this case, because it's granted there + * is a single thread, which sets pfi_all global var. + */ + if (pfi_all != NULL) /* already initialized */ + return; + + pool_init(&pfi_addr_pl, sizeof(struct pfi_dynaddr), 0, IPL_SOFTNET, 0, + "pfiaddrpl", NULL); + pfi_buffer_max = 64; + pfi_buffer = mallocarray(pfi_buffer_max, sizeof(*pfi_buffer), + PFI_MTYPE, M_WAITOK); + + pfi_all = pfi_kif_alloc(IFG_ALL, M_WAITOK); + + if (RB_INSERT(pfi_ifhead, &pfi_ifs, pfi_all) != NULL) + panic("IFG_ALL kif found already"); +} + +struct pfi_kif * +pfi_kif_find(const char *kif_name) +{ + struct pfi_kif_cmp s; + + PF_ASSERT_LOCKED(); + + memset(&s, 0, sizeof(s)); + strlcpy(s.pfik_name, kif_name, sizeof(s.pfik_name)); + return (RB_FIND(pfi_ifhead, &pfi_ifs, (struct pfi_kif *)&s)); +} + +struct pfi_kif * +pfi_kif_get(const char *kif_name, struct pfi_kif **prealloc) +{ + struct pfi_kif *kif; + + PF_ASSERT_LOCKED(); + + if ((kif = pfi_kif_find(kif_name))) + return (kif); + + /* create new one */ + if ((prealloc == NULL) || (*prealloc == NULL)) { + kif = pfi_kif_alloc(kif_name, M_NOWAIT); + if (kif == NULL) + return (NULL); + } else { + kif = *prealloc; + *prealloc = NULL; + } + + RB_INSERT(pfi_ifhead, &pfi_ifs, kif); + return (kif); +} + +void +pfi_kif_ref(struct pfi_kif *kif, enum pfi_kif_refs what) +{ + PF_ASSERT_LOCKED(); + + switch (what) { + case PFI_KIF_REF_RULE: + kif->pfik_rules++; + break; + case PFI_KIF_REF_STATE: + kif->pfik_states++; + break; + case PFI_KIF_REF_ROUTE: + kif->pfik_routes++; + break; + case PFI_KIF_REF_SRCNODE: + kif->pfik_srcnodes++; + break; + case PFI_KIF_REF_FLAG: + kif->pfik_flagrefs++; + break; + default: + panic("pfi_kif_ref with unknown type"); + } +} + +void +pfi_kif_unref(struct pfi_kif *kif, enum pfi_kif_refs what) +{ + if (kif == NULL) + return; + + PF_ASSERT_LOCKED(); + + switch (what) { + case PFI_KIF_REF_NONE: + break; + case PFI_KIF_REF_RULE: + if (kif->pfik_rules <= 0) { + DPFPRINTF(LOG_ERR, + "pfi_kif_unref (%s): rules refcount <= 0", + kif->pfik_name); + return; + } + kif->pfik_rules--; + break; + case PFI_KIF_REF_STATE: + if (kif->pfik_states <= 0) { + DPFPRINTF(LOG_ERR, + "pfi_kif_unref (%s): state refcount <= 0", + kif->pfik_name); + return; + } + kif->pfik_states--; + break; + case PFI_KIF_REF_ROUTE: + if (kif->pfik_routes <= 0) { + DPFPRINTF(LOG_ERR, + "pfi_kif_unref (%s): route refcount <= 0", + kif->pfik_name); + return; + } + kif->pfik_routes--; + break; + case PFI_KIF_REF_SRCNODE: + if (kif->pfik_srcnodes <= 0) { + DPFPRINTF(LOG_ERR, + "pfi_kif_unref (%s): src-node refcount <= 0", + kif->pfik_name); + return; + } + kif->pfik_srcnodes--; + break; + case PFI_KIF_REF_FLAG: + if (kif->pfik_flagrefs <= 0) { + DPFPRINTF(LOG_ERR, + "pfi_kif_unref (%s): flags refcount <= 0", + kif->pfik_name); + return; + } + kif->pfik_flagrefs--; + break; + default: + panic("pfi_kif_unref (%s) with unknown type", kif->pfik_name); + } + + if (kif->pfik_ifp != NULL || kif->pfik_group != NULL || kif == pfi_all) + return; + + if (kif->pfik_rules || kif->pfik_states || kif->pfik_routes || + kif->pfik_srcnodes || kif->pfik_flagrefs) + return; + + RB_REMOVE(pfi_ifhead, &pfi_ifs, kif); + free(kif, PFI_MTYPE, sizeof(*kif)); +} + +int +pfi_kif_match(struct pfi_kif *rule_kif, struct pfi_kif *packet_kif) +{ + struct ifg_list *p; + + if (rule_kif == NULL || rule_kif == packet_kif) + return (1); + + if (rule_kif->pfik_group != NULL) + TAILQ_FOREACH(p, &packet_kif->pfik_ifp->if_groups, ifgl_next) + if (p->ifgl_group == rule_kif->pfik_group) + return (1); + + if (rule_kif->pfik_flags & PFI_IFLAG_ANY && packet_kif->pfik_ifp && + !(packet_kif->pfik_ifp->if_flags & PFIFF_LOOPBACK)) + return (1); + + return (0); +} + +void +pfi_attach_ifnet(struct ifnet *ifp) +{ + struct pfi_kif *kif; + struct task *t; + + PF_LOCK(); + pfi_initialize(); + pfi_update++; + if ((kif = pfi_kif_get(ifp->if_xname, NULL)) == NULL) + panic("%s: pfi_kif_get failed", __func__); + + kif->pfik_ifp = ifp; + ifp->if_pf_kif = (caddr_t)kif; + + t = malloc(sizeof(*t), PFI_MTYPE, M_WAITOK); + task_set(t, pfi_kifaddr_update, kif); + if_addrhook_add(ifp, t); + kif->pfik_ah_cookie = t; + + pfi_kif_update(kif); + PF_UNLOCK(); +} + +void +pfi_detach_ifnet(struct ifnet *ifp) +{ + struct pfi_kif *kif; + struct task *t; + + if ((kif = (struct pfi_kif *)ifp->if_pf_kif) == NULL) + return; + + PF_LOCK(); + pfi_update++; + t = kif->pfik_ah_cookie; + kif->pfik_ah_cookie = NULL; + if_addrhook_del(ifp, t); + free(t, PFI_MTYPE, sizeof(*t)); + + pfi_kif_update(kif); + + kif->pfik_ifp = NULL; + ifp->if_pf_kif = NULL; + pfi_kif_unref(kif, PFI_KIF_REF_NONE); + PF_UNLOCK(); +} + +void +pfi_attach_ifgroup(struct ifg_group *ifg) +{ + struct pfi_kif *kif; + + PF_LOCK(); + pfi_initialize(); + pfi_update++; + if ((kif = pfi_kif_get(ifg->ifg_group, NULL)) == NULL) + panic("%s: pfi_kif_get failed", __func__); + + kif->pfik_group = ifg; + ifg->ifg_pf_kif = (caddr_t)kif; + PF_UNLOCK(); +} + +void +pfi_detach_ifgroup(struct ifg_group *ifg) +{ + struct pfi_kif *kif; + + if ((kif = (struct pfi_kif *)ifg->ifg_pf_kif) == NULL) + return; + + PF_LOCK(); + pfi_update++; + + kif->pfik_group = NULL; + ifg->ifg_pf_kif = NULL; + pfi_kif_unref(kif, PFI_KIF_REF_NONE); + PF_UNLOCK(); +} + +void +pfi_group_change(const char *group) +{ + struct pfi_kif *kif; + + pfi_update++; + if ((kif = pfi_kif_get(group, NULL)) == NULL) + panic("%s: pfi_kif_get failed", __func__); + + pfi_kif_update(kif); +} + +void +pfi_group_delmember(const char *group) +{ + PF_LOCK(); + pfi_group_change(group); + pfi_xcommit(); + PF_UNLOCK(); +} + +void +pfi_group_addmember(const char *group) +{ + PF_LOCK(); + pfi_group_change(group); + pfi_xcommit(); + PF_UNLOCK(); +} + +int +pfi_match_addr(struct pfi_dynaddr *dyn, struct pf_addr *a, sa_family_t af) +{ + switch (af) { + case AF_INET: + switch (dyn->pfid_acnt4) { + case 0: + return (0); + case 1: + return (pf_match_addr(0, &dyn->pfid_addr4, + &dyn->pfid_mask4, a, AF_INET)); + default: + return (pfr_match_addr(dyn->pfid_kt, a, AF_INET)); + } + break; +#ifdef INET6 + case AF_INET6: + switch (dyn->pfid_acnt6) { + case 0: + return (0); + case 1: + return (pf_match_addr(0, &dyn->pfid_addr6, + &dyn->pfid_mask6, a, AF_INET6)); + default: + return (pfr_match_addr(dyn->pfid_kt, a, AF_INET6)); + } + break; +#endif /* INET6 */ + default: + return (0); + } +} + +int +pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af, int wait) +{ + struct pfi_dynaddr *dyn; + char tblname[PF_TABLE_NAME_SIZE]; + struct pf_ruleset *ruleset = NULL; + int rv = 0; + + if (aw->type != PF_ADDR_DYNIFTL) + return (0); + if ((dyn = pool_get(&pfi_addr_pl, wait|PR_LIMITFAIL|PR_ZERO)) == NULL) + return (1); + + if (!strcmp(aw->v.ifname, "self")) + dyn->pfid_kif = pfi_kif_get(IFG_ALL, NULL); + else + dyn->pfid_kif = pfi_kif_get(aw->v.ifname, NULL); + if (dyn->pfid_kif == NULL) { + rv = 1; + goto _bad; + } + pfi_kif_ref(dyn->pfid_kif, PFI_KIF_REF_RULE); + + dyn->pfid_net = pfi_unmask(&aw->v.a.mask); + if (af == AF_INET && dyn->pfid_net == 32) + dyn->pfid_net = 128; + strlcpy(tblname, aw->v.ifname, sizeof(tblname)); + if (aw->iflags & PFI_AFLAG_NETWORK) + strlcat(tblname, ":network", sizeof(tblname)); + if (aw->iflags & PFI_AFLAG_BROADCAST) + strlcat(tblname, ":broadcast", sizeof(tblname)); + if (aw->iflags & PFI_AFLAG_PEER) + strlcat(tblname, ":peer", sizeof(tblname)); + if (aw->iflags & PFI_AFLAG_NOALIAS) + strlcat(tblname, ":0", sizeof(tblname)); + if (dyn->pfid_net != 128) + snprintf(tblname + strlen(tblname), + sizeof(tblname) - strlen(tblname), "/%d", dyn->pfid_net); + if ((ruleset = pf_find_or_create_ruleset(PF_RESERVED_ANCHOR)) == NULL) { + rv = 1; + goto _bad; + } + + if ((dyn->pfid_kt = pfr_attach_table(ruleset, tblname, wait)) == NULL) { + rv = 1; + goto _bad; + } + + dyn->pfid_kt->pfrkt_flags |= PFR_TFLAG_ACTIVE; + dyn->pfid_iflags = aw->iflags; + dyn->pfid_af = af; + + TAILQ_INSERT_TAIL(&dyn->pfid_kif->pfik_dynaddrs, dyn, entry); + aw->p.dyn = dyn; + pfi_kif_update(dyn->pfid_kif); + return (0); + +_bad: + if (dyn->pfid_kt != NULL) + pfr_detach_table(dyn->pfid_kt); + if (ruleset != NULL) + pf_remove_if_empty_ruleset(ruleset); + if (dyn->pfid_kif != NULL) + pfi_kif_unref(dyn->pfid_kif, PFI_KIF_REF_RULE); + pool_put(&pfi_addr_pl, dyn); + return (rv); +} + +void +pfi_kif_update(struct pfi_kif *kif) +{ + struct ifg_list *ifgl; + struct pfi_dynaddr *p; + + /* update all dynaddr */ + TAILQ_FOREACH(p, &kif->pfik_dynaddrs, entry) + pfi_dynaddr_update(p); + + /* again for all groups kif is member of */ + if (kif->pfik_ifp != NULL) + TAILQ_FOREACH(ifgl, &kif->pfik_ifp->if_groups, ifgl_next) + pfi_kif_update((struct pfi_kif *) + ifgl->ifgl_group->ifg_pf_kif); +} + +void +pfi_dynaddr_update(struct pfi_dynaddr *dyn) +{ + struct pfi_kif *kif; + struct pfr_ktable *kt; + + if (dyn == NULL || dyn->pfid_kif == NULL || dyn->pfid_kt == NULL) + panic("pfi_dynaddr_update"); + + kif = dyn->pfid_kif; + kt = dyn->pfid_kt; + + if (kt->pfrkt_larg != pfi_update) { + /* this table needs to be brought up-to-date */ + pfi_table_update(kt, kif, dyn->pfid_net, dyn->pfid_iflags); + kt->pfrkt_larg = pfi_update; + } + pfr_dynaddr_update(kt, dyn); +} + +void +pfi_table_update(struct pfr_ktable *kt, struct pfi_kif *kif, u_int8_t net, int flags) +{ + int e, size2 = 0; + struct ifg_member *ifgm; + + pfi_buffer_cnt = 0; + + if (kif->pfik_ifp != NULL) + pfi_instance_add(kif->pfik_ifp, net, flags); + else if (kif->pfik_group != NULL) + TAILQ_FOREACH(ifgm, &kif->pfik_group->ifg_members, ifgm_next) + pfi_instance_add(ifgm->ifgm_ifp, net, flags); + + if ((e = pfr_set_addrs(&kt->pfrkt_t, pfi_buffer, pfi_buffer_cnt, &size2, + NULL, NULL, NULL, 0, PFR_TFLAG_ALLMASK))) + DPFPRINTF(LOG_ERR, + "pfi_table_update: cannot set %d new addresses " + "into table %s: %d", pfi_buffer_cnt, kt->pfrkt_name, e); +} + +void +pfi_instance_add(struct ifnet *ifp, u_int8_t net, int flags) +{ + struct ifaddr *ifa; + int got4 = 0, got6 = 0; + int net2, af; + + if (ifp == NULL) + return; + TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) { + if (ifa->ifa_addr == NULL) + continue; + af = ifa->ifa_addr->sa_family; + if (af != AF_INET && af != AF_INET6) + continue; + if ((flags & PFI_AFLAG_BROADCAST) && af == AF_INET6) + continue; + if ((flags & PFI_AFLAG_BROADCAST) && + !(ifp->if_flags & PFIFF_BROADCAST)) + continue; + if ((flags & PFI_AFLAG_PEER) && + !(ifp->if_flags & PFIFF_POINTOPOINT)) + continue; + if ((flags & PFI_AFLAG_NETWORK) && af == AF_INET6 && + IN6_IS_ADDR_LINKLOCAL( + &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr)) + continue; + if (flags & PFI_AFLAG_NOALIAS) { + if (af == AF_INET && got4) + continue; + if (af == AF_INET6 && got6) + continue; + } + if (af == AF_INET) + got4 = 1; + else if (af == AF_INET6) + got6 = 1; + net2 = net; + if (net2 == 128 && (flags & PFI_AFLAG_NETWORK)) { + if (af == AF_INET) + net2 = pfi_unmask(&((struct sockaddr_in *) + ifa->ifa_netmask)->sin_addr); + else if (af == AF_INET6) + net2 = pfi_unmask(&((struct sockaddr_in6 *) + ifa->ifa_netmask)->sin6_addr); + } + if (af == AF_INET && net2 > 32) + net2 = 32; + if (flags & PFI_AFLAG_BROADCAST) + pfi_address_add(ifa->ifa_broadaddr, af, net2); + else if (flags & PFI_AFLAG_PEER) + pfi_address_add(ifa->ifa_dstaddr, af, net2); + else + pfi_address_add(ifa->ifa_addr, af, net2); + } +} + +void +pfi_address_add(struct sockaddr *sa, sa_family_t af, u_int8_t net) +{ + struct pfr_addr *p; + int i; + + if (pfi_buffer_cnt >= pfi_buffer_max) { + int new_max = pfi_buffer_max * 2; + + if (new_max > PFI_BUFFER_MAX) { + DPFPRINTF(LOG_ERR, + "pfi_address_add: address buffer full (%d/%d)", + pfi_buffer_cnt, PFI_BUFFER_MAX); + return; + } + p = mallocarray(new_max, sizeof(*pfi_buffer), PFI_MTYPE, + M_DONTWAIT); + if (p == NULL) { + DPFPRINTF(LOG_ERR, + "pfi_address_add: no memory to grow buffer " + "(%d/%d)", pfi_buffer_cnt, PFI_BUFFER_MAX); + return; + } + memcpy(p, pfi_buffer, pfi_buffer_max * sizeof(*pfi_buffer)); + /* no need to zero buffer */ + free(pfi_buffer, PFI_MTYPE, pfi_buffer_max * sizeof(*pfi_buffer)); + pfi_buffer = p; + pfi_buffer_max = new_max; + } + if (af == AF_INET && net > 32) + net = 128; + p = pfi_buffer + pfi_buffer_cnt++; + memset(p, 0, sizeof(*p)); + p->pfra_af = af; + p->pfra_net = net; + if (af == AF_INET) + p->pfra_ip4addr = ((struct sockaddr_in *)sa)->sin_addr; + else if (af == AF_INET6) { + p->pfra_ip6addr = ((struct sockaddr_in6 *)sa)->sin6_addr; + if (IN6_IS_SCOPE_EMBED(&p->pfra_ip6addr)) + p->pfra_ip6addr.s6_addr16[1] = 0; + } + /* mask network address bits */ + if (net < 128) + ((caddr_t)p)[p->pfra_net/8] &= ~(0xFF >> (p->pfra_net%8)); + for (i = (p->pfra_net+7)/8; i < sizeof(p->pfra_u); i++) + ((caddr_t)p)[i] = 0; +} + +void +pfi_dynaddr_remove(struct pf_addr_wrap *aw) +{ + if (aw->type != PF_ADDR_DYNIFTL || aw->p.dyn == NULL || + aw->p.dyn->pfid_kif == NULL || aw->p.dyn->pfid_kt == NULL) + return; + + TAILQ_REMOVE(&aw->p.dyn->pfid_kif->pfik_dynaddrs, aw->p.dyn, entry); + pfi_kif_unref(aw->p.dyn->pfid_kif, PFI_KIF_REF_RULE); + aw->p.dyn->pfid_kif = NULL; + pfr_detach_table(aw->p.dyn->pfid_kt); + aw->p.dyn->pfid_kt = NULL; + pool_put(&pfi_addr_pl, aw->p.dyn); + aw->p.dyn = NULL; +} + +void +pfi_dynaddr_copyout(struct pf_addr_wrap *aw) +{ + if (aw->type != PF_ADDR_DYNIFTL || aw->p.dyn == NULL || + aw->p.dyn->pfid_kif == NULL) + return; + aw->p.dyncnt = aw->p.dyn->pfid_acnt4 + aw->p.dyn->pfid_acnt6; +} + +void +pfi_kifaddr_update(void *v) +{ + struct pfi_kif *kif = (struct pfi_kif *)v; + + NET_ASSERT_LOCKED(); + + PF_LOCK(); + pfi_update++; + pfi_kif_update(kif); + PF_UNLOCK(); +} + +int +pfi_if_compare(struct pfi_kif *p, struct pfi_kif *q) +{ + return (strncmp(p->pfik_name, q->pfik_name, IFNAMSIZ)); +} + +void +pfi_update_status(const char *name, struct pf_status *pfs) +{ + struct pfi_kif *p; + struct pfi_kif_cmp key; + struct ifg_member p_member, *ifgm; + TAILQ_HEAD(, ifg_member) ifg_members; + int i, j, k; + + if (*name == '\0' && pfs == NULL) { + RB_FOREACH(p, pfi_ifhead, &pfi_ifs) { + memset(p->pfik_packets, 0, sizeof(p->pfik_packets)); + memset(p->pfik_bytes, 0, sizeof(p->pfik_bytes)); + p->pfik_tzero = gettime(); + } + return; + } + + strlcpy(key.pfik_name, name, sizeof(key.pfik_name)); + p = RB_FIND(pfi_ifhead, &pfi_ifs, (struct pfi_kif *)&key); + if (p == NULL) { + return; + } + if (p->pfik_group != NULL) { + memcpy(&ifg_members, &p->pfik_group->ifg_members, + sizeof(ifg_members)); + } else { + /* build a temporary list for p only */ + memset(&p_member, 0, sizeof(p_member)); + p_member.ifgm_ifp = p->pfik_ifp; + TAILQ_INIT(&ifg_members); + TAILQ_INSERT_TAIL(&ifg_members, &p_member, ifgm_next); + } + if (pfs) { + memset(pfs->pcounters, 0, sizeof(pfs->pcounters)); + memset(pfs->bcounters, 0, sizeof(pfs->bcounters)); + } + TAILQ_FOREACH(ifgm, &ifg_members, ifgm_next) { + if (ifgm->ifgm_ifp == NULL) + continue; + p = (struct pfi_kif *)ifgm->ifgm_ifp->if_pf_kif; + + /* just clear statistics */ + if (pfs == NULL) { + memset(p->pfik_packets, 0, sizeof(p->pfik_packets)); + memset(p->pfik_bytes, 0, sizeof(p->pfik_bytes)); + p->pfik_tzero = gettime(); + continue; + } + for (i = 0; i < 2; i++) + for (j = 0; j < 2; j++) + for (k = 0; k < 2; k++) { + pfs->pcounters[i][j][k] += + p->pfik_packets[i][j][k]; + pfs->bcounters[i][j] += + p->pfik_bytes[i][j][k]; + } + } +} + +void +pfi_get_ifaces(const char *name, struct pfi_kif *buf, int *size) +{ + struct pfi_kif *p; + int n = 0; + + RB_FOREACH(p, pfi_ifhead, &pfi_ifs) { + if (pfi_skip_if(name, p)) + continue; + if (n >= *size) + break; + n++; + if (!p->pfik_tzero) + p->pfik_tzero = gettime(); + memcpy(buf++, p, sizeof(*buf)); + } + *size = n; +} + +int +pfi_skip_if(const char *filter, struct pfi_kif *p) +{ + struct ifg_list *i; + int n; + + PF_ASSERT_LOCKED(); + + if (filter == NULL || !*filter) + return (0); + if (!strcmp(p->pfik_name, filter)) + return (0); /* exact match */ + n = strlen(filter); + if (n < 1 || n >= IFNAMSIZ) + return (1); /* sanity check */ + if (filter[n-1] >= '0' && filter[n-1] <= '9') + return (1); /* group names may not end in a digit */ + if (p->pfik_ifp != NULL) + TAILQ_FOREACH(i, &p->pfik_ifp->if_groups, ifgl_next) + if (!strncmp(i->ifgl_group->ifg_group, filter, IFNAMSIZ)) + return (0); /* iface is in group "filter" */ + return (1); +} + +int +pfi_set_flags(const char *name, int flags) +{ + struct pfi_kif *p; + size_t n; + + PF_ASSERT_LOCKED(); + + if (name != NULL && name[0] != '\0') { + p = pfi_kif_find(name); + if (p == NULL) { + n = strlen(name); + if (n < 1 || n >= IFNAMSIZ) + return (EINVAL); + + if (!isalpha(name[0])) + return (EINVAL); + + p = pfi_kif_get(name, NULL); + if (p != NULL) { + p->pfik_flags_new = p->pfik_flags | flags; + /* + * We use pfik_flagrefs counter as an + * indication whether the kif has been created + * on behalf of 'pfi_set_flags()' or not. + */ + KASSERT(p->pfik_flagrefs == 0); + if (ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP)) + pfi_kif_ref(p, PFI_KIF_REF_FLAG); + } else + panic("%s pfi_kif_get() returned NULL\n", + __func__); + } else { + /* + * pf.conf may accidentally contain two set skip on ... + * statements. For example: + * set skip lo + * set skip lo + * We need to grab reference only when skip flag is + * set to avoid tripping assert pfi_clear_flags() + */ + if (ISSET(flags, PFI_IFLAG_SKIP) && + !ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP) && + !ISSET(p->pfik_flags, PFI_IFLAG_SKIP)) + pfi_kif_ref(p, PFI_KIF_REF_FLAG); + + p->pfik_flags_new = p->pfik_flags | flags; + } + } else { + RB_FOREACH(p, pfi_ifhead, &pfi_ifs) + p->pfik_flags_new = p->pfik_flags | flags; + } + + return (0); +} + +int +pfi_clear_flags(const char *name, int flags) +{ + struct pfi_kif *p, *w; + + PF_ASSERT_LOCKED(); + + if (name != NULL && name[0] != '\0') { + p = pfi_kif_find(name); + if (p != NULL) { + p->pfik_flags_new = p->pfik_flags & ~flags; + + KASSERT((p->pfik_flagrefs == 0) || + (p->pfik_flagrefs == 1)); + + if (!ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP) && + (p->pfik_flagrefs == 1)) + pfi_kif_unref(p, PFI_KIF_REF_FLAG); + } else + return (ESRCH); + + } else + RB_FOREACH_SAFE(p, pfi_ifhead, &pfi_ifs, w) { + p->pfik_flags_new = p->pfik_flags & ~flags; + + KASSERT((p->pfik_flagrefs == 0) || + (p->pfik_flagrefs == 1)); + + if (!ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP) && + (p->pfik_flagrefs == 1)) + pfi_kif_unref(p, PFI_KIF_REF_FLAG); + } + + return (0); +} + +void +pfi_xcommit(void) +{ + struct pfi_kif *p, *gkif; + struct ifg_list *g; + struct ifnet *ifp; + size_t n; + + PF_ASSERT_LOCKED(); + + RB_FOREACH(p, pfi_ifhead, &pfi_ifs) { + p->pfik_flags = p->pfik_flags_new; + n = strlen(p->pfik_name); + ifp = p->pfik_ifp; + /* + * if kif is backed by existing interface, then we must use + * skip flags found in groups. We use pfik_flags_new, otherwise + * we would need to do two RB_FOREACH() passes: the first to + * commit group changes the second to commit flag changes for + * interfaces. + */ + if (ifp != NULL) + TAILQ_FOREACH(g, &ifp->if_groups, ifgl_next) { + gkif = + (struct pfi_kif *)g->ifgl_group->ifg_pf_kif; + KASSERT(gkif != NULL); + p->pfik_flags |= gkif->pfik_flags_new; + } + } +} + +/* from pf_print_state.c */ +int +pfi_unmask(void *addr) +{ + struct pf_addr *m = addr; + int i = 31, j = 0, b = 0; + u_int32_t tmp; + + while (j < 4 && m->addr32[j] == 0xffffffff) { + b += 32; + j++; + } + if (j < 4) { + tmp = ntohl(m->addr32[j]); + for (i = 31; tmp & (1 << i); --i) + b++; + } + return (b); +} + diff --git a/module/pfsrc/pf_ioctl.c b/module/pfsrc/pf_ioctl.c new file mode 100644 index 0000000..9d0904b --- /dev/null +++ b/module/pfsrc/pf_ioctl.c @@ -0,0 +1,218 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_ioctl.c — see docs/porting-notes.md */ +#include + +struct pf_statelim_kstat { + struct kstat_kv name; + struct kstat_kv inuse; + struct kstat_kv limit; + struct kstat_kv admitted; + struct kstat_kv hardlimited; + struct kstat_kv ratelimited; +}; + +static int +pf_statelim_kstat_read(struct kstat *ks) +{ + struct pf_statelim *pfstlim = ks->ks_softc; + struct pf_statelim_kstat *d = ks->ks_data; + unsigned int gen; + + strlcpy(kstat_kv_istr(&d->name), pfstlim->pfstlim_nm, + sizeof(kstat_kv_istr(&d->name))); + kstat_kv_u32(&d->limit) = pfstlim->pfstlim_limit; + + pc_cons_enter(&pfstlim->pfstlim_lock, &gen); + do { + kstat_kv_u32(&d->inuse) = pfstlim->pfstlim_inuse; + kstat_kv_u64(&d->admitted) = + pfstlim->pfstlim_counters.admitted; + kstat_kv_u64(&d->hardlimited) = + pfstlim->pfstlim_counters.hardlimited; + kstat_kv_u64(&d->ratelimited) = + pfstlim->pfstlim_counters.ratelimited; + } while (pc_cons_leave(&pfstlim->pfstlim_lock, &gen) != 0); + + nanouptime(&ks->ks_updated); + + return (0); +}; + +static void +pf_statelim_kstat_attach(struct pf_statelim *pfstlim) +{ + struct kstat *ks = pfstlim->pfstlim_ks; + struct pf_statelim_kstat *d; + + if (ks != NULL) + return; + + d = malloc(sizeof(*d), M_DEVBUF, M_WAITOK|M_CANFAIL|M_ZERO); + if (d == NULL) { + printf("pf: unable to allocate state-limiter kstat\n"); + return; + } + + ks = kstat_create("pf", 0, "state-limiter", pfstlim->pfstlim_id, + KSTAT_T_KV, 0); + if (ks == NULL) { + printf("pf: unable to create state-limiter kstat\n"); + free(d, M_DEVBUF, sizeof(*d)); + return; + } + + kstat_kv_init(&d->name, "name", KSTAT_KV_T_ISTR); + kstat_kv_init(&d->inuse, "in-use", KSTAT_KV_T_UINT32); + kstat_kv_init(&d->limit, "limit", KSTAT_KV_T_UINT32); + kstat_kv_init(&d->admitted, "admitted", KSTAT_KV_T_COUNTER64); + kstat_kv_init(&d->hardlimited, "hard-limited", KSTAT_KV_T_COUNTER64); + kstat_kv_init(&d->ratelimited, "rate-limited", KSTAT_KV_T_COUNTER64); + + ks->ks_softc = pfstlim; + ks->ks_data = d; + ks->ks_datalen = sizeof(*d); + ks->ks_read = pf_statelim_kstat_read; + + kstat_install(ks); + + pfstlim->pfstlim_ks = ks; +} + +static void +pf_statelim_kstat_detach(struct pf_statelim *pfstlim) +{ + struct kstat *ks = pfstlim->pfstlim_ks; + struct pf_statelim_kstat *d; + + if (ks == NULL) + return; + + kstat_remove(ks); + d = ks->ks_data; + kstat_destroy(ks); + + free(d, M_DEVBUF, sizeof(*d)); +} + +struct pf_sourcelim_kstat { + struct kstat_kv name; + + /* pf_source/address/prefix counters */ + struct kstat_kv sourceinuse; + struct kstat_kv sourcelimit; + struct kstat_kv sourceallocs; + struct kstat_kv sourcelimited; + struct kstat_kv sourcenomem; + + /* state counters */ + struct kstat_kv inuse; + struct kstat_kv limit; + struct kstat_kv admitted; + struct kstat_kv hardlimited; + struct kstat_kv ratelimited; +}; + +static int +pf_sourcelim_kstat_read(struct kstat *ks) +{ + struct pf_sourcelim *pfsrlim = ks->ks_softc; + struct pf_sourcelim_kstat *d = ks->ks_data; + unsigned int gen; + + strlcpy(kstat_kv_istr(&d->name), pfsrlim->pfsrlim_nm, + sizeof(kstat_kv_istr(&d->name))); + kstat_kv_u32(&d->sourcelimit) = pfsrlim->pfsrlim_entries; + kstat_kv_u32(&d->limit) = pfsrlim->pfsrlim_limit; + + pc_cons_enter(&pfsrlim->pfsrlim_lock, &gen); + do { + kstat_kv_u32(&d->sourceinuse) = + pfsrlim->pfsrlim_nsources; + kstat_kv_u64(&d->sourceallocs) = + pfsrlim->pfsrlim_counters.addrallocs; + kstat_kv_u64(&d->sourcelimited) = + pfsrlim->pfsrlim_counters.addrlimited; + kstat_kv_u64(&d->sourcenomem) = + pfsrlim->pfsrlim_counters.addrnomem; + + kstat_kv_u32(&d->inuse) = + pfsrlim->pfsrlim_counters.inuse; + kstat_kv_u64(&d->admitted) = + pfsrlim->pfsrlim_counters.admitted; + kstat_kv_u64(&d->hardlimited) = + pfsrlim->pfsrlim_counters.hardlimited; + kstat_kv_u64(&d->ratelimited) = + pfsrlim->pfsrlim_counters.ratelimited; + } while (pc_cons_leave(&pfsrlim->pfsrlim_lock, &gen) != 0); + + nanouptime(&ks->ks_updated); + + return (0); +}; + +static void +pf_sourcelim_kstat_attach(struct pf_sourcelim *pfsrlim) +{ + struct kstat *ks = pfsrlim->pfsrlim_ks; + struct pf_sourcelim_kstat *d; + + if (ks != NULL) + return; + + d = malloc(sizeof(*d), M_DEVBUF, M_WAITOK|M_CANFAIL|M_ZERO); + if (d == NULL) { + printf("pf: unable to allocate source-limiter kstat\n"); + return; + } + + ks = kstat_create("pf", 0, "source-limiter", pfsrlim->pfsrlim_id, + KSTAT_T_KV, 0); + if (ks == NULL) { + printf("pf: unable to create source-limiter kstat\n"); + free(d, M_DEVBUF, sizeof(*d)); + return; + } + + kstat_kv_init(&d->name, "name", KSTAT_KV_T_ISTR); + + kstat_kv_init(&d->sourceinuse, "source-in-use", KSTAT_KV_T_UINT32); + kstat_kv_init(&d->sourcelimit, "source-limit", KSTAT_KV_T_UINT32); + kstat_kv_init(&d->sourceallocs, "source-allocs", + KSTAT_KV_T_COUNTER64); + kstat_kv_init(&d->sourcelimited, "source-limited", + KSTAT_KV_T_COUNTER64); + kstat_kv_init(&d->sourcenomem, "source-nomem", + KSTAT_KV_T_COUNTER64); + + kstat_kv_init(&d->inuse, "in-use", KSTAT_KV_T_UINT32); + kstat_kv_init(&d->limit, "limit", KSTAT_KV_T_UINT32); + kstat_kv_init(&d->admitted, "admitted", KSTAT_KV_T_COUNTER64); + kstat_kv_init(&d->hardlimited, "hard-limited", KSTAT_KV_T_COUNTER64); + kstat_kv_init(&d->ratelimited, "rate-limited", KSTAT_KV_T_COUNTER64); + + ks->ks_softc = pfsrlim; + ks->ks_data = d; + ks->ks_datalen = sizeof(*d); + ks->ks_read = pf_sourcelim_kstat_read; + + kstat_install(ks); + + pfsrlim->pfsrlim_ks = ks; +} + +static void +pf_sourcelim_kstat_detach(struct pf_sourcelim *pfsrlim) +{ + struct kstat *ks = pfsrlim->pfsrlim_ks; + struct pf_sourcelim_kstat *d; + + if (ks == NULL) + return; + + kstat_remove(ks); + d = ks->ks_data; + kstat_destroy(ks); + + free(d, M_DEVBUF, sizeof(*d)); +} + +#endif /* NKSTAT > 0 */ diff --git a/module/pfsrc/pf_lb.c b/module/pfsrc/pf_lb.c new file mode 100644 index 0000000..bf18a6a --- /dev/null +++ b/module/pfsrc/pf_lb.c @@ -0,0 +1,945 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_lb.c — see docs/porting-notes.md */ +#include + +u_int64_t pf_hash(struct pf_addr *, struct pf_addr *, + struct pf_poolhashkey *, sa_family_t); +int pf_get_sport(struct pf_pdesc *, struct pf_rule *, + struct pf_addr *, u_int16_t *, u_int16_t, + u_int16_t, struct pf_src_node **); +int pf_map_addr_states_increase(sa_family_t, + struct pf_pool *, struct pf_addr *); +int pf_get_transaddr_af(struct pf_rule *, + struct pf_pdesc *, struct pf_src_node **); +int pf_map_addr_sticky(sa_family_t, struct pf_rule *, + struct pf_addr *, struct pf_addr *, + struct pf_src_node **, struct pf_pool *, + enum pf_sn_types); +int pf_pool_states_decrease_addr(struct pf_pool *, int, + struct pf_addr *); + +u_int64_t +pf_hash(struct pf_addr *inaddr, struct pf_addr *hash, + struct pf_poolhashkey *key, sa_family_t af) +{ + uint64_t res = 0; +#ifdef INET6 + union { + uint64_t hash64; + uint32_t hash32[2]; + } h; +#endif /* INET6 */ + + switch (af) { + case AF_INET: + res = SipHash24((SIPHASH_KEY *)key, + &inaddr->addr32[0], sizeof(inaddr->addr32[0])); + hash->addr32[0] = res; + break; +#ifdef INET6 + case AF_INET6: + res = SipHash24((SIPHASH_KEY *)key, &inaddr->addr32[0], + 4 * sizeof(inaddr->addr32[0])); + h.hash64 = res; + hash->addr32[0] = h.hash32[0]; + hash->addr32[1] = h.hash32[1]; + /* + * siphash isn't big enough, but flipping it around is + * good enough here. + */ + hash->addr32[2] = ~h.hash32[1]; + hash->addr32[3] = ~h.hash32[0]; + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + return (res); +} + +int +pf_get_sport(struct pf_pdesc *pd, struct pf_rule *r, + struct pf_addr *naddr, u_int16_t *nport, u_int16_t low, u_int16_t high, + struct pf_src_node **sn) +{ + struct pf_state_key_cmp key; + struct pf_addr init_addr; + u_int16_t cut; + int dir = (pd->dir == PF_IN) ? PF_OUT : PF_IN; + int sidx = pd->sidx; + int didx = pd->didx; + + memset(&init_addr, 0, sizeof(init_addr)); + if (pf_map_addr(pd->naf, r, &pd->nsaddr, naddr, &init_addr, sn, &r->nat, + PF_SN_NAT)) + return (1); + + if (pd->proto == IPPROTO_ICMP) { + if (pd->ndport == htons(ICMP_ECHO)) { + low = 1; + high = 65535; + } else + return (0); /* Don't try to modify non-echo ICMP */ + } +#ifdef INET6 + if (pd->proto == IPPROTO_ICMPV6) { + if (pd->ndport == htons(ICMP6_ECHO_REQUEST)) { + low = 1; + high = 65535; + } else + return (0); /* Don't try to modify non-echo ICMP */ + } +#endif /* INET6 */ + + do { + key.af = pd->naf; + key.proto = pd->proto; + key.rdomain = pd->rdomain; + pf_addrcpy(&key.addr[didx], &pd->ndaddr, key.af); + pf_addrcpy(&key.addr[sidx], naddr, key.af); + key.port[didx] = pd->ndport; + + /* + * port search; start random, step; + * similar 2 portloop in in_pcbbind + */ + if (!(pd->proto == IPPROTO_TCP || pd->proto == IPPROTO_UDP || + pd->proto == IPPROTO_ICMP || pd->proto == IPPROTO_ICMPV6)) { + /* XXX bug: icmp states dont use the id on both + * XXX sides (traceroute -I through nat) */ + key.port[sidx] = pd->nsport; + key.hash = pf_pkt_hash(key.af, key.proto, &key.addr[0], + &key.addr[1], key.port[0], key.port[1]); + if (pf_find_state_all(&key, dir, NULL) == NULL) { + *nport = pd->nsport; + return (0); + } + } else if (low == 0 && high == 0) { + key.port[sidx] = pd->nsport; + key.hash = pf_pkt_hash(key.af, key.proto, &key.addr[0], + &key.addr[1], key.port[0], key.port[1]); + if (pf_find_state_all(&key, dir, NULL) == NULL) { + *nport = pd->nsport; + return (0); + } + } else if (low == high) { + key.port[sidx] = htons(low); + key.hash = pf_pkt_hash(key.af, key.proto, &key.addr[0], + &key.addr[1], key.port[0], key.port[1]); + if (pf_find_state_all(&key, dir, NULL) == NULL) { + *nport = htons(low); + return (0); + } + } else { + u_int32_t tmp; + + if (low > high) { + tmp = low; + low = high; + high = tmp; + } + /* low < high */ + cut = arc4random_uniform(1 + high - low) + low; + /* low <= cut <= high */ + for (tmp = cut; tmp <= high && tmp <= 0xffff; ++tmp) { + key.port[sidx] = htons(tmp); + key.hash = pf_pkt_hash(key.af, key.proto, + &key.addr[0], &key.addr[1], key.port[0], + key.port[1]); + if (pf_find_state_all(&key, dir, NULL) == + NULL && !in_baddynamic(tmp, pd->proto)) { + *nport = htons(tmp); + return (0); + } + } + tmp = cut; + for (tmp -= 1; tmp >= low && tmp <= 0xffff; --tmp) { + key.port[sidx] = htons(tmp); + key.hash = pf_pkt_hash(key.af, key.proto, + &key.addr[0], &key.addr[1], key.port[0], + key.port[1]); + if (pf_find_state_all(&key, dir, NULL) == + NULL && !in_baddynamic(tmp, pd->proto)) { + *nport = htons(tmp); + return (0); + } + } + } + + switch (r->nat.opts & PF_POOL_TYPEMASK) { + case PF_POOL_RANDOM: + case PF_POOL_ROUNDROBIN: + case PF_POOL_LEASTSTATES: + /* + * pick a different source address since we're out + * of free port choices for the current one. + */ + if (pf_map_addr(pd->naf, r, &pd->nsaddr, naddr, + &init_addr, sn, &r->nat, PF_SN_NAT)) + return (1); + break; + case PF_POOL_NONE: + case PF_POOL_SRCHASH: + case PF_POOL_BITMASK: + default: + return (1); + } + } while (! PF_AEQ(&init_addr, naddr, pd->naf) ); + return (1); /* none available */ +} + +int +pf_map_addr_sticky(sa_family_t af, struct pf_rule *r, struct pf_addr *saddr, + struct pf_addr *naddr, struct pf_src_node **sns, struct pf_pool *rpool, + enum pf_sn_types type) +{ + struct pf_addr *raddr, *rmask, *cached; + struct pf_state *s; + struct pf_src_node k; + int valid; + + k.af = af; + k.type = type; + pf_addrcpy(&k.addr, saddr, af); + k.rule.ptr = r; + pf_status.scounters[SCNT_SRC_NODE_SEARCH]++; + sns[type] = RB_FIND(pf_src_tree, &tree_src_tracking, &k); + if (sns[type] == NULL) + return (-1); + + /* check if the cached entry is still valid */ + cached = &(sns[type])->raddr; + valid = 0; + if (PF_AZERO(cached, af)) { + valid = 1; + } else if (rpool->addr.type == PF_ADDR_DYNIFTL) { + if (pfr_kentry_byaddr(rpool->addr.p.dyn->pfid_kt, cached, + af, 0)) + valid = 1; + } else if (rpool->addr.type == PF_ADDR_TABLE) { + if (pfr_kentry_byaddr(rpool->addr.p.tbl, cached, af, 0)) + valid = 1; + } else if (rpool->addr.type != PF_ADDR_NOROUTE) { + raddr = &rpool->addr.v.a.addr; + rmask = &rpool->addr.v.a.mask; + valid = pf_match_addr(0, raddr, rmask, cached, af); + } + if (!valid) { + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, "pf: pf_map_addr: " + "stale src tracking (%u) ", type); + pf_print_host(&k.addr, 0, af); + addlog(" to "); + pf_print_host(cached, 0, af); + addlog("\n"); + } + if (sns[type]->states != 0) { + /* XXX expensive */ + RBT_FOREACH(s, pf_state_tree_id, &tree_id) + pf_state_rm_src_node(s, sns[type]); + } + sns[type]->expire = 1; + pf_remove_src_node(sns[type]); + sns[type] = NULL; + return (-1); + } + + + if (!PF_AZERO(cached, af)) { + pf_addrcpy(naddr, cached, af); + if ((rpool->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES && + pf_map_addr_states_increase(af, rpool, cached) == -1) + return (-1); + } + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, "pf: pf_map_addr: " + "src tracking (%u) maps ", type); + pf_print_host(&k.addr, 0, af); + addlog(" to "); + pf_print_host(naddr, 0, af); + addlog("\n"); + } + + if (sns[type]->kif != NULL) + rpool->kif = sns[type]->kif; + + return (0); +} + +uint32_t +pf_rand_addr(uint32_t mask) +{ + uint32_t addr; + + mask = ~ntohl(mask); + addr = arc4random_uniform(mask + 1); + + return (htonl(addr)); +} + +int +pf_map_addr(sa_family_t af, struct pf_rule *r, struct pf_addr *saddr, + struct pf_addr *naddr, struct pf_addr *init_addr, struct pf_src_node **sns, + struct pf_pool *rpool, enum pf_sn_types type) +{ + struct pf_addr hash; + struct pf_addr faddr; + struct pf_addr *raddr = &rpool->addr.v.a.addr; + struct pf_addr *rmask = &rpool->addr.v.a.mask; + struct pfr_ktable *kt; + struct pfi_kif *kif; + u_int64_t states; + u_int16_t weight; + u_int64_t load; + u_int64_t cload; + u_int64_t hashidx; + int cnt; + + if (sns[type] == NULL && rpool->opts & PF_POOL_STICKYADDR && + (rpool->opts & PF_POOL_TYPEMASK) != PF_POOL_NONE && + pf_map_addr_sticky(af, r, saddr, naddr, sns, rpool, type) == 0) + return (0); + + if (rpool->addr.type == PF_ADDR_NOROUTE) + return (1); + if (rpool->addr.type == PF_ADDR_DYNIFTL) { + switch (af) { + case AF_INET: + if (rpool->addr.p.dyn->pfid_acnt4 < 1 && + !PF_POOL_DYNTYPE(rpool->opts)) + return (1); + raddr = &rpool->addr.p.dyn->pfid_addr4; + rmask = &rpool->addr.p.dyn->pfid_mask4; + break; +#ifdef INET6 + case AF_INET6: + if (rpool->addr.p.dyn->pfid_acnt6 < 1 && + !PF_POOL_DYNTYPE(rpool->opts)) + return (1); + raddr = &rpool->addr.p.dyn->pfid_addr6; + rmask = &rpool->addr.p.dyn->pfid_mask6; + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + } else if (rpool->addr.type == PF_ADDR_TABLE) { + if (!PF_POOL_DYNTYPE(rpool->opts)) + return (1); /* unsupported */ + } else { + raddr = &rpool->addr.v.a.addr; + rmask = &rpool->addr.v.a.mask; + } + + switch (rpool->opts & PF_POOL_TYPEMASK) { + case PF_POOL_NONE: + pf_addrcpy(naddr, raddr, af); + break; + case PF_POOL_BITMASK: + pf_poolmask(naddr, raddr, rmask, saddr, af); + break; + case PF_POOL_RANDOM: + if (rpool->addr.type == PF_ADDR_TABLE || + rpool->addr.type == PF_ADDR_DYNIFTL) { + if (rpool->addr.type == PF_ADDR_TABLE) + kt = rpool->addr.p.tbl; + else + kt = rpool->addr.p.dyn->pfid_kt; + kt = pfr_ktable_select_active(kt); + if (kt == NULL) + return (1); + + cnt = kt->pfrkt_cnt; + if (cnt == 0) + rpool->tblidx = 0; + else + rpool->tblidx = (int)arc4random_uniform(cnt); + memset(&rpool->counter, 0, sizeof(rpool->counter)); + if (pfr_pool_get(rpool, &raddr, &rmask, af)) + return (1); + pf_addrcpy(naddr, &rpool->counter, af); + } else if (init_addr != NULL && PF_AZERO(init_addr, af)) { + switch (af) { + case AF_INET: + rpool->counter.addr32[0] = pf_rand_addr( + rmask->addr32[0]); + break; +#ifdef INET6 + case AF_INET6: + if (rmask->addr32[3] != 0xffffffff) + rpool->counter.addr32[3] = pf_rand_addr( + rmask->addr32[3]); + else + break; + if (rmask->addr32[2] != 0xffffffff) + rpool->counter.addr32[2] = pf_rand_addr( + rmask->addr32[2]); + else + break; + if (rmask->addr32[1] != 0xffffffff) + rpool->counter.addr32[1] = pf_rand_addr( + rmask->addr32[1]); + else + break; + if (rmask->addr32[0] != 0xffffffff) + rpool->counter.addr32[0] = pf_rand_addr( + rmask->addr32[0]); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + pf_poolmask(naddr, raddr, rmask, &rpool->counter, af); + pf_addrcpy(init_addr, naddr, af); + + } else { + pf_addr_inc(&rpool->counter, af); + pf_poolmask(naddr, raddr, rmask, &rpool->counter, af); + } + break; + case PF_POOL_SRCHASH: + hashidx = pf_hash(saddr, &hash, &rpool->key, af); + + if (rpool->addr.type == PF_ADDR_TABLE || + rpool->addr.type == PF_ADDR_DYNIFTL) { + if (rpool->addr.type == PF_ADDR_TABLE) + kt = rpool->addr.p.tbl; + else + kt = rpool->addr.p.dyn->pfid_kt; + kt = pfr_ktable_select_active(kt); + if (kt == NULL) + return (1); + + cnt = kt->pfrkt_cnt; + if (cnt == 0) + rpool->tblidx = 0; + else + rpool->tblidx = (int)(hashidx % cnt); + memset(&rpool->counter, 0, sizeof(rpool->counter)); + if (pfr_pool_get(rpool, &raddr, &rmask, af)) + return (1); + pf_addrcpy(naddr, &rpool->counter, af); + } else { + pf_poolmask(naddr, raddr, rmask, &hash, af); + } + break; + case PF_POOL_ROUNDROBIN: + if (rpool->addr.type == PF_ADDR_TABLE || + rpool->addr.type == PF_ADDR_DYNIFTL) { + if (pfr_pool_get(rpool, &raddr, &rmask, af)) { + /* + * reset counter in case its value + * has been removed from the pool. + */ + memset(&rpool->counter, 0, + sizeof(rpool->counter)); + if (pfr_pool_get(rpool, &raddr, &rmask, af)) + return (1); + } + } else if (PF_AZERO(&rpool->counter, af)) { + /* + * fall back to POOL_NONE if there is a single host + * address in pool. + */ + if (af == AF_INET && + rmask->addr32[0] == INADDR_BROADCAST) { + pf_addrcpy(naddr, raddr, af); + break; + } +#ifdef INET6 + if (af == AF_INET6 && + IN6_ARE_ADDR_EQUAL(&rmask->v6, &in6mask128)) { + pf_addrcpy(naddr, raddr, af); + break; + } +#endif + } else if (pf_match_addr(0, raddr, rmask, &rpool->counter, af)) + return (1); + + /* iterate over table if it contains entries which are weighted */ + if ((rpool->addr.type == PF_ADDR_TABLE && + rpool->addr.p.tbl->pfrkt_refcntcost > 0) || + (rpool->addr.type == PF_ADDR_DYNIFTL && + rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0)) { + do { + if (rpool->addr.type == PF_ADDR_TABLE || + rpool->addr.type == PF_ADDR_DYNIFTL) { + if (pfr_pool_get(rpool, + &raddr, &rmask, af)) + return (1); + } else { + log(LOG_ERR, "pf: pf_map_addr: " + "weighted RR failure"); + return (1); + } + if (rpool->weight >= rpool->curweight) + break; + pf_addr_inc(&rpool->counter, af); + } while (1); + + weight = rpool->weight; + } + + pf_poolmask(naddr, raddr, rmask, &rpool->counter, af); + if (init_addr != NULL && PF_AZERO(init_addr, af)) + pf_addrcpy(init_addr, &rpool->counter, af); + pf_addr_inc(&rpool->counter, af); + break; + case PF_POOL_LEASTSTATES: + /* retrieve an address first */ + if (rpool->addr.type == PF_ADDR_TABLE || + rpool->addr.type == PF_ADDR_DYNIFTL) { + if (pfr_pool_get(rpool, &raddr, &rmask, af)) { + /* see PF_POOL_ROUNDROBIN */ + memset(&rpool->counter, 0, + sizeof(rpool->counter)); + if (pfr_pool_get(rpool, &raddr, &rmask, af)) + return (1); + } + } else if (pf_match_addr(0, raddr, rmask, &rpool->counter, af)) + return (1); + + states = rpool->states; + weight = rpool->weight; + kif = rpool->kif; + + if ((rpool->addr.type == PF_ADDR_TABLE && + rpool->addr.p.tbl->pfrkt_refcntcost > 0) || + (rpool->addr.type == PF_ADDR_DYNIFTL && + rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0)) + load = ((UINT16_MAX * rpool->states) / rpool->weight); + else + load = states; + + pf_addrcpy(&faddr, &rpool->counter, af); + + pf_addrcpy(naddr, &rpool->counter, af); + if (init_addr != NULL && PF_AZERO(init_addr, af)) + pf_addrcpy(init_addr, naddr, af); + + /* + * iterate *once* over whole table and find destination with + * least connection + */ + do { + pf_addr_inc(&rpool->counter, af); + if (rpool->addr.type == PF_ADDR_TABLE || + rpool->addr.type == PF_ADDR_DYNIFTL) { + if (pfr_pool_get(rpool, &raddr, &rmask, af)) + return (1); + } else if (pf_match_addr(0, raddr, rmask, + &rpool->counter, af)) + return (1); + + if ((rpool->addr.type == PF_ADDR_TABLE && + rpool->addr.p.tbl->pfrkt_refcntcost > 0) || + (rpool->addr.type == PF_ADDR_DYNIFTL && + rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0)) + cload = ((UINT16_MAX * rpool->states) + / rpool->weight); + else + cload = rpool->states; + + /* find lc minimum */ + if (cload < load) { + states = rpool->states; + weight = rpool->weight; + kif = rpool->kif; + load = cload; + + pf_addrcpy(naddr, &rpool->counter, af); + if (init_addr != NULL && + PF_AZERO(init_addr, af)) + pf_addrcpy(init_addr, naddr, af); + } + } while (pf_match_addr(1, &faddr, rmask, &rpool->counter, af) && + (states > 0)); + + if (pf_map_addr_states_increase(af, rpool, naddr) == -1) + return (1); + /* revert the kif which was set by pfr_pool_get() */ + rpool->kif = kif; + break; + } + + if (rpool->opts & PF_POOL_STICKYADDR) { + if (sns[type] != NULL) { + pf_remove_src_node(sns[type]); + sns[type] = NULL; + } + if (pf_insert_src_node(&sns[type], r, type, af, saddr, naddr, + rpool->kif)) + return (1); + } + + if (pf_status.debug >= LOG_INFO && + (rpool->opts & PF_POOL_TYPEMASK) != PF_POOL_NONE) { + log(LOG_INFO, "pf: pf_map_addr: selected address "); + pf_print_host(naddr, 0, af); + if ((rpool->opts & PF_POOL_TYPEMASK) == + PF_POOL_LEASTSTATES) + addlog(" with state count %llu", states); + if ((rpool->addr.type == PF_ADDR_TABLE && + rpool->addr.p.tbl->pfrkt_refcntcost > 0) || + (rpool->addr.type == PF_ADDR_DYNIFTL && + rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0)) + addlog(" with weight %u", weight); + addlog("\n"); + } + + return (0); +} + +int +pf_map_addr_states_increase(sa_family_t af, struct pf_pool *rpool, + struct pf_addr *naddr) +{ + if (rpool->addr.type == PF_ADDR_TABLE) { + if (pfr_states_increase(rpool->addr.p.tbl, + naddr, af) == -1) { + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, + "pf: pf_map_addr_states_increase: " + "selected address "); + pf_print_host(naddr, 0, af); + addlog(". Failed to increase count!\n"); + } + return (-1); + } + } else if (rpool->addr.type == PF_ADDR_DYNIFTL) { + if (pfr_states_increase(rpool->addr.p.dyn->pfid_kt, + naddr, af) == -1) { + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, + "pf: pf_map_addr_states_increase: " + "selected address "); + pf_print_host(naddr, 0, af); + addlog(". Failed to increase count!\n"); + } + return (-1); + } + } + return (0); +} + +int +pf_get_transaddr(struct pf_rule *r, struct pf_pdesc *pd, + struct pf_src_node **sns, struct pf_rule **nr) +{ + struct pf_addr naddr; + u_int16_t nport; + +#ifdef INET6 + if (pd->af != pd->naf) + return (pf_get_transaddr_af(r, pd, sns)); +#endif /* INET6 */ + + if (r->nat.addr.type != PF_ADDR_NONE) { + /* XXX is this right? what if rtable is changed at the same + * XXX time? where do I need to figure out the sport? */ + nport = 0; + if (pf_get_sport(pd, r, &naddr, &nport, + r->nat.proxy_port[0], r->nat.proxy_port[1], sns)) { + DPFPRINTF(LOG_NOTICE, + "pf: NAT proxy port allocation (%u-%u) failed", + r->nat.proxy_port[0], + r->nat.proxy_port[1]); + return (-1); + } + /* decrease least-connection state counter of the previous */ + if ((*nr) != NULL && (*nr)->nat.addr.type != PF_ADDR_NONE && + ((*nr)->nat.opts & PF_POOL_TYPEMASK) == + PF_POOL_LEASTSTATES) + pf_pool_states_decrease_addr(&(*nr)->nat, pd->af, + &pd->nsaddr); + *nr = r; + pf_addrcpy(&pd->nsaddr, &naddr, pd->af); + pd->nsport = nport; + } + if (r->rdr.addr.type != PF_ADDR_NONE) { + if (pf_map_addr(pd->af, r, &pd->nsaddr, &naddr, NULL, sns, + &r->rdr, PF_SN_RDR)) + return (-1); + if ((r->rdr.opts & PF_POOL_TYPEMASK) == PF_POOL_BITMASK) + pf_poolmask(&naddr, &naddr, &r->rdr.addr.v.a.mask, + &pd->ndaddr, pd->af); + + nport = 0; + if (r->rdr.proxy_port[1]) { + u_int32_t tmp_nport; + u_int16_t div; + + div = r->rdr.proxy_port[1] - r->rdr.proxy_port[0] + 1; + div = (div == 0) ? 1 : div; + + tmp_nport = ((ntohs(pd->ndport) - ntohs(r->dst.port[0])) % div) + + r->rdr.proxy_port[0]; + + /* wrap around if necessary */ + if (tmp_nport > 65535) + tmp_nport -= 65535; + nport = htons((u_int16_t)tmp_nport); + } else if (r->rdr.proxy_port[0]) + nport = htons(r->rdr.proxy_port[0]); + /* decrease least-connection state counter of the previous */ + if ((*nr) != NULL && (*nr)->rdr.addr.type != PF_ADDR_NONE && + ((*nr)->rdr.opts & PF_POOL_TYPEMASK) == + PF_POOL_LEASTSTATES) + pf_pool_states_decrease_addr(&(*nr)->rdr, pd->af, + &pd->ndaddr); + *nr = r; + pf_addrcpy(&pd->ndaddr, &naddr, pd->af); + if (nport) + pd->ndport = nport; + } + + return (0); +} + +#ifdef INET6 +int +pf_get_transaddr_af(struct pf_rule *r, struct pf_pdesc *pd, + struct pf_src_node **sns) +{ + struct pf_addr ndaddr, nsaddr, naddr; + u_int16_t nport; + int prefixlen = 96; + + if (pf_status.debug >= LOG_INFO) { + log(LOG_INFO, "pf: af-to %s %s, ", + pd->naf == AF_INET ? "inet" : "inet6", + r->rdr.addr.type == PF_ADDR_NONE ? "nat" : "rdr"); + pf_print_host(&pd->nsaddr, pd->nsport, pd->af); + addlog(" -> "); + pf_print_host(&pd->ndaddr, pd->ndport, pd->af); + addlog("\n"); + } + + if (r->nat.addr.type == PF_ADDR_NONE) + panic("pf_get_transaddr_af: no nat pool for source address"); + + /* get source address and port */ + nport = 0; + if (pf_get_sport(pd, r, &nsaddr, &nport, + r->nat.proxy_port[0], r->nat.proxy_port[1], sns)) { + DPFPRINTF(LOG_NOTICE, + "pf: af-to NAT proxy port allocation (%u-%u) failed", + r->nat.proxy_port[0], + r->nat.proxy_port[1]); + return (-1); + } + pd->nsport = nport; + + if (pd->proto == IPPROTO_ICMPV6 && pd->naf == AF_INET) { + if (pd->dir == PF_IN) { + pd->ndport = ntohs(pd->ndport); + if (pd->ndport == ICMP6_ECHO_REQUEST) + pd->ndport = ICMP_ECHO; + else if (pd->ndport == ICMP6_ECHO_REPLY) + pd->ndport = ICMP_ECHOREPLY; + pd->ndport = htons(pd->ndport); + } else { + pd->nsport = ntohs(pd->nsport); + if (pd->nsport == ICMP6_ECHO_REQUEST) + pd->nsport = ICMP_ECHO; + else if (pd->nsport == ICMP6_ECHO_REPLY) + pd->nsport = ICMP_ECHOREPLY; + pd->nsport = htons(pd->nsport); + } + } else if (pd->proto == IPPROTO_ICMP && pd->naf == AF_INET6) { + if (pd->dir == PF_IN) { + pd->ndport = ntohs(pd->ndport); + if (pd->ndport == ICMP_ECHO) + pd->ndport = ICMP6_ECHO_REQUEST; + else if (pd->ndport == ICMP_ECHOREPLY) + pd->ndport = ICMP6_ECHO_REPLY; + pd->ndport = htons(pd->ndport); + } else { + pd->nsport = ntohs(pd->nsport); + if (pd->nsport == ICMP_ECHO) + pd->nsport = ICMP6_ECHO_REQUEST; + else if (pd->nsport == ICMP_ECHOREPLY) + pd->nsport = ICMP6_ECHO_REPLY; + pd->nsport = htons(pd->nsport); + } + } + + /* get the destination address and port */ + if (r->rdr.addr.type != PF_ADDR_NONE) { + if (pf_map_addr(pd->naf, r, &nsaddr, &naddr, NULL, sns, + &r->rdr, PF_SN_RDR)) + return (-1); + if (r->rdr.proxy_port[0]) + pd->ndport = htons(r->rdr.proxy_port[0]); + + if (pd->naf == AF_INET) { + /* The prefix is the IPv4 rdr address */ + prefixlen = in_mask2len((struct in_addr *) + &r->rdr.addr.v.a.mask); + inet_nat46(pd->naf, &pd->ndaddr, + &ndaddr, &naddr, prefixlen); + } else { + /* The prefix is the IPv6 rdr address */ + prefixlen = + in6_mask2len((struct in6_addr *) + &r->rdr.addr.v.a.mask, NULL); + inet_nat64(pd->naf, &pd->ndaddr, + &ndaddr, &naddr, prefixlen); + } + } else { + if (pd->naf == AF_INET) { + /* The prefix is the IPv6 dst address */ + prefixlen = + in6_mask2len((struct in6_addr *) + &r->dst.addr.v.a.mask, NULL); + if (prefixlen < 32) + prefixlen = 96; + inet_nat64(pd->naf, &pd->ndaddr, + &ndaddr, &pd->ndaddr, prefixlen); + } else { + /* + * The prefix is the IPv6 nat address + * (that was stored in pd->nsaddr) + */ + prefixlen = in6_mask2len((struct in6_addr *) + &r->nat.addr.v.a.mask, NULL); + if (prefixlen > 96) + prefixlen = 96; + inet_nat64(pd->naf, &pd->ndaddr, + &ndaddr, &nsaddr, prefixlen); + } + } + + pf_addrcpy(&pd->nsaddr, &nsaddr, pd->naf); + pf_addrcpy(&pd->ndaddr, &ndaddr, pd->naf); + + if (pf_status.debug >= LOG_INFO) { + log(LOG_INFO, "pf: af-to %s %s done, prefixlen %d, ", + pd->naf == AF_INET ? "inet" : "inet6", + r->rdr.addr.type == PF_ADDR_NONE ? "nat" : "rdr", + prefixlen); + pf_print_host(&pd->nsaddr, pd->nsport, pd->naf); + addlog(" -> "); + pf_print_host(&pd->ndaddr, pd->ndport, pd->naf); + addlog("\n"); + } + + return (0); +} +#endif /* INET6 */ + +int +pf_postprocess_addr(struct pf_state *cur) +{ + struct pf_state_key *sks; + struct pf_addr *addr; + struct pf_pool *rpool, *natpl = NULL, *rdrpl = NULL; + struct pf_rule_item *ri; + int ret = 0; + + /* decrease the states counter in pool for "least-states" */ + if (cur->natrule.ptr != NULL) { /* this is the final */ + if (cur->natrule.ptr->nat.addr.type != PF_ADDR_NONE) + natpl = &cur->natrule.ptr->nat; + if (cur->natrule.ptr->rdr.addr.type != PF_ADDR_NONE) + rdrpl = &cur->natrule.ptr->rdr; + } + if (natpl == NULL || rdrpl == NULL) { + /* nat or rdr might be done by a previous "match" */ + SLIST_FOREACH(ri, &cur->match_rules, entry) { + /* first match since the list order is reversed */ + if (natpl == NULL && + ri->r->nat.addr.type != PF_ADDR_NONE) + natpl = &ri->r->nat; + if (rdrpl == NULL && + ri->r->rdr.addr.type != PF_ADDR_NONE) + rdrpl = &ri->r->rdr; + if (natpl != NULL && rdrpl != NULL) + break; + } + } + if (natpl != NULL && + (natpl->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) { + /* nat-to least-state */ + if (cur->direction == PF_IN) { + sks = cur->key[PF_SK_STACK]; + addr = &sks->addr[0]; + } else { + sks = cur->key[PF_SK_WIRE]; + addr = &sks->addr[1]; + } + if (pf_pool_states_decrease_addr(natpl, sks->af, addr) != 0) + ret = 1; + } + if (rdrpl != NULL && + (rdrpl->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) { + /* rdr
least-state */ + if (cur->direction == PF_IN) { + sks = cur->key[PF_SK_STACK]; + addr = &sks->addr[1]; + } else { + sks = cur->key[PF_SK_WIRE]; + addr = &sks->addr[0]; + } + if (pf_pool_states_decrease_addr(rdrpl, sks->af, addr) != 0) + ret = 1; + } + if (cur->rule.ptr != NULL) { + /* route-to
least-state */ + rpool = &cur->rule.ptr->route; + if (rpool->addr.type != PF_ADDR_NONE && + (rpool->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) { + sks = cur->key[(cur->direction == PF_IN) + ? PF_SK_STACK : PF_SK_WIRE]; + addr = &cur->rt_addr; + KASSERT(sks != NULL); + if (pf_pool_states_decrease_addr(rpool, sks->af, addr) + != 0) + ret = 1; + } + } + + return (ret); +} + +int +pf_pool_states_decrease_addr(struct pf_pool *rpool, int af, + struct pf_addr *addr) +{ + int slbcount = -1; + + if (rpool->addr.type == PF_ADDR_TABLE) { + if ((slbcount = pfr_states_decrease( + rpool->addr.p.tbl, addr, af)) == -1) { + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, "pf: %s: selected address ", + __func__); + pf_print_host(addr, 0, af); + addlog(". Failed to " + "decrease count!\n"); + } + return (1); + } + } else if (rpool->addr.type == PF_ADDR_DYNIFTL) { + if ((slbcount = pfr_states_decrease( + rpool->addr.p.dyn->pfid_kt, addr, af)) == -1) { + if (pf_status.debug >= LOG_DEBUG) { + log(LOG_DEBUG, "pf: %s: selected address ", + __func__); + pf_print_host(addr, 0, af); + addlog(". Failed to " + "decrease count!\n"); + } + return (1); + } + } + if (slbcount > -1) { + if (pf_status.debug >= LOG_INFO) { + log(LOG_INFO, "pf: %s: selected address ", __func__); + pf_print_host(addr, 0, af); + addlog(" decreased state count to %u\n", + slbcount); + } + } + + return (0); +} diff --git a/module/pfsrc/pf_norm.c b/module/pfsrc/pf_norm.c new file mode 100644 index 0000000..9b362d3 --- /dev/null +++ b/module/pfsrc/pf_norm.c @@ -0,0 +1,1664 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_norm.c — see docs/porting-notes.md */ +#include + +struct pf_frent { + TAILQ_ENTRY(pf_frent) fr_next; + struct mbuf *fe_m; + u_int16_t fe_hdrlen; /* ipv4 header length with ip options + ipv6, extension, fragment header */ + u_int16_t fe_extoff; /* last extension header offset or 0 */ + u_int16_t fe_len; /* fragment length */ + u_int16_t fe_off; /* fragment offset */ + u_int16_t fe_mff; /* more fragment flag */ +}; + +RB_HEAD(pf_frag_tree, pf_fragment); +struct pf_frnode { + struct pf_addr fn_src; /* ip source address */ + struct pf_addr fn_dst; /* ip destination address */ + u_int32_t fn_fragments; /* number of entries in fn_tree */ + u_int32_t fn_gen; /* fr_gen of newest entry in fn_tree */ + u_int16_t fn_rdomain; /* routing domain */ + sa_family_t fn_af; /* address family */ + u_int8_t fn_proto; /* protocol for fragments in fn_tree */ + u_int8_t fn_direction; /* pf packet direction */ + + RB_ENTRY(pf_frnode) fn_entry; + struct pf_frag_tree fn_tree; /* matching fragments, lookup by id */ +}; + +struct pf_fragment { + struct pf_frent *fr_firstoff[PF_FRAG_ENTRY_POINTS]; + /* pointers to queue element */ + u_int8_t fr_entries[PF_FRAG_ENTRY_POINTS]; + /* count entries between pointers */ + RB_ENTRY(pf_fragment) fr_entry; + TAILQ_ENTRY(pf_fragment) frag_next; + TAILQ_HEAD(pf_fragq, pf_frent) fr_queue; + u_int32_t fr_id; /* fragment id for reassemble */ + int32_t fr_timeout; + u_int32_t fr_gen; /* generation number (per pf_frnode) */ + u_int16_t fr_maxlen; /* maximum length of single fragment */ + u_int16_t fr_holes; /* number of holes in the queue */ + struct pf_frnode *fr_node; /* ip src/dst/proto/af for fragments */ +}; + +struct pf_fragment_tag { + u_int16_t ft_hdrlen; /* header length of reassembled pkt */ + u_int16_t ft_extoff; /* last extension header offset or 0 */ + u_int16_t ft_maxlen; /* maximum fragment payload length */ +}; + +TAILQ_HEAD(pf_fragqueue, pf_fragment) pf_fragqueue; + +static __inline int pf_frnode_compare(struct pf_frnode *, + struct pf_frnode *); +RB_HEAD(pf_frnode_tree, pf_frnode) pf_frnode_tree; +RB_PROTOTYPE(pf_frnode_tree, pf_frnode, fn_entry, pf_frnode_compare); +RB_GENERATE(pf_frnode_tree, pf_frnode, fn_entry, pf_frnode_compare); + +static __inline int pf_frag_compare(struct pf_fragment *, + struct pf_fragment *); +RB_PROTOTYPE(pf_frag_tree, pf_fragment, fr_entry, pf_frag_compare); +RB_GENERATE(pf_frag_tree, pf_fragment, fr_entry, pf_frag_compare); + +/* Private prototypes */ +void pf_flush_fragments(void); +void pf_free_fragment(struct pf_fragment *); +struct pf_fragment *pf_find_fragment(struct pf_frnode *, u_int32_t); +struct pf_frent *pf_create_fragment(u_short *); +int pf_frent_holes(struct pf_frent *); +static inline int pf_frent_index(struct pf_frent *); +int pf_frent_insert(struct pf_fragment *, + struct pf_frent *, struct pf_frent *); +void pf_frent_remove(struct pf_fragment *, + struct pf_frent *); +struct pf_frent *pf_frent_previous(struct pf_fragment *, + struct pf_frent *); +struct pf_fragment *pf_fillup_fragment(struct pf_frnode *, u_int32_t, + struct pf_frent *, u_short *); +struct mbuf *pf_join_fragment(struct pf_fragment *); +int pf_reassemble(struct mbuf **, int, u_int16_t, + u_short *); +#ifdef INET6 +int pf_reassemble6(struct mbuf **, struct ip6_frag *, + u_int16_t, u_int16_t, int, u_int16_t, u_short *); +#endif /* INET6 */ + +/* Globals */ +struct pool pf_frent_pl, pf_frag_pl, pf_frnode_pl; +struct pool pf_state_scrub_pl; + +struct mutex pf_frag_mtx; + +#define PF_FRAG_LOCK_INIT() mtx_init(&pf_frag_mtx, IPL_SOFTNET) + +void +pf_normalize_init(void) +{ + pool_init(&pf_frent_pl, sizeof(struct pf_frent), 0, + IPL_SOFTNET, 0, "pffrent", NULL); + pool_init(&pf_frnode_pl, sizeof(struct pf_frnode), 0, + IPL_SOFTNET, 0, "pffrnode", NULL); + pool_init(&pf_frag_pl, sizeof(struct pf_fragment), 0, + IPL_SOFTNET, 0, "pffrag", NULL); + pool_init(&pf_state_scrub_pl, sizeof(struct pf_state_scrub), 0, + IPL_SOFTNET, 0, "pfstscr", NULL); + + pool_sethiwat(&pf_frag_pl, PFFRAG_FRAG_HIWAT); + pool_sethardlimit(&pf_frent_pl, PFFRAG_FRENT_HIWAT); + + TAILQ_INIT(&pf_fragqueue); + + PF_FRAG_LOCK_INIT(); +} + +static __inline int +pf_frnode_compare(struct pf_frnode *a, struct pf_frnode *b) +{ + int diff; + + if ((diff = a->fn_proto - b->fn_proto) != 0) + return (diff); + if ((diff = a->fn_af - b->fn_af) != 0) + return (diff); + if ((diff = a->fn_direction - b->fn_direction) != 0) + return (diff); + if ((diff = a->fn_rdomain - b->fn_rdomain) != 0) + return (diff); + if ((diff = pf_addr_compare(&a->fn_src, &b->fn_src, a->fn_af)) != 0) + return (diff); + if ((diff = pf_addr_compare(&a->fn_dst, &b->fn_dst, a->fn_af)) != 0) + return (diff); + + return (0); +} + +static __inline int +pf_frag_compare(struct pf_fragment *a, struct pf_fragment *b) +{ + if (a->fr_id > b->fr_id) + return (1); + if (a->fr_id < b->fr_id) + return (-1); + + return (0); +} + +void +pf_purge_expired_fragments(void) +{ + struct pf_fragment *frag; + int32_t expire; + + PF_ASSERT_UNLOCKED(); + + expire = getuptime() - pf_default_rule.timeout[PFTM_FRAG]; + + PF_FRAG_LOCK(); + while ((frag = TAILQ_LAST(&pf_fragqueue, pf_fragqueue)) != NULL) { + if (frag->fr_timeout > expire) + break; + DPFPRINTF(LOG_NOTICE, "expiring %d(%p)", frag->fr_id, frag); + pf_free_fragment(frag); + } + PF_FRAG_UNLOCK(); +} + +/* + * Try to flush old fragments to make space for new ones + */ +void +pf_flush_fragments(void) +{ + struct pf_fragment *frag; + u_int goal; + + goal = pf_status.fragments * 9 / 10; + DPFPRINTF(LOG_NOTICE, "trying to free > %u frents", + pf_status.fragments - goal); + while (goal < pf_status.fragments) { + if ((frag = TAILQ_LAST(&pf_fragqueue, pf_fragqueue)) == NULL) + break; + pf_free_fragment(frag); + } +} + +/* + * Remove a fragment from the fragment queue, free its fragment entries, + * and free the fragment itself. + */ +void +pf_free_fragment(struct pf_fragment *frag) +{ + struct pf_frent *frent; + struct pf_frnode *frnode; + + frnode = frag->fr_node; + RB_REMOVE(pf_frag_tree, &frnode->fn_tree, frag); + KASSERT(frnode->fn_fragments >= 1); + frnode->fn_fragments--; + if (frnode->fn_fragments == 0) { + KASSERT(RB_EMPTY(&frnode->fn_tree)); + RB_REMOVE(pf_frnode_tree, &pf_frnode_tree, frnode); + pool_put(&pf_frnode_pl, frnode); + } + TAILQ_REMOVE(&pf_fragqueue, frag, frag_next); + + /* Free all fragment entries */ + while ((frent = TAILQ_FIRST(&frag->fr_queue)) != NULL) { + TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); + pf_status.ncounters[NCNT_FRAG_REMOVALS]++; + m_freem(frent->fe_m); + pool_put(&pf_frent_pl, frent); + pf_status.fragments--; + } + pool_put(&pf_frag_pl, frag); +} + +struct pf_fragment * +pf_find_fragment(struct pf_frnode *key, u_int32_t id) +{ + struct pf_fragment *frag, idkey; + struct pf_frnode *frnode; + u_int32_t stale; + + frnode = RB_FIND(pf_frnode_tree, &pf_frnode_tree, key); + pf_status.ncounters[NCNT_FRAG_SEARCH]++; + if (frnode == NULL) + return (NULL); + KASSERT(frnode->fn_fragments >= 1); + idkey.fr_id = id; + frag = RB_FIND(pf_frag_tree, &frnode->fn_tree, &idkey); + if (frag == NULL) + return (NULL); + /* + * Limit the number of fragments we accept for each (proto,src,dst,af) + * combination (aka pf_frnode), so we can deal better with a high rate + * of fragments. Problem analysis is in RFC 4963. + * Store the current generation for each pf_frnode in fn_gen and on + * lookup discard 'stale' fragments (pf_fragment, based on the fr_gen + * member). Instead of adding another button interpret the pf fragment + * timeout in multiples of 200 fragments. This way the default of 60s + * means: pf_fragment objects older than 60*200 = 12,000 generations + * are considered stale. + */ + stale = pf_default_rule.timeout[PFTM_FRAG] * PF_FRAG_STALE; + if ((frnode->fn_gen - frag->fr_gen) >= stale) { + DPFPRINTF(LOG_NOTICE, "stale fragment %d(%p), gen %u, num %u", + frag->fr_id, frag, frag->fr_gen, frnode->fn_fragments); + pf_free_fragment(frag); + return (NULL); + } + TAILQ_REMOVE(&pf_fragqueue, frag, frag_next); + TAILQ_INSERT_HEAD(&pf_fragqueue, frag, frag_next); + + return (frag); +} + +struct pf_frent * +pf_create_fragment(u_short *reason) +{ + struct pf_frent *frent; + + frent = pool_get(&pf_frent_pl, PR_NOWAIT); + if (frent == NULL) { + pf_flush_fragments(); + frent = pool_get(&pf_frent_pl, PR_NOWAIT); + if (frent == NULL) { + REASON_SET(reason, PFRES_MEMORY); + return (NULL); + } + } + pf_status.fragments++; + + return (frent); +} + +/* + * Calculate the additional holes that were created in the fragment + * queue by inserting this fragment. A fragment in the middle + * creates one more hole by splitting. For each connected side, + * it loses one hole. + * Fragment entry must be in the queue when calling this function. + */ +int +pf_frent_holes(struct pf_frent *frent) +{ + struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next); + struct pf_frent *next = TAILQ_NEXT(frent, fr_next); + int holes = 1; + + if (prev == NULL) { + if (frent->fe_off == 0) + holes--; + } else { + KASSERT(frent->fe_off != 0); + if (frent->fe_off == prev->fe_off + prev->fe_len) + holes--; + } + if (next == NULL) { + if (!frent->fe_mff) + holes--; + } else { + KASSERT(frent->fe_mff); + if (next->fe_off == frent->fe_off + frent->fe_len) + holes--; + } + return holes; +} + +static inline int +pf_frent_index(struct pf_frent *frent) +{ + /* + * We have an array of 16 entry points to the queue. A full size + * 65535 octet IP packet can have 8192 fragments. So the queue + * traversal length is at most 512 and at most 16 entry points are + * checked. We need 128 additional bytes on a 64 bit architecture. + */ + CTASSERT(((u_int16_t)0xffff &~ 7) / (0x10000 / PF_FRAG_ENTRY_POINTS) == + 16 - 1); + CTASSERT(((u_int16_t)0xffff >> 3) / PF_FRAG_ENTRY_POINTS == 512 - 1); + + return frent->fe_off / (0x10000 / PF_FRAG_ENTRY_POINTS); +} + +int +pf_frent_insert(struct pf_fragment *frag, struct pf_frent *frent, + struct pf_frent *prev) +{ + CTASSERT(PF_FRAG_ENTRY_LIMIT <= 0xff); + int index; + + /* + * A packet has at most 65536 octets. With 16 entry points, each one + * spawns 4096 octets. We limit these to 64 fragments each, which + * means on average every fragment must have at least 64 octets. + */ + index = pf_frent_index(frent); + if (frag->fr_entries[index] >= PF_FRAG_ENTRY_LIMIT) + return ENOBUFS; + frag->fr_entries[index]++; + + if (prev == NULL) { + TAILQ_INSERT_HEAD(&frag->fr_queue, frent, fr_next); + } else { + KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off); + TAILQ_INSERT_AFTER(&frag->fr_queue, prev, frent, fr_next); + } + pf_status.ncounters[NCNT_FRAG_INSERT]++; + + if (frag->fr_firstoff[index] == NULL) { + KASSERT(prev == NULL || pf_frent_index(prev) < index); + frag->fr_firstoff[index] = frent; + } else { + if (frent->fe_off < frag->fr_firstoff[index]->fe_off) { + KASSERT(prev == NULL || pf_frent_index(prev) < index); + frag->fr_firstoff[index] = frent; + } else { + KASSERT(prev != NULL); + KASSERT(pf_frent_index(prev) == index); + } + } + + frag->fr_holes += pf_frent_holes(frent); + + return 0; +} + +void +pf_frent_remove(struct pf_fragment *frag, struct pf_frent *frent) +{ +#ifdef DIAGNOSTIC + struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next); +#endif + struct pf_frent *next = TAILQ_NEXT(frent, fr_next); + int index; + + frag->fr_holes -= pf_frent_holes(frent); + + index = pf_frent_index(frent); + KASSERT(frag->fr_firstoff[index] != NULL); + if (frag->fr_firstoff[index]->fe_off == frent->fe_off) { + if (next == NULL) { + frag->fr_firstoff[index] = NULL; + } else { + KASSERT(frent->fe_off + frent->fe_len <= next->fe_off); + if (pf_frent_index(next) == index) { + frag->fr_firstoff[index] = next; + } else { + frag->fr_firstoff[index] = NULL; + } + } + } else { + KASSERT(frag->fr_firstoff[index]->fe_off < frent->fe_off); + KASSERT(prev != NULL); + KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off); + KASSERT(pf_frent_index(prev) == index); + } + + TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); + pf_status.ncounters[NCNT_FRAG_REMOVALS]++; + + KASSERT(frag->fr_entries[index] > 0); + frag->fr_entries[index]--; +} + +struct pf_frent * +pf_frent_previous(struct pf_fragment *frag, struct pf_frent *frent) +{ + struct pf_frent *prev, *next; + int index; + + /* + * If there are no fragments after frag, take the final one. Assume + * that the global queue is not empty. + */ + prev = TAILQ_LAST(&frag->fr_queue, pf_fragq); + KASSERT(prev != NULL); + if (prev->fe_off <= frent->fe_off) + return prev; + /* + * We want to find a fragment entry that is before frag, but still + * close to it. Find the first fragment entry that is in the same + * entry point or in the first entry point after that. As we have + * already checked that there are entries behind frag, this will + * succeed. + */ + for (index = pf_frent_index(frent); index < PF_FRAG_ENTRY_POINTS; + index++) { + prev = frag->fr_firstoff[index]; + if (prev != NULL) + break; + } + KASSERT(prev != NULL); + /* + * In prev we may have a fragment from the same entry point that is + * before frent, or one that is just one position behind frent. + * In the latter case, we go back one step and have the predecessor. + * There may be none if the new fragment will be the first one. + */ + if (prev->fe_off > frent->fe_off) { + prev = TAILQ_PREV(prev, pf_fragq, fr_next); + if (prev == NULL) + return NULL; + KASSERT(prev->fe_off <= frent->fe_off); + return prev; + } + /* + * In prev is the first fragment of the entry point. The offset + * of frag is behind it. Find the closest previous fragment. + */ + for (next = TAILQ_NEXT(prev, fr_next); next != NULL; + next = TAILQ_NEXT(next, fr_next)) { + if (next->fe_off > frent->fe_off) + break; + prev = next; + } + return prev; +} + +struct pf_fragment * +pf_fillup_fragment(struct pf_frnode *key, u_int32_t id, + struct pf_frent *frent, u_short *reason) +{ + struct pf_frent *after, *next, *prev; + struct pf_fragment *frag; + struct pf_frnode *frnode; + u_int16_t total; + + /* No empty fragments */ + if (frent->fe_len == 0) { + DPFPRINTF(LOG_NOTICE, "bad fragment: len 0"); + goto bad_fragment; + } + + /* All fragments are 8 byte aligned */ + if (frent->fe_mff && (frent->fe_len & 0x7)) { + DPFPRINTF(LOG_NOTICE, "bad fragment: mff and len %d", + frent->fe_len); + goto bad_fragment; + } + + /* Respect maximum length, IP_MAXPACKET == IPV6_MAXPACKET */ + if (frent->fe_off + frent->fe_len > IP_MAXPACKET) { + DPFPRINTF(LOG_NOTICE, "bad fragment: max packet %d", + frent->fe_off + frent->fe_len); + goto bad_fragment; + } + + DPFPRINTF(LOG_INFO, key->fn_af == AF_INET ? + "reass frag %d @ %d-%d" : "reass frag %#08x @ %d-%d", + id, frent->fe_off, frent->fe_off + frent->fe_len); + + /* Fully buffer all of the fragments in this fragment queue */ + frag = pf_find_fragment(key, id); + + /* Create a new reassembly queue for this packet */ + if (frag == NULL) { + frag = pool_get(&pf_frag_pl, PR_NOWAIT); + if (frag == NULL) { + pf_flush_fragments(); + frag = pool_get(&pf_frag_pl, PR_NOWAIT); + if (frag == NULL) { + REASON_SET(reason, PFRES_MEMORY); + goto drop_fragment; + } + } + frnode = RB_FIND(pf_frnode_tree, &pf_frnode_tree, key); + if (frnode == NULL) { + frnode = pool_get(&pf_frnode_pl, PR_NOWAIT); + if (frnode == NULL) { + pf_flush_fragments(); + frnode = pool_get(&pf_frnode_pl, PR_NOWAIT); + if (frnode == NULL) { + REASON_SET(reason, PFRES_MEMORY); + pool_put(&pf_frag_pl, frag); + goto drop_fragment; + } + } + *frnode = *key; + RB_INIT(&frnode->fn_tree); + frnode->fn_fragments = 0; + frnode->fn_gen = 0; + } + memset(frag->fr_firstoff, 0, sizeof(frag->fr_firstoff)); + memset(frag->fr_entries, 0, sizeof(frag->fr_entries)); + TAILQ_INIT(&frag->fr_queue); + frag->fr_id = id; + frag->fr_timeout = getuptime(); + frag->fr_gen = frnode->fn_gen++; + frag->fr_maxlen = frent->fe_len; + frag->fr_holes = 1; + frag->fr_node = frnode; + /* RB_INSERT cannot fail as pf_find_fragment() found nothing */ + RB_INSERT(pf_frag_tree, &frnode->fn_tree, frag); + frnode->fn_fragments++; + if (frnode->fn_fragments == 1) + RB_INSERT(pf_frnode_tree, &pf_frnode_tree, frnode); + TAILQ_INSERT_HEAD(&pf_fragqueue, frag, frag_next); + + /* We do not have a previous fragment, cannot fail. */ + pf_frent_insert(frag, frent, NULL); + + return (frag); + } + + KASSERT(!TAILQ_EMPTY(&frag->fr_queue)); + KASSERT(frag->fr_node); + + /* Remember maximum fragment len for refragmentation */ + if (frent->fe_len > frag->fr_maxlen) + frag->fr_maxlen = frent->fe_len; + + /* Maximum data we have seen already */ + total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off + + TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len; + + /* Non terminal fragments must have more fragments flag */ + if (frent->fe_off + frent->fe_len < total && !frent->fe_mff) + goto free_ipv6_fragment; + + /* Check if we saw the last fragment already */ + if (!TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_mff) { + if (frent->fe_off + frent->fe_len > total || + (frent->fe_off + frent->fe_len == total && frent->fe_mff)) + goto free_ipv6_fragment; + } else { + if (frent->fe_off + frent->fe_len == total && !frent->fe_mff) + goto free_ipv6_fragment; + } + + /* Find neighbors for newly inserted fragment */ + prev = pf_frent_previous(frag, frent); + if (prev == NULL) { + after = TAILQ_FIRST(&frag->fr_queue); + KASSERT(after != NULL); + } else { + after = TAILQ_NEXT(prev, fr_next); + } + + if (prev != NULL && prev->fe_off + prev->fe_len > frent->fe_off) { + u_int16_t precut; + +#ifdef INET6 + if (frag->fr_node->fn_af == AF_INET6) + goto free_ipv6_fragment; +#endif /* INET6 */ + + precut = prev->fe_off + prev->fe_len - frent->fe_off; + if (precut >= frent->fe_len) { + DPFPRINTF(LOG_NOTICE, "new frag overlapped"); + goto drop_fragment; + } + DPFPRINTF(LOG_NOTICE, "frag head overlap %d", precut); + m_adj(frent->fe_m, precut); + frent->fe_off += precut; + frent->fe_len -= precut; + } + + for (; after != NULL && frent->fe_off + frent->fe_len > after->fe_off; + after = next) { + u_int16_t aftercut; + +#ifdef INET6 + if (frag->fr_node->fn_af == AF_INET6) + goto free_ipv6_fragment; +#endif /* INET6 */ + + aftercut = frent->fe_off + frent->fe_len - after->fe_off; + if (aftercut < after->fe_len) { + DPFPRINTF(LOG_NOTICE, "frag tail overlap %d", aftercut); + m_adj(after->fe_m, aftercut); + /* Fragment may switch queue as fe_off changes */ + pf_frent_remove(frag, after); + after->fe_off += aftercut; + after->fe_len -= aftercut; + /* Insert into correct queue */ + if (pf_frent_insert(frag, after, prev)) { + DPFPRINTF(LOG_WARNING, + "fragment requeue limit exceeded"); + m_freem(after->fe_m); + pool_put(&pf_frent_pl, after); + pf_status.fragments--; + /* There is not way to recover */ + goto free_fragment; + } + break; + } + + /* This fragment is completely overlapped, lose it */ + DPFPRINTF(LOG_NOTICE, "old frag overlapped"); + next = TAILQ_NEXT(after, fr_next); + pf_frent_remove(frag, after); + m_freem(after->fe_m); + pool_put(&pf_frent_pl, after); + pf_status.fragments--; + } + + /* If part of the queue gets too long, there is not way to recover. */ + if (pf_frent_insert(frag, frent, prev)) { + DPFPRINTF(LOG_WARNING, "fragment queue limit exceeded"); + goto free_fragment; + } + + return (frag); + +free_ipv6_fragment: + if (frag->fr_node->fn_af == AF_INET) + goto bad_fragment; + /* + * RFC 5722, Errata 3089: When reassembling an IPv6 datagram, if one + * or more its constituent fragments is determined to be an overlapping + * fragment, the entire datagram (and any constituent fragments) MUST + * be silently discarded. + */ + DPFPRINTF(LOG_NOTICE, "flush overlapping fragments"); +free_fragment: + pf_free_fragment(frag); +bad_fragment: + REASON_SET(reason, PFRES_FRAG); +drop_fragment: + pool_put(&pf_frent_pl, frent); + pf_status.fragments--; + return (NULL); +} + +struct mbuf * +pf_join_fragment(struct pf_fragment *frag) +{ + struct mbuf *m, *m2; + struct pf_frent *frent; + + frent = TAILQ_FIRST(&frag->fr_queue); + TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); + pf_status.ncounters[NCNT_FRAG_REMOVALS]++; + + m = frent->fe_m; + /* Strip off any trailing bytes */ + if ((frent->fe_hdrlen + frent->fe_len) < m->m_pkthdr.len) + m_adj(m, (frent->fe_hdrlen + frent->fe_len) - m->m_pkthdr.len); + /* Magic from ip_input */ + m2 = m->m_next; + m->m_next = NULL; + m_cat(m, m2); + pool_put(&pf_frent_pl, frent); + pf_status.fragments--; + + while ((frent = TAILQ_FIRST(&frag->fr_queue)) != NULL) { + TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); + pf_status.ncounters[NCNT_FRAG_REMOVALS]++; + m2 = frent->fe_m; + /* Strip off ip header */ + m_adj(m2, frent->fe_hdrlen); + /* Strip off any trailing bytes */ + if (frent->fe_len < m2->m_pkthdr.len) + m_adj(m2, frent->fe_len - m2->m_pkthdr.len); + pool_put(&pf_frent_pl, frent); + pf_status.fragments--; + m_removehdr(m2); + m_cat(m, m2); + } + + /* Remove from fragment queue */ + pf_free_fragment(frag); + + return (m); +} + +int +pf_reassemble(struct mbuf **m0, int dir, u_int16_t rdomain, u_short *reason) +{ + struct mbuf *m = *m0; + struct pf_ip *ip = mtod(m, struct pf_ip *); + struct pf_frent *frent; + struct pf_fragment *frag; + struct pf_frnode key; + u_int16_t total, hdrlen; + + /* Get an entry for the fragment queue */ + if ((frent = pf_create_fragment(reason)) == NULL) + return (PF_DROP); + + frent->fe_m = m; + frent->fe_hdrlen = ip->ip_hl << 2; + frent->fe_extoff = 0; + frent->fe_len = ntohs(ip->ip_len) - (ip->ip_hl << 2); + frent->fe_off = (ntohs(ip->ip_off) & IP_OFFMASK) << 3; + frent->fe_mff = ntohs(ip->ip_off) & IP_MF; + + key.fn_src.v4 = ip->ip_src; + key.fn_dst.v4 = ip->ip_dst; + key.fn_af = AF_INET; + key.fn_proto = ip->ip_p; + key.fn_direction = dir; + key.fn_rdomain = rdomain; + + if ((frag = pf_fillup_fragment(&key, ip->ip_id, frent, reason)) + == NULL) + return (PF_DROP); + + /* The mbuf is part of the fragment entry, no direct free or access */ + m = *m0 = NULL; + + if (frag->fr_holes) { + DPFPRINTF(LOG_DEBUG, "frag %d, holes %d", + frag->fr_id, frag->fr_holes); + return (PF_PASS); /* drop because *m0 is NULL, no error */ + } + + /* We have all the data */ + frent = TAILQ_FIRST(&frag->fr_queue); + KASSERT(frent != NULL); + total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off + + TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len; + hdrlen = frent->fe_hdrlen; + m = *m0 = pf_join_fragment(frag); + frag = NULL; + m_calchdrlen(m); + + ip = mtod(m, struct pf_ip *); + ip->ip_len = htons(hdrlen + total); + ip->ip_off &= ~(IP_MF|IP_OFFMASK); + + if (hdrlen + total > IP_MAXPACKET) { + DPFPRINTF(LOG_NOTICE, "drop: too big: %d", total); + ip->ip_len = 0; + REASON_SET(reason, PFRES_SHORT); + /* PF_DROP requires a valid mbuf *m0 in pf_test() */ + return (PF_DROP); + } + + DPFPRINTF(LOG_INFO, "complete: %p(%d)", m, ntohs(ip->ip_len)); + return (PF_PASS); +} + +#ifdef INET6 +int +pf_reassemble6(struct mbuf **m0, struct ip6_frag *fraghdr, u_int16_t hdrlen, + u_int16_t extoff, int dir, u_int16_t rdomain, u_short *reason) +{ + struct mbuf *m = *m0; + struct pf_ip6_hdr *ip6 = mtod(m, struct pf_ip6_hdr *); + struct m_tag *mtag; + struct pf_fragment_tag *ftag; + struct pf_frent *frent; + struct pf_fragment *frag; + struct pf_frnode key; + int off; + u_int16_t total, maxlen; + u_int8_t proto; + + /* Get an entry for the fragment queue */ + if ((frent = pf_create_fragment(reason)) == NULL) + return (PF_DROP); + + frent->fe_m = m; + frent->fe_hdrlen = hdrlen; + frent->fe_extoff = extoff; + frent->fe_len = sizeof(struct pf_ip6_hdr) + ntohs(ip6->ip6_plen) - hdrlen; + frent->fe_off = ntohs(fraghdr->ip6f_offlg & IP6F_OFF_MASK); + frent->fe_mff = fraghdr->ip6f_offlg & IP6F_MORE_FRAG; + + key.fn_src.v6 = ip6->ip6_src; + key.fn_dst.v6 = ip6->ip6_dst; + key.fn_af = AF_INET6; + /* Only the first fragment's protocol is relevant */ + key.fn_proto = 0; + key.fn_direction = dir; + key.fn_rdomain = rdomain; + + if ((frag = pf_fillup_fragment(&key, fraghdr->ip6f_ident, frent, + reason)) == NULL) + return (PF_DROP); + + /* The mbuf is part of the fragment entry, no direct free or access */ + m = *m0 = NULL; + + if (frag->fr_holes) { + DPFPRINTF(LOG_DEBUG, "frag %#08x, holes %d", + frag->fr_id, frag->fr_holes); + return (PF_PASS); /* drop because *m0 is NULL, no error */ + } + + /* We have all the data */ + frent = TAILQ_FIRST(&frag->fr_queue); + KASSERT(frent != NULL); + extoff = frent->fe_extoff; + maxlen = frag->fr_maxlen; + total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off + + TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len; + hdrlen = frent->fe_hdrlen - sizeof(struct ip6_frag); + m = *m0 = pf_join_fragment(frag); + frag = NULL; + + /* Take protocol from first fragment header */ + if ((m = m_getptr(m, hdrlen + offsetof(struct ip6_frag, ip6f_nxt), + &off)) == NULL) + panic("%s: short frag mbuf chain", __func__); + proto = *(mtod(m, caddr_t) + off); + m = *m0; + + /* Delete frag6 header */ + if (frag6_deletefraghdr(m, hdrlen) != 0) + goto fail; + + m_calchdrlen(m); + + if ((mtag = m_tag_get(PACKET_TAG_PF_REASSEMBLED, sizeof(struct + pf_fragment_tag), M_NOWAIT)) == NULL) + goto fail; + ftag = (struct pf_fragment_tag *)(mtag + 1); + ftag->ft_hdrlen = hdrlen; + ftag->ft_extoff = extoff; + ftag->ft_maxlen = maxlen; + m_tag_prepend(m, mtag); + + ip6 = mtod(m, struct pf_ip6_hdr *); + ip6->ip6_plen = htons(hdrlen - sizeof(struct pf_ip6_hdr) + total); + if (extoff) { + /* Write protocol into next field of last extension header */ + if ((m = m_getptr(m, extoff + offsetof(struct ip6_ext, + ip6e_nxt), &off)) == NULL) + panic("%s: short ext mbuf chain", __func__); + *(mtod(m, caddr_t) + off) = proto; + m = *m0; + } else + ip6->ip6_nxt = proto; + + if (hdrlen - sizeof(struct pf_ip6_hdr) + total > IPV6_MAXPACKET) { + DPFPRINTF(LOG_NOTICE, "drop: too big: %d", total); + ip6->ip6_plen = 0; + REASON_SET(reason, PFRES_SHORT); + /* PF_DROP requires a valid mbuf *m0 in pf_test6() */ + return (PF_DROP); + } + + DPFPRINTF(LOG_INFO, "complete: %p(%d)", m, ntohs(ip6->ip6_plen)); + return (PF_PASS); + +fail: + REASON_SET(reason, PFRES_MEMORY); + /* PF_DROP requires a valid mbuf *m0 in pf_test6(), will free later */ + return (PF_DROP); +} + +int +pf_refragment6(struct mbuf **m0, struct m_tag *mtag, struct sockaddr_in6 *dst, + struct ifnet *ifp, struct rtentry *rt) +{ + struct mbuf *m = *m0; + struct mbuf_list ml; + struct pf_fragment_tag *ftag = (struct pf_fragment_tag *)(mtag + 1); + u_int32_t mtu; + u_int16_t hdrlen, extoff, maxlen; + u_int8_t proto; + int error; + + hdrlen = ftag->ft_hdrlen; + extoff = ftag->ft_extoff; + maxlen = ftag->ft_maxlen; + m_tag_delete(m, mtag); + mtag = NULL; + ftag = NULL; + + /* Checksum must be calculated for the whole packet */ + in6_proto_cksum_out(m, NULL); + + if (extoff) { + int off; + + /* Use protocol from next field of last extension header */ + if ((m = m_getptr(m, extoff + offsetof(struct ip6_ext, + ip6e_nxt), &off)) == NULL) + panic("%s: short ext mbuf chain", __func__); + proto = *(mtod(m, caddr_t) + off); + *(mtod(m, caddr_t) + off) = IPPROTO_FRAGMENT; + m = *m0; + } else { + struct pf_ip6_hdr *hdr; + + hdr = mtod(m, struct pf_ip6_hdr *); + proto = hdr->ip6_nxt; + hdr->ip6_nxt = IPPROTO_FRAGMENT; + } + + /* + * Maxlen may be less than 8 iff there was only a single + * fragment. As it was fragmented before, add a fragment + * header also for a single fragment. If total or maxlen + * is less than 8, ip6_fragment() will return EMSGSIZE and + * we drop the packet. + */ + mtu = hdrlen + sizeof(struct ip6_frag) + maxlen; + error = ip6_fragment(m, &ml, hdrlen, proto, mtu); + *m0 = NULL; /* ip6_fragment() has consumed original packet. */ + if (error) { + DPFPRINTF(LOG_NOTICE, "refragment error %d", error); + return (PF_DROP); + } + + while ((m = ml_dequeue(&ml)) != NULL) { + m->m_pkthdr.pf.flags |= PF_TAG_REFRAGMENTED; + if (ifp == NULL) { + int flags = 0; + + switch (atomic_load_int(&ip6_forwarding)) { + case 2: + SET(flags, IPV6_FORWARDING_IPSEC); + /* FALLTHROUGH */ + case 1: + SET(flags, IPV6_FORWARDING); + break; + default: + ip6stat_inc(ip6s_cantforward); + return (PF_DROP); + } + ip6_forward(m, NULL, flags); + } else if ((u_long)m->m_pkthdr.len <= ifp->if_mtu) { + ifp->if_output(ifp, m, sin6tosa(dst), rt); + } else { + icmp6_error(m, ICMP6_PACKET_TOO_BIG, 0, ifp->if_mtu); + } + } + + return (PF_PASS); +} +#endif /* INET6 */ + +int +pf_normalize_ip(struct pf_pdesc *pd, u_short *reason) +{ + struct pf_ip *h = mtod(pd->m, struct pf_ip *); + u_int16_t fragoff = (ntohs(h->ip_off) & IP_OFFMASK) << 3; + u_int16_t mff = (ntohs(h->ip_off) & IP_MF); + + if (!fragoff && !mff) + goto no_fragment; + + /* Clear IP_DF if we're in no-df mode */ + if (pf_status.reass & PF_REASS_NODF && h->ip_off & htons(IP_DF)) + h->ip_off &= htons(~IP_DF); + + /* We're dealing with a fragment now. Don't allow fragments + * with IP_DF to enter the cache. If the flag was cleared by + * no-df above, fine. Otherwise drop it. + */ + if (h->ip_off & htons(IP_DF)) { + DPFPRINTF(LOG_NOTICE, "bad fragment: IP_DF"); + REASON_SET(reason, PFRES_FRAG); + return (PF_DROP); + } + + if (!pf_status.reass) + return (PF_PASS); /* no reassembly */ + + /* Returns PF_DROP or m is NULL or completely reassembled mbuf */ + PF_FRAG_LOCK(); + if (pf_reassemble(&pd->m, pd->dir, pd->rdomain, reason) != PF_PASS) { + PF_FRAG_UNLOCK(); + return (PF_DROP); + } + PF_FRAG_UNLOCK(); + if (pd->m == NULL) + return (PF_PASS); /* packet has been reassembled, no error */ + + h = mtod(pd->m, struct pf_ip *); + +no_fragment: + /* At this point, only IP_DF is allowed in ip_off */ + if (h->ip_off & ~htons(IP_DF)) + h->ip_off &= htons(IP_DF); + + return (PF_PASS); +} + +#ifdef INET6 +int +pf_normalize_ip6(struct pf_pdesc *pd, u_short *reason) +{ + struct ip6_frag frag; + + if (pd->fragoff == 0) + goto no_fragment; + + if (!pf_pull_hdr(pd->m, pd->fragoff, &frag, sizeof(frag), reason, + AF_INET6)) + return (PF_DROP); + + if (!pf_status.reass) + return (PF_PASS); /* no reassembly */ + + /* Returns PF_DROP or m is NULL or completely reassembled mbuf */ + PF_FRAG_LOCK(); + if (pf_reassemble6(&pd->m, &frag, pd->fragoff + sizeof(frag), + pd->extoff, pd->dir, pd->rdomain, reason) != PF_PASS) { + PF_FRAG_UNLOCK(); + return (PF_DROP); + } + PF_FRAG_UNLOCK(); + if (pd->m == NULL) + return (PF_PASS); /* packet has been reassembled, no error */ + +no_fragment: + return (PF_PASS); +} +#endif /* INET6 */ + +struct pf_state_scrub * +pf_state_scrub_get(void) +{ + return (pool_get(&pf_state_scrub_pl, PR_NOWAIT | PR_ZERO)); +} + +void +pf_state_scrub_put(struct pf_state_scrub *scrub) +{ + pool_put(&pf_state_scrub_pl, scrub); +} + +int +pf_normalize_tcp_alloc(struct pf_state_peer *src) +{ + src->scrub = pf_state_scrub_get(); + if (src->scrub == NULL) + return (ENOMEM); + + return (0); +} + +int +pf_normalize_tcp(struct pf_pdesc *pd) +{ + struct pf_tcphdr *th = &pd->hdr.tcp; + u_short reason; + u_int8_t flags; + u_int rewrite = 0; + + flags = th->th_flags; + if (flags & TH_SYN) { + /* Illegal packet */ + if (flags & TH_RST) + goto tcp_drop; + + if (flags & TH_FIN) /* XXX why clear instead of drop? */ + flags &= ~TH_FIN; + } else { + /* Illegal packet */ + if (!(flags & (TH_ACK|TH_RST))) + goto tcp_drop; + } + + if (!(flags & TH_ACK)) { + /* These flags are only valid if ACK is set */ + if (flags & (TH_FIN|TH_PUSH|TH_URG)) + goto tcp_drop; + } + + /* If flags changed, or reserved data set, then adjust */ + if (flags != th->th_flags || th->th_x2 != 0) { + /* hack: set 4-bit th_x2 = 0 */ + u_int8_t *th_off = (u_int8_t*)(&th->th_ack+1); + pf_patch_8(pd, th_off, th->th_off << 4, PF_HI); + + pf_patch_8(pd, &th->th_flags, flags, PF_LO); + rewrite = 1; + } + + /* Remove urgent pointer, if TH_URG is not set */ + if (!(flags & TH_URG) && th->th_urp) { + pf_patch_16(pd, &th->th_urp, 0); + rewrite = 1; + } + + /* copy back packet headers if we sanitized */ + if (rewrite) { + m_copyback(pd->m, pd->off, sizeof(*th), th, M_NOWAIT); + } + + return (PF_PASS); + +tcp_drop: + REASON_SET(&reason, PFRES_NORM); + return (PF_DROP); +} + +int +pf_normalize_tcp_init(struct pf_pdesc *pd, struct pf_state_peer *src) +{ + struct pf_tcphdr *th = &pd->hdr.tcp; + u_int32_t tsval, tsecr; + int olen; + u_int8_t opts[MAX_TCPOPTLEN], *opt; + + + KASSERT(src->scrub == NULL); + + if (pf_normalize_tcp_alloc(src) != 0) + return (1); + + switch (pd->af) { + case AF_INET: { + struct pf_ip *h = mtod(pd->m, struct pf_ip *); + src->scrub->pfss_ttl = h->ip_ttl; + break; + } +#ifdef INET6 + case AF_INET6: { + struct pf_ip6_hdr *h = mtod(pd->m, struct pf_ip6_hdr *); + src->scrub->pfss_ttl = h->ip6_hlim; + break; + } +#endif /* INET6 */ + default: + unhandled_af(pd->af); + } + + /* + * All normalizations below are only begun if we see the start of + * the connections. They must all set an enabled bit in pfss_flags + */ + if ((th->th_flags & TH_SYN) == 0) + return (0); + + olen = (th->th_off << 2) - sizeof(*th); + if (olen < TCPOLEN_TIMESTAMP || !pf_pull_hdr(pd->m, + pd->off + sizeof(*th), opts, olen, NULL, pd->af)) + return (0); + + opt = opts; + while ((opt = pf_find_tcpopt(opt, opts, olen, + TCPOPT_TIMESTAMP, TCPOLEN_TIMESTAMP)) != NULL) { + + src->scrub->pfss_flags |= PFSS_TIMESTAMP; + src->scrub->pfss_ts_mod = arc4random(); + /* note PFSS_PAWS not set yet */ + memcpy(&tsval, &opt[2], sizeof(u_int32_t)); + memcpy(&tsecr, &opt[6], sizeof(u_int32_t)); + src->scrub->pfss_tsval0 = ntohl(tsval); + src->scrub->pfss_tsval = ntohl(tsval); + src->scrub->pfss_tsecr = ntohl(tsecr); + getmicrouptime(&src->scrub->pfss_last); + + opt += opt[1]; + } + + return (0); +} + +void +pf_normalize_tcp_cleanup(struct pf_state *state) +{ + if (state->src.scrub) + pool_put(&pf_state_scrub_pl, state->src.scrub); + if (state->dst.scrub) + pool_put(&pf_state_scrub_pl, state->dst.scrub); + + /* Someday... flush the TCP segment reassembly descriptors. */ +} + +int +pf_normalize_tcp_stateful(struct pf_pdesc *pd, u_short *reason, + struct pf_state *state, struct pf_state_peer *src, + struct pf_state_peer *dst, int *writeback) +{ + struct pf_tcphdr *th = &pd->hdr.tcp; + struct timeval uptime; + u_int tsval_from_last; + u_int32_t tsval, tsecr; + int copyback = 0; + int got_ts = 0; + int olen; + u_int8_t opts[MAX_TCPOPTLEN], *opt; + + KASSERT(src->scrub || dst->scrub); + + /* + * Enforce the minimum TTL seen for this connection. Negate a common + * technique to evade an intrusion detection system and confuse + * firewall state code. + */ + switch (pd->af) { + case AF_INET: + if (src->scrub) { + struct pf_ip *h = mtod(pd->m, struct pf_ip *); + if (h->ip_ttl > src->scrub->pfss_ttl) + src->scrub->pfss_ttl = h->ip_ttl; + h->ip_ttl = src->scrub->pfss_ttl; + } + break; +#ifdef INET6 + case AF_INET6: + if (src->scrub) { + struct pf_ip6_hdr *h = mtod(pd->m, struct pf_ip6_hdr *); + if (h->ip6_hlim > src->scrub->pfss_ttl) + src->scrub->pfss_ttl = h->ip6_hlim; + h->ip6_hlim = src->scrub->pfss_ttl; + } + break; +#endif /* INET6 */ + default: + unhandled_af(pd->af); + } + + olen = (th->th_off << 2) - sizeof(*th); + + if (olen >= TCPOLEN_TIMESTAMP && + ((src->scrub && (src->scrub->pfss_flags & PFSS_TIMESTAMP)) || + (dst->scrub && (dst->scrub->pfss_flags & PFSS_TIMESTAMP))) && + pf_pull_hdr(pd->m, pd->off + sizeof(*th), opts, olen, NULL, + pd->af)) { + + /* Modulate the timestamps. Can be used for NAT detection, OS + * uptime determination or reboot detection. + */ + opt = opts; + while ((opt = pf_find_tcpopt(opt, opts, olen, + TCPOPT_TIMESTAMP, TCPOLEN_TIMESTAMP)) != NULL) { + + u_int8_t *ts = opt + 2; + u_int8_t *tsr = opt + 6; + + if (got_ts) { + /* Huh? Multiple timestamps!? */ + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: %s: multiple TS??", __func__); + pf_print_state(state); + addlog("\n"); + } + REASON_SET(reason, PFRES_TS); + return (PF_DROP); + } + + memcpy(&tsval, ts, sizeof(u_int32_t)); + memcpy(&tsecr, tsr, sizeof(u_int32_t)); + + /* modulate TS */ + if (tsval && src->scrub && + (src->scrub->pfss_flags & PFSS_TIMESTAMP)) { + /* tsval used further on */ + tsval = ntohl(tsval); + pf_patch_32_unaligned(pd, + ts, htonl(tsval + src->scrub->pfss_ts_mod), + PF_ALGNMNT(ts - opts)); + copyback = 1; + } + + /* modulate TS reply if any (!0) */ + if (tsecr && dst->scrub && + (dst->scrub->pfss_flags & PFSS_TIMESTAMP)) { + /* tsecr used further on */ + tsecr = ntohl(tsecr) - dst->scrub->pfss_ts_mod; + pf_patch_32_unaligned(pd, + tsr, htonl(tsecr), PF_ALGNMNT(tsr - opts)); + copyback = 1; + } + + got_ts = 1; + opt += opt[1]; + } + + if (copyback) { + /* Copyback the options, caller copies back header */ + *writeback = 1; + m_copyback(pd->m, pd->off + sizeof(*th), olen, opts, M_NOWAIT); + } + } + + + /* + * Must invalidate PAWS checks on connections idle for too long. + * The fastest allowed timestamp clock is 1ms. That turns out to + * be about 24 days before it wraps. XXX Right now our lowerbound + * TS echo check only works for the first 12 days of a connection + * when the TS has exhausted half its 32bit space + */ +#define TS_MAX_IDLE (24*24*60*60) +#define TS_MAX_CONN (12*24*60*60) /* XXX remove when better tsecr check */ + + getmicrouptime(&uptime); + if (src->scrub && (src->scrub->pfss_flags & PFSS_PAWS) && + (uptime.tv_sec - src->scrub->pfss_last.tv_sec > TS_MAX_IDLE || + getuptime() - state->creation > TS_MAX_CONN)) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, "pf: src idled out of PAWS "); + pf_print_state(state); + addlog("\n"); + } + src->scrub->pfss_flags = + (src->scrub->pfss_flags & ~PFSS_PAWS) | PFSS_PAWS_IDLED; + } + if (dst->scrub && (dst->scrub->pfss_flags & PFSS_PAWS) && + uptime.tv_sec - dst->scrub->pfss_last.tv_sec > TS_MAX_IDLE) { + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, "pf: dst idled out of PAWS "); + pf_print_state(state); + addlog("\n"); + } + dst->scrub->pfss_flags = + (dst->scrub->pfss_flags & ~PFSS_PAWS) | PFSS_PAWS_IDLED; + } + + if (got_ts && src->scrub && dst->scrub && + (src->scrub->pfss_flags & PFSS_PAWS) && + (dst->scrub->pfss_flags & PFSS_PAWS)) { + /* Validate that the timestamps are "in-window". + * RFC1323 describes TCP Timestamp options that allow + * measurement of RTT (round trip time) and PAWS + * (protection against wrapped sequence numbers). PAWS + * gives us a set of rules for rejecting packets on + * long fat pipes (packets that were somehow delayed + * in transit longer than the time it took to send the + * full TCP sequence space of 4Gb). We can use these + * rules and infer a few others that will let us treat + * the 32bit timestamp and the 32bit echoed timestamp + * as sequence numbers to prevent a blind attacker from + * inserting packets into a connection. + * + * RFC1323 tells us: + * - The timestamp on this packet must be greater than + * or equal to the last value echoed by the other + * endpoint. The RFC says those will be discarded + * since it is a dup that has already been acked. + * This gives us a lowerbound on the timestamp. + * timestamp >= other last echoed timestamp + * - The timestamp will be less than or equal to + * the last timestamp plus the time between the + * last packet and now. The RFC defines the max + * clock rate as 1ms. We will allow clocks to be + * up to 10% fast and will allow a total difference + * or 30 seconds due to a route change. And this + * gives us an upperbound on the timestamp. + * timestamp <= last timestamp + max ticks + * We have to be careful here. Windows will send an + * initial timestamp of zero and then initialize it + * to a random value after the 3whs; presumably to + * avoid a DoS by having to call an expensive RNG + * during a SYN flood. Proof MS has at least one + * good security geek. + * + * - The TCP timestamp option must also echo the other + * endpoints timestamp. The timestamp echoed is the + * one carried on the earliest unacknowledged segment + * on the left edge of the sequence window. The RFC + * states that the host will reject any echoed + * timestamps that were larger than any ever sent. + * This gives us an upperbound on the TS echo. + * tescr <= largest_tsval + * - The lowerbound on the TS echo is a little more + * tricky to determine. The other endpoint's echoed + * values will not decrease. But there may be + * network conditions that re-order packets and + * cause our view of them to decrease. For now the + * only lowerbound we can safely determine is that + * the TS echo will never be less than the original + * TS. XXX There is probably a better lowerbound. + * Remove TS_MAX_CONN with better lowerbound check. + * tescr >= other original TS + * + * It is also important to note that the fastest + * timestamp clock of 1ms will wrap its 32bit space in + * 24 days. So we just disable TS checking after 24 + * days of idle time. We actually must use a 12d + * connection limit until we can come up with a better + * lowerbound to the TS echo check. + */ + struct timeval delta_ts; + int ts_fudge; + + /* + * PFTM_TS_DIFF is how many seconds of leeway to allow + * a host's timestamp. This can happen if the previous + * packet got delayed in transit for much longer than + * this packet. + */ + if ((ts_fudge = state->rule.ptr->timeout[PFTM_TS_DIFF]) == 0) + ts_fudge = pf_default_rule.timeout[PFTM_TS_DIFF]; + + /* Calculate max ticks since the last timestamp */ +#define TS_MAXFREQ 1100 /* RFC max TS freq of 1Khz + 10% skew */ +#define TS_MICROSECS 1000000 /* microseconds per second */ + timersub(&uptime, &src->scrub->pfss_last, &delta_ts); + tsval_from_last = (delta_ts.tv_sec + ts_fudge) * TS_MAXFREQ; + tsval_from_last += delta_ts.tv_usec / (TS_MICROSECS/TS_MAXFREQ); + + if ((src->state >= TCPS_ESTABLISHED && + dst->state >= TCPS_ESTABLISHED) && + (SEQ_LT(tsval, dst->scrub->pfss_tsecr) || + SEQ_GT(tsval, src->scrub->pfss_tsval + tsval_from_last) || + (tsecr && (SEQ_GT(tsecr, dst->scrub->pfss_tsval) || + SEQ_LT(tsecr, dst->scrub->pfss_tsval0))))) { + /* Bad RFC1323 implementation or an insertion attack. + * + * - Solaris 2.6 and 2.7 are known to send another ACK + * after the FIN,FIN|ACK,ACK closing that carries + * an old timestamp. + */ + + DPFPRINTF(LOG_NOTICE, "Timestamp failed %c%c%c%c", + SEQ_LT(tsval, dst->scrub->pfss_tsecr) ? '0' : ' ', + SEQ_GT(tsval, src->scrub->pfss_tsval + + tsval_from_last) ? '1' : ' ', + SEQ_GT(tsecr, dst->scrub->pfss_tsval) ? '2' : ' ', + SEQ_LT(tsecr, dst->scrub->pfss_tsval0)? '3' : ' '); + DPFPRINTF(LOG_NOTICE, " tsval: %u tsecr: %u " + "+ticks: %u idle: %llu.%06lus", tsval, tsecr, + tsval_from_last, (long long)delta_ts.tv_sec, + delta_ts.tv_usec); + DPFPRINTF(LOG_NOTICE, " src->tsval: %u tsecr: %u", + src->scrub->pfss_tsval, src->scrub->pfss_tsecr); + DPFPRINTF(LOG_NOTICE, " dst->tsval: %u tsecr: %u " + "tsval0: %u", dst->scrub->pfss_tsval, + dst->scrub->pfss_tsecr, dst->scrub->pfss_tsval0); + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, "pf: "); + pf_print_state(state); + pf_print_flags(th->th_flags); + addlog("\n"); + } + REASON_SET(reason, PFRES_TS); + return (PF_DROP); + } + /* XXX I'd really like to require tsecr but it's optional */ + } else if (!got_ts && (th->th_flags & TH_RST) == 0 && + ((src->state == TCPS_ESTABLISHED && dst->state == TCPS_ESTABLISHED) + || pd->p_len > 0 || (th->th_flags & TH_SYN)) && + src->scrub && dst->scrub && + (src->scrub->pfss_flags & PFSS_PAWS) && + (dst->scrub->pfss_flags & PFSS_PAWS)) { + /* Didn't send a timestamp. Timestamps aren't really useful + * when: + * - connection opening or closing (often not even sent). + * but we must not let an attacker to put a FIN on a + * data packet to sneak it through our ESTABLISHED check. + * - on a TCP reset. RFC suggests not even looking at TS. + * - on an empty ACK. The TS will not be echoed so it will + * probably not help keep the RTT calculation in sync and + * there isn't as much danger when the sequence numbers + * got wrapped. So some stacks don't include TS on empty + * ACKs :-( + * + * To minimize the disruption to mostly RFC1323 conformant + * stacks, we will only require timestamps on data packets. + * + * And what do ya know, we cannot require timestamps on data + * packets. There appear to be devices that do legitimate + * TCP connection hijacking. There are HTTP devices that allow + * a 3whs (with timestamps) and then buffer the HTTP request. + * If the intermediate device has the HTTP response cache, it + * will spoof the response but not bother timestamping its + * packets. So we can look for the presence of a timestamp in + * the first data packet and if there, require it in all future + * packets. + */ + + if (pd->p_len > 0 && (src->scrub->pfss_flags & PFSS_DATA_TS)) { + /* + * Hey! Someone tried to sneak a packet in. Or the + * stack changed its RFC1323 behavior?!?! + */ + if (pf_status.debug >= LOG_NOTICE) { + log(LOG_NOTICE, + "pf: did not receive expected RFC1323 " + "timestamp"); + pf_print_state(state); + pf_print_flags(th->th_flags); + addlog("\n"); + } + REASON_SET(reason, PFRES_TS); + return (PF_DROP); + } + } + + /* + * We will note if a host sends his data packets with or without + * timestamps. And require all data packets to contain a timestamp + * if the first does. PAWS implicitly requires that all data packets be + * timestamped. But I think there are middle-man devices that hijack + * TCP streams immediately after the 3whs and don't timestamp their + * packets (seen in a WWW accelerator or cache). + */ + if (pd->p_len > 0 && src->scrub && (src->scrub->pfss_flags & + (PFSS_TIMESTAMP|PFSS_DATA_TS|PFSS_DATA_NOTS)) == PFSS_TIMESTAMP) { + if (got_ts) + src->scrub->pfss_flags |= PFSS_DATA_TS; + else { + src->scrub->pfss_flags |= PFSS_DATA_NOTS; + if (pf_status.debug >= LOG_NOTICE && dst->scrub && + (dst->scrub->pfss_flags & PFSS_TIMESTAMP)) { + /* Don't warn if other host rejected RFC1323 */ + log(LOG_NOTICE, + "pf: broken RFC1323 stack did not " + "timestamp data packet. Disabled PAWS " + "security."); + pf_print_state(state); + pf_print_flags(th->th_flags); + addlog("\n"); + } + } + } + + /* + * Update PAWS values + */ + if (got_ts && src->scrub && PFSS_TIMESTAMP == (src->scrub->pfss_flags & + (PFSS_PAWS_IDLED|PFSS_TIMESTAMP))) { + getmicrouptime(&src->scrub->pfss_last); + if (SEQ_GEQ(tsval, src->scrub->pfss_tsval) || + (src->scrub->pfss_flags & PFSS_PAWS) == 0) + src->scrub->pfss_tsval = tsval; + + if (tsecr) { + if (SEQ_GEQ(tsecr, src->scrub->pfss_tsecr) || + (src->scrub->pfss_flags & PFSS_PAWS) == 0) + src->scrub->pfss_tsecr = tsecr; + + if ((src->scrub->pfss_flags & PFSS_PAWS) == 0 && + (SEQ_LT(tsval, src->scrub->pfss_tsval0) || + src->scrub->pfss_tsval0 == 0)) { + /* tsval0 MUST be the lowest timestamp */ + src->scrub->pfss_tsval0 = tsval; + } + + /* Only fully initialized after a TS gets echoed */ + if ((src->scrub->pfss_flags & PFSS_PAWS) == 0) + src->scrub->pfss_flags |= PFSS_PAWS; + } + } + + /* I have a dream.... TCP segment reassembly.... */ + return (0); +} + +int +pf_normalize_mss(struct pf_pdesc *pd, u_int16_t maxmss) +{ + int olen, optsoff; + u_int8_t opts[MAX_TCPOPTLEN], *opt; + + olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr); + optsoff = pd->off + sizeof(struct pf_tcphdr); + if (olen < TCPOLEN_MAXSEG || + !pf_pull_hdr(pd->m, optsoff, opts, olen, NULL, pd->af)) + return (0); + + opt = opts; + while ((opt = pf_find_tcpopt(opt, opts, olen, + TCPOPT_MAXSEG, TCPOLEN_MAXSEG)) != NULL) { + u_int16_t mss; + u_int8_t *mssp = opt + 2; + memcpy(&mss, mssp, sizeof(mss)); + if (ntohs(mss) > maxmss) { + size_t mssoffopts = mssp - opts; + pf_patch_16_unaligned(pd, &mss, + htons(maxmss), PF_ALGNMNT(mssoffopts)); + m_copyback(pd->m, optsoff + mssoffopts, + sizeof(mss), &mss, M_NOWAIT); + m_copyback(pd->m, pd->off, + sizeof(struct pf_tcphdr), &pd->hdr.tcp, M_NOWAIT); + } + + opt += opt[1]; + } + + return (0); +} + +void +pf_scrub(struct mbuf *m, u_int16_t flags, sa_family_t af, u_int8_t min_ttl, + u_int8_t tos) +{ + struct pf_ip *h = mtod(m, struct pf_ip *); +#ifdef INET6 + struct pf_ip6_hdr *h6 = mtod(m, struct pf_ip6_hdr *); +#endif /* INET6 */ + u_int16_t old; + + /* Clear IP_DF if no-df was requested */ + if (flags & PFSTATE_NODF && af == AF_INET && h->ip_off & htons(IP_DF)) { + old = h->ip_off; + h->ip_off &= htons(~IP_DF); + pf_cksum_fixup(&h->ip_sum, old, h->ip_off, 0); + } + + /* Enforce a minimum ttl, may cause endless packet loops */ + if (min_ttl && af == AF_INET && h->ip_ttl < min_ttl) { + old = h->ip_ttl; + h->ip_ttl = min_ttl; + pf_cksum_fixup(&h->ip_sum, old, h->ip_ttl, 0); + } +#ifdef INET6 + if (min_ttl && af == AF_INET6 && h6->ip6_hlim < min_ttl) + h6->ip6_hlim = min_ttl; +#endif /* INET6 */ + + /* Enforce tos */ + if (flags & PFSTATE_SETTOS) { + if (af == AF_INET) { + /* + * ip_tos is 8 bit field at offset 1. Use 16 bit value + * at offset 0. + */ + old = *(u_int16_t *)h; + h->ip_tos = tos | (h->ip_tos & IPTOS_ECN_MASK); + pf_cksum_fixup(&h->ip_sum, old, *(u_int16_t *)h, 0); + } +#ifdef INET6 + if (af == AF_INET6) { + /* drugs are unable to explain such idiocy */ + h6->ip6_flow &= ~htonl(0x0fc00000); + h6->ip6_flow |= htonl(((u_int32_t)tos) << 20); + } +#endif /* INET6 */ + } + + /* random-id, but not for fragments */ + if (flags & PFSTATE_RANDOMID && af == AF_INET && + !(h->ip_off & ~htons(IP_DF))) { + old = h->ip_id; + h->ip_id = htons(ip_randomid()); + pf_cksum_fixup(&h->ip_sum, old, h->ip_id, 0); + } +} diff --git a/module/pfsrc/pf_osfp.c b/module/pfsrc/pf_osfp.c new file mode 100644 index 0000000..d1ccd5e --- /dev/null +++ b/module/pfsrc/pf_osfp.c @@ -0,0 +1,560 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_osfp.c — see docs/porting-notes.md */ +#include +#endif /* PFDEBUG */ + +#endif /* _KERNEL */ + +/* + * Protection/ownership: + * I immutable after pf_osfp_initialize() + * p pf_lock + */ + +SLIST_HEAD(pf_osfp_list, pf_os_fingerprint) pf_osfp_list = + SLIST_HEAD_INITIALIZER(pf_osfp_list); /* [p] */ +pool_t pf_osfp_entry_pl; /* [I] */ +pool_t pf_osfp_pl; /* [I] */ + +struct pf_os_fingerprint *pf_osfp_find(struct pf_os_fingerprint *, + u_int8_t); +struct pf_os_fingerprint *pf_osfp_find_exact(struct pf_os_fingerprint *); +void pf_osfp_insert(struct pf_os_fingerprint *); + + +#ifdef _KERNEL +/* + * Passively fingerprint the OS of the host (IPv4 TCP SYN packets only) + * Returns the list of possible OSes. + */ +struct pf_osfp_enlist * +pf_osfp_fingerprint(struct pf_pdesc *pd) +{ + struct pf_tcphdr *th = &pd->hdr.tcp; + struct pf_ip *ip = NULL; + struct pf_ip6_hdr *ip6 = NULL; + char hdr[60]; + + if (pd->proto != IPPROTO_TCP) + return (NULL); + + switch (pd->af) { + case AF_INET: + ip = mtod(pd->m, struct pf_ip *); + break; + case AF_INET6: + ip6 = mtod(pd->m, struct pf_ip6_hdr *); + break; + } + if (!pf_pull_hdr(pd->m, pd->off, hdr, th->th_off << 2, NULL, pd->af)) + return (NULL); + + return (pf_osfp_fingerprint_hdr(ip, ip6, (struct pf_tcphdr *)hdr)); +} +#endif /* _KERNEL */ + +struct pf_osfp_enlist * +pf_osfp_fingerprint_hdr(const struct pf_ip *ip, const struct pf_ip6_hdr *ip6, + const struct pf_tcphdr *tcp) +{ + struct pf_os_fingerprint fp, *fpresult; + int cnt, optlen = 0; + const u_int8_t *optp; +#ifdef _KERNEL + char srcname[128]; +#else /* !_KERNEL */ + char srcname[NI_MAXHOST]; +#endif /* _KERNEL */ + + if ((tcp->th_flags & (TH_SYN|TH_ACK)) != TH_SYN) + return (NULL); + if (ip) { + if ((ip->ip_off & htons(IP_OFFMASK)) != 0) + return (NULL); + } + + memset(&fp, 0, sizeof(fp)); + + if (ip) { +#ifndef _KERNEL + struct sockaddr_in sin; +#endif /* _KERNEL */ + + fp.fp_psize = ntohs(ip->ip_len); + fp.fp_ttl = ip->ip_ttl; + if (ip->ip_off & htons(IP_DF)) + fp.fp_flags |= PF_OSFP_DF; +#ifdef _KERNEL + inet_ntop(AF_INET, &ip->ip_src, srcname, sizeof(srcname)); +#else /* !_KERNEL */ + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin./* PFLINUX sin_len */; + sin.sin_addr = ip->ip_src; + (void)getnameinfo((struct sockaddr *)&sin, + sizeof(struct sockaddr_in), srcname, sizeof(srcname), + NULL, 0, NI_NUMERICHOST); +#endif /* _KERNEL */ + } +#ifdef INET6 + else if (ip6) { +#ifndef _KERNEL + struct sockaddr_in6 sin6; +#endif /* !_KERNEL */ + + /* jumbo payload? */ + fp.fp_psize = sizeof(struct pf_ip6_hdr) + ntohs(ip6->ip6_plen); + fp.fp_ttl = ip6->ip6_hlim; + fp.fp_flags |= PF_OSFP_DF; + fp.fp_flags |= PF_OSFP_INET6; +#ifdef _KERNEL + inet_ntop(AF_INET6, &ip6->ip6_src, srcname, sizeof(srcname)); +#else /* !_KERNEL */ + memset(&sin6, 0, sizeof(sin6)); + sin6.sin6_family = AF_INET6; + sin6.sin6_len = sizeof(struct sockaddr_in6); + sin6.sin6_addr = ip6->ip6_src; + (void)getnameinfo((struct sockaddr *)&sin6, + sizeof(struct sockaddr_in6), srcname, sizeof(srcname), + NULL, 0, NI_NUMERICHOST); +#endif /* !_KERNEL */ + } +#endif /* INET6 */ + else + return (NULL); + fp.fp_wsize = ntohs(tcp->th_win); + + + cnt = (tcp->th_off << 2) - sizeof(*tcp); + optp = (const u_int8_t *)((const char *)tcp + sizeof(*tcp)); + for (; cnt > 0; cnt -= optlen, optp += optlen) { + if (*optp == TCPOPT_EOL) + break; + + fp.fp_optcnt++; + if (*optp == TCPOPT_NOP) { + fp.fp_tcpopts = (fp.fp_tcpopts << PF_OSFP_TCPOPT_BITS) | + PF_OSFP_TCPOPT_NOP; + optlen = 1; + } else { + if (cnt < 2) + return (NULL); + optlen = optp[1]; + if (optlen > cnt || optlen < 2) + return (NULL); + switch (*optp) { + case TCPOPT_MAXSEG: + if (optlen >= TCPOLEN_MAXSEG) + memcpy(&fp.fp_mss, &optp[2], + sizeof(fp.fp_mss)); + fp.fp_tcpopts = (fp.fp_tcpopts << + PF_OSFP_TCPOPT_BITS) | PF_OSFP_TCPOPT_MSS; + fp.fp_mss = ntohs(fp.fp_mss); + break; + case TCPOPT_WINDOW: + if (optlen >= TCPOLEN_WINDOW) + memcpy(&fp.fp_wscale, &optp[2], + sizeof(fp.fp_wscale)); + fp.fp_tcpopts = (fp.fp_tcpopts << + PF_OSFP_TCPOPT_BITS) | + PF_OSFP_TCPOPT_WSCALE; + break; + case TCPOPT_SACK_PERMITTED: + fp.fp_tcpopts = (fp.fp_tcpopts << + PF_OSFP_TCPOPT_BITS) | PF_OSFP_TCPOPT_SACK; + break; + case TCPOPT_TIMESTAMP: + if (optlen >= TCPOLEN_TIMESTAMP) { + u_int32_t ts; + memcpy(&ts, &optp[2], sizeof(ts)); + if (ts == 0) + fp.fp_flags |= PF_OSFP_TS0; + + } + fp.fp_tcpopts = (fp.fp_tcpopts << + PF_OSFP_TCPOPT_BITS) | PF_OSFP_TCPOPT_TS; + break; + default: + return (NULL); + } + } + optlen = MAX(optlen, 1); /* paranoia */ + } + + DPFPRINTF(LOG_INFO, + "fingerprinted %s:%d %d:%d:%d:%d:%llx (%d) " + "(TS=%s,M=%s%d,W=%s%d)", + srcname, ntohs(tcp->th_sport), + fp.fp_wsize, fp.fp_ttl, (fp.fp_flags & PF_OSFP_DF) != 0, + fp.fp_psize, (long long int)fp.fp_tcpopts, fp.fp_optcnt, + (fp.fp_flags & PF_OSFP_TS0) ? "0" : "", + (fp.fp_flags & PF_OSFP_MSS_MOD) ? "%" : + (fp.fp_flags & PF_OSFP_MSS_DC) ? "*" : "", + fp.fp_mss, + (fp.fp_flags & PF_OSFP_WSCALE_MOD) ? "%" : + (fp.fp_flags & PF_OSFP_WSCALE_DC) ? "*" : "", + fp.fp_wscale); + + if ((fpresult = pf_osfp_find(&fp, PF_OSFP_MAXTTL_OFFSET))) + return (&fpresult->fp_oses); + return (NULL); +} + +/* Match a fingerprint ID against a list of OSes */ +int +pf_osfp_match(struct pf_osfp_enlist *list, pf_osfp_t os) +{ + struct pf_osfp_entry *entry; + int os_class, os_version, os_subtype; + int en_class, en_version, en_subtype; + + if (os == PF_OSFP_ANY) + return (1); + if (list == NULL) { + DPFPRINTF(LOG_INFO, "osfp no match against %x", os); + return (os == PF_OSFP_UNKNOWN); + } + PF_OSFP_UNPACK(os, os_class, os_version, os_subtype); + SLIST_FOREACH(entry, list, fp_entry) { + PF_OSFP_UNPACK(entry->fp_os, en_class, en_version, en_subtype); + if ((os_class == PF_OSFP_ANY || en_class == os_class) && + (os_version == PF_OSFP_ANY || en_version == os_version) && + (os_subtype == PF_OSFP_ANY || en_subtype == os_subtype)) { + DPFPRINTF(LOG_INFO, + "osfp matched %s %s %s %x==%x", + entry->fp_class_nm, entry->fp_version_nm, + entry->fp_subtype_nm, os, entry->fp_os); + return (1); + } + } + DPFPRINTF(LOG_INFO, "fingerprint 0x%x didn't match", os); + return (0); +} + +/* Initialize the OS fingerprint system */ +void +pf_osfp_initialize(void) +{ + pool_init(&pf_osfp_entry_pl, sizeof(struct pf_osfp_entry), 0, + IPL_NONE, PR_WAITOK, "pfosfpen", NULL); + pool_init(&pf_osfp_pl, sizeof(struct pf_os_fingerprint), 0, + IPL_NONE, PR_WAITOK, "pfosfp", NULL); +} + +/* Flush the fingerprint list */ +void +pf_osfp_flush(void) +{ + struct pf_os_fingerprint *fp; + struct pf_osfp_entry *entry; + + PF_LOCK(); + while ((fp = SLIST_FIRST(&pf_osfp_list))) { + SLIST_REMOVE_HEAD(&pf_osfp_list, fp_next); + while ((entry = SLIST_FIRST(&fp->fp_oses))) { + SLIST_REMOVE_HEAD(&fp->fp_oses, fp_entry); + pool_put(&pf_osfp_entry_pl, entry); + } + pool_put(&pf_osfp_pl, fp); + } + PF_UNLOCK(); +} + + +/* Add a fingerprint */ +int +pf_osfp_add(struct pf_osfp_ioctl *fpioc) +{ + struct pf_os_fingerprint *fp, *fp_prealloc, fpadd; + struct pf_osfp_entry *entry; + + if (strnlen(fpioc->fp_os.fp_class_nm, sizeof(fpioc->fp_os.fp_class_nm)) >= + sizeof(fpioc->fp_os.fp_class_nm)) + return ENAMETOOLONG; + if (strnlen(fpioc->fp_os.fp_version_nm, sizeof(fpioc->fp_os.fp_version_nm)) >= + sizeof(fpioc->fp_os.fp_version_nm)) + return ENAMETOOLONG; + if (strnlen(fpioc->fp_os.fp_subtype_nm, sizeof(fpioc->fp_os.fp_subtype_nm)) >= + sizeof(fpioc->fp_os.fp_subtype_nm)) + return ENAMETOOLONG; + + memset(&fpadd, 0, sizeof(fpadd)); + fpadd.fp_tcpopts = fpioc->fp_tcpopts; + fpadd.fp_wsize = fpioc->fp_wsize; + fpadd.fp_psize = fpioc->fp_psize; + fpadd.fp_mss = fpioc->fp_mss; + fpadd.fp_flags = fpioc->fp_flags; + fpadd.fp_optcnt = fpioc->fp_optcnt; + fpadd.fp_wscale = fpioc->fp_wscale; + fpadd.fp_ttl = fpioc->fp_ttl; + + DPFPRINTF(LOG_DEBUG, + "adding osfp %s %s %s = %s%d:%d:%d:%s%d:0x%llx %d " + "(TS=%s,M=%s%d,W=%s%d) %x", + fpioc->fp_os.fp_class_nm, fpioc->fp_os.fp_version_nm, + fpioc->fp_os.fp_subtype_nm, + (fpadd.fp_flags & PF_OSFP_WSIZE_MOD) ? "%" : + (fpadd.fp_flags & PF_OSFP_WSIZE_MSS) ? "S" : + (fpadd.fp_flags & PF_OSFP_WSIZE_MTU) ? "T" : + (fpadd.fp_flags & PF_OSFP_WSIZE_DC) ? "*" : "", + fpadd.fp_wsize, + fpadd.fp_ttl, + (fpadd.fp_flags & PF_OSFP_DF) ? 1 : 0, + (fpadd.fp_flags & PF_OSFP_PSIZE_MOD) ? "%" : + (fpadd.fp_flags & PF_OSFP_PSIZE_DC) ? "*" : "", + fpadd.fp_psize, + (long long int)fpadd.fp_tcpopts, fpadd.fp_optcnt, + (fpadd.fp_flags & PF_OSFP_TS0) ? "0" : "", + (fpadd.fp_flags & PF_OSFP_MSS_MOD) ? "%" : + (fpadd.fp_flags & PF_OSFP_MSS_DC) ? "*" : "", + fpadd.fp_mss, + (fpadd.fp_flags & PF_OSFP_WSCALE_MOD) ? "%" : + (fpadd.fp_flags & PF_OSFP_WSCALE_DC) ? "*" : "", + fpadd.fp_wscale, + fpioc->fp_os.fp_os); + + entry = pool_get(&pf_osfp_entry_pl, PR_WAITOK|PR_LIMITFAIL); + if (entry == NULL) + return (ENOMEM); + + fp_prealloc = pool_get(&pf_osfp_pl, PR_WAITOK|PR_ZERO|PR_LIMITFAIL); + if (fp_prealloc == NULL) { + pool_put(&pf_osfp_entry_pl, entry); + return (ENOMEM); + } + + PF_LOCK(); + if ((fp = pf_osfp_find_exact(&fpadd))) { + struct pf_osfp_entry *tentry; + + SLIST_FOREACH(tentry, &fp->fp_oses, fp_entry) { + if (PF_OSFP_ENTRY_EQ(tentry, &fpioc->fp_os)) { + PF_UNLOCK(); + pool_put(&pf_osfp_entry_pl, entry); + pool_put(&pf_osfp_pl, fp_prealloc); + return (EEXIST); + } + } + } else { + fp = fp_prealloc; + fp_prealloc = NULL; + fp->fp_tcpopts = fpioc->fp_tcpopts; + fp->fp_wsize = fpioc->fp_wsize; + fp->fp_psize = fpioc->fp_psize; + fp->fp_mss = fpioc->fp_mss; + fp->fp_flags = fpioc->fp_flags; + fp->fp_optcnt = fpioc->fp_optcnt; + fp->fp_wscale = fpioc->fp_wscale; + fp->fp_ttl = fpioc->fp_ttl; + SLIST_INIT(&fp->fp_oses); + pf_osfp_insert(fp); + } + memcpy(entry, &fpioc->fp_os, sizeof(*entry)); + + SLIST_INSERT_HEAD(&fp->fp_oses, entry, fp_entry); + PF_UNLOCK(); + +#ifdef PFDEBUG + if ((fp = pf_osfp_validate())) + DPFPRINTF(LOG_NOTICE, + "Invalid fingerprint list"); +#endif /* PFDEBUG */ + + if (fp_prealloc != NULL) + pool_put(&pf_osfp_pl, fp_prealloc); + + return (0); +} + + +/* Find a fingerprint in the list */ +struct pf_os_fingerprint * +pf_osfp_find(struct pf_os_fingerprint *find, u_int8_t ttldiff) +{ + struct pf_os_fingerprint *f; + + PF_ASSERT_LOCKED(); + +#define MATCH_INT(_MOD, _DC, _field) \ + if ((f->fp_flags & _DC) == 0) { \ + if ((f->fp_flags & _MOD) == 0) { \ + if (f->_field != find->_field) \ + continue; \ + } else { \ + if (f->_field == 0 || find->_field % f->_field) \ + continue; \ + } \ + } + + SLIST_FOREACH(f, &pf_osfp_list, fp_next) { + if (f->fp_tcpopts != find->fp_tcpopts || + f->fp_optcnt != find->fp_optcnt || + f->fp_ttl < find->fp_ttl || + f->fp_ttl - find->fp_ttl > ttldiff || + (f->fp_flags & (PF_OSFP_DF|PF_OSFP_TS0)) != + (find->fp_flags & (PF_OSFP_DF|PF_OSFP_TS0))) + continue; + + MATCH_INT(PF_OSFP_PSIZE_MOD, PF_OSFP_PSIZE_DC, fp_psize) + MATCH_INT(PF_OSFP_MSS_MOD, PF_OSFP_MSS_DC, fp_mss) + MATCH_INT(PF_OSFP_WSCALE_MOD, PF_OSFP_WSCALE_DC, fp_wscale) + if ((f->fp_flags & PF_OSFP_WSIZE_DC) == 0) { + if (f->fp_flags & PF_OSFP_WSIZE_MSS) { + if (find->fp_mss == 0) + continue; + +/* Some "smart" NAT devices and DSL routers will tweak the MSS size and + * will set it to whatever is suitable for the link type. + */ +#define SMART_MSS 1460 + if ((find->fp_wsize % find->fp_mss || + find->fp_wsize / find->fp_mss != + f->fp_wsize) && + (find->fp_wsize % SMART_MSS || + find->fp_wsize / SMART_MSS != + f->fp_wsize)) + continue; + } else if (f->fp_flags & PF_OSFP_WSIZE_MTU) { + if (find->fp_mss == 0) + continue; + +#define MTUOFF (sizeof(struct pf_ip) + sizeof(struct pf_tcphdr)) +#define SMART_MTU (SMART_MSS + MTUOFF) + if ((find->fp_wsize % (find->fp_mss + MTUOFF) || + find->fp_wsize / (find->fp_mss + MTUOFF) != + f->fp_wsize) && + (find->fp_wsize % SMART_MTU || + find->fp_wsize / SMART_MTU != + f->fp_wsize)) + continue; + } else if (f->fp_flags & PF_OSFP_WSIZE_MOD) { + if (f->fp_wsize == 0 || find->fp_wsize % + f->fp_wsize) + continue; + } else { + if (f->fp_wsize != find->fp_wsize) + continue; + } + } + return (f); + } + + return (NULL); +} + +/* Find an exact fingerprint in the list */ +struct pf_os_fingerprint * +pf_osfp_find_exact(struct pf_os_fingerprint *find) +{ + struct pf_os_fingerprint *f; + + PF_ASSERT_LOCKED(); + + SLIST_FOREACH(f, &pf_osfp_list, fp_next) { + if (f->fp_tcpopts == find->fp_tcpopts && + f->fp_wsize == find->fp_wsize && + f->fp_psize == find->fp_psize && + f->fp_mss == find->fp_mss && + f->fp_flags == find->fp_flags && + f->fp_optcnt == find->fp_optcnt && + f->fp_wscale == find->fp_wscale && + f->fp_ttl == find->fp_ttl) + return (f); + } + + return (NULL); +} + +/* Insert a fingerprint into the list */ +void +pf_osfp_insert(struct pf_os_fingerprint *ins) +{ + struct pf_os_fingerprint *f, *prev = NULL; + + PF_ASSERT_LOCKED(); + + /* XXX need to go semi tree based. can key on tcp options */ + + SLIST_FOREACH(f, &pf_osfp_list, fp_next) + prev = f; + if (prev) + SLIST_INSERT_AFTER(prev, ins, fp_next); + else + SLIST_INSERT_HEAD(&pf_osfp_list, ins, fp_next); +} + +/* Fill a fingerprint by its number (from an ioctl) */ +int +pf_osfp_get(struct pf_osfp_ioctl *fpioc) +{ + struct pf_os_fingerprint *fp; + struct pf_osfp_entry *entry; + int num = fpioc->fp_getnum; + int i = 0; + + memset(fpioc, 0, sizeof(*fpioc)); + PF_LOCK(); + SLIST_FOREACH(fp, &pf_osfp_list, fp_next) { + SLIST_FOREACH(entry, &fp->fp_oses, fp_entry) { + if (i++ == num) { + fpioc->fp_mss = fp->fp_mss; + fpioc->fp_wsize = fp->fp_wsize; + fpioc->fp_flags = fp->fp_flags; + fpioc->fp_psize = fp->fp_psize; + fpioc->fp_ttl = fp->fp_ttl; + fpioc->fp_wscale = fp->fp_wscale; + fpioc->fp_getnum = num; + memcpy(&fpioc->fp_os, entry, + sizeof(fpioc->fp_os)); + PF_UNLOCK(); + return (0); + } + } + } + PF_UNLOCK(); + + return (EBUSY); +} + + +/* Validate that each signature is reachable */ +struct pf_os_fingerprint * +pf_osfp_validate(void) +{ + struct pf_os_fingerprint *f, *f2, find; + + PF_ASSERT_LOCKED(); + + SLIST_FOREACH(f, &pf_osfp_list, fp_next) { + memcpy(&find, f, sizeof(find)); + + /* We do a few MSS/th_win percolations to make things unique */ + if (find.fp_mss == 0) + find.fp_mss = 128; + if (f->fp_flags & PF_OSFP_WSIZE_MSS) + find.fp_wsize *= find.fp_mss; + else if (f->fp_flags & PF_OSFP_WSIZE_MTU) + find.fp_wsize *= (find.fp_mss + 40); + else if (f->fp_flags & PF_OSFP_WSIZE_MOD) + find.fp_wsize *= 2; + if (f != (f2 = pf_osfp_find(&find, 0))) { + if (f2) + DPFPRINTF(LOG_NOTICE, + "Found \"%s %s %s\" instead of " + "\"%s %s %s\"\n", + SLIST_FIRST(&f2->fp_oses)->fp_class_nm, + SLIST_FIRST(&f2->fp_oses)->fp_version_nm, + SLIST_FIRST(&f2->fp_oses)->fp_subtype_nm, + SLIST_FIRST(&f->fp_oses)->fp_class_nm, + SLIST_FIRST(&f->fp_oses)->fp_version_nm, + SLIST_FIRST(&f->fp_oses)->fp_subtype_nm); + else + DPFPRINTF(LOG_NOTICE, + "Couldn't find \"%s %s %s\"\n", + SLIST_FIRST(&f->fp_oses)->fp_class_nm, + SLIST_FIRST(&f->fp_oses)->fp_version_nm, + SLIST_FIRST(&f->fp_oses)->fp_subtype_nm); + return (f); + } + } + return (NULL); +} diff --git a/module/pfsrc/pf_ruleset.c b/module/pfsrc/pf_ruleset.c new file mode 100644 index 0000000..64a99ce --- /dev/null +++ b/module/pfsrc/pf_ruleset.c @@ -0,0 +1,380 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_ruleset.c — see docs/porting-notes.md */ +#include +#endif /* PFDEBUG */ +#endif /* _KERNEL */ + + +struct pf_anchor_global pf_anchors; +struct pf_anchor pf_main_anchor; + +static __inline int pf_anchor_compare(struct pf_anchor *, struct pf_anchor *); + +RB_GENERATE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare); +RB_GENERATE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare); + +static __inline int +pf_anchor_compare(struct pf_anchor *a, struct pf_anchor *b) +{ + int c = strcmp(a->path, b->path); + + return (c ? (c < 0 ? -1 : 1) : 0); +} + +void +pf_init_ruleset(struct pf_ruleset *ruleset) +{ + memset(ruleset, 0, sizeof(struct pf_ruleset)); + TAILQ_INIT(&ruleset->rules.queues[0]); + TAILQ_INIT(&ruleset->rules.queues[1]); + ruleset->rules.active.ptr = &ruleset->rules.queues[0]; + ruleset->rules.inactive.ptr = &ruleset->rules.queues[1]; +} + +struct pf_anchor * +pf_find_anchor(const char *path) +{ + struct pf_anchor *key, *found; + + key = rs_malloc(sizeof(*key)); + if (key == NULL) + return (NULL); + strlcpy(key->path, path, sizeof(key->path)); + found = RB_FIND(pf_anchor_global, &pf_anchors, key); + rs_free(key, sizeof(*key)); + return (found); +} + +struct pf_ruleset * +pf_find_ruleset(const char *path) +{ + struct pf_anchor *anchor; + + while (*path == '/') + path++; + if (!*path) + return (&pf_main_ruleset); + anchor = pf_find_anchor(path); + if (anchor == NULL) + return (NULL); + else + return (&anchor->ruleset); +} + +struct pf_ruleset * +pf_get_leaf_ruleset(char *path, char **path_remainder) +{ + struct pf_ruleset *ruleset; + char *leaf, *p; + int i = 0; + + p = path; + while (*p == '/') + p++; + + ruleset = pf_find_ruleset(p); + leaf = p; + while (ruleset == NULL) { + leaf = strrchr(p, '/'); + if (leaf != NULL) { + *leaf = '\0'; + i++; + ruleset = pf_find_ruleset(p); + } else { + leaf = path; + /* + * if no path component exists, then main ruleset is + * our parent. + */ + ruleset = &pf_main_ruleset; + } + } + + if (path_remainder != NULL) + *path_remainder = leaf; + + /* restore slashes in path. */ + while (i != 0) { + while (*leaf != '\0') + leaf++; + *leaf = '/'; + i--; + } + + return (ruleset); +} + +struct pf_anchor * +pf_create_anchor(struct pf_anchor *parent, const char *aname) +{ + struct pf_anchor *anchor, *dup; + + if (!*aname || (strlen(aname) >= PF_ANCHOR_NAME_SIZE) || + ((parent != NULL) && (strlen(parent->path) >= PF_ANCHOR_MAXPATH))) + return (NULL); + + anchor = rs_pool_get_anchor(); + if (anchor == NULL) + return (NULL); + + RB_INIT(&anchor->children); + strlcpy(anchor->name, aname, sizeof(anchor->name)); + if (parent != NULL) { + /* + * Make sure path for levels 2, 3, ... is terminated by '/': + * 1/2/3/... + */ + strlcpy(anchor->path, parent->path, sizeof(anchor->path)); + strlcat(anchor->path, "/", sizeof(anchor->path)); + } + strlcat(anchor->path, anchor->name, sizeof(anchor->path)); + + if ((dup = RB_INSERT(pf_anchor_global, &pf_anchors, anchor)) != NULL) { + DPFPRINTF(LOG_NOTICE, + "%s: RB_INSERT to global '%s' '%s' collides with '%s' '%s'", + __func__, anchor->path, anchor->name, dup->path, dup->name); + rs_pool_put_anchor(anchor); + return (NULL); + } + + if (parent != NULL) { + anchor->parent = parent; + dup = RB_INSERT(pf_anchor_node, &parent->children, anchor); + if (dup != NULL) { + DPFPRINTF(LOG_NOTICE, + "%s: RB_INSERT to parent '%s' '%s' collides with " + "'%s' '%s'", __func__, anchor->path, anchor->name, + dup->path, dup->name); + RB_REMOVE(pf_anchor_global, &pf_anchors, + anchor); + rs_pool_put_anchor(anchor); + return (NULL); + } + } + + pf_init_ruleset(&anchor->ruleset); + anchor->ruleset.anchor = anchor; +#ifdef _KERNEL + refcnt_init(&anchor->ref); +#endif + + return (anchor); +} + +struct pf_ruleset * +pf_find_or_create_ruleset(const char *path) +{ + char *p, *aname, *r; + struct pf_ruleset *ruleset; + struct pf_anchor *anchor; + + if (path[0] == 0) + return (&pf_main_ruleset); + + while (*path == '/') + path++; + + ruleset = pf_find_ruleset(path); + if (ruleset != NULL) + return (ruleset); + + p = rs_malloc(MAXPATHLEN); + if (p == NULL) + return (NULL); + strlcpy(p, path, MAXPATHLEN); + + ruleset = pf_get_leaf_ruleset(p, &aname); + anchor = ruleset->anchor; + + while (*aname == '/') + aname++; + /* + * aname is a path remainder, which contains nodes we must create. We + * process the aname path from left to right, effectively descending + * from parents to children. + */ + while ((r = strchr(aname, '/')) != NULL || *aname) { + if (r != NULL) + *r = 0; + + anchor = pf_create_anchor(anchor, aname); + if (anchor == NULL) { + rs_free(p, MAXPATHLEN); + return (NULL); + } + + if (r == NULL) + break; + else + aname = r + 1; + } + + rs_free(p, MAXPATHLEN); + return (&anchor->ruleset); +} + +void +pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset) +{ + struct pf_anchor *parent; + + while (ruleset != NULL) { + if (ruleset == &pf_main_ruleset || + !RB_EMPTY(&ruleset->anchor->children) || + ruleset->anchor->refcnt > 0 || ruleset->tables > 0 || + ruleset->topen) + return; + if (!TAILQ_EMPTY(ruleset->rules.active.ptr) || + !TAILQ_EMPTY(ruleset->rules.inactive.ptr) || + ruleset->rules.inactive.open) + return; + RB_REMOVE(pf_anchor_global, &pf_anchors, ruleset->anchor); + if ((parent = ruleset->anchor->parent) != NULL) + RB_REMOVE(pf_anchor_node, &parent->children, + ruleset->anchor); + pf_anchor_rele(ruleset->anchor); + if (parent == NULL) + return; + ruleset = &parent->ruleset; + } +} + +int +pf_anchor_setup(struct pf_rule *r, const struct pf_ruleset *s, + const char *name) +{ + char *p, *path; + struct pf_ruleset *ruleset; + + r->anchor = NULL; + r->anchor_relative = 0; + r->anchor_wildcard = 0; + if (!name[0]) + return (0); + path = rs_malloc(MAXPATHLEN); + if (path == NULL) + return (1); + if (name[0] == '/') + strlcpy(path, name + 1, MAXPATHLEN); + else { + /* relative path */ + r->anchor_relative = 1; + if (s->anchor == NULL || !s->anchor->path[0]) + path[0] = 0; + else + strlcpy(path, s->anchor->path, MAXPATHLEN); + while (name[0] == '.' && name[1] == '.' && name[2] == '/') { + if (!path[0]) { + DPFPRINTF(LOG_NOTICE, + "pf_anchor_setup: .. beyond root"); + rs_free(path, MAXPATHLEN); + return (1); + } + if ((p = strrchr(path, '/')) != NULL) + *p = 0; + else + path[0] = 0; + r->anchor_relative++; + name += 3; + } + if (path[0]) + strlcat(path, "/", MAXPATHLEN); + strlcat(path, name, MAXPATHLEN); + } + if ((p = strrchr(path, '/')) != NULL && !strcmp(p, "/*")) { + r->anchor_wildcard = 1; + *p = 0; + } + ruleset = pf_find_or_create_ruleset(path); + rs_free(path, MAXPATHLEN); + if (ruleset == NULL || ruleset == &pf_main_ruleset) { + DPFPRINTF(LOG_NOTICE, + "pf_anchor_setup: ruleset"); + return (1); + } + r->anchor = ruleset->anchor; + r->anchor->refcnt++; + return (0); +} + +int +pf_anchor_copyout(const struct pf_ruleset *rs, const struct pf_rule *r, + struct pfioc_rule *pr) +{ + pr->anchor_call[0] = 0; + if (r->anchor == NULL) + return (0); + if (!r->anchor_relative) { + strlcpy(pr->anchor_call, "/", sizeof(pr->anchor_call)); + strlcat(pr->anchor_call, r->anchor->path, + sizeof(pr->anchor_call)); + } else { + char *a, *p; + int i; + + a = rs_malloc(MAXPATHLEN); + if (a == NULL) + return (1); + if (rs == &pf_main_ruleset) + a[0] = 0; + else + strlcpy(a, rs->anchor->path, MAXPATHLEN); + for (i = 1; i < r->anchor_relative; ++i) { + if ((p = strrchr(a, '/')) == NULL) + p = a; + *p = 0; + strlcat(pr->anchor_call, "../", + sizeof(pr->anchor_call)); + } + if (strncmp(a, r->anchor->path, strlen(a))) { + DPFPRINTF(LOG_NOTICE, + "pf_anchor_copyout: '%s' '%s'", a, + r->anchor->path); + rs_free(a, MAXPATHLEN); + return (1); + } + if (strlen(r->anchor->path) > strlen(a)) + strlcat(pr->anchor_call, r->anchor->path + (a[0] ? + strlen(a) + 1 : 0), sizeof(pr->anchor_call)); + rs_free(a, MAXPATHLEN); + } + if (r->anchor_wildcard) + strlcat(pr->anchor_call, pr->anchor_call[0] ? "/*" : "*", + sizeof(pr->anchor_call)); + return (0); +} + +void +pf_remove_anchor(struct pf_rule *r) +{ + if (r->anchor == NULL) + return; + if (r->anchor->refcnt <= 0) + DPFPRINTF(LOG_NOTICE, "pf_remove_anchor: broken refcount"); + else if (!--r->anchor->refcnt) + pf_remove_if_empty_ruleset(&r->anchor->ruleset); + r->anchor = NULL; +} + +void +pf_anchor_rele(struct pf_anchor *anchor) +{ + if ((anchor == NULL) || (anchor == &pf_main_anchor)) + return; + +#ifdef _KERNEL + if (refcnt_rele(&anchor->ref)) + rs_pool_put_anchor(anchor); +#else + rs_pool_put_anchor(anchor); +#endif +} + +struct pf_anchor * +pf_anchor_take(struct pf_anchor *anchor) +{ +#ifdef _KERNEL + if (anchor != NULL && anchor != &pf_main_anchor) + refcnt_take(&anchor->ref); +#endif + return (anchor); +} diff --git a/module/pfsrc/pf_syncookies.c b/module/pfsrc/pf_syncookies.c new file mode 100644 index 0000000..c623fe2 --- /dev/null +++ b/module/pfsrc/pf_syncookies.c @@ -0,0 +1,294 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_syncookies.c — see docs/porting-notes.md */ +#include + +union pf_syncookie { + uint8_t cookie; + struct { + uint8_t oddeven:1, + sack_ok:1, + wscale_idx:3, + mss_idx:3; + } flags; +}; + +#define PF_SYNCOOKIE_SECRET_SIZE SIPHASH_KEY_LENGTH +#define PF_SYNCOOKIE_SECRET_LIFETIME 15 /* seconds */ + +static struct { + struct timeout keytimeout; + volatile uint oddeven; + SIPHASH_KEY key[2]; + uint32_t hiwat; /* absolute; # of states */ + uint32_t lowat; +} pf_syncookie_status; + +void pf_syncookie_rotate(void *); +void pf_syncookie_newkey(void); +uint32_t pf_syncookie_mac(struct pf_pdesc *, union pf_syncookie, + uint32_t); +uint32_t pf_syncookie_generate(struct pf_pdesc *, uint16_t); + +void +pf_syncookies_init(void) +{ + timeout_set(&pf_syncookie_status.keytimeout, + pf_syncookie_rotate, NULL); + pf_syncookie_status.hiwat = PFSTATE_HIWAT * PF_SYNCOOKIES_HIWATPCT/100; + pf_syncookie_status.lowat = PFSTATE_HIWAT * PF_SYNCOOKIES_LOWATPCT/100; + pf_syncookies_setmode(PF_SYNCOOKIES_NEVER); +} + +int +pf_syncookies_setmode(u_int8_t mode) +{ + if (mode > PF_SYNCOOKIES_MODE_MAX) + return (EINVAL); + + if (pf_status.syncookies_mode == mode) + return (0); + + pf_status.syncookies_mode = mode; + if (pf_status.syncookies_mode == PF_SYNCOOKIES_ALWAYS) { + pf_syncookie_newkey(); + pf_status.syncookies_active = 1; + } + return (0); +} + +int +pf_syncookies_setwats(u_int32_t hiwat, u_int32_t lowat) +{ + if (lowat > hiwat) + return (EINVAL); + + pf_syncookie_status.hiwat = hiwat; + pf_syncookie_status.lowat = lowat; + return (0); +} + +int +pf_syncookies_getwats(struct pfioc_synflwats *wats) +{ + wats->hiwat = pf_syncookie_status.hiwat; + wats->lowat = pf_syncookie_status.lowat; + return (0); +} + +int +pf_synflood_check(struct pf_pdesc *pd) +{ + KASSERT (pd->proto == IPPROTO_TCP); + + if (pd->m && (pd->m->m_pkthdr.pf.tag & PF_TAG_SYNCOOKIE_RECREATED)) + return (0); + + if (pf_status.syncookies_mode != PF_SYNCOOKIES_ADAPTIVE) + return (pf_status.syncookies_mode); + + if (!pf_status.syncookies_active && + pf_status.states_halfopen > pf_syncookie_status.hiwat) { + pf_syncookie_newkey(); + pf_status.syncookies_active = 1; + DPFPRINTF(LOG_WARNING, + "synflood detected, enabling syncookies"); + pf_status.lcounters[LCNT_SYNFLOODS]++; + } + + return (pf_status.syncookies_active); +} + +void +pf_syncookie_send(struct pf_pdesc *pd, u_short *reason) +{ + uint16_t mss, mssdflt; + uint32_t iss; + + mssdflt = atomic_load_int(&tcp_mssdflt); + mss = max(pf_get_mss(pd, mssdflt), mssdflt); + iss = pf_syncookie_generate(pd, mss); + pf_send_tcp(NULL, pd->af, pd->dst, pd->src, *pd->dport, *pd->sport, + iss, ntohl(pd->hdr.tcp.th_seq) + 1, TH_SYN|TH_ACK, 0, mss, + 0, 1, 0, pd->rdomain, reason); + pf_status.syncookies_inflight[pf_syncookie_status.oddeven]++; + pf_status.lcounters[LCNT_SYNCOOKIES_SENT]++; +} + +uint8_t +pf_syncookie_validate(struct pf_pdesc *pd) +{ + uint32_t hash, ack, seq; + union pf_syncookie cookie; + + KASSERT(pd->proto == IPPROTO_TCP); + + seq = ntohl(pd->hdr.tcp.th_seq) - 1; + ack = ntohl(pd->hdr.tcp.th_ack) - 1; + cookie.cookie = (ack & 0xff) ^ (ack >> 24); + + /* we don't know oddeven before setting the cookie (union) */ + if (pf_status.syncookies_inflight[cookie.flags.oddeven] == 0) + return (0); + + hash = pf_syncookie_mac(pd, cookie, seq); + if ((ack & ~0xff) != (hash & ~0xff)) + return (0); + + pf_status.syncookies_inflight[cookie.flags.oddeven]--; + pf_status.lcounters[LCNT_SYNCOOKIES_VALID]++; + return (1); +} + +/* + * all following functions private + */ +void +pf_syncookie_rotate(void *arg) +{ + /* do we want to disable syncookies? */ + if (pf_status.syncookies_active && + ((pf_status.syncookies_mode == PF_SYNCOOKIES_ADAPTIVE && + pf_status.states_halfopen + pf_status.syncookies_inflight[0] + + pf_status.syncookies_inflight[1] < pf_syncookie_status.lowat) || + pf_status.syncookies_mode == PF_SYNCOOKIES_NEVER)) { + pf_status.syncookies_active = 0; + DPFPRINTF(LOG_WARNING, "syncookies disabled"); + } + + /* nothing in flight any more? delete keys and return */ + if (!pf_status.syncookies_active && + pf_status.syncookies_inflight[0] == 0 && + pf_status.syncookies_inflight[1] == 0) { + memset(&pf_syncookie_status.key[0], 0, + PF_SYNCOOKIE_SECRET_SIZE); + memset(&pf_syncookie_status.key[1], 0, + PF_SYNCOOKIE_SECRET_SIZE); + return; + } + + /* new key, including timeout */ + pf_syncookie_newkey(); +} + +void +pf_syncookie_newkey(void) +{ + pf_syncookie_status.oddeven = (pf_syncookie_status.oddeven + 1) & 0x1; + pf_status.syncookies_inflight[pf_syncookie_status.oddeven] = 0; + arc4random_buf(&pf_syncookie_status.key[pf_syncookie_status.oddeven], + PF_SYNCOOKIE_SECRET_SIZE); + timeout_add_sec(&pf_syncookie_status.keytimeout, + PF_SYNCOOKIE_SECRET_LIFETIME); +} + +/* + * Distribution and probability of certain MSS values. Those in between are + * rounded down to the next lower one. + * [An Analysis of TCP Maximum Segment Sizes, S. Alcock and R. Nelson, 2011] + * .2% .3% 5% 7% 7% 20% 15% 45% + */ +static int pf_syncookie_msstab[] = + { 216, 536, 1200, 1360, 1400, 1440, 1452, 1460 }; + +/* + * Distribution and probability of certain WSCALE values. + * The absence of the WSCALE option is encoded with index zero. + * [WSCALE values histograms, Allman, 2012] + * X 10 10 35 5 6 14 10% by host + * X 11 4 5 5 18 49 3% by connections + */ +static int pf_syncookie_wstab[] = { 0, 0, 1, 2, 4, 6, 7, 8 }; + +uint32_t +pf_syncookie_mac(struct pf_pdesc *pd, union pf_syncookie cookie, uint32_t seq) +{ + SIPHASH_CTX ctx; + uint32_t siphash[2]; + + KASSERT(pd->proto == IPPROTO_TCP); + + SipHash24_Init(&ctx, &pf_syncookie_status.key[cookie.flags.oddeven]); + + switch (pd->af) { + case AF_INET: + SipHash24_Update(&ctx, pd->src, sizeof(pd->src->v4)); + SipHash24_Update(&ctx, pd->dst, sizeof(pd->dst->v4)); + break; + case AF_INET6: + SipHash24_Update(&ctx, pd->src, sizeof(pd->src->v6)); + SipHash24_Update(&ctx, pd->dst, sizeof(pd->dst->v6)); + break; + default: + panic("unknown address family"); + } + + SipHash24_Update(&ctx, pd->sport, sizeof(*pd->sport)); + SipHash24_Update(&ctx, pd->dport, sizeof(*pd->dport)); + SipHash24_Update(&ctx, &seq, sizeof(seq)); + SipHash24_Update(&ctx, &cookie, sizeof(cookie)); + SipHash24_Final((uint8_t *)&siphash, &ctx); + + return (siphash[0] ^ siphash[1]); +} + +uint32_t +pf_syncookie_generate(struct pf_pdesc *pd, uint16_t mss) +{ + uint8_t i, wscale; + uint32_t iss, hash; + union pf_syncookie cookie; + + cookie.cookie = 0; + + /* map MSS */ + for (i = nitems(pf_syncookie_msstab) - 1; + pf_syncookie_msstab[i] > mss && i > 0; i--) + /* nada */; + cookie.flags.mss_idx = i; + + /* map WSCALE */ + wscale = pf_get_wscale(pd); + for (i = nitems(pf_syncookie_wstab) - 1; + pf_syncookie_wstab[i] > wscale && i > 0; i--) + /* nada */; + cookie.flags.wscale_idx = i; + cookie.flags.sack_ok = 0; /* XXX */ + + cookie.flags.oddeven = pf_syncookie_status.oddeven; + hash = pf_syncookie_mac(pd, cookie, ntohl(pd->hdr.tcp.th_seq)); + + /* + * Put the flags into the hash and XOR them to get better ISS number + * variance. This doesn't enhance the cryptographic strength and is + * done to prevent the 8 cookie bits from showing up directly on the + * wire. + */ + iss = hash & ~0xff; + iss |= cookie.cookie ^ (hash >> 24); + + return (iss); +} + +struct mbuf * +pf_syncookie_recreate_syn(struct pf_pdesc *pd, u_short *reason) +{ + uint8_t wscale; + uint16_t mss; + uint32_t ack, seq; + union pf_syncookie cookie; + + seq = ntohl(pd->hdr.tcp.th_seq) - 1; + ack = ntohl(pd->hdr.tcp.th_ack) - 1; + cookie.cookie = (ack & 0xff) ^ (ack >> 24); + + if (cookie.flags.mss_idx >= nitems(pf_syncookie_msstab) || + cookie.flags.wscale_idx >= nitems(pf_syncookie_wstab)) + return (NULL); + + mss = pf_syncookie_msstab[cookie.flags.mss_idx]; + wscale = pf_syncookie_wstab[cookie.flags.wscale_idx]; + + return (pf_build_tcp(NULL, pd->af, pd->src, pd->dst, *pd->sport, + *pd->dport, seq, 0, TH_SYN, wscale, mss, pd->ttl, 0, + PF_TAG_SYNCOOKIE_RECREATED, cookie.flags.sack_ok, pd->rdomain, + reason)); +} diff --git a/module/pfsrc/pf_table.c b/module/pfsrc/pf_table.c new file mode 100644 index 0000000..460309a --- /dev/null +++ b/module/pfsrc/pf_table.c @@ -0,0 +1,2888 @@ +/* PFLINUX port of OpenBSD 8.0 net/pf_table.c — see docs/porting-notes.md */ +#include + +#define ACCEPT_FLAGS(flags, oklist) \ + do { \ + if ((flags & ~(oklist)) & \ + PFR_FLAG_ALLMASK) \ + return (EINVAL); \ + } while (0) + +#define COPYIN(from, to, size, flags) \ + ((flags & PFR_FLAG_USERIOCTL) ? \ + copyin((from), (to), (size)) : \ + (bcopy((from), (to), (size)), 0)) + +#define COPYOUT(from, to, size, flags) \ + ((flags & PFR_FLAG_USERIOCTL) ? \ + copyout((from), (to), (size)) : \ + (bcopy((from), (to), (size)), 0)) + +#define YIELD(ok) \ + do { \ + if (ok) \ + sched_pause(preempt); \ + } while (0) + +#define FILLIN_SIN(sin, addr) \ + do { \ + (sin)./* PFLINUX sin_len */; \ + (sin).sin_family = AF_INET; \ + (sin).sin_addr = (addr); \ + } while (0) + +#define FILLIN_SIN6(sin6, addr) \ + do { \ + (sin6).sin6_len = sizeof(sin6); \ + (sin6).sin6_family = AF_INET6; \ + (sin6).sin6_addr = (addr); \ + } while (0) + +#define SWAP(type, a1, a2) \ + do { \ + type tmp = a1; \ + a1 = a2; \ + a2 = tmp; \ + } while (0) + +#define SUNION2PF(su, af) (((af)==AF_INET) ? \ + (struct pf_addr *)&(su)->sin.sin_addr : \ + (struct pf_addr *)&(su)->sin6.sin6_addr) + +#define AF_BITS(af) (((af)==AF_INET)?32:128) +#define ADDR_NETWORK(ad) ((ad)->pfra_net < AF_BITS((ad)->pfra_af)) +#define KENTRY_NETWORK(ke) ((ke)->pfrke_net < AF_BITS((ke)->pfrke_af)) + +#define NO_ADDRESSES (-1) +#define ENQUEUE_UNMARKED_ONLY (1) +#define INVERT_NEG_FLAG (1) + +struct pfr_walktree { + enum pfrw_op { + PFRW_MARK, + PFRW_SWEEP, + PFRW_ENQUEUE, + PFRW_GET_ADDRS, + PFRW_GET_ASTATS, + PFRW_POOL_GET, + PFRW_DYNADDR_UPDATE + } pfrw_op; + union { + struct pfr_addr *pfrw1_addr; + struct pfr_astats *pfrw1_astats; + struct pfr_kentryworkq *pfrw1_workq; + struct pfr_kentry *pfrw1_kentry; + struct pfi_dynaddr *pfrw1_dyn; + } pfrw_1; + int pfrw_free; + int pfrw_flags; +}; +#define pfrw_addr pfrw_1.pfrw1_addr +#define pfrw_astats pfrw_1.pfrw1_astats +#define pfrw_workq pfrw_1.pfrw1_workq +#define pfrw_kentry pfrw_1.pfrw1_kentry +#define pfrw_dyn pfrw_1.pfrw1_dyn +#define pfrw_cnt pfrw_free + +#define senderr(e) do { rv = (e); goto _bad; } while (0) + +struct pool pfr_ktable_pl; +struct pool pfr_kentry_pl[PFRKE_MAX]; +struct pool pfr_kcounters_pl; +union sockaddr_union pfr_mask; +struct pf_addr pfr_ffaddr; + +int pfr_gcd(int, int); +void pfr_copyout_addr(struct pfr_addr *, + struct pfr_kentry *ke); +int pfr_validate_addr(struct pfr_addr *); +void pfr_enqueue_addrs(struct pfr_ktable *, + struct pfr_kentryworkq *, int *, int); +void pfr_mark_addrs(struct pfr_ktable *); +struct pfr_kentry *pfr_lookup_addr(struct pfr_ktable *, + struct pfr_addr *, int); +struct pfr_kentry *pfr_lookup_kentry(struct pfr_ktable *, + struct pfr_kentry *, int); +struct pfr_kentry *pfr_create_kentry(struct pfr_addr *); +struct pfr_kentry *pfr_create_kentry_unlocked(struct pfr_addr *, int); +void pfr_kentry_kif_ref(struct pfr_kentry *); +void pfr_destroy_kentries(struct pfr_kentryworkq *); +void pfr_destroy_ioq(struct pfr_kentryworkq *, int); +void pfr_destroy_kentry(struct pfr_kentry *); +void pfr_insert_kentries(struct pfr_ktable *, + struct pfr_kentryworkq *, time_t); +void pfr_remove_kentries(struct pfr_ktable *, + struct pfr_kentryworkq *); +void pfr_clstats_kentries(struct pfr_kentryworkq *, time_t, + int); +void pfr_reset_feedback(struct pfr_addr *, int, int); +void pfr_prepare_network(union sockaddr_union *, int, int); +int pfr_route_kentry(struct pfr_ktable *, + struct pfr_kentry *); +int pfr_unroute_kentry(struct pfr_ktable *, + struct pfr_kentry *); +int pfr_walktree(struct radix_node *, void *, u_int); +int pfr_validate_table(struct pfr_table *, int, int); +int pfr_fix_anchor(char *); +void pfr_commit_ktable(struct pfr_ktable *, time_t); +void pfr_insert_ktables(struct pfr_ktableworkq *); +void pfr_insert_ktable(struct pfr_ktable *); +void pfr_setflags_ktables(struct pfr_ktableworkq *); +void pfr_setflags_ktable(struct pfr_ktable *, int); +void pfr_clstats_ktables(struct pfr_ktableworkq *, time_t, + int); +void pfr_clstats_ktable(struct pfr_ktable *, time_t, int); +struct pfr_ktable *pfr_create_ktable(struct pfr_table *, time_t, int, + int); +void pfr_destroy_ktables(struct pfr_ktableworkq *, int); +void pfr_destroy_ktables_aux(struct pfr_ktableworkq *); +void pfr_destroy_ktable(struct pfr_ktable *, int); +int pfr_ktable_compare(struct pfr_ktable *, + struct pfr_ktable *); +void pfr_ktable_winfo_update(struct pfr_ktable *, + struct pfr_kentry *); +struct pfr_ktable *pfr_lookup_table(struct pfr_table *); +void pfr_clean_node_mask(struct pfr_ktable *, + struct pfr_kentryworkq *); +int pfr_table_count(struct pfr_table *, int); +int pfr_skip_table(struct pfr_table *, + struct pfr_ktable *, int); +struct pfr_kentry *pfr_kentry_byidx(struct pfr_ktable *, int, int); +int pfr_islinklocal(sa_family_t, struct pf_addr *); + +RB_PROTOTYPE(pfr_ktablehead, pfr_ktable, pfrkt_tree, pfr_ktable_compare); +RB_GENERATE(pfr_ktablehead, pfr_ktable, pfrkt_tree, pfr_ktable_compare); + +struct pfr_ktablehead pfr_ktables; +struct pfr_table pfr_nulltable; +int pfr_ktable_cnt; + +int +pfr_gcd(int m, int n) +{ + int t; + + while (m > 0) { + t = n % m; + n = m; + m = t; + } + return (n); +} + +void +pfr_initialize(void) +{ + rn_init(sizeof(struct sockaddr_in6)); + + pool_init(&pfr_ktable_pl, sizeof(struct pfr_ktable), + 0, IPL_SOFTNET, 0, "pfrktable", NULL); + pool_init(&pfr_kentry_pl[PFRKE_PLAIN], sizeof(struct pfr_kentry), + 0, IPL_SOFTNET, 0, "pfrke_plain", NULL); + pool_init(&pfr_kentry_pl[PFRKE_ROUTE], sizeof(struct pfr_kentry_route), + 0, IPL_SOFTNET, 0, "pfrke_route", NULL); + pool_init(&pfr_kentry_pl[PFRKE_COST], sizeof(struct pfr_kentry_cost), + 0, IPL_SOFTNET, 0, "pfrke_cost", NULL); + pool_init(&pfr_kcounters_pl, sizeof(struct pfr_kcounters), + 0, IPL_SOFTNET, 0, "pfrkcounters", NULL); + + memset(&pfr_ffaddr, 0xff, sizeof(pfr_ffaddr)); +} + +int +pfr_clr_addrs(struct pfr_table *tbl, int *ndel, int flags) +{ + struct pfr_ktable *kt; + struct pfr_kentryworkq workq; + int error; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY); + error = pfr_validate_table(tbl, 0, flags & PFR_FLAG_USERIOCTL); + if (error) + return (error); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (ESRCH); + if (kt->pfrkt_flags & PFR_TFLAG_CONST) + return (EPERM); + pfr_enqueue_addrs(kt, &workq, ndel, 0); + + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_remove_kentries(kt, &workq); + if (kt->pfrkt_cnt) { + DPFPRINTF(LOG_NOTICE, + "pfr_clr_addrs: corruption detected (%d).", + kt->pfrkt_cnt); + kt->pfrkt_cnt = 0; + } + } + return (0); +} + +void +pfr_fill_feedback(struct pfr_kentry_all *ke, struct pfr_addr *ad) +{ + ad->pfra_type = ke->pfrke_type; + + switch (ke->pfrke_type) { + case PFRKE_PLAIN: + break; + case PFRKE_COST: + ((struct pfr_kentry_cost *)ke)->weight = ad->pfra_weight; + /* FALLTHROUGH */ + case PFRKE_ROUTE: + if (ke->pfrke_rifname[0]) + strlcpy(ad->pfra_ifname, ke->pfrke_rifname, IFNAMSIZ); + break; + } + + switch (ke->pfrke_af) { + case AF_INET: + ad->pfra_ip4addr = ke->pfrke_sa.sin.sin_addr; + break; +#ifdef INET6 + case AF_INET6: + ad->pfra_ip6addr = ke->pfrke_sa.sin6.sin6_addr; + break; +#endif /* INET6 */ + default: + unhandled_af(ke->pfrke_af); + } + ad->pfra_weight = ((struct pfr_kentry_cost *)ke)->weight; + ad->pfra_af = ke->pfrke_af; + ad->pfra_net = ke->pfrke_net; + if (ke->pfrke_flags & PFRKE_FLAG_NOT) + ad->pfra_not = 1; + ad->pfra_fback = ke->pfrke_fb; +} + +int +pfr_add_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size, + int *nadd, int flags) +{ + struct pfr_ktable *kt, *tmpkt; + struct pfr_kentryworkq workq, ioq; + struct pfr_kentry *p, *q, *ke; + struct pfr_addr ad; + int i, rv, xadd = 0, error; + time_t tzero = gettime(); + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK); + error = pfr_validate_table(tbl, 0, flags & PFR_FLAG_USERIOCTL); + if (error) + return (error); + tmpkt = pfr_create_ktable(&pfr_nulltable, 0, 0, + (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT)); + if (tmpkt == NULL) + return (ENOMEM); + SLIST_INIT(&workq); + SLIST_INIT(&ioq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + senderr(EFAULT); + if (pfr_validate_addr(&ad)) + senderr(EINVAL); + + ke = pfr_create_kentry_unlocked(&ad, flags); + if (ke == NULL) + senderr(ENOMEM); + ke->pfrke_fb = PFR_FB_NONE; + SLIST_INSERT_HEAD(&ioq, ke, pfrke_ioq); + } + + NET_LOCK(); + PF_LOCK(); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) { + PF_UNLOCK(); + NET_UNLOCK(); + senderr(ESRCH); + } + if (kt->pfrkt_flags & PFR_TFLAG_CONST) { + PF_UNLOCK(); + NET_UNLOCK(); + senderr(EPERM); + } + SLIST_FOREACH(ke, &ioq, pfrke_ioq) { + pfr_kentry_kif_ref(ke); + p = pfr_lookup_kentry(kt, ke, 1); + q = pfr_lookup_kentry(tmpkt, ke, 1); + if (flags & PFR_FLAG_FEEDBACK) { + if (q != NULL) + ke->pfrke_fb = PFR_FB_DUPLICATE; + else if (p == NULL) + ke->pfrke_fb = PFR_FB_ADDED; + else if ((p->pfrke_flags & PFRKE_FLAG_NOT) != + (ke->pfrke_flags & PFRKE_FLAG_NOT)) + ke->pfrke_fb = PFR_FB_CONFLICT; + else + ke->pfrke_fb = PFR_FB_NONE; + } + if (p == NULL && q == NULL) { + if (pfr_route_kentry(tmpkt, ke)) { + /* defer destroy after feedback is processed */ + ke->pfrke_fb = PFR_FB_NONE; + } else { + /* + * mark entry as added to table, so we won't + * kill it with rest of the ioq + */ + ke->pfrke_fb = PFR_FB_ADDED; + SLIST_INSERT_HEAD(&workq, ke, pfrke_workq); + xadd++; + } + } + } + /* remove entries, which we will insert from tmpkt */ + pfr_clean_node_mask(tmpkt, &workq); + if (!(flags & PFR_FLAG_DUMMY)) + pfr_insert_kentries(kt, &workq, tzero); + + PF_UNLOCK(); + NET_UNLOCK(); + + if (flags & PFR_FLAG_FEEDBACK) { + i = 0; + while ((ke = SLIST_FIRST(&ioq)) != NULL) { + YIELD(flags & PFR_FLAG_USERIOCTL); + pfr_fill_feedback((struct pfr_kentry_all *)ke, &ad); + if (COPYOUT(&ad, addr+i, sizeof(ad), flags)) + senderr(EFAULT); + i++; + SLIST_REMOVE_HEAD(&ioq, pfrke_ioq); + switch (ke->pfrke_fb) { + case PFR_FB_CONFLICT: + case PFR_FB_DUPLICATE: + case PFR_FB_NONE: + pfr_destroy_kentry(ke); + break; + case PFR_FB_ADDED: + if (flags & PFR_FLAG_DUMMY) + pfr_destroy_kentry(ke); + } + } + } else + pfr_destroy_ioq(&ioq, flags); + + if (nadd != NULL) + *nadd = xadd; + + pfr_destroy_ktable(tmpkt, 0); + return (0); +_bad: + pfr_destroy_ioq(&ioq, flags); + if (flags & PFR_FLAG_FEEDBACK) + pfr_reset_feedback(addr, size, flags); + pfr_destroy_ktable(tmpkt, 0); + return (rv); +} + +int +pfr_del_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size, + int *ndel, int flags) +{ + struct pfr_ktable *kt; + struct pfr_kentryworkq workq; + struct pfr_kentry *p; + struct pfr_addr ad; + int i, rv, xdel = 0, log = 1, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK); + error = pfr_validate_table(tbl, 0, flags & PFR_FLAG_USERIOCTL); + if (error) + return (error); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (ESRCH); + if (kt->pfrkt_flags & PFR_TFLAG_CONST) + return (EPERM); + /* + * there are two algorithms to choose from here. + * with: + * n: number of addresses to delete + * N: number of addresses in the table + * + * one is O(N) and is better for large 'n' + * one is O(n*LOG(N)) and is better for small 'n' + * + * following code try to decide which one is best. + */ + for (i = kt->pfrkt_cnt; i > 0; i >>= 1) + log++; + if (size > kt->pfrkt_cnt/log) { + /* full table scan */ + pfr_mark_addrs(kt); + } else { + /* iterate over addresses to delete */ + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + return (EFAULT); + if (pfr_validate_addr(&ad)) + return (EINVAL); + p = pfr_lookup_addr(kt, &ad, 1); + if (p != NULL) + p->pfrke_flags &= ~PFRKE_FLAG_MARK; + } + } + SLIST_INIT(&workq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + senderr(EFAULT); + if (pfr_validate_addr(&ad)) + senderr(EINVAL); + p = pfr_lookup_addr(kt, &ad, 1); + if (flags & PFR_FLAG_FEEDBACK) { + if (p == NULL) + ad.pfra_fback = PFR_FB_NONE; + else if ((p->pfrke_flags & PFRKE_FLAG_NOT) != + ad.pfra_not) + ad.pfra_fback = PFR_FB_CONFLICT; + else if (p->pfrke_flags & PFRKE_FLAG_MARK) + ad.pfra_fback = PFR_FB_DUPLICATE; + else + ad.pfra_fback = PFR_FB_DELETED; + } + if (p != NULL && + (p->pfrke_flags & PFRKE_FLAG_NOT) == ad.pfra_not && + !(p->pfrke_flags & PFRKE_FLAG_MARK)) { + p->pfrke_flags |= PFRKE_FLAG_MARK; + SLIST_INSERT_HEAD(&workq, p, pfrke_workq); + xdel++; + } + if (flags & PFR_FLAG_FEEDBACK) + if (COPYOUT(&ad, addr+i, sizeof(ad), flags)) + senderr(EFAULT); + } + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_remove_kentries(kt, &workq); + } + if (ndel != NULL) + *ndel = xdel; + return (0); +_bad: + if (flags & PFR_FLAG_FEEDBACK) + pfr_reset_feedback(addr, size, flags); + return (rv); +} + +int +pfr_set_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size, + int *size2, int *nadd, int *ndel, int *nchange, int flags, + u_int32_t ignore_pfrt_flags) +{ + struct pfr_ktable *kt, *tmpkt; + struct pfr_kentryworkq addq, delq, changeq; + struct pfr_kentry *p, *q; + struct pfr_addr ad; + int i, rv, xadd = 0, xdel = 0, xchange = 0, error; + time_t tzero = gettime(); + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK); + error = pfr_validate_table(tbl, ignore_pfrt_flags, flags & + PFR_FLAG_USERIOCTL); + if (error) + return (error); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (ESRCH); + if (kt->pfrkt_flags & PFR_TFLAG_CONST) + return (EPERM); + tmpkt = pfr_create_ktable(&pfr_nulltable, 0, 0, + (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT)); + if (tmpkt == NULL) + return (ENOMEM); + pfr_mark_addrs(kt); + SLIST_INIT(&addq); + SLIST_INIT(&delq); + SLIST_INIT(&changeq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + senderr(EFAULT); + if (pfr_validate_addr(&ad)) + senderr(EINVAL); + ad.pfra_fback = PFR_FB_NONE; + p = pfr_lookup_addr(kt, &ad, 1); + if (p != NULL) { + if (p->pfrke_flags & PFRKE_FLAG_MARK) { + ad.pfra_fback = PFR_FB_DUPLICATE; + goto _skip; + } + p->pfrke_flags |= PFRKE_FLAG_MARK; + if ((p->pfrke_flags & PFRKE_FLAG_NOT) != ad.pfra_not) { + SLIST_INSERT_HEAD(&changeq, p, pfrke_workq); + ad.pfra_fback = PFR_FB_CHANGED; + xchange++; + } + } else { + q = pfr_lookup_addr(tmpkt, &ad, 1); + if (q != NULL) { + ad.pfra_fback = PFR_FB_DUPLICATE; + goto _skip; + } + p = pfr_create_kentry(&ad); + if (p == NULL) + senderr(ENOMEM); + if (pfr_route_kentry(tmpkt, p)) { + pfr_destroy_kentry(p); + ad.pfra_fback = PFR_FB_NONE; + goto _skip; + } + SLIST_INSERT_HEAD(&addq, p, pfrke_workq); + ad.pfra_fback = PFR_FB_ADDED; + xadd++; + if (p->pfrke_type == PFRKE_COST) + kt->pfrkt_refcntcost++; + pfr_ktable_winfo_update(kt, p); + } +_skip: + if (flags & PFR_FLAG_FEEDBACK) + if (COPYOUT(&ad, addr+i, sizeof(ad), flags)) + senderr(EFAULT); + } + pfr_enqueue_addrs(kt, &delq, &xdel, ENQUEUE_UNMARKED_ONLY); + if ((flags & PFR_FLAG_FEEDBACK) && *size2) { + if (*size2 < size+xdel) { + *size2 = size+xdel; + senderr(0); + } + i = 0; + SLIST_FOREACH(p, &delq, pfrke_workq) { + pfr_copyout_addr(&ad, p); + ad.pfra_fback = PFR_FB_DELETED; + if (COPYOUT(&ad, addr+size+i, sizeof(ad), flags)) + senderr(EFAULT); + i++; + } + } + pfr_clean_node_mask(tmpkt, &addq); + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_insert_kentries(kt, &addq, tzero); + pfr_remove_kentries(kt, &delq); + pfr_clstats_kentries(&changeq, tzero, INVERT_NEG_FLAG); + } else + pfr_destroy_kentries(&addq); + if (nadd != NULL) + *nadd = xadd; + if (ndel != NULL) + *ndel = xdel; + if (nchange != NULL) + *nchange = xchange; + if ((flags & PFR_FLAG_FEEDBACK) && size2) + *size2 = size+xdel; + pfr_destroy_ktable(tmpkt, 0); + return (0); +_bad: + pfr_clean_node_mask(tmpkt, &addq); + pfr_destroy_kentries(&addq); + if (flags & PFR_FLAG_FEEDBACK) + pfr_reset_feedback(addr, size, flags); + pfr_destroy_ktable(tmpkt, 0); + return (rv); +} + +int +pfr_tst_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size, + int *nmatch, int flags) +{ + struct pfr_ktable *kt; + struct pfr_kentry *p; + struct pfr_addr ad; + int i, xmatch = 0, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_REPLACE); + error = pfr_validate_table(tbl, 0, 0); + if (error) + return (error); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (ESRCH); + + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + return (EFAULT); + if (pfr_validate_addr(&ad)) + return (EINVAL); + if (ADDR_NETWORK(&ad)) + return (EINVAL); + p = pfr_lookup_addr(kt, &ad, 0); + if (flags & PFR_FLAG_REPLACE) + pfr_copyout_addr(&ad, p); + ad.pfra_fback = (p == NULL) ? PFR_FB_NONE : + ((p->pfrke_flags & PFRKE_FLAG_NOT) ? + PFR_FB_NOTMATCH : PFR_FB_MATCH); + if (p != NULL && !(p->pfrke_flags & PFRKE_FLAG_NOT)) + xmatch++; + if (COPYOUT(&ad, addr+i, sizeof(ad), flags)) + return (EFAULT); + } + if (nmatch != NULL) + *nmatch = xmatch; + return (0); +} + +int +pfr_get_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int *size, + int flags) +{ + struct pfr_ktable *kt; + struct pfr_walktree w; + int rv, error; + + ACCEPT_FLAGS(flags, 0); + error = pfr_validate_table(tbl, 0, 0); + if (error) + return (error); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (ESRCH); + if (kt->pfrkt_cnt > *size) { + *size = kt->pfrkt_cnt; + return (0); + } + + bzero(&w, sizeof(w)); + w.pfrw_op = PFRW_GET_ADDRS; + w.pfrw_addr = addr; + w.pfrw_free = kt->pfrkt_cnt; + w.pfrw_flags = flags; + rv = rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w); + if (!rv) + rv = rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w); + if (rv) + return (rv); + + if (w.pfrw_free) { + DPFPRINTF(LOG_ERR, + "pfr_get_addrs: corruption detected (%d)", w.pfrw_free); + return (ENOTTY); + } + *size = kt->pfrkt_cnt; + return (0); +} + +int +pfr_get_astats(struct pfr_table *tbl, struct pfr_astats *addr, int *size, + int flags) +{ + struct pfr_ktable *kt; + struct pfr_walktree w; + struct pfr_kentryworkq workq; + int rv, error; + time_t tzero = gettime(); + + error = pfr_validate_table(tbl, 0, 0); + if (error) + return (error); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (ESRCH); + if (kt->pfrkt_cnt > *size) { + *size = kt->pfrkt_cnt; + return (0); + } + + bzero(&w, sizeof(w)); + w.pfrw_op = PFRW_GET_ASTATS; + w.pfrw_astats = addr; + w.pfrw_free = kt->pfrkt_cnt; + w.pfrw_flags = flags; + rv = rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w); + if (!rv) + rv = rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w); + if (!rv && (flags & PFR_FLAG_CLSTATS)) { + pfr_enqueue_addrs(kt, &workq, NULL, 0); + pfr_clstats_kentries(&workq, tzero, 0); + } + if (rv) + return (rv); + + if (w.pfrw_free) { + DPFPRINTF(LOG_ERR, + "pfr_get_astats: corruption detected (%d)", w.pfrw_free); + return (ENOTTY); + } + *size = kt->pfrkt_cnt; + return (0); +} + +int +pfr_clr_astats(struct pfr_table *tbl, struct pfr_addr *addr, int size, + int *nzero, int flags) +{ + struct pfr_ktable *kt; + struct pfr_kentryworkq workq; + struct pfr_kentry *p; + struct pfr_addr ad; + int i, rv, xzero = 0, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK); + error = pfr_validate_table(tbl, 0, 0); + if (error) + return (error); + kt = pfr_lookup_table(tbl); + if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (ESRCH); + SLIST_INIT(&workq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + senderr(EFAULT); + if (pfr_validate_addr(&ad)) + senderr(EINVAL); + p = pfr_lookup_addr(kt, &ad, 1); + if (flags & PFR_FLAG_FEEDBACK) { + ad.pfra_fback = (p != NULL) ? + PFR_FB_CLEARED : PFR_FB_NONE; + if (COPYOUT(&ad, addr+i, sizeof(ad), flags)) + senderr(EFAULT); + } + if (p != NULL) { + SLIST_INSERT_HEAD(&workq, p, pfrke_workq); + xzero++; + } + } + + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_clstats_kentries(&workq, gettime(), 0); + } + if (nzero != NULL) + *nzero = xzero; + return (0); +_bad: + if (flags & PFR_FLAG_FEEDBACK) + pfr_reset_feedback(addr, size, flags); + return (rv); +} + +int +pfr_validate_addr(struct pfr_addr *ad) +{ + int i; + + switch (ad->pfra_af) { + case AF_INET: + if (ad->pfra_net > 32) + return (-1); + break; +#ifdef INET6 + case AF_INET6: + if (ad->pfra_net > 128) + return (-1); + break; +#endif /* INET6 */ + default: + return (-1); + } + if (ad->pfra_net < 128 && + (((caddr_t)ad)[ad->pfra_net/8] & (0xFF >> (ad->pfra_net%8)))) + return (-1); + for (i = (ad->pfra_net+7)/8; i < sizeof(ad->pfra_u); i++) + if (((caddr_t)ad)[i]) + return (-1); + if (ad->pfra_not && ad->pfra_not != 1) + return (-1); + if (ad->pfra_fback != PFR_FB_NONE) + return (-1); + if (ad->pfra_type >= PFRKE_MAX) + return (-1); + return (0); +} + +void +pfr_enqueue_addrs(struct pfr_ktable *kt, struct pfr_kentryworkq *workq, + int *naddr, int sweep) +{ + struct pfr_walktree w; + + SLIST_INIT(workq); + bzero(&w, sizeof(w)); + w.pfrw_op = sweep ? PFRW_SWEEP : PFRW_ENQUEUE; + w.pfrw_workq = workq; + if (kt->pfrkt_ip4 != NULL) + if (rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w)) + DPFPRINTF(LOG_ERR, + "pfr_enqueue_addrs: IPv4 walktree failed."); + if (kt->pfrkt_ip6 != NULL) + if (rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w)) + DPFPRINTF(LOG_ERR, + "pfr_enqueue_addrs: IPv6 walktree failed."); + if (naddr != NULL) + *naddr = w.pfrw_cnt; +} + +void +pfr_mark_addrs(struct pfr_ktable *kt) +{ + struct pfr_walktree w; + + bzero(&w, sizeof(w)); + w.pfrw_op = PFRW_MARK; + if (rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w)) + DPFPRINTF(LOG_ERR, + "pfr_mark_addrs: IPv4 walktree failed."); + if (rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w)) + DPFPRINTF(LOG_ERR, + "pfr_mark_addrs: IPv6 walktree failed."); +} + + +struct pfr_kentry * +pfr_lookup_addr(struct pfr_ktable *kt, struct pfr_addr *ad, int exact) +{ + union sockaddr_union sa, mask; + struct radix_node_head *head; + struct pfr_kentry *ke; + + bzero(&sa, sizeof(sa)); + switch (ad->pfra_af) { + case AF_INET: + FILLIN_SIN(sa.sin, ad->pfra_ip4addr); + head = kt->pfrkt_ip4; + break; +#ifdef INET6 + case AF_INET6: + FILLIN_SIN6(sa.sin6, ad->pfra_ip6addr); + head = kt->pfrkt_ip6; + break; +#endif /* INET6 */ + default: + unhandled_af(ad->pfra_af); + } + if (ADDR_NETWORK(ad)) { + pfr_prepare_network(&mask, ad->pfra_af, ad->pfra_net); + ke = (struct pfr_kentry *)rn_lookup(&sa, &mask, head); + } else { + ke = (struct pfr_kentry *)rn_match(&sa, head); + if (exact && ke && KENTRY_NETWORK(ke)) + ke = NULL; + } + return (ke); +} + +struct pfr_kentry * +pfr_lookup_kentry(struct pfr_ktable *kt, struct pfr_kentry *key, int exact) +{ + union sockaddr_union mask; + struct radix_node_head *head; + struct pfr_kentry *ke; + + switch (key->pfrke_af) { + case AF_INET: + head = kt->pfrkt_ip4; + break; +#ifdef INET6 + case AF_INET6: + head = kt->pfrkt_ip6; + break; +#endif /* INET6 */ + default: + unhandled_af(key->pfrke_af); + } + if (KENTRY_NETWORK(key)) { + pfr_prepare_network(&mask, key->pfrke_af, key->pfrke_net); + ke = (struct pfr_kentry *)rn_lookup(&key->pfrke_sa, &mask, + head); + } else { + ke = (struct pfr_kentry *)rn_match(&key->pfrke_sa, head); + if (exact && ke && KENTRY_NETWORK(ke)) + ke = NULL; + } + return (ke); +} + +struct pfr_kentry * +pfr_create_kentry(struct pfr_addr *ad) +{ + struct pfr_kentry_all *ke; + + if (ad->pfra_type >= PFRKE_MAX) + panic("unknown pfra_type %d", ad->pfra_type); + + ke = pool_get(&pfr_kentry_pl[ad->pfra_type], PR_NOWAIT | PR_ZERO); + if (ke == NULL) + return (NULL); + + ke->pfrke_type = ad->pfra_type; + + /* set weight allowing implicit weights */ + if (ad->pfra_weight == 0) + ad->pfra_weight = 1; + + switch (ke->pfrke_type) { + case PFRKE_PLAIN: + break; + case PFRKE_COST: + ((struct pfr_kentry_cost *)ke)->weight = ad->pfra_weight; + /* FALLTHROUGH */ + case PFRKE_ROUTE: + if (ad->pfra_ifname[0]) + ke->pfrke_rkif = pfi_kif_get(ad->pfra_ifname, NULL); + if (ke->pfrke_rkif) + pfi_kif_ref(ke->pfrke_rkif, PFI_KIF_REF_ROUTE); + break; + } + + switch (ad->pfra_af) { + case AF_INET: + FILLIN_SIN(ke->pfrke_sa.sin, ad->pfra_ip4addr); + break; +#ifdef INET6 + case AF_INET6: + FILLIN_SIN6(ke->pfrke_sa.sin6, ad->pfra_ip6addr); + break; +#endif /* INET6 */ + default: + unhandled_af(ad->pfra_af); + } + ke->pfrke_af = ad->pfra_af; + ke->pfrke_net = ad->pfra_net; + if (ad->pfra_not) + ke->pfrke_flags |= PFRKE_FLAG_NOT; + return ((struct pfr_kentry *)ke); +} + +struct pfr_kentry * +pfr_create_kentry_unlocked(struct pfr_addr *ad, int flags) +{ + struct pfr_kentry_all *ke; + int mflags = PR_ZERO; + + if (ad->pfra_type >= PFRKE_MAX) + panic("unknown pfra_type %d", ad->pfra_type); + + if (flags & PFR_FLAG_USERIOCTL) + mflags |= PR_WAITOK; + else + mflags |= PR_NOWAIT; + + ke = pool_get(&pfr_kentry_pl[ad->pfra_type], mflags); + if (ke == NULL) + return (NULL); + + ke->pfrke_type = ad->pfra_type; + + /* set weight allowing implicit weights */ + if (ad->pfra_weight == 0) + ad->pfra_weight = 1; + + switch (ke->pfrke_type) { + case PFRKE_PLAIN: + break; + case PFRKE_COST: + ((struct pfr_kentry_cost *)ke)->weight = ad->pfra_weight; + /* FALLTHROUGH */ + case PFRKE_ROUTE: + if (ad->pfra_ifname[0]) + (void) strlcpy(ke->pfrke_rifname, ad->pfra_ifname, + IFNAMSIZ); + break; + } + + switch (ad->pfra_af) { + case AF_INET: + FILLIN_SIN(ke->pfrke_sa.sin, ad->pfra_ip4addr); + break; +#ifdef INET6 + case AF_INET6: + FILLIN_SIN6(ke->pfrke_sa.sin6, ad->pfra_ip6addr); + break; +#endif /* INET6 */ + default: + unhandled_af(ad->pfra_af); + } + ke->pfrke_af = ad->pfra_af; + ke->pfrke_net = ad->pfra_net; + if (ad->pfra_not) + ke->pfrke_flags |= PFRKE_FLAG_NOT; + return ((struct pfr_kentry *)ke); +} + +void +pfr_kentry_kif_ref(struct pfr_kentry *ke_all) +{ + struct pfr_kentry_all *ke = (struct pfr_kentry_all *)ke_all; + + NET_ASSERT_LOCKED(); + switch (ke->pfrke_type) { + case PFRKE_PLAIN: + break; + case PFRKE_COST: + case PFRKE_ROUTE: + if (ke->pfrke_rifname[0]) + ke->pfrke_rkif = pfi_kif_get(ke->pfrke_rifname, NULL); + if (ke->pfrke_rkif) + pfi_kif_ref(ke->pfrke_rkif, PFI_KIF_REF_ROUTE); + break; + } +} + +void +pfr_destroy_kentries(struct pfr_kentryworkq *workq) +{ + struct pfr_kentry *p; + + while ((p = SLIST_FIRST(workq)) != NULL) { + YIELD(1); + SLIST_REMOVE_HEAD(workq, pfrke_workq); + pfr_destroy_kentry(p); + } +} + +void +pfr_destroy_ioq(struct pfr_kentryworkq *ioq, int flags) +{ + struct pfr_kentry *p; + + while ((p = SLIST_FIRST(ioq)) != NULL) { + YIELD(flags & PFR_FLAG_USERIOCTL); + SLIST_REMOVE_HEAD(ioq, pfrke_ioq); + /* + * we destroy only those entries, which did not make it to + * table + */ + if ((p->pfrke_fb != PFR_FB_ADDED) || (flags & PFR_FLAG_DUMMY)) + pfr_destroy_kentry(p); + } +} + +void +pfr_destroy_kentry(struct pfr_kentry *ke) +{ + if (ke->pfrke_counters) + pool_put(&pfr_kcounters_pl, ke->pfrke_counters); + if (ke->pfrke_type == PFRKE_COST || ke->pfrke_type == PFRKE_ROUTE) + pfi_kif_unref(((struct pfr_kentry_all *)ke)->pfrke_rkif, + PFI_KIF_REF_ROUTE); + pool_put(&pfr_kentry_pl[ke->pfrke_type], ke); +} + +void +pfr_insert_kentries(struct pfr_ktable *kt, + struct pfr_kentryworkq *workq, time_t tzero) +{ + struct pfr_kentry *p; + int rv, n = 0; + + SLIST_FOREACH(p, workq, pfrke_workq) { + rv = pfr_route_kentry(kt, p); + if (rv) { + DPFPRINTF(LOG_ERR, + "pfr_insert_kentries: cannot route entry " + "(code=%d).", rv); + break; + } + p->pfrke_tzero = tzero; + ++n; + if (p->pfrke_type == PFRKE_COST) + kt->pfrkt_refcntcost++; + pfr_ktable_winfo_update(kt, p); + YIELD(1); + } + kt->pfrkt_cnt += n; +} + +int +pfr_insert_kentry(struct pfr_ktable *kt, struct pfr_addr *ad, time_t tzero) +{ + struct pfr_kentry *p; + int rv; + + PF_ASSERT_LOCKED(); + + p = pfr_lookup_addr(kt, ad, 1); + if (p != NULL) + return (0); + p = pfr_create_kentry(ad); + if (p == NULL) + return (EINVAL); + + rv = pfr_route_kentry(kt, p); + if (rv) + return (rv); + + p->pfrke_tzero = tzero; + if (p->pfrke_type == PFRKE_COST) + kt->pfrkt_refcntcost++; + kt->pfrkt_cnt++; + pfr_ktable_winfo_update(kt, p); + + return (0); +} + +int +pfr_remove_kentry(struct pfr_ktable *kt, struct pfr_addr *ad) +{ + struct pfr_kentryworkq workq = SLIST_HEAD_INITIALIZER(workq); + struct pfr_kentry *p; + + p = pfr_lookup_addr(kt, ad, 1); + if (p == NULL || ISSET(p->pfrke_flags, PFRKE_FLAG_NOT)) + return (ESRCH); + + if (ISSET(p->pfrke_flags, PFRKE_FLAG_MARK)) + return (0); + + SET(p->pfrke_flags, PFRKE_FLAG_MARK); + SLIST_INSERT_HEAD(&workq, p, pfrke_workq); + pfr_remove_kentries(kt, &workq); + + return (0); +} + +void +pfr_remove_kentries(struct pfr_ktable *kt, + struct pfr_kentryworkq *workq) +{ + struct pfr_kentry *p; + struct pfr_kentryworkq addrq; + int n = 0; + + SLIST_FOREACH(p, workq, pfrke_workq) { + pfr_unroute_kentry(kt, p); + ++n; + YIELD(1); + if (p->pfrke_type == PFRKE_COST) + kt->pfrkt_refcntcost--; + } + kt->pfrkt_cnt -= n; + pfr_destroy_kentries(workq); + + /* update maxweight and gcd for load balancing */ + if (kt->pfrkt_refcntcost > 0) { + kt->pfrkt_gcdweight = 0; + kt->pfrkt_maxweight = 1; + pfr_enqueue_addrs(kt, &addrq, NULL, 0); + SLIST_FOREACH(p, &addrq, pfrke_workq) + pfr_ktable_winfo_update(kt, p); + } +} + +void +pfr_clean_node_mask(struct pfr_ktable *kt, + struct pfr_kentryworkq *workq) +{ + struct pfr_kentry *p; + + SLIST_FOREACH(p, workq, pfrke_workq) { + pfr_unroute_kentry(kt, p); + } +} + +void +pfr_clstats_kentries(struct pfr_kentryworkq *workq, time_t tzero, int negchange) +{ + struct pfr_kentry *p; + + SLIST_FOREACH(p, workq, pfrke_workq) { + if (negchange) + p->pfrke_flags ^= PFRKE_FLAG_NOT; + if (p->pfrke_counters) { + pool_put(&pfr_kcounters_pl, p->pfrke_counters); + p->pfrke_counters = NULL; + } + p->pfrke_tzero = tzero; + } +} + +void +pfr_reset_feedback(struct pfr_addr *addr, int size, int flags) +{ + struct pfr_addr ad; + int i; + + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + break; + ad.pfra_fback = PFR_FB_NONE; + if (COPYOUT(&ad, addr+i, sizeof(ad), flags)) + break; + } +} + +void +pfr_prepare_network(union sockaddr_union *sa, int af, int net) +{ +#ifdef INET6 + int i; +#endif /* INET6 */ + + bzero(sa, sizeof(*sa)); + switch (af) { + case AF_INET: + sa->sin./* PFLINUX sin_len */; + sa->sin.sin_family = AF_INET; + sa->sin.sin_addr.s_addr = net ? htonl(-1 << (32-net)) : 0; + break; +#ifdef INET6 + case AF_INET6: + sa->sin6.sin6_len = sizeof(sa->sin6); + sa->sin6.sin6_family = AF_INET6; + for (i = 0; i < 4; i++) { + if (net <= 32) { + sa->sin6.sin6_addr.s6_addr32[i] = + net ? htonl(-1 << (32-net)) : 0; + break; + } + sa->sin6.sin6_addr.s6_addr32[i] = 0xFFFFFFFF; + net -= 32; + } + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } +} + +int +pfr_route_kentry(struct pfr_ktable *kt, struct pfr_kentry *ke) +{ + union sockaddr_union mask; + struct radix_node *rn; + struct radix_node_head *head; + + bzero(ke->pfrke_node, sizeof(ke->pfrke_node)); + switch (ke->pfrke_af) { + case AF_INET: + head = kt->pfrkt_ip4; + break; +#ifdef INET6 + case AF_INET6: + head = kt->pfrkt_ip6; + break; +#endif /* INET6 */ + default: + unhandled_af(ke->pfrke_af); + } + + if (KENTRY_NETWORK(ke)) { + pfr_prepare_network(&mask, ke->pfrke_af, ke->pfrke_net); + rn = rn_addroute(&ke->pfrke_sa, &mask, head, ke->pfrke_node, 0); + } else + rn = rn_addroute(&ke->pfrke_sa, NULL, head, ke->pfrke_node, 0); + + return (rn == NULL ? -1 : 0); +} + +int +pfr_unroute_kentry(struct pfr_ktable *kt, struct pfr_kentry *ke) +{ + union sockaddr_union mask; + struct radix_node *rn; + struct radix_node_head *head; + + switch (ke->pfrke_af) { + case AF_INET: + head = kt->pfrkt_ip4; + break; +#ifdef INET6 + case AF_INET6: + head = kt->pfrkt_ip6; + break; +#endif /* INET6 */ + default: + unhandled_af(ke->pfrke_af); + } + + if (KENTRY_NETWORK(ke)) { + pfr_prepare_network(&mask, ke->pfrke_af, ke->pfrke_net); + rn = rn_delete(&ke->pfrke_sa, &mask, head, NULL); + } else + rn = rn_delete(&ke->pfrke_sa, NULL, head, NULL); + + if (rn == NULL) { + DPFPRINTF(LOG_ERR, "pfr_unroute_kentry: delete failed.\n"); + return (-1); + } + return (0); +} + +void +pfr_copyout_addr(struct pfr_addr *ad, struct pfr_kentry *ke) +{ + bzero(ad, sizeof(*ad)); + if (ke == NULL) + return; + ad->pfra_af = ke->pfrke_af; + ad->pfra_net = ke->pfrke_net; + ad->pfra_type = ke->pfrke_type; + if (ke->pfrke_flags & PFRKE_FLAG_NOT) + ad->pfra_not = 1; + + switch (ad->pfra_af) { + case AF_INET: + ad->pfra_ip4addr = ke->pfrke_sa.sin.sin_addr; + break; +#ifdef INET6 + case AF_INET6: + ad->pfra_ip6addr = ke->pfrke_sa.sin6.sin6_addr; + break; +#endif /* INET6 */ + default: + unhandled_af(ad->pfra_af); + } + if (ke->pfrke_counters != NULL) + ad->pfra_states = ke->pfrke_counters->states; + switch (ke->pfrke_type) { + case PFRKE_COST: + ad->pfra_weight = ((struct pfr_kentry_cost *)ke)->weight; + /* FALLTHROUGH */ + case PFRKE_ROUTE: + if (((struct pfr_kentry_route *)ke)->kif != NULL) + strlcpy(ad->pfra_ifname, + ((struct pfr_kentry_route *)ke)->kif->pfik_name, + IFNAMSIZ); + break; + default: + break; + } +} + +int +pfr_walktree(struct radix_node *rn, void *arg, u_int id) +{ + struct pfr_kentry *ke = (struct pfr_kentry *)rn; + struct pfr_walktree *w = arg; + union sockaddr_union mask; + int flags = w->pfrw_flags; + + switch (w->pfrw_op) { + case PFRW_MARK: + ke->pfrke_flags &= ~PFRKE_FLAG_MARK; + break; + case PFRW_SWEEP: + if (ke->pfrke_flags & PFRKE_FLAG_MARK) + break; + /* FALLTHROUGH */ + case PFRW_ENQUEUE: + SLIST_INSERT_HEAD(w->pfrw_workq, ke, pfrke_workq); + w->pfrw_cnt++; + break; + case PFRW_GET_ADDRS: + if (w->pfrw_free-- > 0) { + struct pfr_addr ad; + + pfr_copyout_addr(&ad, ke); + if (copyout(&ad, w->pfrw_addr, sizeof(ad))) + return (EFAULT); + w->pfrw_addr++; + } + break; + case PFRW_GET_ASTATS: + if (w->pfrw_free-- > 0) { + struct pfr_astats as; + + pfr_copyout_addr(&as.pfras_a, ke); + + if (ke->pfrke_counters) { + bcopy(ke->pfrke_counters->pfrkc_packets, + as.pfras_packets, sizeof(as.pfras_packets)); + bcopy(ke->pfrke_counters->pfrkc_bytes, + as.pfras_bytes, sizeof(as.pfras_bytes)); + } else { + bzero(as.pfras_packets, + sizeof(as.pfras_packets)); + bzero(as.pfras_bytes, sizeof(as.pfras_bytes)); + as.pfras_a.pfra_fback = PFR_FB_NOCOUNT; + } + as.pfras_tzero = ke->pfrke_tzero; + + if (COPYOUT(&as, w->pfrw_astats, sizeof(as), flags)) + return (EFAULT); + w->pfrw_astats++; + } + break; + case PFRW_POOL_GET: + if (ke->pfrke_flags & PFRKE_FLAG_NOT) + break; /* negative entries are ignored */ + if (!w->pfrw_cnt--) { + w->pfrw_kentry = ke; + return (1); /* finish search */ + } + break; + case PFRW_DYNADDR_UPDATE: + switch (ke->pfrke_af) { + case AF_INET: + if (w->pfrw_dyn->pfid_acnt4++ > 0) + break; + pfr_prepare_network(&mask, AF_INET, ke->pfrke_net); + w->pfrw_dyn->pfid_addr4 = *SUNION2PF( + &ke->pfrke_sa, AF_INET); + w->pfrw_dyn->pfid_mask4 = *SUNION2PF( + &mask, AF_INET); + break; +#ifdef INET6 + case AF_INET6: + if (w->pfrw_dyn->pfid_acnt6++ > 0) + break; + pfr_prepare_network(&mask, AF_INET6, ke->pfrke_net); + w->pfrw_dyn->pfid_addr6 = *SUNION2PF( + &ke->pfrke_sa, AF_INET6); + w->pfrw_dyn->pfid_mask6 = *SUNION2PF( + &mask, AF_INET6); + break; +#endif /* INET6 */ + default: + unhandled_af(ke->pfrke_af); + } + break; + } + return (0); +} + +int +pfr_clr_tables(struct pfr_table *filter, int *ndel, int flags) +{ + struct pfr_ktableworkq workq; + struct pfr_ktable *p; + int xdel = 0, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_ALLRSETS); + error = pfr_fix_anchor(filter->pfrt_anchor); + if (error) + return (error); + if (pfr_table_count(filter, flags) < 0) + return (ENOENT); + + SLIST_INIT(&workq); + RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) { + if (pfr_skip_table(filter, p, flags)) + continue; + if (!strcmp(p->pfrkt_anchor, PF_RESERVED_ANCHOR)) + continue; + if (!(p->pfrkt_flags & PFR_TFLAG_ACTIVE)) + continue; + p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_ACTIVE; + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + xdel++; + } + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_setflags_ktables(&workq); + } + if (ndel != NULL) + *ndel = xdel; + return (0); +} + +int +pfr_add_tables(struct pfr_table *tbl, int size, int *nadd, int flags) +{ + struct pfr_ktableworkq addq, changeq, auxq; + struct pfr_ktable *p, *q, *r, *n, *w, key; + int i, rv, xadd = 0, error; + time_t tzero = gettime(); + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY); + SLIST_INIT(&addq); + SLIST_INIT(&changeq); + SLIST_INIT(&auxq); + /* pre-allocate all memory outside of locks */ + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags)) + senderr(EFAULT); + error = pfr_validate_table(&key.pfrkt_t, PFR_TFLAG_USRMASK, + flags & PFR_FLAG_USERIOCTL); + if (error) + senderr(EINVAL); + key.pfrkt_flags |= PFR_TFLAG_ACTIVE; + p = pfr_create_ktable(&key.pfrkt_t, tzero, 0, + (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT)); + if (p == NULL) + senderr(ENOMEM); + + /* + * Note: we also pre-allocate a root table here. We keep it + * at ->pfrkt_root, which we must not forget about. + */ + key.pfrkt_flags = 0; + memset(key.pfrkt_anchor, 0, sizeof(key.pfrkt_anchor)); + p->pfrkt_root = pfr_create_ktable(&key.pfrkt_t, 0, 0, + (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT)); + if (p->pfrkt_root == NULL) { + pfr_destroy_ktable(p, 0); + senderr(ENOMEM); + } + + SLIST_FOREACH(q, &auxq, pfrkt_workq) { + if (!pfr_ktable_compare(p, q)) { + /* + * We need no lock here, because `p` is empty, + * there are no rules or shadow tables + * attached. + */ + pfr_destroy_ktable(p->pfrkt_root, 0); + p->pfrkt_root = NULL; + pfr_destroy_ktable(p, 0); + p = NULL; + break; + } + } + if (q != NULL) + continue; + + SLIST_INSERT_HEAD(&auxq, p, pfrkt_workq); + } + + /* + * auxq contains freshly allocated tables with no dups. + * also note there are no rulesets attached, because + * the attach operation requires PF_LOCK(). + */ + NET_LOCK(); + PF_LOCK(); + SLIST_FOREACH_SAFE(n, &auxq, pfrkt_workq, w) { + p = RB_FIND(pfr_ktablehead, &pfr_ktables, n); + if (p == NULL) { + SLIST_REMOVE(&auxq, n, pfr_ktable, pfrkt_workq); + SLIST_INSERT_HEAD(&addq, n, pfrkt_workq); + xadd++; + } else if (!(flags & PFR_FLAG_DUMMY) && + !(p->pfrkt_flags & PFR_TFLAG_ACTIVE)) { + p->pfrkt_nflags = + (p->pfrkt_flags & ~PFR_TFLAG_USRMASK) | + (n->pfrkt_flags & PFR_TFLAG_USRMASK) | + PFR_TFLAG_ACTIVE; + SLIST_INSERT_HEAD(&changeq, p, pfrkt_workq); + } + } + + if (!(flags & PFR_FLAG_DUMMY)) { + /* + * addq contains tables we have to insert and attach rules to + * them + * + * changeq contains tables we need to update + * + * auxq contains pre-allocated tables, we won't use and we must + * free them + */ + SLIST_FOREACH_SAFE(p, &addq, pfrkt_workq, w) { + p->pfrkt_rs = pf_find_or_create_ruleset( + p->pfrkt_anchor); + if (p->pfrkt_rs == NULL) { + xadd--; + SLIST_REMOVE(&addq, p, pfr_ktable, pfrkt_workq); + SLIST_INSERT_HEAD(&auxq, p, pfrkt_workq); + continue; + } + p->pfrkt_rs->tables++; + + if (!p->pfrkt_anchor[0]) { + q = p->pfrkt_root; + p->pfrkt_root = NULL; + SLIST_INSERT_HEAD(&auxq, q, pfrkt_workq); + continue; + } + + /* use pre-allocated root table as a key */ + q = p->pfrkt_root; + p->pfrkt_root = NULL; + r = RB_FIND(pfr_ktablehead, &pfr_ktables, q); + if (r != NULL) { + p->pfrkt_root = r; + SLIST_INSERT_HEAD(&auxq, q, pfrkt_workq); + continue; + } + /* + * there is a chance we could create root table in + * earlier iteration. such table may exist in addq only + * then. + */ + SLIST_FOREACH(r, &addq, pfrkt_workq) { + if (!pfr_ktable_compare(r, q)) { + /* + * `r` is our root table we've found + * earlier, `q` can get dropped. + */ + p->pfrkt_root = r; + SLIST_INSERT_HEAD(&auxq, q, + pfrkt_workq); + break; + } + } + if (r != NULL) + continue; + + q->pfrkt_rs = pf_find_or_create_ruleset(q->pfrkt_anchor); + /* + * root tables are attached to main ruleset, + * because ->pfrkt_anchor[0] == '\0' + */ + KASSERT(q->pfrkt_rs == &pf_main_ruleset); + q->pfrkt_rs->tables++; + p->pfrkt_root = q; + SLIST_INSERT_HEAD(&addq, q, pfrkt_workq); + } + + pfr_insert_ktables(&addq); + pfr_setflags_ktables(&changeq); + } + PF_UNLOCK(); + NET_UNLOCK(); + + pfr_destroy_ktables_aux(&auxq); + if (flags & PFR_FLAG_DUMMY) + pfr_destroy_ktables_aux(&addq); + + if (nadd != NULL) + *nadd = xadd; + return (0); +_bad: + pfr_destroy_ktables_aux(&auxq); + return (rv); +} + +int +pfr_del_tables(struct pfr_table *tbl, int size, int *ndel, int flags) +{ + struct pfr_ktableworkq workq; + struct pfr_ktable *p, *q, key; + int i, xdel = 0, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY); + SLIST_INIT(&workq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags)) + return (EFAULT); + error = pfr_validate_table(&key.pfrkt_t, 0, + flags & PFR_FLAG_USERIOCTL); + if (error) + return (error); + p = RB_FIND(pfr_ktablehead, &pfr_ktables, &key); + if (p != NULL && (p->pfrkt_flags & PFR_TFLAG_ACTIVE)) { + SLIST_FOREACH(q, &workq, pfrkt_workq) + if (!pfr_ktable_compare(p, q)) + goto _skip; + p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_ACTIVE; + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + xdel++; + } +_skip: + ; + } + + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_setflags_ktables(&workq); + } + if (ndel != NULL) + *ndel = xdel; + return (0); +} + +int +pfr_get_tables(struct pfr_table *filter, struct pfr_table *tbl, int *size, + int flags) +{ + struct pfr_ktable *p; + int n, nn, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_ALLRSETS); + error = pfr_fix_anchor(filter->pfrt_anchor); + if (error) + return (error); + n = nn = pfr_table_count(filter, flags); + if (n < 0) + return (ENOENT); + if (n > *size) { + *size = n; + return (0); + } + RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) { + if (pfr_skip_table(filter, p, flags)) + continue; + if (n-- <= 0) + continue; + if (COPYOUT(&p->pfrkt_t, tbl++, sizeof(*tbl), flags)) + return (EFAULT); + } + if (n) { + DPFPRINTF(LOG_ERR, + "pfr_get_tables: corruption detected (%d).", n); + return (ENOTTY); + } + *size = nn; + return (0); +} + +int +pfr_get_tstats(struct pfr_table *filter, struct pfr_tstats *tbl, int *size, + int flags) +{ + struct pfr_ktable *p; + struct pfr_ktableworkq workq; + int n, nn, error; + time_t tzero = gettime(); + + /* XXX PFR_FLAG_CLSTATS disabled */ + ACCEPT_FLAGS(flags, PFR_FLAG_ALLRSETS); + error = pfr_fix_anchor(filter->pfrt_anchor); + if (error) + return (error); + n = nn = pfr_table_count(filter, flags); + if (n < 0) + return (ENOENT); + if (n > *size) { + *size = n; + return (0); + } + SLIST_INIT(&workq); + RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) { + if (pfr_skip_table(filter, p, flags)) + continue; + if (n-- <= 0) + continue; + if (COPYOUT(&p->pfrkt_ts, tbl++, sizeof(*tbl), flags)) + return (EFAULT); + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + } + if (flags & PFR_FLAG_CLSTATS) + pfr_clstats_ktables(&workq, tzero, + flags & PFR_FLAG_ADDRSTOO); + if (n) { + DPFPRINTF(LOG_ERR, + "pfr_get_tstats: corruption detected (%d).", n); + return (ENOTTY); + } + *size = nn; + return (0); +} + +int +pfr_clr_tstats(struct pfr_table *tbl, int size, int *nzero, int flags) +{ + struct pfr_ktableworkq workq; + struct pfr_ktable *p, key; + int i, xzero = 0, error; + time_t tzero = gettime(); + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_ADDRSTOO); + SLIST_INIT(&workq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags)) + return (EFAULT); + error = pfr_validate_table(&key.pfrkt_t, 0, 0); + if (error) + return (error); + p = RB_FIND(pfr_ktablehead, &pfr_ktables, &key); + if (p != NULL) { + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + xzero++; + } + } + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_clstats_ktables(&workq, tzero, flags & PFR_FLAG_ADDRSTOO); + } + if (nzero != NULL) + *nzero = xzero; + return (0); +} + +int +pfr_set_tflags(struct pfr_table *tbl, int size, int setflag, int clrflag, + int *nchange, int *ndel, int flags) +{ + struct pfr_ktableworkq workq; + struct pfr_ktable *p, *q, key; + int i, xchange = 0, xdel = 0, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY); + if ((setflag & ~PFR_TFLAG_USRMASK) || + (clrflag & ~PFR_TFLAG_USRMASK) || + (setflag & clrflag)) + return (EINVAL); + SLIST_INIT(&workq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags)) + return (EFAULT); + error = pfr_validate_table(&key.pfrkt_t, 0, + flags & PFR_FLAG_USERIOCTL); + if (error) + return (error); + p = RB_FIND(pfr_ktablehead, &pfr_ktables, &key); + if (p != NULL && (p->pfrkt_flags & PFR_TFLAG_ACTIVE)) { + p->pfrkt_nflags = (p->pfrkt_flags | setflag) & + ~clrflag; + if (p->pfrkt_nflags == p->pfrkt_flags) + goto _skip; + SLIST_FOREACH(q, &workq, pfrkt_workq) + if (!pfr_ktable_compare(p, q)) + goto _skip; + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + if ((p->pfrkt_flags & PFR_TFLAG_PERSIST) && + (clrflag & PFR_TFLAG_PERSIST) && + !(p->pfrkt_flags & PFR_TFLAG_REFERENCED)) + xdel++; + else + xchange++; + } +_skip: + ; + } + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_setflags_ktables(&workq); + } + if (nchange != NULL) + *nchange = xchange; + if (ndel != NULL) + *ndel = xdel; + return (0); +} + +int +pfr_ina_begin(struct pfr_table *trs, u_int32_t *ticket, int *ndel, int flags) +{ + struct pfr_ktableworkq workq; + struct pfr_ktable *p; + struct pf_ruleset *rs; + int xdel = 0; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY); + rs = pf_find_or_create_ruleset(trs->pfrt_anchor); + if (rs == NULL) + return (ENOMEM); + SLIST_INIT(&workq); + RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) { + if (!(p->pfrkt_flags & PFR_TFLAG_INACTIVE) || + pfr_skip_table(trs, p, 0)) + continue; + p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_INACTIVE; + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + xdel++; + } + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_setflags_ktables(&workq); + if (ticket != NULL) + *ticket = ++rs->tticket; + rs->topen = 1; + } else + pf_remove_if_empty_ruleset(rs); + if (ndel != NULL) + *ndel = xdel; + return (0); +} + +int +pfr_ina_define(struct pfr_table *tbl, struct pfr_addr *addr, int size, + int *nadd, int *naddr, u_int32_t ticket, int flags) +{ + struct pfr_ktableworkq tableq; + struct pfr_kentryworkq addrq; + struct pfr_ktable *kt, *rt, *shadow, key; + struct pfr_kentry *p; + struct pfr_addr ad; + struct pf_ruleset *rs; + int i, rv, xadd = 0, xaddr = 0, error; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_ADDRSTOO); + if (size && !(flags & PFR_FLAG_ADDRSTOO)) + return (EINVAL); + error = pfr_validate_table(tbl, PFR_TFLAG_USRMASK, + flags & PFR_FLAG_USERIOCTL); + if (error) + return (error); + rs = pf_find_ruleset(tbl->pfrt_anchor); + if (rs == NULL || !rs->topen || ticket != rs->tticket) + return (EBUSY); + tbl->pfrt_flags |= PFR_TFLAG_INACTIVE; + SLIST_INIT(&tableq); + kt = RB_FIND(pfr_ktablehead, &pfr_ktables, (struct pfr_ktable *)tbl); + if (kt == NULL) { + kt = pfr_create_ktable(tbl, 0, 1, + (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT)); + if (kt == NULL) + return (ENOMEM); + SLIST_INSERT_HEAD(&tableq, kt, pfrkt_workq); + xadd++; + if (!tbl->pfrt_anchor[0]) + goto _skip; + + /* find or create root table */ + bzero(&key, sizeof(key)); + strlcpy(key.pfrkt_name, tbl->pfrt_name, sizeof(key.pfrkt_name)); + rt = RB_FIND(pfr_ktablehead, &pfr_ktables, &key); + if (rt != NULL) { + kt->pfrkt_root = rt; + goto _skip; + } + rt = pfr_create_ktable(&key.pfrkt_t, 0, 1, + (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT)); + if (rt == NULL) { + pfr_destroy_ktables(&tableq, 0); + return (ENOMEM); + } + SLIST_INSERT_HEAD(&tableq, rt, pfrkt_workq); + kt->pfrkt_root = rt; + } else if (!(kt->pfrkt_flags & PFR_TFLAG_INACTIVE)) + xadd++; +_skip: + shadow = pfr_create_ktable(tbl, 0, 0, + (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT)); + if (shadow == NULL) { + pfr_destroy_ktables(&tableq, 0); + return (ENOMEM); + } + SLIST_INIT(&addrq); + for (i = 0; i < size; i++) { + YIELD(flags & PFR_FLAG_USERIOCTL); + if (COPYIN(addr+i, &ad, sizeof(ad), flags)) + senderr(EFAULT); + if (pfr_validate_addr(&ad)) + senderr(EINVAL); + if (pfr_lookup_addr(shadow, &ad, 1) != NULL) + continue; + p = pfr_create_kentry(&ad); + if (p == NULL) + senderr(ENOMEM); + if (pfr_route_kentry(shadow, p)) { + pfr_destroy_kentry(p); + continue; + } + SLIST_INSERT_HEAD(&addrq, p, pfrke_workq); + xaddr++; + if (p->pfrke_type == PFRKE_COST) + kt->pfrkt_refcntcost++; + pfr_ktable_winfo_update(kt, p); + } + if (!(flags & PFR_FLAG_DUMMY)) { + if (kt->pfrkt_shadow != NULL) + pfr_destroy_ktable(kt->pfrkt_shadow, 1); + kt->pfrkt_flags |= PFR_TFLAG_INACTIVE; + pfr_insert_ktables(&tableq); + shadow->pfrkt_cnt = (flags & PFR_FLAG_ADDRSTOO) ? + xaddr : NO_ADDRESSES; + kt->pfrkt_shadow = shadow; + } else { + pfr_clean_node_mask(shadow, &addrq); + pfr_destroy_ktable(shadow, 0); + pfr_destroy_ktables(&tableq, 0); + pfr_destroy_kentries(&addrq); + } + if (nadd != NULL) + *nadd = xadd; + if (naddr != NULL) + *naddr = xaddr; + return (0); +_bad: + pfr_destroy_ktable(shadow, 0); + pfr_destroy_ktables(&tableq, 0); + pfr_destroy_kentries(&addrq); + return (rv); +} + +int +pfr_ina_rollback(struct pfr_table *trs, u_int32_t ticket, int *ndel, int flags) +{ + struct pfr_ktableworkq workq; + struct pfr_ktable *p; + struct pf_ruleset *rs; + int xdel = 0; + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY); + rs = pf_find_ruleset(trs->pfrt_anchor); + if (rs == NULL || !rs->topen || ticket != rs->tticket) + return (0); + SLIST_INIT(&workq); + RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) { + if (!(p->pfrkt_flags & PFR_TFLAG_INACTIVE) || + pfr_skip_table(trs, p, 0)) + continue; + p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_INACTIVE; + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + xdel++; + } + if (!(flags & PFR_FLAG_DUMMY)) { + pfr_setflags_ktables(&workq); + rs->topen = 0; + pf_remove_if_empty_ruleset(rs); + } + if (ndel != NULL) + *ndel = xdel; + return (0); +} + +int +pfr_ina_commit(struct pfr_table *trs, u_int32_t ticket, int *nadd, + int *nchange, int flags) +{ + struct pfr_ktable *p, *q; + struct pfr_ktableworkq workq; + struct pf_ruleset *rs; + int xadd = 0, xchange = 0; + time_t tzero = gettime(); + + ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY); + rs = pf_find_ruleset(trs->pfrt_anchor); + if (rs == NULL || !rs->topen || ticket != rs->tticket) + return (EBUSY); + + SLIST_INIT(&workq); + RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) { + if (!(p->pfrkt_flags & PFR_TFLAG_INACTIVE) || + pfr_skip_table(trs, p, 0)) + continue; + SLIST_INSERT_HEAD(&workq, p, pfrkt_workq); + if (p->pfrkt_flags & PFR_TFLAG_ACTIVE) + xchange++; + else + xadd++; + } + + if (!(flags & PFR_FLAG_DUMMY)) { + SLIST_FOREACH_SAFE(p, &workq, pfrkt_workq, q) { + pfr_commit_ktable(p, tzero); + } + rs->topen = 0; + pf_remove_if_empty_ruleset(rs); + } + if (nadd != NULL) + *nadd = xadd; + if (nchange != NULL) + *nchange = xchange; + + return (0); +} + +void +pfr_commit_ktable(struct pfr_ktable *kt, time_t tzero) +{ + struct pfr_ktable *shadow = kt->pfrkt_shadow; + int nflags; + + if (shadow->pfrkt_cnt == NO_ADDRESSES) { + if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + pfr_clstats_ktable(kt, tzero, 1); + } else if (kt->pfrkt_flags & PFR_TFLAG_ACTIVE) { + /* kt might contain addresses */ + struct pfr_kentryworkq addrq, addq, changeq, delq, garbageq; + struct pfr_kentry *p, *q; + struct pfr_addr ad; + + pfr_enqueue_addrs(shadow, &addrq, NULL, 0); + pfr_mark_addrs(kt); + SLIST_INIT(&addq); + SLIST_INIT(&changeq); + SLIST_INIT(&delq); + SLIST_INIT(&garbageq); + pfr_clean_node_mask(shadow, &addrq); + while ((p = SLIST_FIRST(&addrq)) != NULL) { + SLIST_REMOVE_HEAD(&addrq, pfrke_workq); + pfr_copyout_addr(&ad, p); + q = pfr_lookup_addr(kt, &ad, 1); + if (q != NULL) { + if ((q->pfrke_flags & PFRKE_FLAG_NOT) != + (p->pfrke_flags & PFRKE_FLAG_NOT)) + SLIST_INSERT_HEAD(&changeq, q, + pfrke_workq); + q->pfrke_flags |= PFRKE_FLAG_MARK; + SLIST_INSERT_HEAD(&garbageq, p, pfrke_workq); + } else { + p->pfrke_tzero = tzero; + SLIST_INSERT_HEAD(&addq, p, pfrke_workq); + } + } + pfr_enqueue_addrs(kt, &delq, NULL, ENQUEUE_UNMARKED_ONLY); + pfr_insert_kentries(kt, &addq, tzero); + pfr_remove_kentries(kt, &delq); + pfr_clstats_kentries(&changeq, tzero, INVERT_NEG_FLAG); + pfr_destroy_kentries(&garbageq); + } else { + /* kt cannot contain addresses */ + SWAP(struct radix_node_head *, kt->pfrkt_ip4, + shadow->pfrkt_ip4); + SWAP(struct radix_node_head *, kt->pfrkt_ip6, + shadow->pfrkt_ip6); + SWAP(int, kt->pfrkt_cnt, shadow->pfrkt_cnt); + pfr_clstats_ktable(kt, tzero, 1); + } + nflags = ((shadow->pfrkt_flags & PFR_TFLAG_USRMASK) | + (kt->pfrkt_flags & PFR_TFLAG_SETMASK) | PFR_TFLAG_ACTIVE) + & ~PFR_TFLAG_INACTIVE; + pfr_destroy_ktable(shadow, 0); + kt->pfrkt_shadow = NULL; + pfr_setflags_ktable(kt, nflags); +} + +int +pfr_validate_table(struct pfr_table *tbl, int allowedflags, int no_reserved) +{ + int error; + + if (!tbl->pfrt_name[0]) + return (EINVAL); + if (no_reserved && !strcmp(tbl->pfrt_anchor, PF_RESERVED_ANCHOR)) + return (EINVAL); + if (strnlen(tbl->pfrt_name, sizeof(tbl->pfrt_name)) >= + sizeof(tbl->pfrt_name)) + return (ENAMETOOLONG); + error = pfr_fix_anchor(tbl->pfrt_anchor); + if (error) + return (error); + if (tbl->pfrt_flags & ~allowedflags) + return (EINVAL); + return (0); +} + +/* + * Rewrite anchors referenced by tables to remove slashes + * and check for validity. + */ +int +pfr_fix_anchor(char *anchor) +{ + size_t siz = PATH_MAX; + + if (strnlen(anchor, PATH_MAX) >= PATH_MAX) + return (ENAMETOOLONG); + if (anchor[0] == '/') { + char *path; + int off; + + path = anchor; + off = 1; + while (*++path == '/') + off++; + bcopy(path, anchor, siz - off); + memset(anchor + siz - off, 0, off); + } + return (0); +} + +int +pfr_table_count(struct pfr_table *filter, int flags) +{ + struct pf_ruleset *rs; + + if (flags & PFR_FLAG_ALLRSETS) + return (pfr_ktable_cnt); + if (filter->pfrt_anchor[0]) { + rs = pf_find_ruleset(filter->pfrt_anchor); + return ((rs != NULL) ? rs->tables : -1); + } + return (pf_main_ruleset.tables); +} + +int +pfr_skip_table(struct pfr_table *filter, struct pfr_ktable *kt, int flags) +{ + if (flags & PFR_FLAG_ALLRSETS) + return (0); + if (strcmp(filter->pfrt_anchor, kt->pfrkt_anchor)) + return (1); + return (0); +} + +void +pfr_insert_ktables(struct pfr_ktableworkq *workq) +{ + struct pfr_ktable *p; + + SLIST_FOREACH(p, workq, pfrkt_workq) + pfr_insert_ktable(p); +} + +void +pfr_insert_ktable(struct pfr_ktable *kt) +{ + RB_INSERT(pfr_ktablehead, &pfr_ktables, kt); + pfr_ktable_cnt++; + if (kt->pfrkt_root != NULL) + if (!kt->pfrkt_root->pfrkt_refcnt[PFR_REFCNT_ANCHOR]++) + pfr_setflags_ktable(kt->pfrkt_root, + kt->pfrkt_root->pfrkt_flags|PFR_TFLAG_REFDANCHOR); +} + +void +pfr_setflags_ktables(struct pfr_ktableworkq *workq) +{ + struct pfr_ktable *p, *q; + + SLIST_FOREACH_SAFE(p, workq, pfrkt_workq, q) { + pfr_setflags_ktable(p, p->pfrkt_nflags); + } +} + +void +pfr_setflags_ktable(struct pfr_ktable *kt, int newf) +{ + struct pfr_kentryworkq addrq; + + if (!(newf & PFR_TFLAG_REFERENCED) && + !(newf & PFR_TFLAG_REFDANCHOR) && + !(newf & PFR_TFLAG_PERSIST)) + newf &= ~PFR_TFLAG_ACTIVE; + if (!(newf & PFR_TFLAG_ACTIVE)) + newf &= ~PFR_TFLAG_USRMASK; + if (!(newf & PFR_TFLAG_SETMASK)) { + RB_REMOVE(pfr_ktablehead, &pfr_ktables, kt); + if (kt->pfrkt_root != NULL) + if (!--kt->pfrkt_root->pfrkt_refcnt[PFR_REFCNT_ANCHOR]) + pfr_setflags_ktable(kt->pfrkt_root, + kt->pfrkt_root->pfrkt_flags & + ~PFR_TFLAG_REFDANCHOR); + pfr_destroy_ktable(kt, 1); + pfr_ktable_cnt--; + return; + } + if (!(newf & PFR_TFLAG_ACTIVE) && kt->pfrkt_cnt) { + pfr_enqueue_addrs(kt, &addrq, NULL, 0); + pfr_remove_kentries(kt, &addrq); + } + if (!(newf & PFR_TFLAG_INACTIVE) && kt->pfrkt_shadow != NULL) { + pfr_destroy_ktable(kt->pfrkt_shadow, 1); + kt->pfrkt_shadow = NULL; + } + kt->pfrkt_flags = newf; +} + +void +pfr_clstats_ktables(struct pfr_ktableworkq *workq, time_t tzero, int recurse) +{ + struct pfr_ktable *p; + + SLIST_FOREACH(p, workq, pfrkt_workq) + pfr_clstats_ktable(p, tzero, recurse); +} + +void +pfr_clstats_ktable(struct pfr_ktable *kt, time_t tzero, int recurse) +{ + struct pfr_kentryworkq addrq; + + if (recurse) { + pfr_enqueue_addrs(kt, &addrq, NULL, 0); + pfr_clstats_kentries(&addrq, tzero, 0); + } + bzero(kt->pfrkt_packets, sizeof(kt->pfrkt_packets)); + bzero(kt->pfrkt_bytes, sizeof(kt->pfrkt_bytes)); + kt->pfrkt_match = kt->pfrkt_nomatch = 0; + kt->pfrkt_tzero = tzero; +} + +struct pfr_ktable * +pfr_create_ktable(struct pfr_table *tbl, time_t tzero, int attachruleset, + int wait) +{ + struct pfr_ktable *kt; + struct pf_ruleset *rs; + + kt = pool_get(&pfr_ktable_pl, wait|PR_ZERO|PR_LIMITFAIL); + if (kt == NULL) + return (NULL); + kt->pfrkt_t = *tbl; + + if (attachruleset) { + PF_ASSERT_LOCKED(); + rs = pf_find_or_create_ruleset(tbl->pfrt_anchor); + if (!rs) { + pfr_destroy_ktable(kt, 0); + return (NULL); + } + kt->pfrkt_rs = rs; + rs->tables++; + } + + if (!rn_inithead((void **)&kt->pfrkt_ip4, + offsetof(struct sockaddr_in, sin_addr)) || + !rn_inithead((void **)&kt->pfrkt_ip6, + offsetof(struct sockaddr_in6, sin6_addr))) { + pfr_destroy_ktable(kt, 0); + return (NULL); + } + kt->pfrkt_tzero = tzero; + kt->pfrkt_refcntcost = 0; + kt->pfrkt_gcdweight = 0; + kt->pfrkt_maxweight = 1; + + return (kt); +} + +void +pfr_destroy_ktables(struct pfr_ktableworkq *workq, int flushaddr) +{ + struct pfr_ktable *p; + + while ((p = SLIST_FIRST(workq)) != NULL) { + SLIST_REMOVE_HEAD(workq, pfrkt_workq); + pfr_destroy_ktable(p, flushaddr); + } +} + +void +pfr_destroy_ktables_aux(struct pfr_ktableworkq *auxq) +{ + struct pfr_ktable *p; + + while ((p = SLIST_FIRST(auxq)) != NULL) { + SLIST_REMOVE_HEAD(auxq, pfrkt_workq); + /* + * There must be no extra data (rules, shadow tables, ...) + * attached, because auxq holds just empty memory to be + * initialized. Therefore we can also be called with no lock. + */ + if (p->pfrkt_root != NULL) { + KASSERT(p->pfrkt_root->pfrkt_rs == NULL); + KASSERT(p->pfrkt_root->pfrkt_shadow == NULL); + KASSERT(p->pfrkt_root->pfrkt_root == NULL); + pfr_destroy_ktable(p->pfrkt_root, 0); + p->pfrkt_root = NULL; + } + KASSERT(p->pfrkt_rs == NULL); + KASSERT(p->pfrkt_shadow == NULL); + pfr_destroy_ktable(p, 0); + } +} + +void +pfr_destroy_ktable(struct pfr_ktable *kt, int flushaddr) +{ + struct pfr_kentryworkq addrq; + + if (flushaddr) { + pfr_enqueue_addrs(kt, &addrq, NULL, 0); + pfr_clean_node_mask(kt, &addrq); + pfr_destroy_kentries(&addrq); + } + if (kt->pfrkt_ip4 != NULL) + free(kt->pfrkt_ip4, M_RTABLE, sizeof(*kt->pfrkt_ip4)); + if (kt->pfrkt_ip6 != NULL) + free(kt->pfrkt_ip6, M_RTABLE, sizeof(*kt->pfrkt_ip6)); + if (kt->pfrkt_shadow != NULL) + pfr_destroy_ktable(kt->pfrkt_shadow, flushaddr); + if (kt->pfrkt_rs != NULL) { + kt->pfrkt_rs->tables--; + pf_remove_if_empty_ruleset(kt->pfrkt_rs); + } + pool_put(&pfr_ktable_pl, kt); +} + +int +pfr_ktable_compare(struct pfr_ktable *p, struct pfr_ktable *q) +{ + int d; + + if ((d = strncmp(p->pfrkt_name, q->pfrkt_name, PF_TABLE_NAME_SIZE))) + return (d); + return (strcmp(p->pfrkt_anchor, q->pfrkt_anchor)); +} + +struct pfr_ktable * +pfr_lookup_table(struct pfr_table *tbl) +{ + /* struct pfr_ktable start like a struct pfr_table */ + return (RB_FIND(pfr_ktablehead, &pfr_ktables, + (struct pfr_ktable *)tbl)); +} + +int +pfr_match_addr(struct pfr_ktable *kt, struct pf_addr *a, sa_family_t af) +{ + struct pfr_kentry *ke = NULL; + int match; + + ke = pfr_kentry_byaddr(kt, a, af, 0); + + match = (ke && !(ke->pfrke_flags & PFRKE_FLAG_NOT)); + if (match) + kt->pfrkt_match++; + else + kt->pfrkt_nomatch++; + + return (match); +} + +struct pfr_kentry * +pfr_kentry_byaddr(struct pfr_ktable *kt, struct pf_addr *a, sa_family_t af, + int exact) +{ + struct pfr_kentry *ke = NULL; + struct sockaddr_in tmp4; +#ifdef INET6 + struct sockaddr_in6 tmp6; +#endif /* INET6 */ + + kt = pfr_ktable_select_active(kt); + if (kt == NULL) + return (0); + + switch (af) { + case AF_INET: + bzero(&tmp4, sizeof(tmp4)); + tmp4./* PFLINUX sin_len */; + tmp4.sin_family = AF_INET; + tmp4.sin_addr.s_addr = a->addr32[0]; + ke = (struct pfr_kentry *)rn_match(&tmp4, kt->pfrkt_ip4); + break; +#ifdef INET6 + case AF_INET6: + bzero(&tmp6, sizeof(tmp6)); + tmp6.sin6_len = sizeof(tmp6); + tmp6.sin6_family = AF_INET6; + bcopy(a, &tmp6.sin6_addr, sizeof(tmp6.sin6_addr)); + ke = (struct pfr_kentry *)rn_match(&tmp6, kt->pfrkt_ip6); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + if (exact && ke && KENTRY_NETWORK(ke)) + ke = NULL; + + return (ke); +} + +void +pfr_update_stats(struct pfr_ktable *kt, struct pf_addr *a, struct pf_pdesc *pd, + int op, int notrule) +{ + struct pfr_kentry *ke = NULL; + struct sockaddr_in tmp4; +#ifdef INET6 + struct sockaddr_in6 tmp6; +#endif /* INET6 */ + sa_family_t af = pd->af; + u_int64_t len = pd->tot_len; + int dir_idx = (pd->dir == PF_OUT); + int op_idx; + + kt = pfr_ktable_select_active(kt); + if (kt == NULL) + return; + + switch (af) { + case AF_INET: + bzero(&tmp4, sizeof(tmp4)); + tmp4./* PFLINUX sin_len */; + tmp4.sin_family = AF_INET; + tmp4.sin_addr.s_addr = a->addr32[0]; + ke = (struct pfr_kentry *)rn_match(&tmp4, kt->pfrkt_ip4); + break; +#ifdef INET6 + case AF_INET6: + bzero(&tmp6, sizeof(tmp6)); + tmp6.sin6_len = sizeof(tmp6); + tmp6.sin6_family = AF_INET6; + bcopy(a, &tmp6.sin6_addr, sizeof(tmp6.sin6_addr)); + ke = (struct pfr_kentry *)rn_match(&tmp6, kt->pfrkt_ip6); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + + switch (op) { + case PF_PASS: + op_idx = PFR_OP_PASS; + break; + case PF_MATCH: + op_idx = PFR_OP_MATCH; + break; + case PF_DROP: + op_idx = PFR_OP_BLOCK; + break; + default: + panic("unhandled op"); + } + + if ((ke == NULL || (ke->pfrke_flags & PFRKE_FLAG_NOT)) != notrule) { + if (op_idx != PFR_OP_PASS) + DPFPRINTF(LOG_DEBUG, + "pfr_update_stats: assertion failed."); + op_idx = PFR_OP_XPASS; + } + kt->pfrkt_packets[dir_idx][op_idx]++; + kt->pfrkt_bytes[dir_idx][op_idx] += len; + if (ke != NULL && op_idx != PFR_OP_XPASS && + (kt->pfrkt_flags & PFR_TFLAG_COUNTERS)) { + if (ke->pfrke_counters == NULL) + ke->pfrke_counters = pool_get(&pfr_kcounters_pl, + PR_NOWAIT | PR_ZERO); + if (ke->pfrke_counters != NULL) { + ke->pfrke_counters->pfrkc_packets[dir_idx][op_idx]++; + ke->pfrke_counters->pfrkc_bytes[dir_idx][op_idx] += len; + } + } +} + +struct pfr_ktable * +pfr_attach_table(struct pf_ruleset *rs, char *name, int wait) +{ + struct pfr_ktable *kt, *rt; + struct pfr_table tbl; + struct pf_anchor *ac = rs->anchor; + + bzero(&tbl, sizeof(tbl)); + strlcpy(tbl.pfrt_name, name, sizeof(tbl.pfrt_name)); + if (ac != NULL) + strlcpy(tbl.pfrt_anchor, ac->path, sizeof(tbl.pfrt_anchor)); + kt = pfr_lookup_table(&tbl); + if (kt == NULL) { + /* + * Hold rs across the table creation below. A new table takes + * a reference on the ruleset, and pfr_destroy_ktable() drops + * it again on the failure paths, which lets + * pf_remove_if_empty_ruleset() free the anchor rs points into + * while our caller still holds rs. + */ + rs->tables++; + kt = pfr_create_ktable(&tbl, gettime(), 1, wait); + if (kt == NULL) { + rs->tables--; + return (NULL); + } + if (ac != NULL) { + bzero(tbl.pfrt_anchor, sizeof(tbl.pfrt_anchor)); + rt = pfr_lookup_table(&tbl); + if (rt == NULL) { + rt = pfr_create_ktable(&tbl, 0, 1, wait); + if (rt == NULL) { + pfr_destroy_ktable(kt, 0); + rs->tables--; + return (NULL); + } + pfr_insert_ktable(rt); + } + kt->pfrkt_root = rt; + } + pfr_insert_ktable(kt); + rs->tables--; + } + if (!kt->pfrkt_refcnt[PFR_REFCNT_RULE]++) + pfr_setflags_ktable(kt, kt->pfrkt_flags|PFR_TFLAG_REFERENCED); + return (kt); +} + +void +pfr_detach_table(struct pfr_ktable *kt) +{ + if (kt->pfrkt_refcnt[PFR_REFCNT_RULE] <= 0) + DPFPRINTF(LOG_NOTICE, "pfr_detach_table: refcount = %d.", + kt->pfrkt_refcnt[PFR_REFCNT_RULE]); + else if (!--kt->pfrkt_refcnt[PFR_REFCNT_RULE]) + pfr_setflags_ktable(kt, kt->pfrkt_flags&~PFR_TFLAG_REFERENCED); +} + +int +pfr_islinklocal(sa_family_t af, struct pf_addr *addr) +{ +#ifdef INET6 + if (af == AF_INET6 && IN6_IS_ADDR_LINKLOCAL(&addr->v6)) + return (1); +#endif /* INET6 */ + return (0); +} + +int +pfr_pool_get(struct pf_pool *rpool, struct pf_addr **raddr, + struct pf_addr **rmask, sa_family_t af) +{ + struct pfr_ktable *kt; + struct pfr_kentry *ke, *ke2; + struct pf_addr *addr, *counter; + union sockaddr_union mask; + struct sockaddr_in tmp4; +#ifdef INET6 + struct sockaddr_in6 tmp6; +#endif + int startidx, idx = -1, loop = 0, use_counter = 0; + + switch (af) { + case AF_INET: + bzero(&tmp4, sizeof(tmp4)); + tmp4./* PFLINUX sin_len */; + tmp4.sin_family = AF_INET; + addr = (struct pf_addr *)&tmp4.sin_addr; + break; +#ifdef INET6 + case AF_INET6: + bzero(&tmp6, sizeof(tmp6)); + tmp6.sin6_len = sizeof(tmp6); + tmp6.sin6_family = AF_INET6; + addr = (struct pf_addr *)&tmp6.sin6_addr; + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + + if (rpool->addr.type == PF_ADDR_TABLE) + kt = rpool->addr.p.tbl; + else if (rpool->addr.type == PF_ADDR_DYNIFTL) + kt = rpool->addr.p.dyn->pfid_kt; + else + return (-1); + kt = pfr_ktable_select_active(kt); + if (kt == NULL) + return (-1); + + counter = &rpool->counter; + idx = rpool->tblidx; + if (idx < 0 || idx >= kt->pfrkt_cnt) + idx = 0; + else + use_counter = 1; + startidx = idx; + + _next_block: + if (loop && startidx == idx) { + kt->pfrkt_nomatch++; + return (1); + } + + ke = pfr_kentry_byidx(kt, idx, af); + if (ke == NULL) { + /* we don't have this idx, try looping */ + if (loop || (ke = pfr_kentry_byidx(kt, 0, af)) == NULL) { + kt->pfrkt_nomatch++; + return (1); + } + idx = 0; + loop++; + } + + /* Get current weight for weighted round-robin */ + if (idx == 0 && use_counter == 1 && kt->pfrkt_refcntcost > 0) { + rpool->curweight = rpool->curweight - kt->pfrkt_gcdweight; + + if (rpool->curweight < 1) + rpool->curweight = kt->pfrkt_maxweight; + } + + pfr_prepare_network(&pfr_mask, af, ke->pfrke_net); + *raddr = SUNION2PF(&ke->pfrke_sa, af); + *rmask = SUNION2PF(&pfr_mask, af); + + if (use_counter && !PF_AZERO(counter, af)) { + /* is supplied address within block? */ + if (!pf_match_addr(0, *raddr, *rmask, counter, af)) { + /* no, go to next block in table */ + idx++; + use_counter = 0; + goto _next_block; + } + pf_addrcpy(addr, counter, af); + } else { + /* use first address of block */ + pf_addrcpy(addr, *raddr, af); + } + + if (!KENTRY_NETWORK(ke)) { + /* this is a single IP address - no possible nested block */ + if (rpool->addr.type == PF_ADDR_DYNIFTL && + pfr_islinklocal(af, addr)) { + idx++; + goto _next_block; + } + pf_addrcpy(counter, addr, af); + rpool->tblidx = idx; + kt->pfrkt_match++; + rpool->states = 0; + if (ke->pfrke_counters != NULL) + rpool->states = ke->pfrke_counters->states; + switch (ke->pfrke_type) { + case PFRKE_COST: + rpool->weight = ((struct pfr_kentry_cost *)ke)->weight; + /* FALLTHROUGH */ + case PFRKE_ROUTE: + rpool->kif = ((struct pfr_kentry_route *)ke)->kif; + break; + default: + rpool->weight = 1; + break; + } + return (0); + } + for (;;) { + /* we don't want to use a nested block */ + switch (af) { + case AF_INET: + ke2 = (struct pfr_kentry *)rn_match(&tmp4, + kt->pfrkt_ip4); + break; +#ifdef INET6 + case AF_INET6: + ke2 = (struct pfr_kentry *)rn_match(&tmp6, + kt->pfrkt_ip6); + break; +#endif /* INET6 */ + default: + unhandled_af(af); + } + if (ke2 == ke) { + /* lookup return the same block - perfect */ + if (rpool->addr.type == PF_ADDR_DYNIFTL && + pfr_islinklocal(af, addr)) + goto _next_entry; + pf_addrcpy(counter, addr, af); + rpool->tblidx = idx; + kt->pfrkt_match++; + rpool->states = 0; + if (ke->pfrke_counters != NULL) + rpool->states = ke->pfrke_counters->states; + switch (ke->pfrke_type) { + case PFRKE_COST: + rpool->weight = + ((struct pfr_kentry_cost *)ke)->weight; + /* FALLTHROUGH */ + case PFRKE_ROUTE: + rpool->kif = ((struct pfr_kentry_route *)ke)->kif; + break; + default: + rpool->weight = 1; + break; + } + return (0); + } +_next_entry: + /* we need to increase the counter past the nested block */ + pfr_prepare_network(&mask, af, ke2->pfrke_net); + pf_poolmask(addr, addr, SUNION2PF(&mask, af), &pfr_ffaddr, af); + pf_addr_inc(addr, af); + if (!pf_match_addr(0, *raddr, *rmask, addr, af)) { + /* ok, we reached the end of our main block */ + /* go to next block in table */ + idx++; + use_counter = 0; + goto _next_block; + } + } +} + +struct pfr_kentry * +pfr_kentry_byidx(struct pfr_ktable *kt, int idx, int af) +{ + struct pfr_walktree w; + + bzero(&w, sizeof(w)); + w.pfrw_op = PFRW_POOL_GET; + w.pfrw_cnt = idx; + + switch (af) { + case AF_INET: + rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w); + return (w.pfrw_kentry); +#ifdef INET6 + case AF_INET6: + rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w); + return (w.pfrw_kentry); +#endif /* INET6 */ + default: + return (NULL); + } +} + +/* Added for load balancing state counter use. */ +int +pfr_states_increase(struct pfr_ktable *kt, struct pf_addr *addr, int af) +{ + struct pfr_kentry *ke; + + ke = pfr_kentry_byaddr(kt, addr, af, 1); + if (ke == NULL) + return (-1); + + if (ke->pfrke_counters == NULL) + ke->pfrke_counters = pool_get(&pfr_kcounters_pl, + PR_NOWAIT | PR_ZERO); + if (ke->pfrke_counters == NULL) + return (-1); + + ke->pfrke_counters->states++; + return ke->pfrke_counters->states; +} + +/* Added for load balancing state counter use. */ +int +pfr_states_decrease(struct pfr_ktable *kt, struct pf_addr *addr, int af) +{ + struct pfr_kentry *ke; + + ke = pfr_kentry_byaddr(kt, addr, af, 1); + if (ke == NULL) + return (-1); + + if (ke->pfrke_counters == NULL) + ke->pfrke_counters = pool_get(&pfr_kcounters_pl, + PR_NOWAIT | PR_ZERO); + if (ke->pfrke_counters == NULL) + return (-1); + + if (ke->pfrke_counters->states > 0) + ke->pfrke_counters->states--; + else + DPFPRINTF(LOG_DEBUG, + "pfr_states_decrease: states-- when states <= 0"); + + return ke->pfrke_counters->states; +} + +void +pfr_dynaddr_update(struct pfr_ktable *kt, struct pfi_dynaddr *dyn) +{ + struct pfr_walktree w; + + bzero(&w, sizeof(w)); + w.pfrw_op = PFRW_DYNADDR_UPDATE; + w.pfrw_dyn = dyn; + + dyn->pfid_acnt4 = 0; + dyn->pfid_acnt6 = 0; + switch (dyn->pfid_af) { + case AF_UNSPEC: /* look up all both addresses IPv4 + IPv6 */ + rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w); + rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w); + break; + case AF_INET: + rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w); + break; +#ifdef INET6 + case AF_INET6: + rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w); + break; +#endif /* INET6 */ + default: + unhandled_af(dyn->pfid_af); + } +} + +void +pfr_ktable_winfo_update(struct pfr_ktable *kt, struct pfr_kentry *p) { + /* + * If cost flag is set, + * gcdweight is needed for round-robin. + */ + if (kt->pfrkt_refcntcost > 0) { + u_int16_t weight; + + weight = (p->pfrke_type == PFRKE_COST) ? + ((struct pfr_kentry_cost *)p)->weight : 1; + + if (kt->pfrkt_gcdweight == 0) + kt->pfrkt_gcdweight = weight; + + kt->pfrkt_gcdweight = + pfr_gcd(weight, kt->pfrkt_gcdweight); + + if (kt->pfrkt_maxweight < weight) + kt->pfrkt_maxweight = weight; + } +} + +struct pfr_ktable * +pfr_ktable_select_active(struct pfr_ktable *kt) +{ + if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE) && kt->pfrkt_root != NULL) + kt = kt->pfrkt_root; + if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) + return (NULL); + + return (kt); +} diff --git a/module/pfsrc/pfk_hooks.c b/module/pfsrc/pfk_hooks.c new file mode 100644 index 0000000..61a5347 --- /dev/null +++ b/module/pfsrc/pfk_hooks.c @@ -0,0 +1,92 @@ +/* + * PF-on-Linux netfilter hook registration + M1 ioctl skeleton. + * The real verdict logic arrives from staged pf.c (T12); this file owns + * hook lifecycle and /dev/pf dispatch. (ISC 2026) + */ +#include +#include +#include +#include + +static int pfk_enabled = 1; /* like pf_defaultwise/pf_enable on boot */ +static struct pf_status pfk_stat; + +/* --- temporary M1 control surface (replaced by staged pf_ioctl.c, T7b) --- */ +static int pfk_ioctl_min(struct file *f, unsigned int cmd, unsigned long addr) +{ + struct pf_status s; + + switch (cmd) { + case DIOCGETSTATUS: + memset(&s, 0, sizeof(s)); + s.running = pfk_enabled; + strscpy(s.ifname, "pf", sizeof(s.ifname)); + if (copy_to_user((void __user *)addr, &s, sizeof(s))) + return EFAULT; + return 0; + default: + /* Rule/state/table ioctls arrive with the staged pf_ioctl.c + * (plan T7b); until then they are rejected (not silently + * accepted) so behaviour is explicit. */ + return EINVAL; + } +} + +long pfk_ioctl(struct file *f, unsigned int cmd, unsigned long addr) +{ + return pfk_ioctl_min(f, cmd, addr); +} + +void pfk_status(struct pf_status *s) +{ + if (s) + *s = pfk_stat; +} +int pfk_enable(int on) { pfk_enabled = on ? 1 : 0; return 0; } + +/* --- netfilter hooks: ingress/egress plumbing (real work lands in T12) --- */ +static unsigned int +pfk_ipv4_hook(void *priv, struct sk_buff *skb, const struct nf_hook_state *st) +{ + /* PFLINUX M1: accept-everything placeholder; T12 routes to pf_test() */ + return NF_ACCEPT; +} + +static struct nf_hook_ops pfk_hooks[] = { + { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_PRE_ROUTING, + .priority = NF_IP_PRI_FIRST }, + { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_LOCAL_IN, + .priority = NF_IP_PRI_FIRST + 1 }, + { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_FORWARD, + .priority = NF_IP_PRI_FIRST }, + { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_LOCAL_OUT, + .priority = NF_IP_PRI_CONNTRACK + 1 }, + { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_POST_ROUTING, + .priority = NF_IP_PRI_LAST - 1 }, +}; +#define PFK_NHOOKS ARRAY_SIZE(pfk_hooks) + +int pfk_hooks_register(void) +{ + int i, err; + + for (i = 0; i < PFK_NHOOKS; i++) { + pfk_hooks[i].priv = NULL; + err = nf_register_net_hook(&init_net, &pfk_hooks[i]); + if (err) + goto fail; + } + return 0; +fail: + while (--i >= 0) + nf_unregister_net_hook(&init_net, &pfk_hooks[i]); + return err; +} + +void pfk_hooks_unregister(void) +{ + int i; + + for (i = 0; i < PFK_NHOOKS; i++) + nf_unregister_net_hook(&init_net, &pfk_hooks[i]); +} diff --git a/module/pfsrc/pfk_mod.c b/module/pfsrc/pfk_mod.c new file mode 100644 index 0000000..daaa71f --- /dev/null +++ b/module/pfsrc/pfk_mod.c @@ -0,0 +1,86 @@ +/* + * PF-on-Linux: pfk module core — load/exit, /dev/pf misc device, + * NET_LOCK bring-up, staged upstream bring-up hooks. (ISC 2026) + */ +#include +#include +#include +#include + +extern void pfk_mbuf_exit(void); +extern int pfk_if_init(void); +extern void pfk_if_exit(void); + +static int pfk_open(struct inode *inode, struct file *filp) +{ + if (filp->f_mode & FMODE_WRITE) + return capable(CAP_NET_ADMIN) ? 0 : -EPERM; + return 0; +} + +static long pfk_ioctl_io(struct file *filp, unsigned int cmd, + unsigned long arg) +{ + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + return pfk_ioctl(filp, cmd, arg); +} + +static const struct file_operations pfk_fops = { + .owner = THIS_MODULE, + .open = pfk_open, + .unlocked_ioctl = pfk_ioctl_io, + .compat_ioctl = compat_ptr_ioctl, +}; + +static struct miscdevice pfk_dev = { + .minor = MISC_DYNAMIC_MINOR, + .name = "pf", + .fops = &pfk_fops, + .mode = 0600, +}; + +static int __init pfk_init(void) +{ + int err; + + pfk_net_lock_init(); + err = pfk_mbuf_init(); + if (err) + return err; + err = pfk_if_init(); + if (err) + goto err_mbuf; + err = pfk_hooks_register(); + if (err) + goto err_if; + err = misc_register(&pfk_dev); + if (err) + goto err_hooks; + pr_info("pfk: PF-on-Linux engine loaded (OpenBSD 8.0 base)\n"); + return 0; +err_hooks: + pfk_hooks_unregister(); +err_if: + pfk_if_exit(); +err_mbuf: + pfk_mbuf_exit(); + return err; +} + +static void __exit pfk_exit(void) +{ + misc_deregister(&pfk_dev); + pfk_hooks_unregister(); + pfk_if_exit(); + pfk_mbuf_exit(); + pr_info("pfk: unloaded\n"); +} + +module_init(pfk_init); +module_exit(pfk_exit); +MODULE_LICENSE("Dual MIT/GPL"); /* ISC/BSD code; Dual MIT/GPL is the kernel- + * recognised tag for permissive BSD-licensed + * modules linking GPL exports (see LICENSE). */ +MODULE_DESCRIPTION("PF packet filter (ported from OpenBSD 8.0) for Linux"); +MODULE_AUTHOR("PF-on-Linux contributors"); diff --git a/scripts/build-kernel.sh b/scripts/build-kernel.sh index eba6ba2..c33a25b 100755 --- a/scripts/build-kernel.sh +++ b/scripts/build-kernel.sh @@ -6,7 +6,11 @@ K="${KERNELDIR:-$(cd "$REPO/../linux-7.3.4" && pwd)}" cd "$K" "$REPO/scripts/kernel-config.sh" "${1:-}" JOBS="${JOBS:-$(($(nproc)-2))}" -make -j"$JOBS" -s bzImage modules +make -j"$JOBS" -s bzImage modules_prepare +# External module builds need Module.symvers (kbuild only writes +# vmlinux.symvers) and scripts/module.lds (from modules_prepare above). +[ -f Module.symvers ] || cp vmlinux.symvers Module.symvers +[ -f scripts/module.lds ] || { echo "FATAL: scripts/module.lds missing" >&2; exit 1; } mkdir -p "$REPO/out" KVER="$(make -s kernelversion)" cp -f arch/x86/boot/bzImage "$REPO/out/linux-${KVER}-bzImage" diff --git a/scripts/build-module.sh b/scripts/build-module.sh new file mode 100755 index 0000000..3950db4 --- /dev/null +++ b/scripts/build-module.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +# Build pf.ko out-of-tree against the patched kernel tree. +set -euo pipefail +REPO="$(cd "$(dirname "$0")/.." && pwd)" +K="${KERNELDIR:-$(cd "$REPO/../linux-7.3.4" && pwd)}" +[ -e "$K/Module.symvers" ] || { + if [ -f "$K/vmlinux.symvers" ]; then cp "$K/vmlinux.symvers" "$K/Module.symvers"; + else echo "kernel tree not prepared — run scripts/build-kernel.sh first" >&2; exit 1; fi; } +[ -f "$K/scripts/module.lds" ] || make -C "$K" -j4 modules_prepare >/dev/null +make -C "$K" M="$REPO/module" "$@" +echo MODULE_BUILD_OK diff --git a/scripts/lab-lib.sh b/scripts/lab-lib.sh new file mode 100755 index 0000000..675fd9b --- /dev/null +++ b/scripts/lab-lib.sh @@ -0,0 +1,283 @@ +#!/usr/bin/env bash +# lab-lib.sh — helpers shared by vm-create.sh / vm-destroy.sh / vm-deploy.sh. +# Source it; it never executes anything on its own. Topology single-source: +# lab/ips.env. Disks: per-VM qcow2 with backing_file to the shared read-only +# alpine-base.qcow2 (fast creates, ~MBs of delta storage; the base MUST NOT be +# modified once children exist — vm-create only re-syncs it when the laptop +# source hash differs). +# shellcheck disable=SC2034 + +LAB_LIB="$(readlink -f "${BASH_SOURCE[0]}")" +: "${REPO:=$(cd "$(dirname "$LAB_LIB")/.." && pwd)}" +export REPO + +log() { printf 'pflab: %s\n' "$*"; } +warn() { printf 'pflab WARN: %s\n' "$*" >&2; } +die() { printf 'pflab FAIL: %s\n' "$*" >&2; exit 1; } + +lab_env() { + [ -f "$REPO/lab/ips.env" ] || die "missing $REPO/lab/ips.env" + # shellcheck disable=SC1091 + . "$REPO/lab/ips.env" + # bare-IP derivatives (route/via fields) + PF0_LAN_IP=${PF0_LAN%%/*}; PF0_WAN_IP=${PF0_WAN%%/*}; PF0_WAN2_IP=${PF0_WAN2%%/*} + CLI_IP=${CLI%%/*}; SRV_IP=${SRV%%/*}; GW2_WAN_IP=${GW2_WAN%%/*}; GW2_WAN2_IP=${GW2_WAN2%%/*} + LAB_SEEDS="$REPO/lab/seeds" + VMS="pf0 cli srv gw2" +} + +SSH_OPTS=(-o BatchMode=yes -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 + -o LogLevel=ERROR -o ControlMaster=auto -o ControlPersist=120 + -o "ControlPath=$HOME/.ssh/cm-pflab-%r@%h:%p") + +vm_name() { echo "pftest-$1"; } +vm_ip() { local v=${1^^}_SSH; [ -n "${!v-}" ] || die "unknown vm alias: $1"; echo "${!v}"; } + +# Run command(s) on deb. +deb() { ssh "${SSH_OPTS[@]}" "$DEB_USER@$DEB" "$@"; } +deb_cmd() { deb "bash -s" <<<"$1"; } + +# Run a shell script inside a lab VM (nested ssh from deb with the lab key). +vm_cmd() { local ip=$1; deb "ssh -i $LAB_KEY_DEB ${SSH_OPTS[*]} root@$ip 'bash -s'" <<<"$2"; } + +# --- template rendering: replace @KEY@ tokens from environment + extra K=V --- +RENDER_KEYS=( + DEB DEB_USER + PF0_MGMT PF0_LAN PF0_WAN PF0_WAN2 CLI CLI_GW SRV SRV_GW GW2_WAN2 GW2_WAN + PF0_SSH CLI_SSH SRV_SSH GW2_SSH + PF0_LAN_IP PF0_WAN_IP PF0_WAN2_IP CLI_IP SRV_IP GW2_WAN_IP GW2_WAN2_IP + MGMT_NET NET_PF_LAN NET_PF_WAN NET_PF_WAN2 + PF_LAN_HOSTIP PF_WAN_HOSTIP PF_WAN2_HOSTIP PF_NET_PREFIX + VM_VCPUS VM_MEM_MB + PF0_MAC_MGMT PF0_MAC_LAN PF0_MAC_WAN PF0_MAC_WAN2 + CLI_MAC_MGMT CLI_MAC_LAN SRV_MAC_MGMT SRV_MAC_WAN GW2_MAC_WAN GW2_MAC_WAN2 + ROOT_PASS LAB_PACKAGES + IMG_DIR BASE_IMG SEED_DIR DEPLOY_DIR BOOT_DIR + LAB_KEY_DEB LAB_KEY_LAPTOP LAPTOP_SSH_FRAG BASE_SRC_REL +) +_esc() { local s=$1; s=${s//\\/\\\\}; s=${s//&/\\&}; s=${s//\~/\\~}; s=${s//$'\n'/\\n}; printf '%s' "$s"; } +render() { # render