if message exceeds buffer size, disconnect instead of running lua

This commit is contained in:
2026-06-01 14:11:45 +01:00
parent 0d7dfa9570
commit 12c7abd3b0
+14 -7
View File
@@ -192,6 +192,12 @@ struct peer_entry* find_peer(pid_t pid) {
return NULL;
}
void hangup_peer(int socket, struct sockaddr_un * peer_addr,
size_t peer_addr_len,
uint32_t retval) {
sendto(socket, (void *) &retval, 4, 0, (struct sockaddr *) peer_addr, peer_addr_len);
}
int main(int argc, char **argv)
{
int status;
@@ -256,7 +262,7 @@ int main(int argc, char **argv)
if(pollfds[0].revents) {
if(find_peer(0)) {
int len = recvmsg(socket, &msg , 0);
if(len<=0) continue;
if(len <= 0) continue;
int peer_fds[3];
if(fds_from_msg(&msg, peer_fds)) {
@@ -266,9 +272,12 @@ int main(int argc, char **argv)
}
memmove(argline, buf, len);
pid_t child_pid = fork_lua(L, argline, len, peer_fds);
register_peer(child_pid, &peer_addr, msg.msg_namelen);
if(msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC)) {
hangup_peer(socket, &peer_addr, msg.msg_namelen, 0xffff);
} else {
pid_t child_pid = fork_lua(L, argline, len, peer_fds);
register_peer(child_pid, &peer_addr, msg.msg_namelen);
}
/* close peer fds in parent */
close(peer_fds[0]);
close(peer_fds[1]);
@@ -293,9 +302,7 @@ int main(int argc, char **argv)
} else if(WIFSIGNALED(wstatus)) {
ret = htonl(128 + WTERMSIG(wstatus));
}
sendto(socket, (void *) &ret, 4, 0,
(const struct sockaddr *) &(peer->addr),
peer->addrlen);
hangup_peer(socket, &(peer->addr), peer->addrlen, ret);
peer->pid = 0;
}
}