The musl build "fix" introduced in r45108 removed all netinet/ether.h
includes, which made the prototypes of ether_aton and ether_ntoa
unavailable. As a result, the compiler assumed they return int instead
of a pointer. This currupted the pointer on 64bit targets, causing ebtables
to segfault in commands containing MAC addresses.

Since r46161 made it possible to include both the kernel and the libc
if_ether.h as long as the libc version is included first, this patch
changes the fix to remove the linux/if_ether.h from the ebtables source
(so the fixed version from the kernel is used) and ensures netinet/ether.h
is included early.

Signed-off-by: Matthias Schiffer <[email protected]>
---

A similar fix is necessary in the 15.05 tree, but as r46161 has not been
backported, this patch won't work without changes. Of course, one option
would be to remove musl and all musl-related patches from 15.05, as it is
broken anyways without the musl fixes committed to trunk in the last few
weeks...

Regards,
Matthias


 package/network/utils/ebtables/Makefile            |   2 +-
 .../utils/ebtables/patches/100-musl_fix.patch      | 132 ++++++++++++++++++++-
 2 files changed, 132 insertions(+), 2 deletions(-)

diff --git a/package/network/utils/ebtables/Makefile 
b/package/network/utils/ebtables/Makefile
index 4f6d7f5..30bf426 100644
--- a/package/network/utils/ebtables/Makefile
+++ b/package/network/utils/ebtables/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=ebtables
 PKG_VERSION:=2.0.10-4
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/ebtables
diff --git a/package/network/utils/ebtables/patches/100-musl_fix.patch 
b/package/network/utils/ebtables/patches/100-musl_fix.patch
index 462fea6..84aeb39 100644
--- a/package/network/utils/ebtables/patches/100-musl_fix.patch
+++ b/package/network/utils/ebtables/patches/100-musl_fix.patch
@@ -40,11 +40,141 @@
  #include <getopt.h>
 --- a/include/ebtables_u.h
 +++ b/include/ebtables_u.h
-@@ -23,6 +23,7 @@
+@@ -23,6 +23,8 @@
  
  #ifndef EBTABLES_U_H
  #define EBTABLES_U_H
 +#include <sys/types.h>
++#include <netinet/ether.h>
  #include <netinet/in.h>
  #include <linux/netfilter_bridge/ebtables.h>
  #include <linux/netfilter/x_tables.h>
