wireless: fix use-after-free bug
[project/netifd.git] / utils.c
diff --git a/utils.c b/utils.c
index 6b53c22..d202505 100644 (file)
--- a/utils.c
+++ b/utils.c
 #include <arpa/inet.h>
 #include <netinet/in.h>
 
 #include <arpa/inet.h>
 #include <netinet/in.h>
 
+#ifdef __APPLE__
+#include <libproc.h>
+#endif
+
 void
 __vlist_simple_init(struct vlist_simple_tree *tree, int offset)
 {
 void
 __vlist_simple_init(struct vlist_simple_tree *tree, int offset)
 {
@@ -168,3 +172,26 @@ crc32_file(FILE *fp)
 
        return c ^ 0xFFFFFFFF;
 }
 
        return c ^ 0xFFFFFFFF;
 }
+
+bool check_pid_path(int pid, const char *exe)
+{
+       int proc_exe_len;
+       int exe_len = strlen(exe);
+
+#ifdef __APPLE__
+       char proc_exe_buf[PROC_PIDPATHINFO_SIZE];
+
+       proc_exe_len = proc_pidpath(pid, proc_exe_buf, sizeof(proc_exe_buf));
+#else
+       char proc_exe[32];
+       char *proc_exe_buf = alloca(exe_len);
+
+       sprintf(proc_exe, "/proc/%d/exe", pid);
+       proc_exe_len = readlink(proc_exe, proc_exe_buf, exe_len);
+#endif
+
+       if (proc_exe_len != exe_len)
+               return false;
+
+       return !memcmp(exe, proc_exe_buf, exe_len);
+}