qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH for-2.1 2/2] qemu-char: avoid leaking unused fds in


From: Stefan Hajnoczi
Subject: [Qemu-devel] [PATCH for-2.1 2/2] qemu-char: avoid leaking unused fds in tcp_get_msgfds()
Date: Sun, 22 Jun 2014 10:38:37 +0800

Commit c76bf6bb8fbbb233a7d3641e09229d23747d5ee3 ("Add chardev API
qemu_chr_fe_get_msgfds") extended the get_msgfds API from one to
multiple file descriptors.  It forgot to close unused file descriptors
before freeing the file descriptor array.

This patch prevents a file descriptor leak if the tcp_get_msgfds()
callers requests fewer file descriptors than are available.

Cc: Nikolay Nikolaev <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
 qemu-char.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/qemu-char.c b/qemu-char.c
index 6ee2275..a52613d 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2482,8 +2482,15 @@ static int tcp_get_msgfds(CharDriverState *chr, int 
*fds, int num)
     int to_copy = (s->read_msgfds_num < num) ? s->read_msgfds_num : num;
 
     if (to_copy) {
+        int i;
+
         memcpy(fds, s->read_msgfds, to_copy * sizeof(int));
 
+        /* Close unused fds */
+        for (i = to_copy; i < s->read_msgfds_num; i++) {
+            close(s->read_msgfds[i]);
+        }
+
         g_free(s->read_msgfds);
         s->read_msgfds = 0;
         s->read_msgfds_num = 0;
-- 
1.9.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]