diff options
| author | sin | 2015-03-01 13:17:21 +0000 |
|---|---|---|
| committer | sin | 2015-03-01 13:17:21 +0000 |
| commit | 15c2b9d8df9c4a2959abe5dee488f741f9aeb223 (patch) | |
| tree | caa656d18c3d9465e8532688e7d0e2b040e478eb | |
| parent | 0c985218e9043289f4e72d1492cdb83f07fe600a (diff) | |
Add fwrite() check
| -rw-r--r-- | include/stdio.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/stdio.h b/include/stdio.h index d55df07..94025ef 100644 --- a/include/stdio.h +++ b/include/stdio.h | |||
| @@ -29,6 +29,19 @@ __fortify_fread(void *dst, size_t n, size_t nmemb, FILE *fp) | |||
| 29 | return fread(dst, n, nmemb, fp); | 29 | return fread(dst, n, nmemb, fp); |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | static inline __attribute__ ((always_inline)) | ||
| 33 | size_t | ||
| 34 | __fortify_fwrite(const void *dst, size_t n, size_t nmemb, FILE *fp) | ||
| 35 | { | ||
| 36 | size_t bos = __builtin_object_size(dst, 0); | ||
| 37 | |||
| 38 | if (n != 0 && (n * nmemb) / n != nmemb) | ||
| 39 | __builtin_trap(); | ||
| 40 | if (n * nmemb > bos) | ||
| 41 | __builtin_trap(); | ||
| 42 | return fwrite(dst, n, nmemb, fp); | ||
| 43 | } | ||
| 44 | |||
| 32 | static inline | 45 | static inline |
| 33 | __attribute__ ((always_inline)) | 46 | __attribute__ ((always_inline)) |
| 34 | __attribute__ ((__format__ (printf, 2, 0))) | 47 | __attribute__ ((__format__ (printf, 2, 0))) |
| @@ -67,6 +80,8 @@ __fortify_vsnprintf(char *s, size_t n, const char *fmt, __builtin_va_list ap) | |||
| 67 | #define fgets(s, n, fp) __fortify_fgets(s, n, fp) | 80 | #define fgets(s, n, fp) __fortify_fgets(s, n, fp) |
| 68 | #undef fread | 81 | #undef fread |
| 69 | #define fread(dst, n, nmemb, fp) __fortify_fread(dst, n, nmemb, fp) | 82 | #define fread(dst, n, nmemb, fp) __fortify_fread(dst, n, nmemb, fp) |
| 83 | #undef fwrite | ||
| 84 | #define fwrite(dst, n, nmemb, fp) __fortify_fwrite(dst, n, nmemb, fp) | ||
| 70 | #undef vsprintf | 85 | #undef vsprintf |
| 71 | #define vsprintf(s, fmt, ap) __fortify_vsprintf(s, fmt, ap) | 86 | #define vsprintf(s, fmt, ap) __fortify_vsprintf(s, fmt, ap) |
| 72 | #undef vsnprintf | 87 | #undef vsnprintf |
