Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
 <CO6PR11MB5602969F75FD87D144CF6AFEEDEEA@CO6PR11MB5602.namprd11.prod.outlook.com>
Date: Thu, 9 Oct 2025 02:53:13 +0000
From: "Chen, Qi" <Qi.Chen@...driver.com>
To: Rich Felker <dalias@...c.org>
CC: "musl@...ts.openwall.com" <musl@...ts.openwall.com>
Subject: RE: [PATCH 2/2] include/netinet/if_ether.h: guard ethhdr
 definition to better work with other header files

Hi Rich,

The problem is about the re-definition of 'struct ethhdr'.

For example, a header also defines 'struct ethhdr' and __UAPI_DEF_ETHHDR, and it's included *before* our <netinet/if_ether.h>, then the unconditional definition of 'struct ethhdr' in this header will be treated as an error.

Some background info:
I was making systemd to compile with musl. I got this re-definition error. I checked the headers and thought that for different headers to work together, the definition of this 'struct ethhdr' needs to be guarded by the same macro.

Regards,
Qi

-----Original Message-----
From: Rich Felker <dalias@...c.org> 
Sent: Tuesday, September 30, 2025 9:34 PM
To: Chen, Qi <Qi.Chen@...driver.com>
Cc: musl@...ts.openwall.com
Subject: Re: [musl][PATCH 2/2] include/netinet/if_ether.h: guard ethhdr definition to better work with other header files

On Tue, Sep 30, 2025 at 10:45:38AM +0800, Qi.Chen@...driver.com wrote:
> From: Chen Qi <Qi.Chen@...driver.com>
> 
> The unconditional definition of 'struct ethhdr' has the implicit 
> requirement on this header file, that is, it needs to be included 
> before other header files defining ethhdr.
> 
> Signed-off-by: Chen Qi <Qi.Chen@...driver.com>
> ---
>  include/netinet/if_ether.h | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/include/netinet/if_ether.h b/include/netinet/if_ether.h 
> index b1646f6f..e5a1ebd0 100644
> --- a/include/netinet/if_ether.h
> +++ b/include/netinet/if_ether.h
> @@ -112,12 +112,14 @@
>  #define ETH_P_XDSA	0x00F8
>  #define ETH_P_MAP	0x00F9
>  
> +#ifndef __UAPI_DEF_ETHHDR
>  struct ethhdr {
>  	uint8_t h_dest[ETH_ALEN];
>  	uint8_t h_source[ETH_ALEN];
>  	uint16_t h_proto;
>  };
>  #define __UAPI_DEF_ETHHDR       0
> +#endif
>  
>  #include <net/ethernet.h>
>  #include <net/if_arp.h>
> --
> 2.34.1

Defining a macro multiple times with the exact same token sequence as its definition each time is not an error.

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.