Skip to content

Commit

Permalink
xattr: guard against simultaneous glibc header inclusion
Browse files Browse the repository at this point in the history
If the glibc xattr.h header is included after the uapi header,
compilation fails due to an enum re-using a #define from the uapi
header.

Protect against this by guarding the define and enum inclusions against
each other.

(See https://lists.debian.org/debian-glibc/2014/03/msg00029.html
and https://sourceware.org/glibc/wiki/Synchronizing_Headers
for more information.)

Signed-off-by: Serge Hallyn <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Allan McRae <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
hallyn authored and torvalds committed Apr 3, 2014
1 parent e9107f8 commit ea1a821
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
9 changes: 9 additions & 0 deletions include/uapi/linux/libc-compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,12 @@

#endif /* _NETINET_IN_H */

/* Definitions for xattr.h */
#if defined(_SYS_XATTR_H)
#define __UAPI_DEF_XATTR 0
#else
#define __UAPI_DEF_XATTR 1
#endif

/* If we did not see any headers from any supported C libraries,
* or we are being included in the kernel, then define everything
Expand All @@ -98,6 +104,9 @@
#define __UAPI_DEF_IPV6_MREQ 1
#define __UAPI_DEF_IPPROTO_V6 1

/* Definitions for xattr.h */
#define __UAPI_DEF_XATTR 1

#endif /* __GLIBC__ */

#endif /* _UAPI_LIBC_COMPAT_H */
7 changes: 7 additions & 0 deletions include/uapi/linux/xattr.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,18 @@
Copyright (c) 2001-2002 Silicon Graphics, Inc. All Rights Reserved.
Copyright (c) 2004 Red Hat, Inc., James Morris <[email protected]>
*/

#include <linux/libc-compat.h>

#ifndef _UAPI_LINUX_XATTR_H
#define _UAPI_LINUX_XATTR_H

#ifdef __UAPI_DEF_XATTR
#define __USE_KERNEL_XATTR_DEFS

#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */
#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */
#endif

/* Namespaces */
#define XATTR_OS2_PREFIX "os2."
Expand Down

0 comments on commit ea1a821

Please sign in to comment.