add bpf_map_def support for setting uid/gid/mode

Test: build, atest, adb shell ls -lZ /sys/fs/bpf
Bug: 149434314
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie4001fbe16b4bc84fc8ec7138ae4928cd86f5ce7
diff --git a/libbpf_android/Loader.cpp b/libbpf_android/Loader.cpp
index 18dabba..1c27f9e 100644
--- a/libbpf_android/Loader.cpp
+++ b/libbpf_android/Loader.cpp
@@ -24,6 +24,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
 #include <sys/utsname.h>
 #include <unistd.h>
 
@@ -411,7 +412,11 @@
 
         if (!reuse) {
             ret = bpf_obj_pin(fd, mapPinLoc.c_str());
-            if (ret < 0) return ret;
+            if (ret) return -errno;
+            ret = chown(mapPinLoc.c_str(), (uid_t)md[i].uid, (gid_t)md[i].gid);
+            if (ret) return -errno;
+            ret = chmod(mapPinLoc.c_str(), md[i].mode);
+            if (ret) return -errno;
         }
 
         mapFds.push_back(std::move(fd));