]> granicus.if.org Git - strace/commitdiff
Convert personality_options to XLAT form
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 5 Feb 2014 02:09:49 +0000 (02:09 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 5 Feb 2014 02:28:16 +0000 (02:28 +0000)
* linux/personality.h: New file.
* Makefile.am (EXTRA_DIST): Add it.
* system.c: Include <linux/personality.h>.
(personality_options): Update PER_* constants, convert to XLAT form.

Makefile.am
linux/personality.h [new file with mode: 0644]
system.c

index 90f333db62f6438cffa1c945e56b83794bd09007..2ba30f6f5a8a82fed92a98b9a21c0e719154ba52 100644 (file)
@@ -125,6 +125,7 @@ EXTRA_DIST =                                \
        linux/mtd-abi.h                 \
        linux/or1k/ioctlent.h.in        \
        linux/or1k/syscallent.h         \
+       linux/personality.h             \
        linux/powerpc/errnoent1.h       \
        linux/powerpc/ioctlent.h.in     \
        linux/powerpc/ioctlent1.h       \
diff --git a/linux/personality.h b/linux/personality.h
new file mode 100644 (file)
index 0000000..aa169c4
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef _UAPI_LINUX_PERSONALITY_H
+#define _UAPI_LINUX_PERSONALITY_H
+
+
+/*
+ * Flags for bug emulation.
+ *
+ * These occupy the top three bytes.
+ */
+enum {
+       UNAME26 =               0x0020000,
+       ADDR_NO_RANDOMIZE =     0x0040000,      /* disable randomization of VA space */
+       FDPIC_FUNCPTRS =        0x0080000,      /* userspace function ptrs point to descriptors
+                                                * (signal handling)
+                                                */
+       MMAP_PAGE_ZERO =        0x0100000,
+       ADDR_COMPAT_LAYOUT =    0x0200000,
+       READ_IMPLIES_EXEC =     0x0400000,
+       ADDR_LIMIT_32BIT =      0x0800000,
+       SHORT_INODE =           0x1000000,
+       WHOLE_SECONDS =         0x2000000,
+       STICKY_TIMEOUTS =       0x4000000,
+       ADDR_LIMIT_3GB =        0x8000000,
+};
+
+/*
+ * Security-relevant compatibility flags that must be
+ * cleared upon setuid or setgid exec:
+ */
+#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC  | \
+                           ADDR_NO_RANDOMIZE  | \
+                           ADDR_COMPAT_LAYOUT | \
+                           MMAP_PAGE_ZERO)
+
+/*
+ * Personality types.
+ *
+ * These go in the low byte.  Avoid using the top bit, it will
+ * conflict with error returns.
+ */
+enum {
+       PER_LINUX =             0x0000,
+       PER_LINUX_32BIT =       0x0000 | ADDR_LIMIT_32BIT,
+       PER_LINUX_FDPIC =       0x0000 | FDPIC_FUNCPTRS,
+       PER_SVR4 =              0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+       PER_SVR3 =              0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_SCOSVR3 =           0x0003 | STICKY_TIMEOUTS |
+                                        WHOLE_SECONDS | SHORT_INODE,
+       PER_OSR5 =              0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
+       PER_WYSEV386 =          0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_ISCR4 =             0x0005 | STICKY_TIMEOUTS,
+       PER_BSD =               0x0006,
+       PER_SUNOS =             0x0006 | STICKY_TIMEOUTS,
+       PER_XENIX =             0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
+       PER_LINUX32 =           0x0008,
+       PER_LINUX32_3GB =       0x0008 | ADDR_LIMIT_3GB,
+       PER_IRIX32 =            0x0009 | STICKY_TIMEOUTS,/* IRIX5 32-bit */
+       PER_IRIXN32 =           0x000a | STICKY_TIMEOUTS,/* IRIX6 new 32-bit */
+       PER_IRIX64 =            0x000b | STICKY_TIMEOUTS,/* IRIX6 64-bit */
+       PER_RISCOS =            0x000c,
+       PER_SOLARIS =           0x000d | STICKY_TIMEOUTS,
+       PER_UW7 =               0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
+       PER_OSF4 =              0x000f,                  /* OSF/1 v4 */
+       PER_HPUX =              0x0010,
+       PER_MASK =              0x00ff,
+};
+
+
+#endif /* _UAPI_LINUX_PERSONALITY_H */
index 08cf359587533083b9dfd557c3c6b5966c8cd17a..d1a61aac4476c19556d323b365db2ea99e799794 100644 (file)
--- a/system.c
+++ b/system.c
@@ -79,6 +79,7 @@
 # include <asm/sysmips.h>
 #endif
 #include <linux/sysctl.h>
+#include <linux/personality.h>
 
 static const struct xlat mount_flags[] = {
        XLAT(MS_MGC_VAL),
@@ -175,27 +176,28 @@ sys_umount2(struct tcb *tcp)
 /* These are not macros, but enums.  We just copy the values by hand
    from Linux 2.6.9 here.  */
 static const struct xlat personality_options[] = {
-       { 0,            "PER_LINUX"     },
-       { 0x00800000,   "PER_LINUX_32BIT"},
-       { 0x04100001,   "PER_SVR4"      },
-       { 0x05000002,   "PER_SVR3"      },
-       { 0x07000003,   "PER_SCOSVR3"   },
-       { 0x06000003,   "PER_OSR5"      },
-       { 0x05000004,   "PER_WYSEV386"  },
-       { 0x04000005,   "PER_ISCR4"     },
-       { 0x00000006,   "PER_BSD"       },
-       { 0x04000006,   "PER_SUNOS"     },
-       { 0x05000007,   "PER_XENIX"     },
-       { 0x00000008,   "PER_LINUX32"   },
-       { 0x08000008,   "PER_LINUX32_3GB"},
-       { 0x04000009,   "PER_IRIX32"    },
-       { 0x0400000a,   "PER_IRIXN32"   },
-       { 0x0400000b,   "PER_IRIX64"    },
-       { 0x0000000c,   "PER_RISCOS"    },
-       { 0x0400000d,   "PER_SOLARIS"   },
-       { 0x0410000e,   "PER_UW7"       },
-       { 0x0000000f,   "PER_OSF4"      },
-       { 0x00000010,   "PER_HPUX"      },
+       XLAT(PER_LINUX),
+       XLAT(PER_LINUX_32BIT),
+       XLAT(PER_LINUX_FDPIC),
+       XLAT(PER_SVR4),
+       XLAT(PER_SVR3),
+       XLAT(PER_SCOSVR3),
+       XLAT(PER_OSR5),
+       XLAT(PER_WYSEV386),
+       XLAT(PER_ISCR4),
+       XLAT(PER_BSD),
+       XLAT(PER_SUNOS),
+       XLAT(PER_XENIX),
+       XLAT(PER_LINUX32),
+       XLAT(PER_LINUX32_3GB),
+       XLAT(PER_IRIX32),
+       XLAT(PER_IRIXN32),
+       XLAT(PER_IRIX64),
+       XLAT(PER_RISCOS),
+       XLAT(PER_SOLARIS),
+       XLAT(PER_UW7),
+       XLAT(PER_OSF4),
+       XLAT(PER_HPUX),
        { 0,            NULL            },
 };