]> granicus.if.org Git - strace/commitdiff
Print personality value 0xffffffff properly
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 25 Dec 2015 20:56:06 +0000 (20:56 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 25 Dec 2015 21:14:57 +0000 (21:14 +0000)
Value 0xffffffff of personality syscall first argument has a special
meaning, it is not a set of personality flags.

* personality.c (SYS_FUNC(personality)): If personality equals
to 0xffffffff, print it verbatim.
* tests/personality.c (main): Test it.

personality.c
tests/personality.c

index 2030374e769eda7adc6265054c35002d2d6869a9..4df4cf3345872cae45bb7b150f44ba4d45b275db 100644 (file)
@@ -7,7 +7,11 @@
 SYS_FUNC(personality)
 {
        if (entering(tcp)) {
-               printflags(personality_options, tcp->u_arg[0], "PER_???");
+               const unsigned int pers = tcp->u_arg[0];
+               if (0xffffffff == pers)
+                       tprints("0xffffffff");
+               else
+                       printflags(personality_options, pers, "PER_???");
                return 0;
        }
 
index 82200fa100f0d00177c3240d033fe09c39904d0a..836388560a453c94d3ae110c987a6ff7b769543d 100644 (file)
@@ -8,9 +8,16 @@ int main(void)
        const unsigned int saved_pers = personality(0);
 
        printf("personality\\(PER_LINUX\\) = %#x \\([^)]*\\)\n", saved_pers);
+
        personality(test_pers);
        puts("personality\\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)"
             " = 0 \\(PER_LINUX\\)");
+
+       personality(0xffffffff);
+       printf("personality\\(0xffffffff\\) = %#x"
+              " \\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)\n",
+              test_pers);
+
        personality(saved_pers);
        printf("personality\\([^)]*\\) = %#x"
               " \\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)\n",