summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/fortify-headers.h8
-rw-r--r--include/poll.h4
-rw-r--r--include/stdio.h14
-rw-r--r--include/stdlib.h4
-rw-r--r--include/string.h30
-rw-r--r--include/strings.h6
-rw-r--r--include/sys/select.h4
-rw-r--r--include/sys/socket.h8
-rw-r--r--include/unistd.h24
-rw-r--r--include/wchar.h34
10 files changed, 72 insertions, 64 deletions
diff --git a/include/fortify-headers.h b/include/fortify-headers.h
index 4de5bef..a37cd4a 100644
--- a/include/fortify-headers.h
+++ b/include/fortify-headers.h
@@ -21,4 +21,12 @@
21#define _FORTIFY_FN(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn); \ 21#define _FORTIFY_FN(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn); \
22 extern __inline__ __attribute__((__always_inline__,__gnu_inline__,__artificial__)) 22 extern __inline__ __attribute__((__always_inline__,__gnu_inline__,__artificial__))
23 23
24
25/* Use __builtin_dynamic_object_size with _FORTIFY_SOURCE>2, if available. */
26#if _FORTIFY_SOURCE > 2 && defined __has_builtin && __has_builtin (__builtin_dynamic_object_size)
27#define __bos(ptr, type) __builtin_dynamic_object_size (ptr, type)
28#else
29#define __bos(ptr, type) __builtin_object_size (ptr, type)
30#endif
31
24#endif 32#endif
diff --git a/include/poll.h b/include/poll.h
index 24691f1..cf1b9e5 100644
--- a/include/poll.h
+++ b/include/poll.h
@@ -32,7 +32,7 @@ extern "C" {
32 32
33_FORTIFY_FN(poll) int poll(struct pollfd *__f, nfds_t __n, int __s) 33_FORTIFY_FN(poll) int poll(struct pollfd *__f, nfds_t __n, int __s)
34{ 34{
35 __typeof__(sizeof 0) __b = __builtin_object_size(__f, 0); 35 __typeof__(sizeof 0) __b = __bos(__f, 0);
36 36
37 if (__n > __b / sizeof(struct pollfd)) 37 if (__n > __b / sizeof(struct pollfd))
38 __builtin_trap(); 38 __builtin_trap();
@@ -44,7 +44,7 @@ _FORTIFY_FN(poll) int poll(struct pollfd *__f, nfds_t __n, int __s)
44_FORTIFY_FN(ppoll) int ppoll(struct pollfd *__f, nfds_t __n, const struct timespec *__s, 44_FORTIFY_FN(ppoll) int ppoll(struct pollfd *__f, nfds_t __n, const struct timespec *__s,
45 const sigset_t *__m) 45 const sigset_t *__m)
46{ 46{
47 __typeof__(sizeof 0) __b = __builtin_object_size(__f, 0); 47 __typeof__(sizeof 0) __b = __bos(__f, 0);
48 48
49 if (__n > __b / sizeof(struct pollfd)) 49 if (__n > __b / sizeof(struct pollfd))
50 __builtin_trap(); 50 __builtin_trap();
diff --git a/include/stdio.h b/include/stdio.h
index a965184..1eb20be 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -38,7 +38,7 @@ extern "C" {
38 38
39_FORTIFY_FN(fgets) char *fgets(char *__s, int __n, FILE *__f) 39_FORTIFY_FN(fgets) char *fgets(char *__s, int __n, FILE *__f)
40{ 40{
41 size_t __b = __builtin_object_size(__s, 0); 41 size_t __b = __bos(__s, 0);
42 42
43 if ((size_t)__n > __b) 43 if ((size_t)__n > __b)
44 __builtin_trap(); 44 __builtin_trap();
@@ -47,7 +47,7 @@ _FORTIFY_FN(fgets) char *fgets(char *__s, int __n, FILE *__f)
47 47
48_FORTIFY_FN(fread) size_t fread(void *__d, size_t __n, size_t __m, FILE *__f) 48_FORTIFY_FN(fread) size_t fread(void *__d, size_t __n, size_t __m, FILE *__f)
49{ 49{
50 size_t __b = __builtin_object_size(__d, 0); 50 size_t __b = __bos(__d, 0);
51 51
52 if (__n != 0 && (__n * __m) / __n != __m) 52 if (__n != 0 && (__n * __m) / __n != __m)
53 __builtin_trap(); 53 __builtin_trap();
@@ -58,7 +58,7 @@ _FORTIFY_FN(fread) size_t fread(void *__d, size_t __n, size_t __m, FILE *__f)
58 58
59_FORTIFY_FN(fwrite) size_t fwrite(const void *__d, size_t __n, size_t __m, FILE *__f) 59_FORTIFY_FN(fwrite) size_t fwrite(const void *__d, size_t __n, size_t __m, FILE *__f)
60{ 60{
61 size_t __b = __builtin_object_size(__d, 0); 61 size_t __b = __bos(__d, 0);
62 62
63 if (__n != 0 && (__n * __m) / __n != __m) 63 if (__n != 0 && (__n * __m) / __n != __m)
64 __builtin_trap(); 64 __builtin_trap();
@@ -70,7 +70,7 @@ _FORTIFY_FN(fwrite) size_t fwrite(const void *__d, size_t __n, size_t __m, FILE
70_FORTIFY_FN(vsnprintf) int vsnprintf(char *__s, size_t __n, const char *__f, 70_FORTIFY_FN(vsnprintf) int vsnprintf(char *__s, size_t __n, const char *__f,
71 __builtin_va_list __v) 71 __builtin_va_list __v)
72{ 72{
73 size_t __b = __builtin_object_size(__s, 0); 73 size_t __b = __bos(__s, 0);
74 74
75 if (__n > __b) 75 if (__n > __b)
76 __builtin_trap(); 76 __builtin_trap();
@@ -79,7 +79,7 @@ _FORTIFY_FN(vsnprintf) int vsnprintf(char *__s, size_t __n, const char *__f,
79 79
80_FORTIFY_FN(vsprintf) int vsprintf(char *__s, const char *__f, __builtin_va_list __v) 80_FORTIFY_FN(vsprintf) int vsprintf(char *__s, const char *__f, __builtin_va_list __v)
81{ 81{
82 size_t __b = __builtin_object_size(__s, 0); 82 size_t __b = __bos(__s, 0);
83 int __r; 83 int __r;
84 84
85 if (__b != (size_t)-1) { 85 if (__b != (size_t)-1) {
@@ -94,7 +94,7 @@ _FORTIFY_FN(vsprintf) int vsprintf(char *__s, const char *__f, __builtin_va_list
94 94
95_FORTIFY_FN(snprintf) int snprintf(char *__s, size_t __n, const char *__f, ...) 95_FORTIFY_FN(snprintf) int snprintf(char *__s, size_t __n, const char *__f, ...)
96{ 96{
97 size_t __b = __builtin_object_size(__s, 0); 97 size_t __b = __bos(__s, 0);
98 98
99 if (__n > __b) 99 if (__n > __b)
100 __builtin_trap(); 100 __builtin_trap();
@@ -103,7 +103,7 @@ _FORTIFY_FN(snprintf) int snprintf(char *__s, size_t __n, const char *__f, ...)
103 103
104_FORTIFY_FN(sprintf) int sprintf(char *__s, const char *__f, ...) 104_FORTIFY_FN(sprintf) int sprintf(char *__s, const char *__f, ...)
105{ 105{
106 size_t __b = __builtin_object_size(__s, 0); 106 size_t __b = __bos(__s, 0);
107 int __r; 107 int __r;
108 108
109 if (__b != (size_t)-1) { 109 if (__b != (size_t)-1) {
diff --git a/include/stdlib.h b/include/stdlib.h
index 11155cf..8642e83 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -42,7 +42,7 @@ _FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r)
42#ifndef PATH_MAX 42#ifndef PATH_MAX
43#error PATH_MAX unset. A fortified realpath will not work. 43#error PATH_MAX unset. A fortified realpath will not work.
44#else 44#else
45 if (__r && PATH_MAX > __builtin_object_size(__r, 2)) { 45 if (__r && PATH_MAX > __bos(__r, 2)) {
46 char __buf[PATH_MAX], *__ret; 46 char __buf[PATH_MAX], *__ret;
47 size_t __l; 47 size_t __l;
48 48
@@ -50,7 +50,7 @@ _FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r)
50 if (!__ret) 50 if (!__ret)
51 return NULL; 51 return NULL;
52 __l = __builtin_strlen(__ret) + 1; 52 __l = __builtin_strlen(__ret) + 1;
53 if (__l > __builtin_object_size(__r, 0)) 53 if (__l > __bos(__r, 0))
54 __builtin_trap(); 54 __builtin_trap();
55 __builtin_memcpy(__r, __ret, __l); 55 __builtin_memcpy(__r, __ret, __l);
56 return __r; 56 return __r;
diff --git a/include/string.h b/include/string.h
index 66c23e1..f08eb4c 100644
--- a/include/string.h
+++ b/include/string.h
@@ -38,8 +38,8 @@ extern "C" {
38 38
39_FORTIFY_FN(memcpy) void *memcpy(void *__od, const void *__os, size_t __n) 39_FORTIFY_FN(memcpy) void *memcpy(void *__od, const void *__os, size_t __n)
40{ 40{
41 size_t __bd = __builtin_object_size(__od, 0); 41 size_t __bd = __bos(__od, 0);
42 size_t __bs = __builtin_object_size(__os, 0); 42 size_t __bs = __bos(__os, 0);
43 char *__d = (char *)__od; 43 char *__d = (char *)__od;
44 const char *__s = (const char *)__os; 44 const char *__s = (const char *)__os;
45 45
@@ -55,8 +55,8 @@ _FORTIFY_FN(memcpy) void *memcpy(void *__od, const void *__os, size_t __n)
55 55
56_FORTIFY_FN(memmove) void *memmove(void *__d, const void *__s, size_t __n) 56_FORTIFY_FN(memmove) void *memmove(void *__d, const void *__s, size_t __n)
57{ 57{
58 size_t __bd = __builtin_object_size(__d, 0); 58 size_t __bd = __bos(__d, 0);
59 size_t __bs = __builtin_object_size(__s, 0); 59 size_t __bs = __bos(__s, 0);
60 60
61 if (__n > __bd || __n > __bs) 61 if (__n > __bd || __n > __bs)
62 __builtin_trap(); 62 __builtin_trap();
@@ -65,7 +65,7 @@ _FORTIFY_FN(memmove) void *memmove(void *__d, const void *__s, size_t __n)
65 65
66_FORTIFY_FN(memset) void *memset(void *__d, int __c, size_t __n) 66_FORTIFY_FN(memset) void *memset(void *__d, int __c, size_t __n)
67{ 67{
68 size_t __b = __builtin_object_size(__d, 0); 68 size_t __b = __bos(__d, 0);
69 69
70 if (__n > __b) 70 if (__n > __b)
71 __builtin_trap(); 71 __builtin_trap();
@@ -78,7 +78,7 @@ _FORTIFY_FN(memset) void *memset(void *__d, int __c, size_t __n)
78#undef stpcpy 78#undef stpcpy
79_FORTIFY_FN(stpcpy) char *stpcpy(char *__d, const char *__s) 79_FORTIFY_FN(stpcpy) char *stpcpy(char *__d, const char *__s)
80{ 80{
81 size_t __b = __builtin_object_size(__d, 0); 81 size_t __b = __bos(__d, 0);
82 82
83 if (strlen(__s) + 1 > __b) 83 if (strlen(__s) + 1 > __b)
84 __builtin_trap(); 84 __builtin_trap();
@@ -88,7 +88,7 @@ _FORTIFY_FN(stpcpy) char *stpcpy(char *__d, const char *__s)
88#undef stpncpy 88#undef stpncpy
89_FORTIFY_FN(stpncpy) char *stpncpy(char *__d, const char *__s, size_t __n) 89_FORTIFY_FN(stpncpy) char *stpncpy(char *__d, const char *__s, size_t __n)
90{ 90{
91 size_t __b = __builtin_object_size(__d, 0); 91 size_t __b = __bos(__d, 0);
92 92
93 if (__n > __b && strlen(__s) + 1 > __b) 93 if (__n > __b && strlen(__s) + 1 > __b)
94 __builtin_trap(); 94 __builtin_trap();
@@ -98,7 +98,7 @@ _FORTIFY_FN(stpncpy) char *stpncpy(char *__d, const char *__s, size_t __n)
98 98
99_FORTIFY_FN(strcat) char *strcat(char *__d, const char *__s) 99_FORTIFY_FN(strcat) char *strcat(char *__d, const char *__s)
100{ 100{
101 size_t __b = __builtin_object_size(__d, 0); 101 size_t __b = __bos(__d, 0);
102 102
103 if (strlen(__s) + strlen(__d) + 1 > __b) 103 if (strlen(__s) + strlen(__d) + 1 > __b)
104 __builtin_trap(); 104 __builtin_trap();
@@ -107,7 +107,7 @@ _FORTIFY_FN(strcat) char *strcat(char *__d, const char *__s)
107 107
108_FORTIFY_FN(strcpy) char *strcpy(char *__d, const char *__s) 108_FORTIFY_FN(strcpy) char *strcpy(char *__d, const char *__s)
109{ 109{
110 size_t __b = __builtin_object_size(__d, 0); 110 size_t __b = __bos(__d, 0);
111 111
112 if (strlen(__s) + 1 > __b) 112 if (strlen(__s) + 1 > __b)
113 __builtin_trap(); 113 __builtin_trap();
@@ -116,7 +116,7 @@ _FORTIFY_FN(strcpy) char *strcpy(char *__d, const char *__s)
116 116
117_FORTIFY_FN(strncat) char *strncat(char *__d, const char *__s, size_t __n) 117_FORTIFY_FN(strncat) char *strncat(char *__d, const char *__s, size_t __n)
118{ 118{
119 size_t __b = __builtin_object_size(__d, 0); 119 size_t __b = __bos(__d, 0);
120 size_t __sl, __dl; 120 size_t __sl, __dl;
121 121
122 if (__n > __b) { 122 if (__n > __b) {
@@ -132,7 +132,7 @@ _FORTIFY_FN(strncat) char *strncat(char *__d, const char *__s, size_t __n)
132 132
133_FORTIFY_FN(strncpy) char *strncpy(char *__d, const char *__s, size_t __n) 133_FORTIFY_FN(strncpy) char *strncpy(char *__d, const char *__s, size_t __n)
134{ 134{
135 size_t __b = __builtin_object_size(__d, 0); 135 size_t __b = __bos(__d, 0);
136 136
137 if (__n > __b) 137 if (__n > __b)
138 __builtin_trap(); 138 __builtin_trap();
@@ -143,8 +143,8 @@ _FORTIFY_FN(strncpy) char *strncpy(char *__d, const char *__s, size_t __n)
143#undef mempcpy 143#undef mempcpy
144_FORTIFY_FN(mempcpy) void *mempcpy(void *__d, const void *__s, size_t __n) 144_FORTIFY_FN(mempcpy) void *mempcpy(void *__d, const void *__s, size_t __n)
145{ 145{
146 size_t __bd = __builtin_object_size(__d, 0); 146 size_t __bd = __bos(__d, 0);
147 size_t __bs = __builtin_object_size(__s, 0); 147 size_t __bs = __bos(__s, 0);
148 148
149 if (__n > __bd || __n > __bs) 149 if (__n > __bd || __n > __bs)
150 __builtin_trap(); 150 __builtin_trap();
@@ -157,7 +157,7 @@ _FORTIFY_FN(mempcpy) void *mempcpy(void *__d, const void *__s, size_t __n)
157#undef strlcpy 157#undef strlcpy
158_FORTIFY_FN(strlcat) size_t strlcat(char *__d, const char *__s, size_t __n) 158_FORTIFY_FN(strlcat) size_t strlcat(char *__d, const char *__s, size_t __n)
159{ 159{
160 size_t __b = __builtin_object_size(__d, 0); 160 size_t __b = __bos(__d, 0);
161 161
162 if (__n > __b) 162 if (__n > __b)
163 __builtin_trap(); 163 __builtin_trap();
@@ -166,7 +166,7 @@ _FORTIFY_FN(strlcat) size_t strlcat(char *__d, const char *__s, size_t __n)
166 166
167_FORTIFY_FN(strlcpy) size_t strlcpy(char *__d, const char *__s, size_t __n) 167_FORTIFY_FN(strlcpy) size_t strlcpy(char *__d, const char *__s, size_t __n)
168{ 168{
169 size_t __b = __builtin_object_size(__d, 0); 169 size_t __b = __bos(__d, 0);
170 170
171 if (__n > __b) 171 if (__n > __b)
172 __builtin_trap(); 172 __builtin_trap();
diff --git a/include/strings.h b/include/strings.h
index a16e1ad..7645848 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -32,8 +32,8 @@ extern "C" {
32#undef bzero 32#undef bzero
33_FORTIFY_FN(bcopy) void bcopy(const void *__s, void *__d, size_t __n) 33_FORTIFY_FN(bcopy) void bcopy(const void *__s, void *__d, size_t __n)
34{ 34{
35 size_t __bd = __builtin_object_size(__d, 0); 35 size_t __bd = __bos(__d, 0);
36 size_t __bs = __builtin_object_size(__s, 0); 36 size_t __bs = __bos(__s, 0);
37 37
38 if (__n > __bd || __n > __bs) 38 if (__n > __bd || __n > __bs)
39 __builtin_trap(); 39 __builtin_trap();
@@ -42,7 +42,7 @@ _FORTIFY_FN(bcopy) void bcopy(const void *__s, void *__d, size_t __n)
42 42
43_FORTIFY_FN(bzero) void bzero(void *__s, size_t __n) 43_FORTIFY_FN(bzero) void bzero(void *__s, size_t __n)
44{ 44{
45 size_t __b = __builtin_object_size(__s, 0); 45 size_t __b = __bos(__s, 0);
46 46
47 if (__n > __b) 47 if (__n > __b)
48 __builtin_trap(); 48 __builtin_trap();
diff --git a/include/sys/select.h b/include/sys/select.h
index bcee8be..1f19672 100644
--- a/include/sys/select.h
+++ b/include/sys/select.h
@@ -30,7 +30,7 @@ extern "C" {
30static __inline__ __attribute__((__always_inline__,__gnu_inline__,__artificial__)) 30static __inline__ __attribute__((__always_inline__,__gnu_inline__,__artificial__))
31void __fortify_FD_CLR(int __f, fd_set *__s) 31void __fortify_FD_CLR(int __f, fd_set *__s)
32{ 32{
33 size_t __b = __builtin_object_size(__s, 0); 33 size_t __b = __bos(__s, 0);
34 34
35 if (__f < 0 || __f >= FD_SETSIZE || __b < sizeof(fd_set)) 35 if (__f < 0 || __f >= FD_SETSIZE || __b < sizeof(fd_set))
36 __builtin_trap(); 36 __builtin_trap();
@@ -40,7 +40,7 @@ void __fortify_FD_CLR(int __f, fd_set *__s)
40static __inline__ __attribute__((__always_inline__,__gnu_inline__,__artificial__)) 40static __inline__ __attribute__((__always_inline__,__gnu_inline__,__artificial__))
41void __fortify_FD_SET(int __f, fd_set *__s) 41void __fortify_FD_SET(int __f, fd_set *__s)
42{ 42{
43 size_t __b = __builtin_object_size(__s, 0); 43 size_t __b = __bos(__s, 0);
44 44
45 if (__f < 0 || __f >= FD_SETSIZE || __b < sizeof(fd_set)) 45 if (__f < 0 || __f >= FD_SETSIZE || __b < sizeof(fd_set))
46 __builtin_trap(); 46 __builtin_trap();
diff --git a/include/sys/socket.h b/include/sys/socket.h
index ad6ab2d..21a3cf1 100644
--- a/include/sys/socket.h
+++ b/include/sys/socket.h
@@ -35,7 +35,7 @@ extern "C" {
35 35
36_FORTIFY_FN(recv) ssize_t recv(int __f, void *__s, size_t __n, int __fl) 36_FORTIFY_FN(recv) ssize_t recv(int __f, void *__s, size_t __n, int __fl)
37{ 37{
38 size_t __b = __builtin_object_size(__s, 0); 38 size_t __b = __bos(__s, 0);
39 39
40 if (__n > __b) 40 if (__n > __b)
41 __builtin_trap(); 41 __builtin_trap();
@@ -45,7 +45,7 @@ _FORTIFY_FN(recv) ssize_t recv(int __f, void *__s, size_t __n, int __fl)
45_FORTIFY_FN(recvfrom) ssize_t recvfrom(int __f, void *__s, size_t __n, int __fl, 45_FORTIFY_FN(recvfrom) ssize_t recvfrom(int __f, void *__s, size_t __n, int __fl,
46 struct sockaddr *__a, socklen_t *__l) 46 struct sockaddr *__a, socklen_t *__l)
47{ 47{
48 size_t __b = __builtin_object_size(__s, 0); 48 size_t __b = __bos(__s, 0);
49 49
50 if (__n > __b) 50 if (__n > __b)
51 __builtin_trap(); 51 __builtin_trap();
@@ -54,7 +54,7 @@ _FORTIFY_FN(recvfrom) ssize_t recvfrom(int __f, void *__s, size_t __n, int __fl,
54 54
55_FORTIFY_FN(send) ssize_t send(int __f, const void *__s, size_t __n, int __fl) 55_FORTIFY_FN(send) ssize_t send(int __f, const void *__s, size_t __n, int __fl)
56{ 56{
57 size_t __b = __builtin_object_size(__s, 0); 57 size_t __b = __bos(__s, 0);
58 58
59 if (__n > __b) 59 if (__n > __b)
60 __builtin_trap(); 60 __builtin_trap();
@@ -64,7 +64,7 @@ _FORTIFY_FN(send) ssize_t send(int __f, const void *__s, size_t __n, int __fl)
64_FORTIFY_FN(sendto) ssize_t sendto(int __f, const void *__s, size_t __n, int __fl, 64_FORTIFY_FN(sendto) ssize_t sendto(int __f, const void *__s, size_t __n, int __fl,
65 const struct sockaddr *__a, socklen_t __l) 65 const struct sockaddr *__a, socklen_t __l)
66{ 66{
67 size_t __b = __builtin_object_size(__s, 0); 67 size_t __b = __bos(__s, 0);
68 68
69 if (__n > __b) 69 if (__n > __b)
70 __builtin_trap(); 70 __builtin_trap();
diff --git a/include/unistd.h b/include/unistd.h
index 09980ba..1b89251 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -42,7 +42,7 @@ extern "C" {
42 42
43_FORTIFY_FN(confstr) size_t confstr(int __n, char *__s, size_t __l) 43_FORTIFY_FN(confstr) size_t confstr(int __n, char *__s, size_t __l)
44{ 44{
45 size_t __b = __builtin_object_size(__s, 0); 45 size_t __b = __bos(__s, 0);
46 size_t __r = __orig_confstr(__n, __s, __b > __l ? __l : __b); 46 size_t __r = __orig_confstr(__n, __s, __b > __l ? __l : __b);
47 47
48 if (__l > __b && __r > __b) 48 if (__l > __b && __r > __b)
@@ -52,7 +52,7 @@ _FORTIFY_FN(confstr) size_t confstr(int __n, char *__s, size_t __l)
52 52
53_FORTIFY_FN(getcwd) char *getcwd(char *__s, size_t __l) 53_FORTIFY_FN(getcwd) char *getcwd(char *__s, size_t __l)
54{ 54{
55 size_t __b = __builtin_object_size(__s, 0); 55 size_t __b = __bos(__s, 0);
56 56
57 if (__l > __b) 57 if (__l > __b)
58 __builtin_trap(); 58 __builtin_trap();
@@ -63,7 +63,7 @@ _FORTIFY_FN(getcwd) char *getcwd(char *__s, size_t __l)
63#undef getdomainname 63#undef getdomainname
64_FORTIFY_FN(getdomainname) int getdomainname(char *__s, size_t __l) 64_FORTIFY_FN(getdomainname) int getdomainname(char *__s, size_t __l)
65{ 65{
66 size_t __b = __builtin_object_size(__s, 0); 66 size_t __b = __bos(__s, 0);
67 67
68 if (__l > __b) 68 if (__l > __b)
69 __builtin_trap(); 69 __builtin_trap();
@@ -73,7 +73,7 @@ _FORTIFY_FN(getdomainname) int getdomainname(char *__s, size_t __l)
73 73
74_FORTIFY_FN(getgroups) int getgroups(int __l, gid_t *__s) 74_FORTIFY_FN(getgroups) int getgroups(int __l, gid_t *__s)
75{ 75{
76 size_t __b = __builtin_object_size(__s, 0); 76 size_t __b = __bos(__s, 0);
77 77
78 if (__l > 0 && (unsigned)__l > __b / sizeof(gid_t)) 78 if (__l > 0 && (unsigned)__l > __b / sizeof(gid_t))
79 __builtin_trap(); 79 __builtin_trap();
@@ -82,7 +82,7 @@ _FORTIFY_FN(getgroups) int getgroups(int __l, gid_t *__s)
82 82
83_FORTIFY_FN(gethostname) int gethostname(char *__s, size_t __l) 83_FORTIFY_FN(gethostname) int gethostname(char *__s, size_t __l)
84{ 84{
85 size_t __b = __builtin_object_size(__s, 0); 85 size_t __b = __bos(__s, 0);
86 86
87 if (__l > __b) 87 if (__l > __b)
88 __builtin_trap(); 88 __builtin_trap();
@@ -91,7 +91,7 @@ _FORTIFY_FN(gethostname) int gethostname(char *__s, size_t __l)
91 91
92_FORTIFY_FN(getlogin_r) int getlogin_r(char *__s, size_t __l) 92_FORTIFY_FN(getlogin_r) int getlogin_r(char *__s, size_t __l)
93{ 93{
94 size_t __b = __builtin_object_size(__s, 0); 94 size_t __b = __bos(__s, 0);
95 95
96 if (__l > __b) 96 if (__l > __b)
97 __builtin_trap(); 97 __builtin_trap();
@@ -100,7 +100,7 @@ _FORTIFY_FN(getlogin_r) int getlogin_r(char *__s, size_t __l)
100 100
101_FORTIFY_FN(pread) ssize_t pread(int __f, void *__s, size_t __n, off_t __o) 101_FORTIFY_FN(pread) ssize_t pread(int __f, void *__s, size_t __n, off_t __o)
102{ 102{
103 size_t __b = __builtin_object_size(__s, 0); 103 size_t __b = __bos(__s, 0);
104 104
105 if (__n > __b) 105 if (__n > __b)
106 __builtin_trap(); 106 __builtin_trap();
@@ -109,7 +109,7 @@ _FORTIFY_FN(pread) ssize_t pread(int __f, void *__s, size_t __n, off_t __o)
109 109
110_FORTIFY_FN(read) ssize_t read(int __f, void *__s, size_t __n) 110_FORTIFY_FN(read) ssize_t read(int __f, void *__s, size_t __n)
111{ 111{
112 size_t __b = __builtin_object_size(__s, 0); 112 size_t __b = __bos(__s, 0);
113 113
114 if (__n > __b) 114 if (__n > __b)
115 __builtin_trap(); 115 __builtin_trap();
@@ -118,7 +118,7 @@ _FORTIFY_FN(read) ssize_t read(int __f, void *__s, size_t __n)
118 118
119_FORTIFY_FN(readlink) ssize_t readlink(const char *__p, char *__s, size_t __n) 119_FORTIFY_FN(readlink) ssize_t readlink(const char *__p, char *__s, size_t __n)
120{ 120{
121 size_t __b = __builtin_object_size(__s, 0); 121 size_t __b = __bos(__s, 0);
122 122
123 if (__n > __b) 123 if (__n > __b)
124 __builtin_trap(); 124 __builtin_trap();
@@ -127,7 +127,7 @@ _FORTIFY_FN(readlink) ssize_t readlink(const char *__p, char *__s, size_t __n)
127 127
128_FORTIFY_FN(readlinkat) ssize_t readlinkat(int __f, const char *__p, char *__s, size_t __n) 128_FORTIFY_FN(readlinkat) ssize_t readlinkat(int __f, const char *__p, char *__s, size_t __n)
129{ 129{
130 size_t __b = __builtin_object_size(__s, 0); 130 size_t __b = __bos(__s, 0);
131 131
132 if (__n > __b) 132 if (__n > __b)
133 __builtin_trap(); 133 __builtin_trap();
@@ -136,7 +136,7 @@ _FORTIFY_FN(readlinkat) ssize_t readlinkat(int __f, const char *__p, char *__s,
136 136
137_FORTIFY_FN(ttyname_r) int ttyname_r(int __f, char *__s, size_t __n) 137_FORTIFY_FN(ttyname_r) int ttyname_r(int __f, char *__s, size_t __n)
138{ 138{
139 size_t __b = __builtin_object_size(__s, 0); 139 size_t __b = __bos(__s, 0);
140 140
141 if (__n > __b) 141 if (__n > __b)
142 __builtin_trap(); 142 __builtin_trap();
@@ -145,7 +145,7 @@ _FORTIFY_FN(ttyname_r) int ttyname_r(int __f, char *__s, size_t __n)
145 145
146_FORTIFY_FN(write) ssize_t write(int __f, const void *__s, size_t __n) 146_FORTIFY_FN(write) ssize_t write(int __f, const void *__s, size_t __n)
147{ 147{
148 size_t __b = __builtin_object_size(__s, 0); 148 size_t __b = __bos(__s, 0);
149 149
150 if (__n > __b) 150 if (__n > __b)
151 __builtin_trap(); 151 __builtin_trap();
diff --git a/include/wchar.h b/include/wchar.h
index c5d0e5d..0fba370 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -57,7 +57,7 @@ extern "C" {
57 57
58_FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t *__s, int __n, FILE *__f) 58_FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t *__s, int __n, FILE *__f)
59{ 59{
60 size_t __b = __builtin_object_size(__s, 0); 60 size_t __b = __bos(__s, 0);
61 61
62 if ((size_t)__n > __b / sizeof(wchar_t)) 62 if ((size_t)__n > __b / sizeof(wchar_t))
63 __builtin_trap(); 63 __builtin_trap();
@@ -70,7 +70,7 @@ _FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t *__s, int __n, FILE *__f)
70_FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *__d, const char **__s, size_t __n, 70_FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *__d, const char **__s, size_t __n,
71 size_t __wn, mbstate_t *__st) 71 size_t __wn, mbstate_t *__st)
72{ 72{
73 size_t __b = __builtin_object_size(__d, 0); 73 size_t __b = __bos(__d, 0);
74 size_t __r; 74 size_t __r;
75 75
76 if (__wn > __n / sizeof(wchar_t)) { 76 if (__wn > __n / sizeof(wchar_t)) {
@@ -90,7 +90,7 @@ _FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *__d, const char **__s, size_t
90_FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t *__d, const char **__s, size_t __wn, 90_FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t *__d, const char **__s, size_t __wn,
91 mbstate_t *__st) 91 mbstate_t *__st)
92{ 92{
93 size_t __b = __builtin_object_size(__d, 0); 93 size_t __b = __bos(__d, 0);
94 size_t __r; 94 size_t __r;
95 95
96 __b /= sizeof(wchar_t); 96 __b /= sizeof(wchar_t);
@@ -102,7 +102,7 @@ _FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t *__d, const char **__s, size_t _
102 102
103_FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __wn) 103_FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __wn)
104{ 104{
105 size_t __b = __builtin_object_size(__ws, 0); 105 size_t __b = __bos(__ws, 0);
106 106
107 if (__ws && __wn > __b / sizeof(wchar_t)) 107 if (__ws && __wn > __b / sizeof(wchar_t))
108 __builtin_trap(); 108 __builtin_trap();
@@ -111,14 +111,14 @@ _FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __w
111 111
112_FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st) 112_FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st)
113{ 113{
114 if (__s && MB_LEN_MAX > __builtin_object_size(__s, 2)) { 114 if (__s && MB_LEN_MAX > __bos(__s, 2)) {
115 char __buf[MB_LEN_MAX]; 115 char __buf[MB_LEN_MAX];
116 size_t __r; 116 size_t __r;
117 117
118 __r = __orig_wcrtomb(__buf, __w, __st); 118 __r = __orig_wcrtomb(__buf, __w, __st);
119 if (__r == (size_t)-1) 119 if (__r == (size_t)-1)
120 return __r; 120 return __r;
121 if (__r > __builtin_object_size(__s, 0)) 121 if (__r > __bos(__s, 0))
122 __builtin_trap(); 122 __builtin_trap();
123 __builtin_memcpy(__s, __buf, __r); 123 __builtin_memcpy(__s, __buf, __r);
124 return __r; 124 return __r;
@@ -128,7 +128,7 @@ _FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st)
128 128
129_FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t *__d, const wchar_t *__s) 129_FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t *__d, const wchar_t *__s)
130{ 130{
131 size_t __b = __builtin_object_size(__d, 0); 131 size_t __b = __bos(__d, 0);
132 132
133 if (wcslen(__s) + wcslen(__d) + 1 > __b / sizeof(wchar_t)) 133 if (wcslen(__s) + wcslen(__d) + 1 > __b / sizeof(wchar_t))
134 __builtin_trap(); 134 __builtin_trap();
@@ -137,7 +137,7 @@ _FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t *__d, const wchar_t *__s)
137 137
138_FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t *__d, const wchar_t *__s) 138_FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t *__d, const wchar_t *__s)
139{ 139{
140 size_t __b = __builtin_object_size(__d, 0); 140 size_t __b = __bos(__d, 0);
141 141
142 if (wcslen(__s) + 1 > __b / sizeof(wchar_t)) 142 if (wcslen(__s) + 1 > __b / sizeof(wchar_t))
143 __builtin_trap(); 143 __builtin_trap();
@@ -146,7 +146,7 @@ _FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t *__d, const wchar_t *__s)
146 146
147_FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t *__d, const wchar_t *__s, size_t __n) 147_FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t *__d, const wchar_t *__s, size_t __n)
148{ 148{
149 size_t __b = __builtin_object_size(__d, 0); 149 size_t __b = __bos(__d, 0);
150 size_t __sl, __dl; 150 size_t __sl, __dl;
151 151
152 if (__n > __b / sizeof(wchar_t)) { 152 if (__n > __b / sizeof(wchar_t)) {
@@ -162,7 +162,7 @@ _FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t *__d, const wchar_t *__s, size_t _
162 162
163_FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t *__d, const wchar_t *__s, size_t __n) 163_FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t *__d, const wchar_t *__s, size_t __n)
164{ 164{
165 size_t __b = __builtin_object_size(__d, 0); 165 size_t __b = __bos(__d, 0);
166 166
167 if (__n > __b / sizeof(wchar_t)) 167 if (__n > __b / sizeof(wchar_t))
168 __builtin_trap(); 168 __builtin_trap();
@@ -175,7 +175,7 @@ _FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t *__d, const wchar_t *__s, size_t _
175_FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char *__d, const wchar_t **__s, size_t __wn, 175_FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char *__d, const wchar_t **__s, size_t __wn,
176 size_t __n, mbstate_t *__st) 176 size_t __n, mbstate_t *__st)
177{ 177{
178 size_t __b = __builtin_object_size(__d, 0); 178 size_t __b = __bos(__d, 0);
179 size_t __r; 179 size_t __r;
180 180
181 if (__wn > __n / sizeof(wchar_t)) { 181 if (__wn > __n / sizeof(wchar_t)) {
@@ -195,7 +195,7 @@ _FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char *__d, const wchar_t **__s, size_t
195_FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char *__d, const wchar_t **__s, size_t __n, 195_FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char *__d, const wchar_t **__s, size_t __n,
196 mbstate_t *__st) 196 mbstate_t *__st)
197{ 197{
198 size_t __b = __builtin_object_size(__d, 0); 198 size_t __b = __bos(__d, 0);
199 size_t __r; 199 size_t __r;
200 200
201 __r = __orig_wcsrtombs(__d, __s, __n > __b ? __b : __n, __st); 201 __r = __orig_wcsrtombs(__d, __s, __n > __b ? __b : __n, __st);
@@ -206,7 +206,7 @@ _FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char *__d, const wchar_t **__s, size_t _
206 206
207_FORTIFY_FN(wcstombs) size_t wcstombs(char *__s, const wchar_t *__ws, size_t __n) 207_FORTIFY_FN(wcstombs) size_t wcstombs(char *__s, const wchar_t *__ws, size_t __n)
208{ 208{
209 size_t __b = __builtin_object_size(__s, 0); 209 size_t __b = __bos(__s, 0);
210 210
211 if (__s && __n > __b) 211 if (__s && __n > __b)
212 __builtin_trap(); 212 __builtin_trap();
@@ -215,7 +215,7 @@ _FORTIFY_FN(wcstombs) size_t wcstombs(char *__s, const wchar_t *__ws, size_t __n
215 215
216_FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w) 216_FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w)
217{ 217{
218 size_t __b = __builtin_object_size(__s, 0); 218 size_t __b = __bos(__s, 0);
219 219
220 if (__s && MB_LEN_MAX > __b && MB_CUR_MAX > __b) 220 if (__s && MB_LEN_MAX > __b && MB_CUR_MAX > __b)
221 __builtin_trap(); 221 __builtin_trap();
@@ -224,7 +224,7 @@ _FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w)
224 224
225_FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t *__d, const wchar_t *__s, size_t __n) 225_FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t *__d, const wchar_t *__s, size_t __n)
226{ 226{
227 size_t __b = __builtin_object_size(__d, 0); 227 size_t __b = __bos(__d, 0);
228 228
229 if (__n > __b / sizeof(wchar_t)) 229 if (__n > __b / sizeof(wchar_t))
230 __builtin_trap(); 230 __builtin_trap();
@@ -233,7 +233,7 @@ _FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t *__d, const wchar_t *__s, size_t _
233 233
234_FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t *__d, const wchar_t *__s, size_t __n) 234_FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t *__d, const wchar_t *__s, size_t __n)
235{ 235{
236 size_t __b = __builtin_object_size(__d, 0); 236 size_t __b = __bos(__d, 0);
237 237
238 if (__n > __b / sizeof(wchar_t)) 238 if (__n > __b / sizeof(wchar_t))
239 __builtin_trap(); 239 __builtin_trap();
@@ -242,7 +242,7 @@ _FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t *__d, const wchar_t *__s, size_t
242 242
243_FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t *__s, wchar_t __c, size_t __n) 243_FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t *__s, wchar_t __c, size_t __n)
244{ 244{
245 size_t __b = __builtin_object_size(__s, 0); 245 size_t __b = __bos(__s, 0);
246 246
247 if (__n > __b / sizeof(wchar_t)) 247 if (__n > __b / sizeof(wchar_t))
248 __builtin_trap(); 248 __builtin_trap();