aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2022-09-13 17:39:02 +0000
committerEd Maste <emaste@FreeBSD.org>2022-09-13 17:39:02 +0000
commitc484e32c3c9a24c9ee0326b240815bbd094e87b5 (patch)
treed4c369884e8607a6e2d13fb8db2e6c6741c69cec
parentd0e943077d94e6266ece9856789c5d5313676e38 (diff)
downloadsrc-vendor/google/capsicum-test.tar.gz
src-vendor/google/capsicum-test.zip
Update capsicum-test to eab7a83b05becf64439b4b256b3d756b353fbbbbvendor/google/capsicum-test
-rw-r--r--syscalls.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/syscalls.h b/syscalls.h
index 592a1677e1f1..3ea8803c2f64 100644
--- a/syscalls.h
+++ b/syscalls.h
@@ -47,16 +47,29 @@ inline int bogus_mount_() {
/* Mappings for extended attribute functions */
#include <sys/extattr.h>
+#include <errno.h>
+static const char *fbsd_extattr_skip_prefix(const char *p) {
+ if (*p++ == 'u' && *p++ == 's' && *p++ == 'e' && *p++ == 'r' && *p++ == '.')
+ return p;
+ errno = EINVAL;
+ return NULL;
+}
inline ssize_t flistxattr_(int fd, char *list, size_t size) {
return extattr_list_fd(fd, EXTATTR_NAMESPACE_USER, list, size);
}
inline ssize_t fgetxattr_(int fd, const char *name, void *value, size_t size) {
+ if (!(name = fbsd_extattr_skip_prefix(name)))
+ return -1;
return extattr_get_fd(fd, EXTATTR_NAMESPACE_USER, name, value, size);
}
inline int fsetxattr_(int fd, const char *name, const void *value, size_t size, int) {
+ if (!(name = fbsd_extattr_skip_prefix(name)))
+ return -1;
return extattr_set_fd(fd, EXTATTR_NAMESPACE_USER, name, value, size);
}
inline int fremovexattr_(int fd, const char *name) {
+ if (!(name = fbsd_extattr_skip_prefix(name)))
+ return -1;
return extattr_delete_fd(fd, EXTATTR_NAMESPACE_USER, name);
}