[Ebtables-devel] [PATCH] fix ebtables 2.0.8-rc2 compilation error and segfault on x86_64
Brought to you by:
bdschuym
From: Carl-Daniel H. <c-d...@gm...> - 2006-12-13 15:41:52
|
Hi, ebtables 2.0.8-rc2 compilation fails on x86_64. # uname -a Linux switch 2.6.16.34-haisec07 #1 Fri Mar 24 11:32:37 CET 2006 x86_64 x86_64 x86_64 GNU/Linux # make gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o getethertype.o getethertype.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o communication.o communication.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o libebtc.o libebtc.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o useful_functions.o useful_functions.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o ebtables.o ebtables.c -Iinclude/ ebtables.c: In function `list_em': ebtables.c:324: warning: long long unsigned int format, uint64_t arg (arg 2) ebtables.c:324: warning: long long unsigned int format, uint64_t arg (arg 3) ebtables.c:326: warning: long long unsigned int format, uint64_t arg (arg 2) ebtables.c:326: warning: long long unsigned int format, uint64_t arg (arg 3) gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_802_3.o extensions/ebt_802_3.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_nat.o extensions/ebt_nat.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_arp.o extensions/ebt_arp.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_arpreply.o extensions/ebt_arpreply.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_ip.o extensions/ebt_ip.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_standard.o extensions/ebt_standard.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_log.o extensions/ebt_log.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_redirect.o extensions/ebt_redirect.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_vlan.o extensions/ebt_vlan.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_mark_m.o extensions/ebt_mark_m.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_mark.o extensions/ebt_mark.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_pkttype.o extensions/ebt_pkttype.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_stp.o extensions/ebt_stp.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_among.o extensions/ebt_among.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_limit.o extensions/ebt_limit.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebt_ulog.o extensions/ebt_ulog.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebtable_filter.o extensions/ebtable_filter.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebtable_nat.o extensions/ebtable_nat.c -Iinclude/ gcc -Wall -Wunused -DPROGVERSION=\"2.0.8-rc2\" -DPROGNAME=\"ebtables\" -DPROGDATE=\"March\ 2006\" -D_PATH_ETHERTYPES=\"/etc/ethertypes\" -DEBTD_ARGC_MAX=50 -DEBTD_CMDLINE_MAXLN=2048 -c -o extensions/ebtable_broute.o extensions/ebtable_broute.c -Iinclude/ ld -shared -o extensions/ebt_802_3.so -lc extensions/ebt_802_3.o ld: extensions/ebt_802_3.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC extensions/ebt_802_3.o: could not read symbols: Bad value make: *** [extensions/ebt_802_3.so] Error 1 This patch fixes it: --- a/Makefile 2006-12-13 16:00:38.000000000 +0100 +++ b/Makefile 2006-12-13 15:59:38.000000000 +0100 @@ -22,7 +22,7 @@ override SYSCONFIGDIR:=$(DESTDIR)$(SYSCONFIGDIR) -CFLAGS:=-Wall -Wunused +CFLAGS:=-Wall -Wunused -fPIC CC:=gcc LD:=ld After this, ebtables can be built, but it will segfault when trying to insert a rule. The segfault can be fixed with this patch (found in Fedora): --- ebtables-v2.0.8-rc2/libebtc.c.BAD 2006-09-14 13:53:38.000000000 -0500 +++ ebtables-v2.0.8-rc2/libebtc.c 2006-09-14 13:53:54.000000000 -0500 @@ -1033,7 +1033,7 @@ stack[sp].e = e; sp++; j = -1; - e = entries2->entries; + e = entries2->entries->next; chain_nr = verdict + NF_BR_NUMHOOKS; entries = entries2; continue; After this, ebtables can at least insert simple rules, but once I try the --ip-dport match, it fails again (ebtables-2.0.6 works fine): # ebtables-v2.0.8-rc2-static -t nat -A ebtables-experiment -p IPv4 --ip-proto tcp --ip-dport 7777:7778 -j DROP The kernel doesn't support a certain ebtables extension, consider recompiling your kernel or insmod the extension. dmesg says this: kernel msg: ebtables bug: please report to author: entries_size too small What next? Regards, Carl-Daniel -- http://www.hailfinger.org/ |