lib: Add personality fallback and SAFE macro
PATCH v4 1/3 lib: Add personality fallback and SAFE macro
Add the macro SAFE_PERSONALITY as well as fallback logic for if sys/personality.h is missing UNAME26.
---
V4 - Remove some unecessary fallback logic and move the SAFE_PERSONALITY macro
include/lapi/personality.h | 30 ++++++++++++++++++++++++++++++ include/tst_safe_macros.h | 5 +++++ lib/tst_safe_macros.c | 14 ++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 include/lapi/personality.h
include/lapi/personality.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* Copyright (c) 2017 Richard Palethorpe <[email protected]> +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ +/* In the Linux kernel and glibc enums are (mostly) used for the constants, +* but in musl macros are used. +*/ + +#ifndef PERSONALITY_H +#define PERSONALITY_H + +#include <sys/personality.h> + +#if !(HAVE_DECL_UNAME26 ==1 || defined(UNAME26 )) +#define UNAME26 0x0020000 +#endif + +#endif /* PERSONALITY_H */
include/tst_safe_macros.h +5 -0
@@ -438,4 +438,9 @@ int safe_mknod(const char *file, const int lineno, const char *pathname,#define SAFE_MKNOD (pathname, mode, dev) \ safe_mknod(__FILE__, __LINE__, (pathname), (mode), (dev)) +int safe_personality (const char *filename,unsigned int lineno, +unsigned long persona); +#define SAFE_PERSONALITY (persona) safe_personality(__FILE__, __LINE__, persona) + +#endif /* SAFE_MACROS_H__ */
lib/tst_safe_macros.c +14 -0
@@ -20,6 +20,7 @@#define TST_NO_DEFAULT_MAIN #include "tst_test.h" #include "tst_safe_macros.h" +#include "lapi/personality.h" int safe_setpgid (const char *file,const int lineno,pid_t pid,pid_t pgid) {
@@ -47,3 +48,16 @@ pid_t safe_getpgid(const char *file, const int lineno, pid_t pid)return pgid; } + +int safe_personality (const char *filename,unsigned int lineno, +unsigned long persona) +{ +int prev_persona =personality (persona); + +if (prev_persona <0 ) { +tst_brk_ (filename, lineno,TBROK |TERRNO , +"persona(%ld) failed" , persona); + } + +return prev_persona; +}
Signature · 1 line
2.13.3
PATCH v4 2/3 CVE-2012-0957: Use SAFE_PERSONALITY
--- testcases/cve/cve-2012-0957.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
testcases/cve/cve-2012-0957.c +2 -6
@@ -26,10 +26,8 @@#include <string.h> #include <sys/utsname.h> -#include <sys/personality.h> #include "tst_test.h" - -#define UNAME26 0x0020000 +#include "lapi/personality.h" static int check_field (char *bytes,size_t length,char *field) {
@@ -75,9 +73,7 @@ static void run(unsigned int test_nr)tst_res (TINFO ,"Calling uname with default personality" );try_leak_bytes (); }else { -if (personality (PER_LINUX |UNAME26 ) <0 ) -tst_brk (TCONF |TERRNO , -"Could not change personality to UNAME26" ); +SAFE_PERSONALITY (PER_LINUX |UNAME26 );tst_res (TINFO ,"Calling uname with UNAME26 personality" );try_leak_bytes (); }
Signature · 1 line
2.13.3
PATCH v4 3/3 Test for CVE-2016-10044 mark AIO pseudo-fs noexec
In reply to Richard Palethorpe--- runtest/cve | 1 + testcases/cve/.gitignore | 1 + testcases/cve/cve-2016-10044.c | 71 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 testcases/cve/cve-2016-10044.c
runtest/cve +1 -0
@@ -4,6 +4,7 @@ cve-2014-0196 cve-2014-0196 cve-2016-4997 cve-2016-4997 cve-2016-5195 dirtyc0w cve-2016-7117 cve-2016-7117 +cve-2016-10044 cve-2016-10044 cve-2017-2671 cve-2017-2671 cve-2017-5669 cve-2017-5669 cve-2017-6951 cve-2017-6951
testcases/cve/.gitignore +1 -0
@@ -2,6 +2,7 @@ cve-2012-0957 cve-2014-0196 cve-2016-4997 cve-2016-7117 +cve-2016-10044 cve-2017-2671 cve-2017-6951 cve-2017-5669
testcases/cve/cve-2016-10044.c new file +71 -0
71 lines not on this page · raw message
Signature · 1 line
2.13.3
PATCH v4 1/3 lib: Add personality fallback and SAFE macro
In reply to Richard PalethorpeHi!
include/lapi/personality.h line 26
Quoted 6 lines
include/lapi/personality.h new file +6
-0+#ifndef PERSONALITY_H +#define PERSONALITY_H + +#include <sys/personality.h> + +#if !(HAVE_DECL_UNAME26 ==1 || defined(UNAME26 ))
^
Where is this macro from, I cannot see it anywhere.
Have you forgotten git add on configure.ac or something?
And I doubt that we need anything else than:
#ifndef UNAME26
# define UNAME26 0x0020000 #endif
here...
Quoted 23 lines
include/lapi/personality.h new file +4
-0+#define UNAME26 0x0020000 +#endif + +#endif /* PERSONALITY_H */ include/tst_safe_macros.h +5
-0@@ -438,4 +438,9 @@ int safe_mknod(const char *file, const int lineno, const char *pathname,#define SAFE_MKNOD (pathname, mode, dev) \ safe_mknod(__FILE__, __LINE__, (pathname), (mode), (dev)) +int safe_personality (const char *filename,unsigned int lineno, +unsigned long persona); +#define SAFE_PERSONALITY (persona) safe_personality(__FILE__, __LINE__, persona) + +#endif /* SAFE_MACROS_H__ */ lib/tst_safe_macros.c +0
-0
lib/tst_safe_macros.c line 23
Quoted 4 lines
lib/tst_safe_macros.c +1
-0@@ -20,6 +20,7 @@#define TST_NO_DEFAULT_MAIN #include "tst_test.h" #include "tst_safe_macros.h" +#include "lapi/personality.h"
^
Do we need this header there for something?
Quoted 25 lines
lib/tst_safe_macros.c +13
-0int safe_setpgid (const char *file,const int lineno,pid_t pid,pid_t pgid) {@@ -47,3 +48,16 @@ pid_t safe_getpgid(const char *file, const int lineno, pid_t pid)return pgid; } + +int safe_personality (const char *filename,unsigned int lineno, +unsigned long persona) +{ +int prev_persona =personality (persona); + +if (prev_persona <0 ) { +tst_brk_ (filename, lineno,TBROK |TERRNO , +"persona(%ld) failed" , persona); + } + +return prev_persona; +}Signature · 5 lines
2.13.3 -- Mailing list info: https://lists.linux.it/listinfo/ltp
Signature · 2 lines
Cyril Hrubis [email protected]
PATCH v4 1/3 lib: Add personality fallback and SAFE macro
Hello Metan,
Quoted 11 lines · Cyril Hrubis
Hi!
include/lapi/personality.h line 26
Quoted 6 lines
include/lapi/personality.h new file +6
-0+#ifndef PERSONALITY_H +#define PERSONALITY_H + +#include <sys/personality.h> + +#if !(HAVE_DECL_UNAME26 ==1 || defined(UNAME26 ))^
Where is this macro from, I cannot see it anywhere.Have you forgotten git add on configure.ac or something?
Sorry, I am not sure what has happened there.
Quoted 8 lines
And I doubt that we need anything else than:
#ifndef UNAME26
# define UNAME26 0x0020000 #endifhere...
It is defined as an enum in glibc, but as a macro in musl. I guess it doesn't matter if macro covers the enum though, except maybe that some debugging symbol is lost.
Signature · 2 lines
Thank you, Richard.