]> git.proxmox.com Git - mirror_qemu.git/commit
aio-posix: fix use after leaving scope in aio_poll()
authorStefan Hajnoczi <stefanha@redhat.com>
Fri, 14 Feb 2020 17:17:08 +0000 (17:17 +0000)
committerStefan Hajnoczi <stefanha@redhat.com>
Sat, 22 Feb 2020 08:26:47 +0000 (08:26 +0000)
commitff29ed3a331d0cd26bcd30f7cd6c0c96c7d44eed
tree6bdf3c28cedf4f6cb5a63321d846f298fceb1ab9
parent8c6b0356b53977bcfdea5299db07884915425b0c
aio-posix: fix use after leaving scope in aio_poll()

epoll_handler is a stack variable and must not be accessed after it goes
out of scope:

      if (aio_epoll_check_poll(ctx, pollfds, npfd, timeout)) {
          AioHandler epoll_handler;
          ...
          add_pollfd(&epoll_handler);
          ret = aio_epoll(ctx, pollfds, npfd, timeout);
      } ...

  ...

  /* if we have any readable fds, dispatch event */
  if (ret > 0) {
      for (i = 0; i < npfd; i++) {
          nodes[i]->pfd.revents = pollfds[i].revents;
      }
  }

nodes[0] is &epoll_handler, which has already gone out of scope.

There is no need to use pollfds[] for epoll.  We don't need an
AioHandler for the epoll fd.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
Message-id: 20200214171712.541358-2-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
util/aio-posix.c