Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 1 | From 9125afb733d8c96416bb83c5adad39bb8d0803a1 Mon Sep 17 00:00:00 2001 |
| 2 | From: Hongxu Jia <hongxu.jia@windriver.com> |
| 3 | Date: Tue, 12 Mar 2013 09:54:06 +0800 |
| 4 | Subject: [PATCH] fix libcap header issue on some distro |
| 5 | |
| 6 | 1, When build qemu-native on SLED 11.2, there is an error: |
| 7 | ... |
| 8 | | In file included from /usr/include/bits/sigcontext.h:28, |
| 9 | | from /usr/include/signal.h:339, |
| 10 | | from /buildarea2/tmp/work/i686-linux/qemu-native/1.4.0-r0/ |
| 11 | qemu-1.4.0/include/qemu-common.h:42, |
| 12 | | from fsdev/virtfs-proxy-helper.c:23: |
| 13 | | /usr/include/asm/sigcontext.h:28: error: expected specifier- |
| 14 | qualifier-list before '__u64' |
| 15 | | /usr/include/asm/sigcontext.h:191: error: expected specifier- |
| 16 | qualifier-list before '__u64' |
| 17 | ... |
| 18 | |
| 19 | 2, The virtfs-proxy-helper.c includes <sys/capability.h> and |
| 20 | qemu-common.h in sequence. The header include map is: |
| 21 | (`-->' presents `include') |
| 22 | ... |
| 23 | "virtfs-proxy-helper.c" --> <sys/capability.h> |
| 24 | ... |
| 25 | "virtfs-proxy-helper.c" --> "qemu-common.h" --> <signal.h> --> |
| 26 | <bits/sigcontext.h> --> <asm/sigcontext.h> --> <linux/types.h> --> |
| 27 | <asm/types.h> --> <asm-generic/types.h> --> <asm-generic/int-ll64.h> |
| 28 | ... |
| 29 | |
| 30 | 3, The bug is found on SLED 11.2 x86. In libcap header file |
| 31 | /usr/include/sys/capability.h, it does evil stuff like this: |
| 32 | ... |
| 33 | 25 /* |
| 34 | 26 * Make sure we can be included from userland by preventing |
| 35 | 27 * capability.h from including other kernel headers |
| 36 | 28 */ |
| 37 | 29 #define _LINUX_TYPES_H |
| 38 | 30 #define _LINUX_FS_H |
| 39 | 31 #define __LINUX_COMPILER_H |
| 40 | 32 #define __user |
| 41 | 33 |
| 42 | 34 typedef unsigned int __u32; |
| 43 | 35 typedef __u32 __le32; |
| 44 | ... |
| 45 | This completely prevents including /usr/include/linux/types.h. |
| 46 | The above `<asm/sigcontext.h> --> <linux/types.h>' is prevented, |
| 47 | and '__u64' is defined in <asm-generic/int-ll64.h>. |
| 48 | |
| 49 | 4, Modify virtfs-proxy-helper.c to include <sys/capability.h> |
| 50 | last to workaround the issue. |
| 51 | |
| 52 | http://www.linuxtv.org/pipermail/vdr/2009-August/021194.html |
| 53 | http://patchwork.linuxtv.org/patch/12748/ |
| 54 | |
| 55 | Upstream-Status: Pending |
| 56 | Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> |
| 57 | |
| 58 | --- |
| 59 | fsdev/virtfs-proxy-helper.c | 7 +++++-- |
| 60 | 1 file changed, 5 insertions(+), 2 deletions(-) |
| 61 | |
| 62 | diff --git a/fsdev/virtfs-proxy-helper.c b/fsdev/virtfs-proxy-helper.c |
| 63 | index 6f132c5f..8329950c 100644 |
| 64 | --- a/fsdev/virtfs-proxy-helper.c |
| 65 | +++ b/fsdev/virtfs-proxy-helper.c |
| 66 | @@ -13,7 +13,6 @@ |
| 67 | #include <sys/resource.h> |
| 68 | #include <getopt.h> |
| 69 | #include <syslog.h> |
| 70 | -#include <sys/capability.h> |
| 71 | #include <sys/fsuid.h> |
| 72 | #include <sys/vfs.h> |
| 73 | #include <sys/ioctl.h> |
| 74 | @@ -27,7 +26,11 @@ |
| 75 | #include "9p-iov-marshal.h" |
| 76 | #include "hw/9pfs/9p-proxy.h" |
| 77 | #include "fsdev/9p-iov-marshal.h" |
| 78 | - |
| 79 | +/* |
| 80 | + * Include this one last due to some versions of it being buggy: |
| 81 | + * http://www.linuxtv.org/pipermail/vdr/2009-August/021194.html |
| 82 | + */ |
| 83 | +#include <sys/capability.h> |
| 84 | #define PROGNAME "virtfs-proxy-helper" |
| 85 | |
| 86 | #ifndef XFS_SUPER_MAGIC |