summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsin2015-02-28 16:48:58 +0000
committersin2015-02-28 16:48:58 +0000
commit958ead636c14f10fce3954712f6e70d98db952b8 (patch)
treecd3cb3d25f238d25b32a99686ab812c1ad22622a
parente02237241bf01b8f4f704cf5d3054e5fcd9c20a9 (diff)
Add readlink() and readlinkat() checks
-rw-r--r--include/unistd.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/include/unistd.h b/include/unistd.h
index 7a49da0..d019b51 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -96,6 +96,28 @@ __fortify_read(int fd, void *buf, size_t n)
96} 96}
97 97
98static inline __attribute__ ((always_inline)) 98static inline __attribute__ ((always_inline))
99ssize_t
100__fortify_readlink(const char *path, char *buf, size_t n)
101{
102 size_t bos = __builtin_object_size(buf, 0);
103
104 if (n > bos)
105 __builtin_trap();
106 return readlink(path, buf, n);
107}
108
109static inline __attribute__ ((always_inline))
110ssize_t
111__fortify_readlinkat(int fd, const char *path, char *buf, size_t n)
112{
113 size_t bos = __builtin_object_size(buf, 0);
114
115 if (n > bos)
116 __builtin_trap();
117 return readlinkat(fd, path, buf, n);
118}
119
120static inline __attribute__ ((always_inline))
99int 121int
100__fortify_ttyname_r(int fd, char *name, size_t n) 122__fortify_ttyname_r(int fd, char *name, size_t n)
101{ 123{
@@ -137,6 +159,10 @@ __fortify_write(int fd, const void *buf, size_t n)
137#define pread(fd, buf, n, offset) __fortify_pread(fd, buf, n, offset) 159#define pread(fd, buf, n, offset) __fortify_pread(fd, buf, n, offset)
138#undef read 160#undef read
139#define read(fd, buf, n) __fortify_read(fd, buf, n) 161#define read(fd, buf, n) __fortify_read(fd, buf, n)
162#undef readlink
163#define readlink(path, buf, n) __fortify_readlink(path, buf, n)
164#undef readlinkat
165#define readlinkat(fd, path, buf, n) __fortify_readlinkat(fd, path, buf, n)
140#undef ttyname_r 166#undef ttyname_r
141#define ttyname_r(fd, name, n) __fortify_ttyname_r(fd, name, n) 167#define ttyname_r(fd, name, n) __fortify_ttyname_r(fd, name, n)
142#undef write 168#undef write