mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 07:57:39 +00:00
Better logging in recv_fds
This commit is contained in:
parent
19a4e11645
commit
a177846044
@ -73,13 +73,27 @@ static void *recv_fds(int sockfd, char *cmsgbuf, size_t bufsz, int cnt) {
|
||||
};
|
||||
|
||||
xrecvmsg(sockfd, &msg, MSG_WAITALL);
|
||||
cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);
|
||||
if (msg.msg_controllen != bufsz) {
|
||||
LOGE("recv_fd: msg_flags = %d, msg_controllen(%zu) != %zu\n",
|
||||
msg.msg_flags, msg.msg_controllen, bufsz);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (msg.msg_controllen != bufsz ||
|
||||
cmsg == nullptr ||
|
||||
cmsg->cmsg_len != CMSG_LEN(sizeof(int) * cnt) ||
|
||||
cmsg->cmsg_level != SOL_SOCKET ||
|
||||
cmsg->cmsg_type != SCM_RIGHTS) {
|
||||
cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);
|
||||
if (cmsg == nullptr) {
|
||||
LOGE("recv_fd: cmsg == nullptr\n");
|
||||
return nullptr;
|
||||
}
|
||||
if (cmsg->cmsg_len != CMSG_LEN(sizeof(int) * cnt)) {
|
||||
LOGE("recv_fd: cmsg_len(%zu) != %zu\n", cmsg->cmsg_len, CMSG_LEN(sizeof(int) * cnt));
|
||||
return nullptr;
|
||||
}
|
||||
if (cmsg->cmsg_level != SOL_SOCKET) {
|
||||
LOGE("recv_fd: cmsg_level != SOL_SOCKET\n");
|
||||
return nullptr;
|
||||
}
|
||||
if (cmsg->cmsg_type != SCM_RIGHTS) {
|
||||
LOGE("recv_fd: cmsg_type != SCM_RIGHTS\n");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -92,8 +106,11 @@ vector<int> recv_fds(int sockfd) {
|
||||
// Peek fd count to allocate proper buffer
|
||||
int cnt;
|
||||
recv(sockfd, &cnt, sizeof(cnt), MSG_PEEK);
|
||||
if (cnt == 0)
|
||||
if (cnt == 0) {
|
||||
// Consume data
|
||||
recv(sockfd, &cnt, sizeof(cnt), MSG_WAITALL);
|
||||
return results;
|
||||
}
|
||||
|
||||
vector<char> cmsgbuf;
|
||||
cmsgbuf.resize(CMSG_SPACE(sizeof(int) * cnt));
|
||||
@ -109,6 +126,15 @@ vector<int> recv_fds(int sockfd) {
|
||||
}
|
||||
|
||||
int recv_fd(int sockfd) {
|
||||
// Peek fd count
|
||||
int cnt;
|
||||
recv(sockfd, &cnt, sizeof(cnt), MSG_PEEK);
|
||||
if (cnt == 0) {
|
||||
// Consume data
|
||||
recv(sockfd, &cnt, sizeof(cnt), MSG_WAITALL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
char cmsgbuf[CMSG_SPACE(sizeof(int))];
|
||||
|
||||
void *data = recv_fds(sockfd, cmsgbuf, sizeof(cmsgbuf), 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user