Invalid error code when using multipathd CLI
[multipath-tools/.git] / libmpathcmd / mpath_cmd.c
index 1aaf5ea..1496b68 100644 (file)
@@ -31,9 +31,9 @@ static ssize_t read_all(int fd, void *buf, size_t len, unsigned int timeout)
                        if (errno == EINTR)
                                continue;
                        return -1;
-               } else if (!pfd.revents & POLLIN)
+               } else if (!(pfd.revents & POLLIN))
                        continue;
-               n = read(fd, buf, len);
+               n = recv(fd, buf, len, 0);
                if (n < 0) {
                        if ((errno == EINTR) || (errno == EAGAIN))
                                continue;
@@ -56,7 +56,7 @@ static size_t write_all(int fd, const void *buf, size_t len)
        size_t total = 0;
 
        while (len) {
-               ssize_t n = write(fd, buf, len);
+               ssize_t n = send(fd, buf, len, MSG_NOSIGNAL);
                if (n < 0) {
                        if ((errno == EINTR) || (errno == EAGAIN))
                                continue;
@@ -112,7 +112,7 @@ ssize_t mpath_recv_reply_len(int fd, unsigned int timeout)
                return ret;
        if (ret != sizeof(len)) {
                errno = EIO;
-               return ret;
+               return -1;
        }
        return len;
 }
@@ -142,6 +142,10 @@ int mpath_recv_reply(int fd, char **reply, unsigned int timeout)
        len = mpath_recv_reply_len(fd, timeout);
        if (len <= 0)
                return len;
+       if (len > MAX_REPLY_LEN) {
+               errno = EINVAL;
+               return -1;
+       }
        *reply = malloc(len);
        if (!*reply)
                return -1;
@@ -149,7 +153,7 @@ int mpath_recv_reply(int fd, char **reply, unsigned int timeout)
        if (err) {
                free(*reply);
                *reply = NULL;
-               return err;
+               return -1;
        }
        return 0;
 }