[PATCH] fix ebtables 2.0.8-rc2 compilation error and segfault on x86_64
Carl-Daniel Hailfinger <[email protected]>
| Newsgroups | gmane.linux.network.bridge.ebtables.devel |
|---|---|
| Message-ID | <[email protected]> |
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/
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV