summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/fortify-headers.h8
-rw-r--r--include/stdio.h13
-rw-r--r--include/stdlib.h1
3 files changed, 14 insertions, 8 deletions
diff --git a/include/fortify-headers.h b/include/fortify-headers.h
index dde19a2..18d302b 100644
--- a/include/fortify-headers.h
+++ b/include/fortify-headers.h
@@ -25,7 +25,7 @@
25#ifdef __clang__ 25#ifdef __clang__
26 26
27/* clang uses overloads; see https://github.com/llvm/llvm-project/issues/53516 */ 27/* clang uses overloads; see https://github.com/llvm/llvm-project/issues/53516 */
28#define _FORTIFY_POSN(n) const __attribute__((__pass_object_size__(n))) 28#define _FORTIFY_POSN(n) const __attribute__((pass_object_size(n)))
29/* we can't use extern inline with overloads without making them external */ 29/* we can't use extern inline with overloads without making them external */
30#define _FORTIFY_INLINE static __inline__ \ 30#define _FORTIFY_INLINE static __inline__ \
31 __attribute__((__always_inline__,__artificial__,__overloadable__)) 31 __attribute__((__always_inline__,__artificial__,__overloadable__))
@@ -38,6 +38,7 @@
38 38
39#endif /* __clang__ */ 39#endif /* __clang__ */
40 40
41/* https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html */
41#define _FORTIFY_POS0 _FORTIFY_POSN(0) 42#define _FORTIFY_POS0 _FORTIFY_POSN(0)
42#define _FORTIFY_POS1 _FORTIFY_POSN(1) 43#define _FORTIFY_POS1 _FORTIFY_POSN(1)
43#define _FORTIFY_POS2 _FORTIFY_POSN(2) 44#define _FORTIFY_POS2 _FORTIFY_POSN(2)
@@ -47,7 +48,6 @@
47#define _FORTIFY_FNB(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn) 48#define _FORTIFY_FNB(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn)
48#define _FORTIFY_FN(fn) _FORTIFY_FNB(fn); _FORTIFY_INLINE 49#define _FORTIFY_FN(fn) _FORTIFY_FNB(fn); _FORTIFY_INLINE
49 50
50
51/* Use __builtin_dynamic_object_size with _FORTIFY_SOURCE>2, if available. */ 51/* Use __builtin_dynamic_object_size with _FORTIFY_SOURCE>2, if available. */
52#if _FORTIFY_SOURCE > 2 && __has_builtin (__builtin_dynamic_object_size) 52#if _FORTIFY_SOURCE > 2 && __has_builtin (__builtin_dynamic_object_size)
53/* 53/*
@@ -73,7 +73,11 @@
73#endif 73#endif
74 74
75#if __has_attribute (malloc) 75#if __has_attribute (malloc)
76#ifdef __clang__
77#define __malloc(...) __attribute__ ((malloc))
78#else
76#define __malloc(...) __attribute__ ((malloc, __VA_ARGS__)) 79#define __malloc(...) __attribute__ ((malloc, __VA_ARGS__))
80#endif /* __clang__ */
77#else 81#else
78#define __malloc(...) 82#define __malloc(...)
79#endif 83#endif
diff --git a/include/stdio.h b/include/stdio.h
index 8cdd826..b31299b 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -36,15 +36,13 @@ extern "C" {
36#undef fread 36#undef fread
37#undef fwrite 37#undef fwrite
38#undef popen 38#undef popen
39#undef tmpfile
40#undef snprintf 39#undef snprintf
41#undef sprintf 40#undef sprintf
42#undef vsnprintf 41#undef vsnprintf
43#undef vsprintf 42#undef vsprintf
44 43
45__access(read_only, 2) 44__access(read_only, 2)
46__malloc(malloc (fclose, 1)) 45_FORTIFY_FN(fdopen) FILE *fdopen(int __f, const char* _FORTIFY_POS0 __m)
47_FORTIFY_FN(fdopen) FILE *fdopen(int __f, const char* __m)
48{ 46{
49 return __orig_fdopen(__f, __m); 47 return __orig_fdopen(__f, __m);
50} 48}
@@ -60,7 +58,7 @@ _FORTIFY_FN(fgets) char *fgets(char * _FORTIFY_POS0 __s, int __n, FILE *__f)
60} 58}
61 59
62__malloc(malloc (fclose, 1)) 60__malloc(malloc (fclose, 1))
63_FORTIFY_FN(fmemopen) FILE *fmemopen(void* __b, size_t __s, const char* __m) 61_FORTIFY_FN(fmemopen) FILE *fmemopen(void* _FORTIFY_POS0 __b, size_t __s, const char* _FORTIFY_POS0 __m)
64{ 62{
65 return __orig_fmemopen(__b, __s, __m); 63 return __orig_fmemopen(__b, __s, __m);
66} 64}
@@ -68,7 +66,7 @@ _FORTIFY_FN(fmemopen) FILE *fmemopen(void* __b, size_t __s, const char* __m)
68__access(read_only, 1) 66__access(read_only, 1)
69__access(read_only, 2) 67__access(read_only, 2)
70__malloc(malloc (fclose, 1)) 68__malloc(malloc (fclose, 1))
71_FORTIFY_FN(fopen) FILE *fopen(const char* __p, const char* __m) 69_FORTIFY_FN(fopen) FILE *fopen(const char* _FORTIFY_POS0 __p, const char* _FORTIFY_POS0 __m)
72{ 70{
73 return __orig_fopen(__p, __m); 71 return __orig_fopen(__p, __m);
74} 72}
@@ -100,16 +98,19 @@ _FORTIFY_FN(fwrite) size_t fwrite(const void * _FORTIFY_POS0 __d, size_t __n,
100} 98}
101 99
102__malloc(malloc (pclose, 1)) 100__malloc(malloc (pclose, 1))
103_FORTIFY_FN(popen) FILE *popen(const char* __c, const char* __t) 101_FORTIFY_FN(popen) FILE *popen(const char* _FORTIFY_POS0 __c, const char* _FORTIFY_POS0 __t)
104{ 102{
105 return __orig_popen(__c, __t); 103 return __orig_popen(__c, __t);
106} 104}
107 105
106#ifndef __clang__ /* FIXME */
107#undef tmpfile
108__malloc(malloc (fclose, 1)) 108__malloc(malloc (fclose, 1))
109_FORTIFY_FN(tmpfile) FILE *tmpfile(void) 109_FORTIFY_FN(tmpfile) FILE *tmpfile(void)
110{ 110{
111 return __orig_tmpfile(); 111 return __orig_tmpfile();
112} 112}
113#endif
113 114
114__access(read_write, 1, 2) 115__access(read_write, 1, 2)
115_FORTIFY_FN(vsnprintf) int vsnprintf(char * _FORTIFY_POS0 __s, size_t __n, 116_FORTIFY_FN(vsnprintf) int vsnprintf(char * _FORTIFY_POS0 __s, size_t __n,
diff --git a/include/stdlib.h b/include/stdlib.h
index 6914f02..3f3c3ba 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -38,6 +38,7 @@ extern "C" {
38 38
39#undef malloc 39#undef malloc
40#undef realloc 40#undef realloc
41#undef calloc
41 42
42__malloc(malloc (free, 1)) 43__malloc(malloc (free, 1))
43__alloc_size(1) 44__alloc_size(1)