summaryrefslogtreecommitdiff
path: root/lib/dfsan/dfsan_custom.cc
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2013-11-21 23:48:19 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2013-11-21 23:48:19 +0000
commitaf17d63992a1e30e56b1c31a0c2ec40c50de4fd5 (patch)
tree2ac6008a91add6b94e139d52aff9c8b1f05cce4e /lib/dfsan/dfsan_custom.cc
parent1b46c2bc1fb30c1882cfbc1c20be005ce18578f1 (diff)
Revert r195381, "Implement a bunch of custom glibc wrappers & corresponding tests."
It broke a buildbot. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@195392 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/dfsan/dfsan_custom.cc')
-rw-r--r--lib/dfsan/dfsan_custom.cc353
1 files changed, 2 insertions, 351 deletions
diff --git a/lib/dfsan/dfsan_custom.cc b/lib/dfsan/dfsan_custom.cc
index b654d2f15..6a132db06 100644
--- a/lib/dfsan/dfsan_custom.cc
+++ b/lib/dfsan/dfsan_custom.cc
@@ -11,35 +11,26 @@
//
// This file defines the custom functions listed in done_abilist.txt.
//===----------------------------------------------------------------------===//
-
#include "sanitizer_common/sanitizer_internal_defs.h"
#include "sanitizer_common/sanitizer_linux.h"
#include "dfsan/dfsan.h"
-#include <arpa/inet.h>
#include <ctype.h>
#include <dlfcn.h>
#include <link.h>
-#include <poll.h>
#include <pthread.h>
-#include <pwd.h>
-#include <sched.h>
-#include <signal.h>
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/resource.h>
-#include <sys/select.h>
-#include <sys/stat.h>
-#include <sys/time.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <time.h>
#include <unistd.h>
using namespace __dfsan;
extern "C" {
+
SANITIZER_INTERFACE_ATTRIBUTE int
__dfsw_stat(const char *path, struct stat *buf, dfsan_label path_label,
dfsan_label buf_label, dfsan_label *ret_label) {
@@ -347,344 +338,4 @@ SANITIZER_INTERFACE_ATTRIBUTE int __dfsw_dl_iterate_phdr(
return dl_iterate_phdr(dl_iterate_phdr_cb, &dipi);
}
-SANITIZER_INTERFACE_ATTRIBUTE
-char *__dfsw_ctime_r(const time_t *timep, char *buf, dfsan_label timep_label,
- dfsan_label buf_label, dfsan_label *ret_label) {
- char *ret = ctime_r(timep, buf);
- if (ret) {
- dfsan_set_label(dfsan_read_label(timep, sizeof(time_t)), buf,
- strlen(buf) + 1);
- *ret_label = buf_label;
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-char *__dfsw_fgets(char *s, int size, FILE *stream, dfsan_label s_label,
- dfsan_label size_label, dfsan_label stream_label,
- dfsan_label *ret_label) {
- char *ret = fgets(s, size, stream);
- if (ret) {
- dfsan_set_label(0, ret, strlen(ret) + 1);
- *ret_label = s_label;
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-char *__dfsw_getcwd(char *buf, size_t size, dfsan_label buf_label,
- dfsan_label size_label, dfsan_label *ret_label) {
- char *ret = getcwd(buf, size);
- if (ret) {
- dfsan_set_label(0, ret, strlen(ret) + 1);
- *ret_label = buf_label;
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-char *__dfsw_get_current_dir_name(dfsan_label *ret_label) {
- char *ret = get_current_dir_name();
- if (ret) {
- dfsan_set_label(0, ret, strlen(ret) + 1);
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_gethostname(char *name, size_t len, dfsan_label name_label,
- dfsan_label len_label, dfsan_label *ret_label) {
- int ret = gethostname(name, len);
- if (ret == 0) {
- dfsan_set_label(0, name, strlen(name) + 1);
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_getrlimit(int resource, struct rlimit *rlim,
- dfsan_label resource_label, dfsan_label rlim_label,
- dfsan_label *ret_label) {
- int ret = getrlimit(resource, rlim);
- if (ret == 0) {
- dfsan_set_label(0, rlim, sizeof(struct rlimit));
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_getrusage(int who, struct rusage *usage, dfsan_label who_label,
- dfsan_label usage_label, dfsan_label *ret_label) {
- int ret = getrusage(who, usage);
- if (ret == 0) {
- dfsan_set_label(0, usage, sizeof(struct rusage));
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-char *__dfsw_strcpy(char *dest, const char *src, dfsan_label dst_label,
- dfsan_label src_label, dfsan_label *ret_label) {
- char *ret = strcpy(dest, src);
- if (ret) {
- internal_memcpy(shadow_for(dest), shadow_for(src),
- sizeof(dfsan_label) * (strlen(src) + 1));
- }
- *ret_label = dst_label;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-long int __dfsw_strtol(const char *nptr, char **endptr, int base,
- dfsan_label nptr_label, dfsan_label endptr_label,
- dfsan_label base_label, dfsan_label *ret_label) {
- char *tmp_endptr;
- long int ret = strtol(nptr, &tmp_endptr, base);
- if (endptr) {
- *endptr = tmp_endptr;
- }
- if (tmp_endptr > nptr) {
- // If *tmp_endptr is '\0' include its label as well.
- *ret_label = dfsan_union(
- base_label,
- dfsan_read_label(nptr, tmp_endptr - nptr + (*tmp_endptr ? 0 : 1)));
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-double __dfsw_strtod(const char *nptr, char **endptr,
- dfsan_label nptr_label, dfsan_label endptr_label,
- dfsan_label *ret_label) {
- char *tmp_endptr;
- double ret = strtod(nptr, &tmp_endptr);
- if (endptr) {
- *endptr = tmp_endptr;
- }
- if (tmp_endptr > nptr) {
- // If *tmp_endptr is '\0' include its label as well.
- *ret_label = dfsan_read_label(
- nptr,
- tmp_endptr - nptr + (*tmp_endptr ? 0 : 1));
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-long long int __dfsw_strtoll(const char *nptr, char **endptr, int base,
- dfsan_label nptr_label, dfsan_label endptr_label,
- dfsan_label base_label, dfsan_label *ret_label) {
- char *tmp_endptr;
- long long int ret = strtoll(nptr, &tmp_endptr, base);
- if (endptr) {
- *endptr = tmp_endptr;
- }
- if (tmp_endptr > nptr) {
- // If *tmp_endptr is '\0' include its label as well.
- *ret_label = dfsan_union(
- base_label,
- dfsan_read_label(nptr, tmp_endptr - nptr + (*tmp_endptr ? 0 : 1)));
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-unsigned long int __dfsw_strtoul(const char *nptr, char **endptr, int base,
- dfsan_label nptr_label, dfsan_label endptr_label,
- dfsan_label base_label, dfsan_label *ret_label) {
- char *tmp_endptr;
- unsigned long int ret = strtoul(nptr, &tmp_endptr, base);
- if (endptr) {
- *endptr = tmp_endptr;
- }
- if (tmp_endptr > nptr) {
- // If *tmp_endptr is '\0' include its label as well.
- *ret_label = dfsan_union(
- base_label,
- dfsan_read_label(nptr, tmp_endptr - nptr + (*tmp_endptr ? 0 : 1)));
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-long long unsigned int __dfsw_strtoull(const char *nptr, char **endptr,
- dfsan_label nptr_label,
- int base, dfsan_label endptr_label,
- dfsan_label base_label,
- dfsan_label *ret_label) {
- char *tmp_endptr;
- long long unsigned int ret = strtoull(nptr, &tmp_endptr, base);
- if (endptr) {
- *endptr = tmp_endptr;
- }
- if (tmp_endptr > nptr) {
- // If *tmp_endptr is '\0' include its label as well.
- *ret_label = dfsan_union(
- base_label,
- dfsan_read_label(nptr, tmp_endptr - nptr + (*tmp_endptr ? 0 : 1)));
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-time_t __dfsw_time(time_t *t, dfsan_label t_label, dfsan_label *ret_label) {
- time_t ret = time(t);
- if (ret != (time_t) -1 && t) {
- dfsan_set_label(0, t, sizeof(time_t));
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_inet_pton(int af, const char *src, void *dst, dfsan_label af_label,
- dfsan_label src_label, dfsan_label dst_label,
- dfsan_label *ret_label) {
- int ret = inet_pton(af, src, dst);
- if (ret == 1) {
- dfsan_set_label(dfsan_read_label(src, strlen(src) + 1), dst,
- af == AF_INET ? sizeof(struct in_addr) : sizeof(in6_addr));
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-struct tm *__dfsw_localtime_r(const time_t *timep, struct tm *result,
- dfsan_label timep_label, dfsan_label result_label,
- dfsan_label *ret_label) {
- struct tm *ret = localtime_r(timep, result);
- if (ret) {
- dfsan_set_label(dfsan_read_label(timep, sizeof(time_t)), result,
- sizeof(struct tm));
- *ret_label = result_label;
- } else {
- *ret_label = 0;
- }
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_getpwuid_r(id_t uid, struct passwd *pwd,
- char *buf, size_t buflen, struct passwd **result,
- dfsan_label uid_label, dfsan_label pwd_label,
- dfsan_label buf_label, dfsan_label buflen_label,
- dfsan_label result_label, dfsan_label *ret_label) {
- // Store the data in pwd, the strings referenced from pwd in buf, and the
- // address of pwd in *result. On failure, NULL is stored in *result.
- int ret = getpwuid_r(uid, pwd, buf, buflen, result);
- if (ret == 0) {
- dfsan_set_label(0, pwd, sizeof(struct passwd));
- dfsan_set_label(0, buf, strlen(buf) + 1);
- }
- *ret_label = 0;
- dfsan_set_label(0, result, sizeof(struct passwd*));
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_poll(struct pollfd *fds, nfds_t nfds, int timeout,
- dfsan_label dfs_label, dfsan_label nfds_label,
- dfsan_label timeout_label, dfsan_label *ret_label) {
- int ret = poll(fds, nfds, timeout);
- if (ret >= 0) {
- for (; nfds > 0; --nfds) {
- dfsan_set_label(0, &fds[nfds - 1].revents, sizeof(fds[nfds - 1].revents));
- }
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_select(int nfds, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds, struct timeval *timeout,
- dfsan_label nfds_label, dfsan_label readfds_label,
- dfsan_label writefds_label, dfsan_label exceptfds_label,
- dfsan_label timeout_label, dfsan_label *ret_label) {
- int ret = select(nfds, readfds, writefds, exceptfds, timeout);
- // Clear everything (also on error) since their content is either set or
- // undefined.
- if (readfds) {
- dfsan_set_label(0, readfds, sizeof(fd_set));
- }
- if (writefds) {
- dfsan_set_label(0, writefds, sizeof(fd_set));
- }
- if (exceptfds) {
- dfsan_set_label(0, exceptfds, sizeof(fd_set));
- }
- dfsan_set_label(0, timeout, sizeof(struct timeval));
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask,
- dfsan_label pid_label,
- dfsan_label cpusetsize_label,
- dfsan_label mask_label, dfsan_label *ret_label) {
- int ret = sched_getaffinity(pid, cpusetsize, mask);
- if (ret == 0) {
- dfsan_set_label(0, mask, cpusetsize);
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_sigemptyset(sigset_t *set, dfsan_label set_label,
- dfsan_label *ret_label) {
- int ret = sigemptyset(set);
- dfsan_set_label(0, set, sizeof(sigset_t));
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_sigaction(int signum, const struct sigaction *act,
- struct sigaction *oldact, dfsan_label signum_label,
- dfsan_label act_label, dfsan_label oldact_label,
- dfsan_label *ret_label) {
- int ret = sigaction(signum, act, oldact);
- if (oldact) {
- dfsan_set_label(0, oldact, sizeof(struct sigaction));
- }
- *ret_label = 0;
- return ret;
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-int __dfsw_gettimeofday(struct timeval *tv, struct timezone *tz,
- dfsan_label tv_label, dfsan_label tz_label,
- dfsan_label *ret_label) {
- int ret = gettimeofday(tv, tz);
- if (tv) {
- dfsan_set_label(0, tv, sizeof(struct timeval));
- }
- if (tz) {
- dfsan_set_label(0, tz, sizeof(struct timezone));
- }
- *ret_label = 0;
- return ret;
-}
}