[lfs-patches] r2813 - trunk/libcap

igor at higgs.linuxfromscratch.org igor at higgs.linuxfromscratch.org
Fri Jan 3 03:19:24 PST 2014


Author: igor
Date: Fri Jan  3 03:19:24 2014
New Revision: 2813

Log:
libcap uapi headers fix

Added:
   trunk/libcap/libcap-2.23-uapi-1.patch

Added: trunk/libcap/libcap-2.23-uapi-1.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/libcap/libcap-2.23-uapi-1.patch	Fri Jan  3 03:19:24 2014	(r2813)
@@ -0,0 +1,639 @@
+diff -Naur libcap-2.23.orig/libcap/include/linux/capability.h libcap-2.23/libcap/include/linux/capability.h
+--- libcap-2.23.orig/libcap/include/linux/capability.h	2013-12-16 05:47:10.000000000 +0100
++++ libcap-2.23/libcap/include/linux/capability.h	1970-01-01 01:00:00.000000000 +0100
+@@ -1,219 +0,0 @@
+-/*
+- * This is <linux/capability.h>
+- *
+- * Andrew G. Morgan <morgan at kernel.org>
+- * Alexander Kjeldaas <astor at guardian.no>
+- * with help from Aleph1, Roland Buresund and Andrew Main.
+- *
+- * See here for the libcap library ("POSIX draft" compliance):
+- *
+- * ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/
+- */
+-#ifndef _LINUX_CAPABILITY_H
+-#define _LINUX_CAPABILITY_H
+-
+-#include <uapi/linux/capability.h>
+-
+-
+-#define _KERNEL_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_3
+-#define _KERNEL_CAPABILITY_U32S    _LINUX_CAPABILITY_U32S_3
+-
+-extern int file_caps_enabled;
+-
+-typedef struct kernel_cap_struct {
+-	__u32 cap[_KERNEL_CAPABILITY_U32S];
+-} kernel_cap_t;
+-
+-/* exact same as vfs_cap_data but in cpu endian and always filled completely */
+-struct cpu_vfs_cap_data {
+-	__u32 magic_etc;
+-	kernel_cap_t permitted;
+-	kernel_cap_t inheritable;
+-};
+-
+-#define _USER_CAP_HEADER_SIZE  (sizeof(struct __user_cap_header_struct))
+-#define _KERNEL_CAP_T_SIZE     (sizeof(kernel_cap_t))
+-
+-
+-struct file;
+-struct inode;
+-struct dentry;
+-struct user_namespace;
+-
+-struct user_namespace *current_user_ns(void);
+-
+-extern const kernel_cap_t __cap_empty_set;
+-extern const kernel_cap_t __cap_init_eff_set;
+-
+-/*
+- * Internal kernel functions only
+- */
+-
+-#define CAP_FOR_EACH_U32(__capi)  \
+-	for (__capi = 0; __capi < _KERNEL_CAPABILITY_U32S; ++__capi)
+-
+-/*
+- * CAP_FS_MASK and CAP_NFSD_MASKS:
+- *
+- * The fs mask is all the privileges that fsuid==0 historically meant.
+- * At one time in the past, that included CAP_MKNOD and CAP_LINUX_IMMUTABLE.
+- *
+- * It has never meant setting security.* and trusted.* xattrs.
+- *
+- * We could also define fsmask as follows:
+- *   1. CAP_FS_MASK is the privilege to bypass all fs-related DAC permissions
+- *   2. The security.* and trusted.* xattrs are fs-related MAC permissions
+- */
+-
+-# define CAP_FS_MASK_B0     (CAP_TO_MASK(CAP_CHOWN)		\
+-			    | CAP_TO_MASK(CAP_MKNOD)		\
+-			    | CAP_TO_MASK(CAP_DAC_OVERRIDE)	\
+-			    | CAP_TO_MASK(CAP_DAC_READ_SEARCH)	\
+-			    | CAP_TO_MASK(CAP_FOWNER)		\
+-			    | CAP_TO_MASK(CAP_FSETID))
+-
+-# define CAP_FS_MASK_B1     (CAP_TO_MASK(CAP_MAC_OVERRIDE))
+-
+-#if _KERNEL_CAPABILITY_U32S != 2
+-# error Fix up hand-coded capability macro initializers
+-#else /* HAND-CODED capability initializers */
+-
+-# define CAP_EMPTY_SET    ((kernel_cap_t){{ 0, 0 }})
+-# define CAP_FULL_SET     ((kernel_cap_t){{ ~0, ~0 }})
+-# define CAP_FS_SET       ((kernel_cap_t){{ CAP_FS_MASK_B0 \
+-				    | CAP_TO_MASK(CAP_LINUX_IMMUTABLE), \
+-				    CAP_FS_MASK_B1 } })
+-# define CAP_NFSD_SET     ((kernel_cap_t){{ CAP_FS_MASK_B0 \
+-				    | CAP_TO_MASK(CAP_SYS_RESOURCE), \
+-				    CAP_FS_MASK_B1 } })
+-
+-#endif /* _KERNEL_CAPABILITY_U32S != 2 */
+-
+-# define cap_clear(c)         do { (c) = __cap_empty_set; } while (0)
+-
+-#define cap_raise(c, flag)  ((c).cap[CAP_TO_INDEX(flag)] |= CAP_TO_MASK(flag))
+-#define cap_lower(c, flag)  ((c).cap[CAP_TO_INDEX(flag)] &= ~CAP_TO_MASK(flag))
+-#define cap_raised(c, flag) ((c).cap[CAP_TO_INDEX(flag)] & CAP_TO_MASK(flag))
+-
+-#define CAP_BOP_ALL(c, a, b, OP)                                    \
+-do {                                                                \
+-	unsigned __capi;                                            \
+-	CAP_FOR_EACH_U32(__capi) {                                  \
+-		c.cap[__capi] = a.cap[__capi] OP b.cap[__capi];     \
+-	}                                                           \
+-} while (0)
+-
+-#define CAP_UOP_ALL(c, a, OP)                                       \
+-do {                                                                \
+-	unsigned __capi;                                            \
+-	CAP_FOR_EACH_U32(__capi) {                                  \
+-		c.cap[__capi] = OP a.cap[__capi];                   \
+-	}                                                           \
+-} while (0)
+-
+-static inline kernel_cap_t cap_combine(const kernel_cap_t a,
+-				       const kernel_cap_t b)
+-{
+-	kernel_cap_t dest;
+-	CAP_BOP_ALL(dest, a, b, |);
+-	return dest;
+-}
+-
+-static inline kernel_cap_t cap_intersect(const kernel_cap_t a,
+-					 const kernel_cap_t b)
+-{
+-	kernel_cap_t dest;
+-	CAP_BOP_ALL(dest, a, b, &);
+-	return dest;
+-}
+-
+-static inline kernel_cap_t cap_drop(const kernel_cap_t a,
+-				    const kernel_cap_t drop)
+-{
+-	kernel_cap_t dest;
+-	CAP_BOP_ALL(dest, a, drop, &~);
+-	return dest;
+-}
+-
+-static inline kernel_cap_t cap_invert(const kernel_cap_t c)
+-{
+-	kernel_cap_t dest;
+-	CAP_UOP_ALL(dest, c, ~);
+-	return dest;
+-}
+-
+-static inline int cap_isclear(const kernel_cap_t a)
+-{
+-	unsigned __capi;
+-	CAP_FOR_EACH_U32(__capi) {
+-		if (a.cap[__capi] != 0)
+-			return 0;
+-	}
+-	return 1;
+-}
+-
+-/*
+- * Check if "a" is a subset of "set".
+- * return 1 if ALL of the capabilities in "a" are also in "set"
+- *	cap_issubset(0101, 1111) will return 1
+- * return 0 if ANY of the capabilities in "a" are not in "set"
+- *	cap_issubset(1111, 0101) will return 0
+- */
+-static inline int cap_issubset(const kernel_cap_t a, const kernel_cap_t set)
+-{
+-	kernel_cap_t dest;
+-	dest = cap_drop(a, set);
+-	return cap_isclear(dest);
+-}
+-
+-/* Used to decide between falling back on the old suser() or fsuser(). */
+-
+-static inline int cap_is_fs_cap(int cap)
+-{
+-	const kernel_cap_t __cap_fs_set = CAP_FS_SET;
+-	return !!(CAP_TO_MASK(cap) & __cap_fs_set.cap[CAP_TO_INDEX(cap)]);
+-}
+-
+-static inline kernel_cap_t cap_drop_fs_set(const kernel_cap_t a)
+-{
+-	const kernel_cap_t __cap_fs_set = CAP_FS_SET;
+-	return cap_drop(a, __cap_fs_set);
+-}
+-
+-static inline kernel_cap_t cap_raise_fs_set(const kernel_cap_t a,
+-					    const kernel_cap_t permitted)
+-{
+-	const kernel_cap_t __cap_fs_set = CAP_FS_SET;
+-	return cap_combine(a,
+-			   cap_intersect(permitted, __cap_fs_set));
+-}
+-
+-static inline kernel_cap_t cap_drop_nfsd_set(const kernel_cap_t a)
+-{
+-	const kernel_cap_t __cap_fs_set = CAP_NFSD_SET;
+-	return cap_drop(a, __cap_fs_set);
+-}
+-
+-static inline kernel_cap_t cap_raise_nfsd_set(const kernel_cap_t a,
+-					      const kernel_cap_t permitted)
+-{
+-	const kernel_cap_t __cap_nfsd_set = CAP_NFSD_SET;
+-	return cap_combine(a,
+-			   cap_intersect(permitted, __cap_nfsd_set));
+-}
+-
+-extern bool has_capability(struct task_struct *t, int cap);
+-extern bool has_ns_capability(struct task_struct *t,
+-			      struct user_namespace *ns, int cap);
+-extern bool has_capability_noaudit(struct task_struct *t, int cap);
+-extern bool has_ns_capability_noaudit(struct task_struct *t,
+-				      struct user_namespace *ns, int cap);
+-extern bool capable(int cap);
+-extern bool ns_capable(struct user_namespace *ns, int cap);
+-extern bool inode_capable(const struct inode *inode, int cap);
+-extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap);
+-
+-/* audit system wants to get cap info from files as well */
+-extern int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data *cpu_caps);
+-
+-#endif /* !_LINUX_CAPABILITY_H */
+diff -Naur libcap-2.23.orig/libcap/include/linux/prctl.h libcap-2.23/libcap/include/linux/prctl.h
+--- libcap-2.23.orig/libcap/include/linux/prctl.h	2013-12-16 05:46:28.000000000 +0100
++++ libcap-2.23/libcap/include/linux/prctl.h	1970-01-01 01:00:00.000000000 +0100
+@@ -1,105 +0,0 @@
+-#ifndef _LINUX_PRCTL_H
+-#define _LINUX_PRCTL_H
+-
+-/* Values to pass as first argument to prctl() */
+-
+-#define PR_SET_PDEATHSIG  1  /* Second arg is a signal */
+-#define PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */
+-
+-/* Get/set current->mm->dumpable */
+-#define PR_GET_DUMPABLE   3
+-#define PR_SET_DUMPABLE   4
+-
+-/* Get/set unaligned access control bits (if meaningful) */
+-#define PR_GET_UNALIGN	  5
+-#define PR_SET_UNALIGN	  6
+-# define PR_UNALIGN_NOPRINT	1	/* silently fix up unaligned user accesses */
+-# define PR_UNALIGN_SIGBUS	2	/* generate SIGBUS on unaligned user access */
+-
+-/* Get/set whether or not to drop capabilities on setuid() away from
+- * uid 0 (as per security/commoncap.c) */
+-#define PR_GET_KEEPCAPS   7
+-#define PR_SET_KEEPCAPS   8
+-
+-/* Get/set floating-point emulation control bits (if meaningful) */
+-#define PR_GET_FPEMU  9
+-#define PR_SET_FPEMU 10
+-# define PR_FPEMU_NOPRINT	1	/* silently emulate fp operations accesses */
+-# define PR_FPEMU_SIGFPE	2	/* don't emulate fp operations, send SIGFPE instead */
+-
+-/* Get/set floating-point exception mode (if meaningful) */
+-#define PR_GET_FPEXC	11
+-#define PR_SET_FPEXC	12
+-# define PR_FP_EXC_SW_ENABLE	0x80	/* Use FPEXC for FP exception enables */
+-# define PR_FP_EXC_DIV		0x010000	/* floating point divide by zero */
+-# define PR_FP_EXC_OVF		0x020000	/* floating point overflow */
+-# define PR_FP_EXC_UND		0x040000	/* floating point underflow */
+-# define PR_FP_EXC_RES		0x080000	/* floating point inexact result */
+-# define PR_FP_EXC_INV		0x100000	/* floating point invalid operation */
+-# define PR_FP_EXC_DISABLED	0	/* FP exceptions disabled */
+-# define PR_FP_EXC_NONRECOV	1	/* async non-recoverable exc. mode */
+-# define PR_FP_EXC_ASYNC	2	/* async recoverable exception mode */
+-# define PR_FP_EXC_PRECISE	3	/* precise exception mode */
+-
+-/* Get/set whether we use statistical process timing or accurate timestamp
+- * based process timing */
+-#define PR_GET_TIMING   13
+-#define PR_SET_TIMING   14
+-# define PR_TIMING_STATISTICAL  0       /* Normal, traditional,
+-                                                   statistical process timing */
+-# define PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based
+-                                                   process timing */
+-
+-#define PR_SET_NAME    15		/* Set process name */
+-#define PR_GET_NAME    16		/* Get process name */
+-
+-/* Get/set process endian */
+-#define PR_GET_ENDIAN	19
+-#define PR_SET_ENDIAN	20
+-# define PR_ENDIAN_BIG		0
+-# define PR_ENDIAN_LITTLE	1	/* True little endian mode */
+-# define PR_ENDIAN_PPC_LITTLE	2	/* "PowerPC" pseudo little endian */
+-
+-/* Get/set process seccomp mode */
+-#define PR_GET_SECCOMP	21
+-#define PR_SET_SECCOMP	22
+-
+-/* Get/set the capability bounding set (as per security/commoncap.c) */
+-#define PR_CAPBSET_READ 23
+-#define PR_CAPBSET_DROP 24
+-
+-/* Get/set the process' ability to use the timestamp counter instruction */
+-#define PR_GET_TSC 25
+-#define PR_SET_TSC 26
+-# define PR_TSC_ENABLE		1	/* allow the use of the timestamp counter */
+-# define PR_TSC_SIGSEGV		2	/* throw a SIGSEGV instead of reading the TSC */
+-
+-/* Get/set securebits (as per security/commoncap.c) */
+-#define PR_GET_SECUREBITS 27
+-#define PR_SET_SECUREBITS 28
+-
+-/*
+- * Get/set the timerslack as used by poll/select/nanosleep
+- * A value of 0 means "use default"
+- */
+-#define PR_SET_TIMERSLACK 29
+-#define PR_GET_TIMERSLACK 30
+-
+-#define PR_TASK_PERF_EVENTS_DISABLE		31
+-#define PR_TASK_PERF_EVENTS_ENABLE		32
+-
+-/*
+- * Set early/late kill mode for hwpoison memory corruption.
+- * This influences when the process gets killed on a memory corruption.
+- */
+-#define PR_MCE_KILL	33
+-# define PR_MCE_KILL_CLEAR   0
+-# define PR_MCE_KILL_SET     1
+-
+-# define PR_MCE_KILL_LATE    0
+-# define PR_MCE_KILL_EARLY   1
+-# define PR_MCE_KILL_DEFAULT 2
+-
+-#define PR_MCE_KILL_GET 34
+-
+-#endif /* _LINUX_PRCTL_H */
+diff -Naur libcap-2.23.orig/libcap/include/linux/securebits.h libcap-2.23/libcap/include/linux/securebits.h
+--- libcap-2.23.orig/libcap/include/linux/securebits.h	2013-12-16 05:46:28.000000000 +0100
++++ libcap-2.23/libcap/include/linux/securebits.h	1970-01-01 01:00:00.000000000 +0100
+@@ -1,54 +0,0 @@
+-#ifndef _LINUX_SECUREBITS_H
+-#define _LINUX_SECUREBITS_H 1
+-
+-/* Each securesetting is implemented using two bits. One bit specifies
+-   whether the setting is on or off. The other bit specify whether the
+-   setting is locked or not. A setting which is locked cannot be
+-   changed from user-level. */
+-#define issecure_mask(X)	(1 << (X))
+-#ifdef __KERNEL__
+-#define issecure(X)		(issecure_mask(X) & current_cred_xxx(securebits))
+-#endif
+-
+-#define SECUREBITS_DEFAULT 0x00000000
+-
+-/* When set UID 0 has no special privileges. When unset, we support
+-   inheritance of root-permissions and suid-root executable under
+-   compatibility mode. We raise the effective and inheritable bitmasks
+-   *of the executable file* if the effective uid of the new process is
+-   0. If the real uid is 0, we raise the effective (legacy) bit of the
+-   executable file. */
+-#define SECURE_NOROOT			0
+-#define SECURE_NOROOT_LOCKED		1  /* make bit-0 immutable */
+-
+-#define SECBIT_NOROOT		(issecure_mask(SECURE_NOROOT))
+-#define SECBIT_NOROOT_LOCKED	(issecure_mask(SECURE_NOROOT_LOCKED))
+-
+-/* When set, setuid to/from uid 0 does not trigger capability-"fixup".
+-   When unset, to provide compatiblility with old programs relying on
+-   set*uid to gain/lose privilege, transitions to/from uid 0 cause
+-   capabilities to be gained/lost. */
+-#define SECURE_NO_SETUID_FIXUP		2
+-#define SECURE_NO_SETUID_FIXUP_LOCKED	3  /* make bit-2 immutable */
+-
+-#define SECBIT_NO_SETUID_FIXUP	(issecure_mask(SECURE_NO_SETUID_FIXUP))
+-#define SECBIT_NO_SETUID_FIXUP_LOCKED \
+-			(issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED))
+-
+-/* When set, a process can retain its capabilities even after
+-   transitioning to a non-root user (the set-uid fixup suppressed by
+-   bit 2). Bit-4 is cleared when a process calls exec(); setting both
+-   bit 4 and 5 will create a barrier through exec that no exec()'d
+-   child can use this feature again. */
+-#define SECURE_KEEP_CAPS		4
+-#define SECURE_KEEP_CAPS_LOCKED		5  /* make bit-4 immutable */
+-
+-#define SECBIT_KEEP_CAPS	(issecure_mask(SECURE_KEEP_CAPS))
+-#define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED))
+-
+-#define SECURE_ALL_BITS		(issecure_mask(SECURE_NOROOT) | \
+-				 issecure_mask(SECURE_NO_SETUID_FIXUP) | \
+-				 issecure_mask(SECURE_KEEP_CAPS))
+-#define SECURE_ALL_LOCKS	(SECURE_ALL_BITS << 1)
+-
+-#endif /* !_LINUX_SECUREBITS_H */
+diff -Naur libcap-2.23.orig/libcap/include/sys/capability.h libcap-2.23/libcap/include/sys/capability.h
+--- libcap-2.23.orig/libcap/include/sys/capability.h	2013-12-16 05:47:10.000000000 +0100
++++ libcap-2.23/libcap/include/sys/capability.h	2014-01-03 11:55:05.356427466 +0100
+@@ -26,7 +26,7 @@
+ #ifndef __user
+ #define __user
+ #endif
+-#include <uapi/linux/capability.h>
++#include <linux/capability.h>
+ #include <linux/xattr.h>
+ 
+ /*
+diff -Naur libcap-2.23.orig/libcap/include/uapi/linux/prctl.h libcap-2.23/libcap/include/uapi/linux/prctl.h
+--- libcap-2.23.orig/libcap/include/uapi/linux/prctl.h	1970-01-01 01:00:00.000000000 +0100
++++ libcap-2.23/libcap/include/uapi/linux/prctl.h	2014-01-03 11:55:05.356427466 +0100
+@@ -0,0 +1,152 @@
++#ifndef _LINUX_PRCTL_H
++#define _LINUX_PRCTL_H
++
++/* Values to pass as first argument to prctl() */
++
++#define PR_SET_PDEATHSIG  1  /* Second arg is a signal */
++#define PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */
++
++/* Get/set current->mm->dumpable */
++#define PR_GET_DUMPABLE   3
++#define PR_SET_DUMPABLE   4
++
++/* Get/set unaligned access control bits (if meaningful) */
++#define PR_GET_UNALIGN	  5
++#define PR_SET_UNALIGN	  6
++# define PR_UNALIGN_NOPRINT	1	/* silently fix up unaligned user accesses */
++# define PR_UNALIGN_SIGBUS	2	/* generate SIGBUS on unaligned user access */
++
++/* Get/set whether or not to drop capabilities on setuid() away from
++ * uid 0 (as per security/commoncap.c) */
++#define PR_GET_KEEPCAPS   7
++#define PR_SET_KEEPCAPS   8
++
++/* Get/set floating-point emulation control bits (if meaningful) */
++#define PR_GET_FPEMU  9
++#define PR_SET_FPEMU 10
++# define PR_FPEMU_NOPRINT	1	/* silently emulate fp operations accesses */
++# define PR_FPEMU_SIGFPE	2	/* don't emulate fp operations, send SIGFPE instead */
++
++/* Get/set floating-point exception mode (if meaningful) */
++#define PR_GET_FPEXC	11
++#define PR_SET_FPEXC	12
++# define PR_FP_EXC_SW_ENABLE	0x80	/* Use FPEXC for FP exception enables */
++# define PR_FP_EXC_DIV		0x010000	/* floating point divide by zero */
++# define PR_FP_EXC_OVF		0x020000	/* floating point overflow */
++# define PR_FP_EXC_UND		0x040000	/* floating point underflow */
++# define PR_FP_EXC_RES		0x080000	/* floating point inexact result */
++# define PR_FP_EXC_INV		0x100000	/* floating point invalid operation */
++# define PR_FP_EXC_DISABLED	0	/* FP exceptions disabled */
++# define PR_FP_EXC_NONRECOV	1	/* async non-recoverable exc. mode */
++# define PR_FP_EXC_ASYNC	2	/* async recoverable exception mode */
++# define PR_FP_EXC_PRECISE	3	/* precise exception mode */
++
++/* Get/set whether we use statistical process timing or accurate timestamp
++ * based process timing */
++#define PR_GET_TIMING   13
++#define PR_SET_TIMING   14
++# define PR_TIMING_STATISTICAL  0       /* Normal, traditional,
++                                                   statistical process timing */
++# define PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based
++                                                   process timing */
++
++#define PR_SET_NAME    15		/* Set process name */
++#define PR_GET_NAME    16		/* Get process name */
++
++/* Get/set process endian */
++#define PR_GET_ENDIAN	19
++#define PR_SET_ENDIAN	20
++# define PR_ENDIAN_BIG		0
++# define PR_ENDIAN_LITTLE	1	/* True little endian mode */
++# define PR_ENDIAN_PPC_LITTLE	2	/* "PowerPC" pseudo little endian */
++
++/* Get/set process seccomp mode */
++#define PR_GET_SECCOMP	21
++#define PR_SET_SECCOMP	22
++
++/* Get/set the capability bounding set (as per security/commoncap.c) */
++#define PR_CAPBSET_READ 23
++#define PR_CAPBSET_DROP 24
++
++/* Get/set the process' ability to use the timestamp counter instruction */
++#define PR_GET_TSC 25
++#define PR_SET_TSC 26
++# define PR_TSC_ENABLE		1	/* allow the use of the timestamp counter */
++# define PR_TSC_SIGSEGV		2	/* throw a SIGSEGV instead of reading the TSC */
++
++/* Get/set securebits (as per security/commoncap.c) */
++#define PR_GET_SECUREBITS 27
++#define PR_SET_SECUREBITS 28
++
++/*
++ * Get/set the timerslack as used by poll/select/nanosleep
++ * A value of 0 means "use default"
++ */
++#define PR_SET_TIMERSLACK 29
++#define PR_GET_TIMERSLACK 30
++
++#define PR_TASK_PERF_EVENTS_DISABLE		31
++#define PR_TASK_PERF_EVENTS_ENABLE		32
++
++/*
++ * Set early/late kill mode for hwpoison memory corruption.
++ * This influences when the process gets killed on a memory corruption.
++ */
++#define PR_MCE_KILL	33
++# define PR_MCE_KILL_CLEAR   0
++# define PR_MCE_KILL_SET     1
++
++# define PR_MCE_KILL_LATE    0
++# define PR_MCE_KILL_EARLY   1
++# define PR_MCE_KILL_DEFAULT 2
++
++#define PR_MCE_KILL_GET 34
++
++/*
++ * Tune up process memory map specifics.
++ */
++#define PR_SET_MM		35
++# define PR_SET_MM_START_CODE		1
++# define PR_SET_MM_END_CODE		2
++# define PR_SET_MM_START_DATA		3
++# define PR_SET_MM_END_DATA		4
++# define PR_SET_MM_START_STACK		5
++# define PR_SET_MM_START_BRK		6
++# define PR_SET_MM_BRK			7
++# define PR_SET_MM_ARG_START		8
++# define PR_SET_MM_ARG_END		9
++# define PR_SET_MM_ENV_START		10
++# define PR_SET_MM_ENV_END		11
++# define PR_SET_MM_AUXV			12
++# define PR_SET_MM_EXE_FILE		13
++
++/*
++ * Set specific pid that is allowed to ptrace the current task.
++ * A value of 0 mean "no process".
++ */
++#define PR_SET_PTRACER 0x59616d61
++# define PR_SET_PTRACER_ANY ((unsigned long)-1)
++
++#define PR_SET_CHILD_SUBREAPER	36
++#define PR_GET_CHILD_SUBREAPER	37
++
++/*
++ * If no_new_privs is set, then operations that grant new privileges (i.e.
++ * execve) will either fail or not grant them.  This affects suid/sgid,
++ * file capabilities, and LSMs.
++ *
++ * Operations that merely manipulate or drop existing privileges (setresuid,
++ * capset, etc.) will still work.  Drop those privileges if you want them gone.
++ *
++ * Changing LSM security domain is considered a new privilege.  So, for example,
++ * asking selinux for a specific new context (e.g. with runcon) will result
++ * in execve returning -EPERM.
++ *
++ * See Documentation/prctl/no_new_privs.txt for more details.
++ */
++#define PR_SET_NO_NEW_PRIVS	38
++#define PR_GET_NO_NEW_PRIVS	39
++
++#define PR_GET_TID_ADDRESS	40
++
++#endif /* _LINUX_PRCTL_H */
+diff -Naur libcap-2.23.orig/libcap/include/uapi/linux/securebits.h libcap-2.23/libcap/include/uapi/linux/securebits.h
+--- libcap-2.23.orig/libcap/include/uapi/linux/securebits.h	1970-01-01 01:00:00.000000000 +0100
++++ libcap-2.23/libcap/include/uapi/linux/securebits.h	2014-01-03 11:55:05.356427466 +0100
+@@ -0,0 +1,51 @@
++#ifndef _UAPI_LINUX_SECUREBITS_H
++#define _UAPI_LINUX_SECUREBITS_H
++
++/* Each securesetting is implemented using two bits. One bit specifies
++   whether the setting is on or off. The other bit specify whether the
++   setting is locked or not. A setting which is locked cannot be
++   changed from user-level. */
++#define issecure_mask(X)	(1 << (X))
++
++#define SECUREBITS_DEFAULT 0x00000000
++
++/* When set UID 0 has no special privileges. When unset, we support
++   inheritance of root-permissions and suid-root executable under
++   compatibility mode. We raise the effective and inheritable bitmasks
++   *of the executable file* if the effective uid of the new process is
++   0. If the real uid is 0, we raise the effective (legacy) bit of the
++   executable file. */
++#define SECURE_NOROOT			0
++#define SECURE_NOROOT_LOCKED		1  /* make bit-0 immutable */
++
++#define SECBIT_NOROOT		(issecure_mask(SECURE_NOROOT))
++#define SECBIT_NOROOT_LOCKED	(issecure_mask(SECURE_NOROOT_LOCKED))
++
++/* When set, setuid to/from uid 0 does not trigger capability-"fixup".
++   When unset, to provide compatiblility with old programs relying on
++   set*uid to gain/lose privilege, transitions to/from uid 0 cause
++   capabilities to be gained/lost. */
++#define SECURE_NO_SETUID_FIXUP		2
++#define SECURE_NO_SETUID_FIXUP_LOCKED	3  /* make bit-2 immutable */
++
++#define SECBIT_NO_SETUID_FIXUP	(issecure_mask(SECURE_NO_SETUID_FIXUP))
++#define SECBIT_NO_SETUID_FIXUP_LOCKED \
++			(issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED))
++
++/* When set, a process can retain its capabilities even after
++   transitioning to a non-root user (the set-uid fixup suppressed by
++   bit 2). Bit-4 is cleared when a process calls exec(); setting both
++   bit 4 and 5 will create a barrier through exec that no exec()'d
++   child can use this feature again. */
++#define SECURE_KEEP_CAPS		4
++#define SECURE_KEEP_CAPS_LOCKED		5  /* make bit-4 immutable */
++
++#define SECBIT_KEEP_CAPS	(issecure_mask(SECURE_KEEP_CAPS))
++#define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED))
++
++#define SECURE_ALL_BITS		(issecure_mask(SECURE_NOROOT) | \
++				 issecure_mask(SECURE_NO_SETUID_FIXUP) | \
++				 issecure_mask(SECURE_KEEP_CAPS))
++#define SECURE_ALL_LOCKS	(SECURE_ALL_BITS << 1)
++
++#endif /* _UAPI_LINUX_SECUREBITS_H */
+diff -Naur libcap-2.23.orig/libcap/Makefile libcap-2.23/libcap/Makefile
+--- libcap-2.23.orig/libcap/Makefile	2013-12-24 18:08:53.000000000 +0100
++++ libcap-2.23/libcap/Makefile	2014-01-03 12:13:02.344530878 +0100
+@@ -53,7 +53,7 @@
+ 
+ cap_names.list.h: Makefile $(KERNEL_HEADERS)/linux/capability.h
+ 	@echo "=> making $@ from $(KERNEL_HEADERS)/linux/capability.h"
+-	perl -e 'while ($$l=<>) { if ($$l =~ /^\#define[ \t](CAP[_A-Z]+)[ \t]+([0-9]+)\s+$$/) { $$tok=$$1; $$val=$$2; $$tok =~ tr/A-Z/a-z/; print "{\"$$tok\",$$val},\n"; } }' $(KERNEL_HEADERS)/uapi/linux/capability.h | fgrep -v 0x > $@
++	perl -e 'while ($$l=<>) { if ($$l =~ /^\#define[ \t](CAP[_A-Z]+)[ \t]+([0-9]+)\s+$$/) { $$tok=$$1; $$val=$$2; $$tok =~ tr/A-Z/a-z/; print "{\"$$tok\",$$val},\n"; } }' $(KERNEL_HEADERS)/linux/capability.h | fgrep -v 0x > $@
+ 
+ $(STALIBNAME): $(OBJS)
+ 	$(AR) rcs $@ $^
+diff -Naur libcap-2.23.orig/Make.Rules libcap-2.23/Make.Rules
+--- libcap-2.23.orig/Make.Rules	2013-12-24 20:23:11.000000000 +0100
++++ libcap-2.23/Make.Rules	2014-01-03 11:55:05.355427466 +0100
+@@ -45,8 +45,8 @@
+ 
+ # Compilation specifics
+ 
+-KERNEL_HEADERS := $(topdir)/libcap/include
+-IPATH += -fPIC -I$(topdir)/libcap/include -I$(KERNEL_HEADERS)
++KERNEL_HEADERS := $(topdir)/libcap/include/uapi
++IPATH += -fPIC -I$(KERNEL_HEADERS) -I$(topdir)/libcap/include
+ 
+ CC := gcc
+ CFLAGS := -O2 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64



More information about the patches mailing list