]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket-util: use GREEDY_REALLOC_APPEND where appropriate
authorMike Yuan <me@yhndnzj.com>
Tue, 28 May 2024 02:41:37 +0000 (10:41 +0800)
committerLuca Boccassi <luca.boccassi@gmail.com>
Tue, 28 May 2024 13:42:14 +0000 (15:42 +0200)
Also, previously GREEDY_REALLOC was used improperly,
causing the fds_array to be leaked when realloc() fails.

src/basic/socket-util.c

index e66bc426a4daf9f445e3e19b52f99cdecde75340..6e304e840d2da498e198984c122417478f1377c7 100644 (file)
@@ -1112,14 +1112,10 @@ ssize_t receive_many_fds_iov(
                 if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
                         size_t n = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int);
 
-                        fds_array = GREEDY_REALLOC(fds_array, n_fds_array + n);
-                        if (!fds_array) {
+                        if (!GREEDY_REALLOC_APPEND(fds_array, n_fds_array, CMSG_TYPED_DATA(cmsg, int), n)) {
                                 cmsg_close_all(&mh);
                                 return -ENOMEM;
                         }
-
-                        memcpy(fds_array + n_fds_array, CMSG_TYPED_DATA(cmsg, int), sizeof(int) * n);
-                        n_fds_array += n;
                 }
 
         if (n_fds_array == 0) {