summaryrefslogtreecommitdiff
path: root/include/stdio.h
diff options
context:
space:
mode:
authorsin2015-02-24 18:12:27 +0000
committersin2015-02-24 18:14:33 +0000
commiteecef18261cc278fbc13ecbfb4e5bc10762cc794 (patch)
tree483074e25fbbcbb198ac4d339b84ace4205987f6 /include/stdio.h
parent9a77136c5914f6be50df195dac0f99424252a297 (diff)
Remove compile time checks
These can produce false positives. Given that we support fortify source level 1 we shouldn't break valid code.
Diffstat (limited to 'include/stdio.h')
-rw-r--r--include/stdio.h15
1 files changed, 0 insertions, 15 deletions
diff --git a/include/stdio.h b/include/stdio.h
index a637f83..aeff658 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -5,24 +5,17 @@
5 5
6#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0 6#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0
7 7
8#define __errordecl(name, msg) extern void name(void) __attribute__ ((__error__(msg)))
9
10__errordecl(__fgets_error, "fgets: buffer overflow detected");
11static inline __attribute__ ((always_inline)) 8static inline __attribute__ ((always_inline))
12char * 9char *
13__fortify_fgets(char *s, int n, FILE *fp) 10__fortify_fgets(char *s, int n, FILE *fp)
14{ 11{
15 size_t bos = __builtin_object_size(s, 0); 12 size_t bos = __builtin_object_size(s, 0);
16 13
17 if (__builtin_constant_p(n) && (size_t)n > bos)
18 __fgets_error();
19
20 if ((size_t)n > bos) 14 if ((size_t)n > bos)
21 __builtin_trap(); 15 __builtin_trap();
22 return fgets(s, n, fp); 16 return fgets(s, n, fp);
23} 17}
24 18
25__errordecl(__vsnprintf_error, "vsnprintf: buffer overflow detected");
26static inline 19static inline
27__attribute__ ((always_inline)) 20__attribute__ ((always_inline))
28__attribute__ ((__format__ (printf, 3, 0))) 21__attribute__ ((__format__ (printf, 3, 0)))
@@ -32,9 +25,6 @@ __fortify_vsnprintf(char *s, size_t n, const char *fmt, __builtin_va_list ap)
32{ 25{
33 size_t bos = __builtin_object_size(s, 0); 26 size_t bos = __builtin_object_size(s, 0);
34 27
35 if (__builtin_constant_p(n) && n > bos)
36 __vsnprintf_error();
37
38 if (n > bos) 28 if (n > bos)
39 __builtin_trap(); 29 __builtin_trap();
40 return vsnprintf(s, n, fmt, ap); 30 return vsnprintf(s, n, fmt, ap);
@@ -45,20 +35,15 @@ __fortify_vsnprintf(char *s, size_t n, const char *fmt, __builtin_va_list ap)
45#undef vsnprintf 35#undef vsnprintf
46#define vsnprintf(s, n, fmt, ap) __fortify_vsnprintf(s, n, fmt, ap) 36#define vsnprintf(s, n, fmt, ap) __fortify_vsnprintf(s, n, fmt, ap)
47 37
48__errordecl(__snprintf_error, "snprintf: buffer overflow detected");
49#undef snprintf 38#undef snprintf
50#define snprintf(s, n, fmt, ...) ({ \ 39#define snprintf(s, n, fmt, ...) ({ \
51 size_t _n = (n); \ 40 size_t _n = (n); \
52 size_t bos = __builtin_object_size(s, 0); \ 41 size_t bos = __builtin_object_size(s, 0); \
53 if (__builtin_constant_p(_n) && _n > bos) \
54 __snprintf_error(); \
55 if (_n > bos) \ 42 if (_n > bos) \
56 __builtin_trap(); \ 43 __builtin_trap(); \
57 snprintf(s, _n, fmt, ## __VA_ARGS__); \ 44 snprintf(s, _n, fmt, ## __VA_ARGS__); \
58}) 45})
59 46
60#undef __errordecl
61
62#endif 47#endif
63 48
64#endif 49#endif