]> xenbits.xensource.com Git - libvirt.git/commitdiff
virSocketSendMsgWithFDs: Introduce @payload_len argument
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 2 Feb 2024 12:05:08 +0000 (13:05 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 7 Feb 2024 10:01:30 +0000 (11:01 +0100)
Instead of using strlen() to calculate length of payload we're
sending, let caller specify the size: they may want to send just
a portion of a buffer (even though the only current user
doesn't).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/ch/ch_process.c
src/util/virsocket.c
src/util/virsocket.h

index 3265ae90de69d82b61e13c1042dd75cf9e8751a6..3bde9d9dcf625aaf9f0998f5b4e7309e53db574c 100644 (file)
@@ -558,6 +558,7 @@ chProcessAddNetworkDevices(virCHDriver *driver,
         g_autofree char *response = NULL;
         size_t j;
         size_t tapfd_len;
+        size_t payload_len;
         int saved_errno;
         int http_res;
         int rc;
@@ -595,9 +596,11 @@ chProcessAddNetworkDevices(virCHDriver *driver,
         virBufferAsprintf(&buf, "%s", virBufferCurrentContent(&http_headers));
         virBufferAsprintf(&buf, "Content-Length: %ld\r\n\r\n", strlen(payload));
         virBufferAsprintf(&buf, "%s", payload);
+        payload_len = virBufferUse(&buf);
         payload = virBufferContentAndReset(&buf);
 
-        rc = virSocketSendMsgWithFDs(mon_sockfd, payload, tapfds, tapfd_len);
+        rc = virSocketSendMsgWithFDs(mon_sockfd, payload, payload_len,
+                                     tapfds, tapfd_len);
         saved_errno = errno;
 
         /* Close sent tap fds in Libvirt, as they have been dup()ed in CH */
index ff06eb15f7163b68f298d995a2d7e039929efd6c..a7272a3ec9dc0400a2141add3e067b30e9e811c5 100644 (file)
@@ -488,6 +488,7 @@ virSocketRecvFD(int sock, int fdflags)
  * virSocketSendMsgWithFDs:
  * @sock: socket to send payload and fds to
  * @payload: payload to send
+ * @payload_len: length of @payload
  * @fds: array of fds to send
  * @fds_len: len of fds array
 
@@ -496,7 +497,11 @@ virSocketRecvFD(int sock, int fdflags)
  * On error, set errno and return -1.
  */
 int
-virSocketSendMsgWithFDs(int sock, const char *payload, int *fds, size_t fds_len)
+virSocketSendMsgWithFDs(int sock,
+                        const char *payload,
+                        size_t payload_len,
+                        int *fds,
+                        size_t fds_len)
 {
     g_autofree char *control = NULL;
     const size_t control_size = CMSG_SPACE(sizeof(int) * fds_len);
@@ -508,7 +513,7 @@ virSocketSendMsgWithFDs(int sock, const char *payload, int *fds, size_t fds_len)
     control = g_new0(char, control_size);
 
     iov[0].iov_base = (void *) payload;
-    iov[0].iov_len = strlen(payload);
+    iov[0].iov_len = payload_len;
 
     msg.msg_iov = iov;
     msg.msg_iovlen = 1;
@@ -553,6 +558,7 @@ virSocketRecvFD(int sock G_GNUC_UNUSED, int fdflags G_GNUC_UNUSED)
 int
 virSocketSendMsgWithFDs(int sock G_GNUC_UNUSED,
                         const char *payload G_GNUC_UNUSED,
+                        size_t payload_len G_GNUC_UNUSED,
                         int *fds G_GNUC_UNUSED,
                         size_t fds_len G_GNUC_UNUSED)
 {
index 31a31c2378244bf10ab1a8619ef4524e78b2cf57..0e7f9616f26068989daaf52408efdd825d2dfb6f 100644 (file)
@@ -22,8 +22,8 @@
 
 int virSocketSendFD(int sock, int fd);
 int virSocketRecvFD(int sock, int fdflags);
-int virSocketSendMsgWithFDs(int sock, const char *payload, int *fds,
-                            size_t fd_len);
+int virSocketSendMsgWithFDs(int sock, const char *payload, size_t payload_len,
+                            int *fds, size_t fds_len);
 
 #ifdef WIN32