summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2015-04-26 02:23:03 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-26 02:23:04 +0000
commit1d76f1cc8be1f40141adac6147cd51061f1ee0b4 (patch)
treea64dd9fcaf615e61e96064dea7405c9dc0c6336f
parent42502d702e1625c9f3337f7a18ea5fc4cfc6090c (diff)
parent3244d9f07fda946d62afdfa61ed5a876d380d0ff (diff)
downloadbionic-1d76f1cc8be1f40141adac6147cd51061f1ee0b4.zip
bionic-1d76f1cc8be1f40141adac6147cd51061f1ee0b4.tar.gz
bionic-1d76f1cc8be1f40141adac6147cd51061f1ee0b4.tar.bz2
Merge "add a fortified implementation of realpath"
-rw-r--r--libc/include/stdlib.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h
index 84bf56d..efca577 100644
--- a/libc/include/stdlib.h
+++ b/libc/include/stdlib.h
@@ -176,6 +176,27 @@ extern size_t __ctype_get_mb_cur_max(void);
#include <android/legacy_stdlib_inlines.h>
#endif
+#if defined(__BIONIC_FORTIFY)
+
+extern char* __realpath_real(const char*, char*) __RENAME(realpath);
+__errordecl(__realpath_size_error, "realpath output parameter must be NULL or a >= PATH_MAX bytes buffer");
+
+#if !defined(__clang__)
+__BIONIC_FORTIFY_INLINE
+char* realpath(const char* path, char* resolved) {
+ size_t bos = __bos(resolved);
+
+ /* PATH_MAX is unavailable without polluting the namespace, but it's always 4096 on Linux */
+ if (bos != __BIONIC_FORTIFY_UNKNOWN_SIZE && bos < 4096) {
+ __realpath_size_error();
+ }
+
+ return __realpath_real(path, resolved);
+}
+#endif
+
+#endif /* defined(__BIONIC_FORTIFY) */
+
__END_DECLS
#endif /* _STDLIB_H */