summaryrefslogtreecommitdiff
path: root/libc/misc
diff options
context:
space:
mode:
authorMarkos Chandras <markos.chandras@imgtec.com>2013-01-23 09:12:46 +0000
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2013-02-20 13:45:12 +0100
commit08f8dd1e58f20be82477d37cfd12b7f14be33f9b (patch)
tree700068dc3271821350e178d221aa9719c850f91a /libc/misc
parenta1a76682c458e7d6bb654ddb42135c7be8872a9d (diff)
libc/statfs64: Skip conversion code for new architectures
Fixes the following tests in LTP statfs02_64 ( test case #5 ) The purpose of this test is to pass an invalid pointer to the statfs64 syscall and check if the kernel returns EFAULT or not. However, uClibc creates a new statfs struct which is then passed to the kernel. As a result of which, the kernel returns 0 because the newly created statfs structure is valid. But, when copying the contens of the new pointer to the old userspace one, the uClibc segfauls because the old pointer is invalid. Old architectures are doomed to suffer by this problem but new architectures can use the statfs64 syscall directly so that the userspace pointer is passed directly to the kernel and get the correct errno at the end. Signed-off-by: Markos Chandras <markos.chandras@imgtec.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/misc')
-rw-r--r--libc/misc/statfs/statfs64.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/libc/misc/statfs/statfs64.c b/libc/misc/statfs/statfs64.c
index ce8211b3e..b1a33b790 100644
--- a/libc/misc/statfs/statfs64.c
+++ b/libc/misc/statfs/statfs64.c
@@ -21,9 +21,11 @@
#include <string.h>
#include <stddef.h>
#include <sys/statfs.h>
+#include <sys/syscall.h>
extern __typeof(statfs) __libc_statfs;
+#if defined __NR_statfs
/* Return information about the filesystem on which FILE resides. */
int statfs64 (const char *file, struct statfs64 *buf)
{
@@ -51,4 +53,11 @@ int statfs64 (const char *file, struct statfs64 *buf)
return 0;
}
+#else
+int statfs64 (const char *file, struct statfs64 *buf)
+{
+ return INLINE_SYSCALL(statfs64, 3, file, sizeof(*buf), buf);
+}
+#endif
+
libc_hidden_def(statfs64)