mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 16:07:39 +00:00
parent
37860181d4
commit
e8e39e0f3c
@ -40,23 +40,11 @@ int create_rand_socket(struct sockaddr_un *sun) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int socket_accept(int sockfd, int timeout) {
|
int socket_accept(int sockfd, int timeout) {
|
||||||
struct timeval tv;
|
struct pollfd pfd = {
|
||||||
fd_set fds;
|
.fd = sockfd,
|
||||||
int rc;
|
.events = POLL_IN
|
||||||
|
};
|
||||||
tv.tv_sec = timeout;
|
return xpoll(&pfd, 1, timeout * 1000) <= 0 ? -1 : xaccept4(sockfd, NULL, NULL, SOCK_CLOEXEC);
|
||||||
tv.tv_usec = 0;
|
|
||||||
FD_ZERO(&fds);
|
|
||||||
FD_SET(sockfd, &fds);
|
|
||||||
do {
|
|
||||||
rc = select(sockfd + 1, &fds, NULL, NULL, &tv);
|
|
||||||
} while (rc < 0 && errno == EINTR);
|
|
||||||
if (rc < 1) {
|
|
||||||
PLOGE("select");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return xaccept4(sockfd, NULL, NULL, SOCK_CLOEXEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -168,12 +168,14 @@ static struct su_info *get_su_info(unsigned uid) {
|
|||||||
// Connect manager
|
// Connect manager
|
||||||
app_connect(addr.sun_path + 1, info);
|
app_connect(addr.sun_path + 1, info);
|
||||||
int fd = socket_accept(sockfd, 60);
|
int fd = socket_accept(sockfd, 60);
|
||||||
|
if (fd < 0) {
|
||||||
|
info->access.policy = DENY;
|
||||||
|
} else {
|
||||||
socket_send_request(fd, info);
|
socket_send_request(fd, info);
|
||||||
int ret = read_int_be(fd);
|
int ret = read_int_be(fd);
|
||||||
info->access.policy = ret < 0 ? DENY : ret;
|
info->access.policy = ret < 0 ? DENY : ret;
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
}
|
||||||
close(sockfd);
|
close(sockfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#include <poll.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
@ -78,6 +79,7 @@ void *xmmap(void *addr, size_t length, int prot, int flags,
|
|||||||
int fd, off_t offset);
|
int fd, off_t offset);
|
||||||
ssize_t xsendfile(int out_fd, int in_fd, off_t *offset, size_t count);
|
ssize_t xsendfile(int out_fd, int in_fd, off_t *offset, size_t count);
|
||||||
pid_t xfork();
|
pid_t xfork();
|
||||||
|
int xpoll(struct pollfd *fds, nfds_t nfds, int timeout);
|
||||||
|
|
||||||
// misc.c
|
// misc.c
|
||||||
|
|
||||||
|
@ -394,3 +394,11 @@ pid_t xfork() {
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int xpoll(struct pollfd *fds, nfds_t nfds, int timeout) {
|
||||||
|
int ret = poll(fds, nfds, timeout);
|
||||||
|
if (ret == -1) {
|
||||||
|
PLOGE("poll");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user