Add extended attribute (xattr) system call wrappers to bionic.
The xattr system calls are required for the SE Android userspace in
order to get and set file security contexts. In particular, libselinux
requires these calls.
Change-Id: I78f5eb3d8f3384aed0a5e7c6a6f001781d982017
diff --git a/libc/include/sys/linux-syscalls.h b/libc/include/sys/linux-syscalls.h
index 2fa5d3a..54f86f8 100644
--- a/libc/include/sys/linux-syscalls.h
+++ b/libc/include/sys/linux-syscalls.h
@@ -79,6 +79,10 @@
#define __NR_sync (__NR_SYSCALL_BASE + 36)
#define __NR_fcntl64 (__NR_SYSCALL_BASE + 221)
#define __NR_sendfile (__NR_SYSCALL_BASE + 187)
+#define __NR_fsetxattr (__NR_SYSCALL_BASE + 228)
+#define __NR_fgetxattr (__NR_SYSCALL_BASE + 231)
+#define __NR_flistxattr (__NR_SYSCALL_BASE + 234)
+#define __NR_fremovexattr (__NR_SYSCALL_BASE + 237)
#define __NR_link (__NR_SYSCALL_BASE + 9)
#define __NR_unlink (__NR_SYSCALL_BASE + 10)
#define __NR_chdir (__NR_SYSCALL_BASE + 12)
@@ -100,6 +104,14 @@
#define __NR_symlink (__NR_SYSCALL_BASE + 83)
#define __NR_fchdir (__NR_SYSCALL_BASE + 133)
#define __NR_truncate (__NR_SYSCALL_BASE + 92)
+#define __NR_setxattr (__NR_SYSCALL_BASE + 226)
+#define __NR_lsetxattr (__NR_SYSCALL_BASE + 227)
+#define __NR_getxattr (__NR_SYSCALL_BASE + 229)
+#define __NR_lgetxattr (__NR_SYSCALL_BASE + 230)
+#define __NR_listxattr (__NR_SYSCALL_BASE + 232)
+#define __NR_llistxattr (__NR_SYSCALL_BASE + 233)
+#define __NR_removexattr (__NR_SYSCALL_BASE + 235)
+#define __NR_lremovexattr (__NR_SYSCALL_BASE + 236)
#define __NR_pause (__NR_SYSCALL_BASE + 29)
#define __NR_gettimeofday (__NR_SYSCALL_BASE + 78)
#define __NR_settimeofday (__NR_SYSCALL_BASE + 79)
diff --git a/libc/include/sys/linux-unistd.h b/libc/include/sys/linux-unistd.h
index f060374..693302d 100644
--- a/libc/include/sys/linux-unistd.h
+++ b/libc/include/sys/linux-unistd.h
@@ -98,6 +98,10 @@
int fchownat (int dirfd, const char *path, uid_t owner, gid_t group, int flags);
int fchmodat (int dirfd, const char *path, mode_t mode, int flags);
int renameat (int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
+int fsetxattr (int, const char *, const void *, size_t, int);
+ssize_t fgetxattr (int, const char *, void *, size_t);
+ssize_t flistxattr (int, char *, size_t);
+int fremovexattr (int, const char *);
int link (const char*, const char*);
int unlink (const char*);
int unlinkat (int, const char *, int);
@@ -121,6 +125,14 @@
int symlink (const char *, const char *);
int fchdir (int);
int truncate (const char*, off_t);
+int setxattr (const char *, const char *, const void *, size_t, int);
+int lsetxattr (const char *, const char *, const void *, size_t, int);
+ssize_t getxattr (const char *, const char *, void *, size_t);
+ssize_t lgetxattr (const char *, const char *, void *, size_t);
+ssize_t listxattr (const char *, char *, size_t);
+ssize_t llistxattr (const char *, char *, size_t);
+int removexattr (const char *, const char *);
+int lremovexattr (const char *, const char *);
int __statfs64 (const char *, size_t, struct statfs *);
int pause (void);
int gettimeofday (struct timeval*, struct timezone*);
diff --git a/libc/include/sys/xattr.h b/libc/include/sys/xattr.h
new file mode 100644
index 0000000..39b25b1
--- /dev/null
+++ b/libc/include/sys/xattr.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _SYS_XATTR_H_
+#define _SYS_XATTR_H_
+
+#include <sys/types.h>
+
+__BEGIN_DECLS
+
+#define XATTR_CREATE 1
+#define XATTR_REPLACE 2
+
+extern int fsetxattr(int fd, const char *name, const void *value, size_t size, int flags);
+extern int setxattr(const char *path, const char *name, const void *value, size_t size, int flags);
+extern int lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags);
+
+extern ssize_t fgetxattr(int fd, const char *name, void *value, size_t size);
+extern ssize_t getxattr(const char *path, const char *name, void *value, size_t size);
+extern ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size);
+
+extern ssize_t listxattr(const char *path, char *list, size_t size);
+extern ssize_t llistxattr(const char *path, char *list, size_t size);
+extern ssize_t flistxattr(int fd, char *list, size_t size);
+
+extern int removexattr(const char *path, const char *name);
+extern int lremovexattr(const char *path, const char *name);
+extern int fremovexattr(int fd, const char *name);
+
+__END_DECLS
+
+#endif /* _SYS_XATTR_H_ */