mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-16 01:52:34 +00:00
commit
7cb6d1b0a8
@ -206,7 +206,7 @@ static int lxc_cmd_rsp_send(int fd, struct lxc_cmd_rsp *rsp)
|
|||||||
{
|
{
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
||||||
ret = send(fd, rsp, sizeof(*rsp), 0);
|
ret = send(fd, rsp, sizeof(*rsp), MSG_NOSIGNAL);
|
||||||
if (ret < 0 || (size_t)ret != sizeof(*rsp)) {
|
if (ret < 0 || (size_t)ret != sizeof(*rsp)) {
|
||||||
SYSERROR("Failed to send command response %zd", ret);
|
SYSERROR("Failed to send command response %zd", ret);
|
||||||
return -1;
|
return -1;
|
||||||
@ -215,7 +215,7 @@ static int lxc_cmd_rsp_send(int fd, struct lxc_cmd_rsp *rsp)
|
|||||||
if (!rsp->data || rsp->datalen <= 0)
|
if (!rsp->data || rsp->datalen <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = send(fd, rsp->data, rsp->datalen, 0);
|
ret = send(fd, rsp->data, rsp->datalen, MSG_NOSIGNAL);
|
||||||
if (ret < 0 || ret != (ssize_t)rsp->datalen) {
|
if (ret < 0 || ret != (ssize_t)rsp->datalen) {
|
||||||
SYSWARN("Failed to send command response data %zd", ret);
|
SYSWARN("Failed to send command response data %zd", ret);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -3094,7 +3094,7 @@ int lxc_network_send_veth_names_to_child(struct lxc_handler *handler)
|
|||||||
if (netdev->type != LXC_NET_VETH)
|
if (netdev->type != LXC_NET_VETH)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = send(data_sock, netdev->name, IFNAMSIZ, 0);
|
ret = send(data_sock, netdev->name, IFNAMSIZ, MSG_NOSIGNAL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
TRACE("Sent network device name \"%s\" to child", netdev->name);
|
TRACE("Sent network device name \"%s\" to child", netdev->name);
|
||||||
@ -3142,14 +3142,14 @@ int lxc_network_send_name_and_ifindex_to_parent(struct lxc_handler *handler)
|
|||||||
struct lxc_netdev *netdev = iterator->elem;
|
struct lxc_netdev *netdev = iterator->elem;
|
||||||
|
|
||||||
/* Send network device name in the child's namespace to parent. */
|
/* Send network device name in the child's namespace to parent. */
|
||||||
ret = send(data_sock, netdev->name, IFNAMSIZ, 0);
|
ret = send(data_sock, netdev->name, IFNAMSIZ, MSG_NOSIGNAL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Send network device ifindex in the child's namespace to
|
/* Send network device ifindex in the child's namespace to
|
||||||
* parent.
|
* parent.
|
||||||
*/
|
*/
|
||||||
ret = send(data_sock, &netdev->ifindex, sizeof(netdev->ifindex), 0);
|
ret = send(data_sock, &netdev->ifindex, sizeof(netdev->ifindex), MSG_NOSIGNAL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ extern int netlink_send(struct nl_handler *handler, struct nlmsg *nlmsg)
|
|||||||
nladdr.nl_pid = 0;
|
nladdr.nl_pid = 0;
|
||||||
nladdr.nl_groups = 0;
|
nladdr.nl_groups = 0;
|
||||||
|
|
||||||
ret = sendmsg(handler->fd, &msg, 0);
|
ret = sendmsg(handler->fd, &msg, MSG_NOSIGNAL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -errno;
|
return -errno;
|
||||||
|
|
||||||
|
@ -208,9 +208,9 @@ static bool lxc_try_preserve_namespaces(struct lxc_handler *handler,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int match_fd(int fd)
|
static inline bool match_stdfds(int fd)
|
||||||
{
|
{
|
||||||
return (fd == 0 || fd == 1 || fd == 2);
|
return (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO);
|
||||||
}
|
}
|
||||||
|
|
||||||
int lxc_check_inherited(struct lxc_conf *conf, bool closeall,
|
int lxc_check_inherited(struct lxc_conf *conf, bool closeall,
|
||||||
@ -277,7 +277,7 @@ restart:
|
|||||||
if (current_config && fd == current_config->logfd)
|
if (current_config && fd == current_config->logfd)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (match_fd(fd))
|
if (match_stdfds(fd))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (closeall) {
|
if (closeall) {
|
||||||
@ -301,9 +301,10 @@ restart:
|
|||||||
|
|
||||||
static int setup_signal_fd(sigset_t *oldmask)
|
static int setup_signal_fd(sigset_t *oldmask)
|
||||||
{
|
{
|
||||||
int ret, sig;
|
int ret;
|
||||||
|
int sig;
|
||||||
sigset_t mask;
|
sigset_t mask;
|
||||||
int signals[] = {SIGBUS, SIGILL, SIGSEGV, SIGWINCH};
|
const int signals[] = {SIGBUS, SIGILL, SIGSEGV, SIGWINCH};
|
||||||
|
|
||||||
/* Block everything except serious error signals. */
|
/* Block everything except serious error signals. */
|
||||||
ret = sigfillset(&mask);
|
ret = sigfillset(&mask);
|
||||||
@ -451,7 +452,7 @@ int lxc_serve_state_clients(const char *name, struct lxc_handler *handler,
|
|||||||
lxc_state2str(state), client->clientfd);
|
lxc_state2str(state), client->clientfd);
|
||||||
|
|
||||||
again:
|
again:
|
||||||
ret = send(client->clientfd, &msg, sizeof(msg), 0);
|
ret = send(client->clientfd, &msg, sizeof(msg), MSG_NOSIGNAL);
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
if (errno == EINTR) {
|
if (errno == EINTR) {
|
||||||
TRACE("Caught EINTR; retrying");
|
TRACE("Caught EINTR; retrying");
|
||||||
|
Loading…
Reference in New Issue
Block a user