From 158782b3bb791eae3c97947944c7023452bfbc96 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 13 May 2015 12:04:15 +0100 Subject: Add fortify_fn() helper in fortify-headers.h --- include/unistd.h | 73 +++++++++++++++++++------------------------------------- 1 file changed, 25 insertions(+), 48 deletions(-) (limited to 'include/unistd.h') diff --git a/include/unistd.h b/include/unistd.h index 318fcc5..23a8341 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -4,6 +4,7 @@ #include_next #if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0 +#include "fortify-headers.h" #ifdef __cplusplus extern "C" { @@ -21,139 +22,115 @@ extern "C" { #undef ttyname_r #undef write -__typeof__(confstr) __confstr_orig __asm__(__USER_LABEL_PREFIX__ "confstr"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -size_t confstr(int name, char *buf, size_t len) +fortify_fn(confstr) size_t confstr(int name, char *buf, size_t len) { size_t bos = __builtin_object_size(buf, 0); if (len > bos) __builtin_trap(); - return __confstr_orig(name, buf, len); + return __orig_confstr(name, buf, len); } -__typeof__(getcwd) __getcwd_orig __asm__(__USER_LABEL_PREFIX__ "getcwd"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -char *getcwd(char *buf, size_t len) +fortify_fn(getcwd) char *getcwd(char *buf, size_t len) { size_t bos = __builtin_object_size(buf, 0); if (len > bos) __builtin_trap(); - return __getcwd_orig(buf, len); + return __orig_getcwd(buf, len); } #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #undef getdomainname -__typeof__(getdomainname) __getdomainname_orig __asm__(__USER_LABEL_PREFIX__ "getdomainname"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -int getdomainname(char *name, size_t len) +fortify_fn(getdomainname) int getdomainname(char *name, size_t len) { size_t bos = __builtin_object_size(name, 0); if (len > bos) __builtin_trap(); - return __getdomainname_orig(name, len); + return __orig_getdomainname(name, len); } #endif -__typeof__(getgroups) __getgroups_orig __asm__(__USER_LABEL_PREFIX__ "getgroups"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -int getgroups(int len, gid_t *set) +fortify_fn(getgroups) int getgroups(int len, gid_t *set) { size_t bos = __builtin_object_size(set, 0); if (len > bos / sizeof(gid_t)) __builtin_trap(); - return __getgroups_orig(len, set); + return __orig_getgroups(len, set); } -__typeof__(gethostname) __gethostname_orig __asm__(__USER_LABEL_PREFIX__ "gethostname"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -int gethostname(char *name, size_t len) +fortify_fn(gethostname) int gethostname(char *name, size_t len) { size_t bos = __builtin_object_size(name, 0); if (len > bos) __builtin_trap(); - return __gethostname_orig(name, len); + return __orig_gethostname(name, len); } -__typeof__(getlogin_r) __getlogin_r_orig __asm__(__USER_LABEL_PREFIX__ "getlogin_r"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -int getlogin_r(char *name, size_t len) +fortify_fn(getlogin_r) int getlogin_r(char *name, size_t len) { size_t bos = __builtin_object_size(name, 0); if (len > bos) __builtin_trap(); - return __getlogin_r_orig(name, len); + return __orig_getlogin_r(name, len); } -__typeof__(pread) __pread_orig __asm__(__USER_LABEL_PREFIX__ "pread"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -ssize_t pread(int fd, void *buf, size_t n, off_t offset) +fortify_fn(pread) ssize_t pread(int fd, void *buf, size_t n, off_t offset) { size_t bos = __builtin_object_size(buf, 0); if (n > bos) __builtin_trap(); - return __pread_orig(fd, buf, n, offset); + return __orig_pread(fd, buf, n, offset); } -__typeof__(read) __read_orig __asm__(__USER_LABEL_PREFIX__ "read"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -ssize_t read(int fd, void *buf, size_t n) +fortify_fn(read) ssize_t read(int fd, void *buf, size_t n) { size_t bos = __builtin_object_size(buf, 0); if (n > bos) __builtin_trap(); - return __read_orig(fd, buf, n); + return __orig_read(fd, buf, n); } -__typeof__(readlink) __readlink_orig __asm__(__USER_LABEL_PREFIX__ "readlink"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -ssize_t readlink(const char *path, char *buf, size_t n) +fortify_fn(readlink) ssize_t readlink(const char *path, char *buf, size_t n) { size_t bos = __builtin_object_size(buf, 0); if (n > bos) __builtin_trap(); - return __readlink_orig(path, buf, n); + return __orig_readlink(path, buf, n); } -__typeof__(readlinkat) __readlinkat_orig __asm__(__USER_LABEL_PREFIX__ "readlinkat"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -ssize_t readlinkat(int fd, const char *path, char *buf, size_t n) +fortify_fn(readlinkat) ssize_t readlinkat(int fd, const char *path, char *buf, size_t n) { size_t bos = __builtin_object_size(buf, 0); if (n > bos) __builtin_trap(); - return __readlinkat_orig(fd, path, buf, n); + return __orig_readlinkat(fd, path, buf, n); } -__typeof__(ttyname_r) __ttyname_r_orig __asm__(__USER_LABEL_PREFIX__ "ttyname_r"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -int ttyname_r(int fd, char *name, size_t n) +fortify_fn(ttyname_r) int ttyname_r(int fd, char *name, size_t n) { size_t bos = __builtin_object_size(name, 0); if (n > bos) __builtin_trap(); - return __ttyname_r_orig(fd, name, n); + return __orig_ttyname_r(fd, name, n); } -__typeof__(write) __write_orig __asm__(__USER_LABEL_PREFIX__ "write"); -extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) -ssize_t write(int fd, const void *buf, size_t n) +fortify_fn(write) ssize_t write(int fd, const void *buf, size_t n) { size_t bos = __builtin_object_size(buf, 0); if (n > bos) __builtin_trap(); - return __write_orig(fd, buf, n); + return __orig_write(fd, buf, n); } #ifdef __cplusplus -- cgit v1.3