summaryrefslogtreecommitdiff
path: root/include/stdio.h
diff options
context:
space:
mode:
authorsin2015-03-01 13:12:09 +0000
committersin2015-03-01 13:12:09 +0000
commit0c985218e9043289f4e72d1492cdb83f07fe600a (patch)
treecd68a4b1b7da4808214a84b277eb3ddb608d6734 /include/stdio.h
parent488c3c7183788de425a7854aa0008fe795241546 (diff)
Add fread() check
Diffstat (limited to 'include/stdio.h')
-rw-r--r--include/stdio.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/stdio.h b/include/stdio.h
index 8486804..d55df07 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -16,6 +16,19 @@ __fortify_fgets(char *s, int n, FILE *fp)
16 return fgets(s, n, fp); 16 return fgets(s, n, fp);
17} 17}
18 18
19static inline __attribute__ ((always_inline))
20size_t
21__fortify_fread(void *dst, size_t n, size_t nmemb, FILE *fp)
22{
23 size_t bos = __builtin_object_size(dst, 0);
24
25 if (n != 0 && (n * nmemb) / n != nmemb)
26 __builtin_trap();
27 if (n * nmemb > bos)
28 __builtin_trap();
29 return fread(dst, n, nmemb, fp);
30}
31
19static inline 32static inline
20__attribute__ ((always_inline)) 33__attribute__ ((always_inline))
21__attribute__ ((__format__ (printf, 2, 0))) 34__attribute__ ((__format__ (printf, 2, 0)))
@@ -52,6 +65,8 @@ __fortify_vsnprintf(char *s, size_t n, const char *fmt, __builtin_va_list ap)
52 65
53#undef fgets 66#undef fgets
54#define fgets(s, n, fp) __fortify_fgets(s, n, fp) 67#define fgets(s, n, fp) __fortify_fgets(s, n, fp)
68#undef fread
69#define fread(dst, n, nmemb, fp) __fortify_fread(dst, n, nmemb, fp)
55#undef vsprintf 70#undef vsprintf
56#define vsprintf(s, fmt, ap) __fortify_vsprintf(s, fmt, ap) 71#define vsprintf(s, fmt, ap) __fortify_vsprintf(s, fmt, ap)
57#undef vsnprintf 72#undef vsnprintf