On 6/2/20 7:27 AM, Richard W.M. Jones wrote:
Use an extensible buffer (a vector<char>) when reading
/proc/self/cmdline.

Tidy up some error messages.
---
  plugins/vddk/reexec.c | 57 ++++++++++++++++++++++++++-----------------
  1 file changed, 35 insertions(+), 22 deletions(-)


@@ -80,42 +95,40 @@ perform_reexec (const char *env, const char *prepend)
     * until we get a short read.  This assumes nbdkit did not alter its
     * original argv[].
     */
-  fd = open ("/proc/self/cmdline", O_RDONLY);
+  fd = open (cmdline_file, O_RDONLY|O_CLOEXEC);
    if (fd == -1) {
-    nbdkit_debug ("failure to parse original argv: %m");
+    nbdkit_debug ("open: %s: %m", cmdline_file);
      return;
    }
- do {
-    char *p = realloc (buf, buflen * 2);
+  for (;;) {
      ssize_t r;
- if (!p) {
-      nbdkit_debug ("failure to parse original argv: %m");
+    if (buffer_reserve (&buf, 512) == -1) {
+      nbdkit_debug ("realloc: %m");
        return;
      }

Pre-existing bug, which you did not fix here. If we failed here, we are leaking fd. You slightly improved the situation by marking the leaked fd O_CLOEXEC, but that really doesn't matter if we properly fix the code to close(fd) before any early return, at which point the lifetime of fd is only during single-threaded execution and O_CLOEXEC doesn't matter.

Rest of the patch looks fine.

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

_______________________________________________
Libguestfs mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libguestfs

Reply via email to