aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2020-02-07 12:47:26 -0800
committerNick Kralevich <nnk@google.com>2020-02-07 12:59:12 -0800
commit74de00c1080b3568bb3b0b65f1c5c6a35b46de04 (patch)
tree0983f301c76df5ad1e839ce6cf645888ca528507
parentb4d24a36297462a24b17ed867ef35da222315cb9 (diff)
downloadselinux-74de00c1080b3568bb3b0b65f1c5c6a35b46de04.tar.gz
label_file.c: Fix MAC build
On Android, the label_file.c file is compiled for all platforms, including OSX. OSX has a slightly different prototype for the getxattr function. ssize_t getxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options); which causes a compile error when compiling libselinux on OSX. ``` external/selinux/libselinux/src/label_file.c:1038:37: error: too few arguments to function call, expected 6, have 4 read_digest, SHA1_HASH_SIZE); ^ /Applications/Xcode9.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/xattr.h:61:1: note: 'getxattr' declared here ssize_t getxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options); ^ 1 error generated. ``` On OSX builds, add the additional arguments so that the code compiles. As both SELinux labels and the restorecon partial digest are stored in extended attributes, it's theoretically possible that someone could assign SELinux labels and hash digests on OSX filesystems. Doing so would be extremely weird and completely untested, but theoretically possible. Fixes: 149060079 Test: compiles on both Linux and OSX Change-Id: Ib80057ab09e48cc90dd37c2cc3c7046d0bdfdc9b
-rw-r--r--libselinux/src/label_file.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libselinux/src/label_file.c b/libselinux/src/label_file.c
index 0b102a1e..280430b5 100644
--- a/libselinux/src/label_file.c
+++ b/libselinux/src/label_file.c
@@ -1035,7 +1035,11 @@ static bool get_digests_all_partial_matches(struct selabel_handle *rec,
{
uint8_t read_digest[SHA1_HASH_SIZE];
ssize_t read_size = getxattr(pathname, RESTORECON_PARTIAL_MATCH_DIGEST,
- read_digest, SHA1_HASH_SIZE);
+ read_digest, SHA1_HASH_SIZE
+#ifdef __APPLE__
+ , 0, 0
+#endif /* __APPLE __ */
+ );
uint8_t hash_digest[SHA1_HASH_SIZE];
bool status = selabel_hash_all_partial_matches(rec, pathname,
hash_digest);