VBoxNetFlt 无法在 Fedora 38 上构建

VBoxNetFlt 无法在 Fedora 38 上构建

我已经从 Fedora 38(6.4.11 内核)中删除并重新安装了 VirtualBox,但它仍然无法构建以下模块之一:

[...]
  gcc -Wp,-MMD,/tmp/vbox.0/linux/.SUPR0IdcClient-linux.o.d -nostdinc -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -funsigned-char -std=gnu11 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -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 -mtune=generic -mno-red-zone -mcmodel=kernel -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 -mharden-sls=all -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 -fno-allow-store-data-races -Wframe-larger-than=2048 -fstack-protector-strong -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-dangling-pointer -ftrivial-auto-var-init=zero -fno-stack-clash-protection -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY -falign-functions=16 -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-truncation -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -g -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -fno-pie -Wno-declaration-after-statement -I./include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -D__KERNEL__ -DMODULE -DRT_WITHOUT_PRAGMA_ONCE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DVBOX_WITH_64_BITS_GUESTS -DRT_ARCH_AMD64  -DMODULE  -DKBUILD_BASENAME='"SUPR0IdcClient_linux"' -DKBUILD_MODNAME='"vboxnetflt"' -D__KBUILD_MODNAME=kmod_vboxnetflt -c -o /tmp/vbox.0/linux/SUPR0IdcClient-linux.o /tmp/vbox.0/linux/SUPR0IdcClient-linux.c  
# cmd_check_local_export /tmp/vbox.0/linux/SUPR0IdcClient-linux.o
  ./scripts/check-local-export /tmp/vbox.0/linux/SUPR0IdcClient-linux.o
# cmd_check_local_export /tmp/vbox.0/SUPR0IdcClientComponent.o
  ./scripts/check-local-export /tmp/vbox.0/SUPR0IdcClientComponent.o
# cmd_check_local_export /tmp/vbox.0/SUPR0IdcClient.o
  ./scripts/check-local-export /tmp/vbox.0/SUPR0IdcClient.o
# cmd_check_local_export /tmp/vbox.0/VBoxNetFlt.o
  ./scripts/check-local-export /tmp/vbox.0/VBoxNetFlt.o
/tmp/vbox.0/linux/VBoxNetFlt-linux.c: In function ‘vboxNetFltLinuxForwardToIntNetInner’:
/tmp/vbox.0/linux/VBoxNetFlt-linux.c:1561:40: error: implicit declaration of function ‘skb_gso_segment’; did you mean ‘skb_gso_reset’? [-Werror=implicit-function-declaration]
 1561 |             struct sk_buff *pSegment = skb_gso_segment(pBuf, 0 /*supported features*/);
      |                                        ^~~~~~~~~~~~~~~
      |                                        skb_gso_reset
/tmp/vbox.0/linux/VBoxNetFlt-linux.c:1561:40: warning: initialization of ‘struct sk_buff *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:252: /tmp/vbox.0/linux/VBoxNetFlt-linux.o] Error 1
make[1]: *** [Makefile:2050: /tmp/vbox.0] Error 2
make: *** [/tmp/vbox.0/Makefile-footer.gmk:117: vboxnetflt] Error 2

在网上搜索时,我确实得到了一些资源,但没有一个能解决问题。

如何在 Fedora 38(内核 6.4.11)上安装 VirtualBox 7.0?

答案1

skb_gso_segment直到最近才在 中定义netdevice.h,现已移至gso.h

最有可能的是,您必须调整 makefile 以gso.h适应新的内核。

答案2

操作系统:Fedora 38 VirtualBox-7.0.x86_64

  1. 跑步:
vi /usr/share/virtualbox/src/vboxhost/vboxnetflt/linux/VBoxNetFlt-linux.c
  1. 删除第 50 行:#if RTLNX_VER_MIN(6,5,0)
  2. 删除第 51 行:#endif
  3. 从:“更改# include <net/gso.h>为:”#include <net/gso.h>
  4. 重新运行sudo /sbin/vboxconfig

相关内容