+--- a/include/linux/if_ether.h
++++ /dev/null
+@@ -1,126 +0,0 @@
+-/*
+- * INET               An implementation of the TCP/IP protocol suite for the 
LINUX
+- *            operating system.  INET is implemented using the  BSD Socket
+- *            interface as the means of communication with the user level.
+- *
+- *            Global definitions for the Ethernet IEEE 802.3 interface.
+- *
+- * Version:   @(#)if_ether.h  1.0.1a  02/08/94
+- *
+- * Author:    Fred N. van Kempen, <[email protected]>
+- *            Donald Becker, <[email protected]>
+- *            Alan Cox, <[email protected]>
+- *            Steve Whitehouse, <[email protected]>
+- *
+- *            This program is free software; you can redistribute it and/or
+- *            modify it under the terms of the GNU General Public License
+- *            as published by the Free Software Foundation; either version
+- *            2 of the License, or (at your option) any later version.
+- */
+-
+-#ifndef _LINUX_IF_ETHER_H
+-#define _LINUX_IF_ETHER_H
+-
+-#include <linux/types.h>
+-
+-/*
+- *    IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble
+- *    and FCS/CRC (frame check sequence).
+- */
+-
+-#define ETH_ALEN      6               /* Octets in one ethernet addr   */
+-#define ETH_HLEN      14              /* Total octets in header.       */
+-#define ETH_ZLEN      60              /* Min. octets in frame sans FCS */
+-#define ETH_DATA_LEN  1500            /* Max. octets in payload        */
+-#define ETH_FRAME_LEN 1514            /* Max. octets in frame sans FCS */
+-#define ETH_FCS_LEN   4               /* Octets in the FCS             */
+-
+-/*
+- *    These are the defined Ethernet Protocol ID's.
+- */
+-
+-#define ETH_P_LOOP    0x0060          /* Ethernet Loopback packet     */
+-#define ETH_P_PUP     0x0200          /* Xerox PUP packet             */
+-#define ETH_P_PUPAT   0x0201          /* Xerox PUP Addr Trans packet  */
+-#define ETH_P_IP      0x0800          /* Internet Protocol packet     */
+-#define ETH_P_X25     0x0805          /* CCITT X.25                   */
+-#define ETH_P_ARP     0x0806          /* Address Resolution packet    */
+-#define       ETH_P_BPQ       0x08FF          /* G8BPQ AX.25 Ethernet Packet  
[ NOT AN OFFICIALLY REGISTERED ID ] */
+-#define ETH_P_IEEEPUP 0x0a00          /* Xerox IEEE802.3 PUP packet */
+-#define ETH_P_IEEEPUPAT       0x0a01          /* Xerox IEEE802.3 PUP Addr 
Trans packet */
+-#define ETH_P_DEC       0x6000          /* DEC Assigned proto           */
+-#define ETH_P_DNA_DL    0x6001          /* DEC DNA Dump/Load            */
+-#define ETH_P_DNA_RC    0x6002          /* DEC DNA Remote Console       */
+-#define ETH_P_DNA_RT    0x6003          /* DEC DNA Routing              */
+-#define ETH_P_LAT       0x6004          /* DEC LAT                      */
+-#define ETH_P_DIAG      0x6005          /* DEC Diagnostics              */
+-#define ETH_P_CUST      0x6006          /* DEC Customer use             */
+-#define ETH_P_SCA       0x6007          /* DEC Systems Comms Arch       */
+-#define ETH_P_TEB     0x6558          /* Trans Ether Bridging         */
+-#define ETH_P_RARP      0x8035                /* Reverse Addr Res packet      
*/
+-#define ETH_P_ATALK   0x809B          /* Appletalk DDP                */
+-#define ETH_P_AARP    0x80F3          /* Appletalk AARP               */
+-#define ETH_P_8021Q   0x8100          /* 802.1Q VLAN Extended Header  */
+-#define ETH_P_IPX     0x8137          /* IPX over DIX                 */
+-#define ETH_P_IPV6    0x86DD          /* IPv6 over bluebook           */
+-#define ETH_P_PAUSE   0x8808          /* IEEE Pause frames. See 802.3 31B */
+-#define ETH_P_SLOW    0x8809          /* Slow Protocol. See 802.3ad 43B */
+-#define ETH_P_WCCP    0x883E          /* Web-cache coordination protocol
+-                                       * defined in 
draft-wilson-wrec-wccp-v2-00.txt */
+-#define ETH_P_PPP_DISC        0x8863          /* PPPoE discovery messages     
*/
+-#define ETH_P_PPP_SES 0x8864          /* PPPoE session messages       */
+-#define ETH_P_MPLS_UC 0x8847          /* MPLS Unicast traffic         */
+-#define ETH_P_MPLS_MC 0x8848          /* MPLS Multicast traffic       */
+-#define ETH_P_ATMMPOA 0x884c          /* MultiProtocol Over ATM       */
+-#define ETH_P_LINK_CTL        0x886c          /* HPNA, wlan link local tunnel 
*/
+-#define ETH_P_ATMFATE 0x8884          /* Frame-based ATM Transport
+-                                       * over Ethernet
+-                                       */
+-#define ETH_P_PAE     0x888E          /* Port Access Entity (IEEE 802.1X) */
+-#define ETH_P_AOE     0x88A2          /* ATA over Ethernet            */
+-#define ETH_P_TIPC    0x88CA          /* TIPC                         */
+-#define ETH_P_1588    0x88F7          /* IEEE 1588 Timesync */
+-#define ETH_P_FCOE    0x8906          /* Fibre Channel over Ethernet  */
+-#define ETH_P_FIP     0x8914          /* FCoE Initialization Protocol */
+-#define ETH_P_EDSA    0xDADA          /* Ethertype DSA [ NOT AN OFFICIALLY 
REGISTERED ID ] */
+-
+-/*
+- *    Non DIX types. Won't clash for 1500 types.
+- */
+-
+-#define ETH_P_802_3   0x0001          /* Dummy type for 802.3 frames  */
+-#define ETH_P_AX25    0x0002          /* Dummy protocol id for AX.25  */
+-#define ETH_P_ALL     0x0003          /* Every packet (be careful!!!) */
+-#define ETH_P_802_2   0x0004          /* 802.2 frames                 */
+-#define ETH_P_SNAP    0x0005          /* Internal only                */
+-#define ETH_P_DDCMP     0x0006          /* DEC DDCMP: Internal only     */
+-#define ETH_P_WAN_PPP   0x0007          /* Dummy type for WAN PPP frames*/
+-#define ETH_P_PPP_MP    0x0008          /* Dummy type for PPP MP frames */
+-#define ETH_P_LOCALTALK 0x0009                /* Localtalk pseudo type        
*/
+-#define ETH_P_CAN     0x000C          /* Controller Area Network      */
+-#define ETH_P_PPPTALK 0x0010          /* Dummy type for Atalk over PPP*/
+-#define ETH_P_TR_802_2        0x0011          /* 802.2 frames                 
*/
+-#define ETH_P_MOBITEX 0x0015          /* Mobitex ([email protected])      */
+-#define ETH_P_CONTROL 0x0016          /* Card specific control frames */
+-#define ETH_P_IRDA    0x0017          /* Linux-IrDA                   */
+-#define ETH_P_ECONET  0x0018          /* Acorn Econet                 */
+-#define ETH_P_HDLC    0x0019          /* HDLC frames                  */
+-#define ETH_P_ARCNET  0x001A          /* 1A for ArcNet :-)            */
+-#define ETH_P_DSA     0x001B          /* Distributed Switch Arch.     */
+-#define ETH_P_TRAILER 0x001C          /* Trailer switch tagging       */
+-#define ETH_P_PHONET  0x00F5          /* Nokia Phonet frames          */
+-#define ETH_P_IEEE802154 0x00F6               /* IEEE802.15.4 frame           
*/
+-#define ETH_P_CAIF    0x00F7          /* ST-Ericsson CAIF protocol    */
+-
+-/*
+- *    This is an Ethernet frame header.
+- */
+-
+-struct ethhdr {
+-      unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
+-      unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
+-      __be16          h_proto;                /* packet type ID field */
+-} __attribute__((packed));
+-
+-
+-#endif        /* _LINUX_IF_ETHER_H */
-- 
2.4.5
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to