[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.