)]}'
{
  "commit": "9883df8ccae6d744a0c8d9cbf9d62b1797d70ebd",
  "tree": "4023a1c12817ad1687fd8f1f940bacdd79619caa",
  "parents": [
    "a931b6861e59c78d861017e9c6a9c161ff49a163"
  ],
  "author": {
    "name": "Eryu Guan",
    "email": "eguan@linux.alibaba.com",
    "time": "Tue Jan 07 12:15:21 2020 +0800"
  },
  "committer": {
    "name": "Dr. David Alan Gilbert",
    "email": "dgilbert@redhat.com",
    "time": "Thu Jan 23 16:41:37 2020 +0000"
  },
  "message": "virtiofsd: stop all queue threads on exit in virtio_loop()\n\nOn guest graceful shutdown, virtiofsd receives VHOST_USER_GET_VRING_BASE\nrequest from VMM and shuts down virtqueues by calling fv_set_started(),\nwhich joins fv_queue_thread() threads. So when virtio_loop() returns,\nthere should be no thread is still accessing data in fuse session and/or\nvirtio dev.\n\nBut on abnormal exit, e.g. guest got killed for whatever reason,\nvhost-user socket is closed and virtio_loop() breaks out the main loop\nand returns to main(). But it\u0027s possible fv_queue_worker()s are still\nworking and accessing fuse session and virtio dev, which results in\ncrash or use-after-free.\n\nFix it by stopping fv_queue_thread()s before virtio_loop() returns,\nto make sure there\u0027s no-one could access fuse session and virtio dev.\n\nReported-by: Qingming Su \u003cqingming.su@linux.alibaba.com\u003e\nSigned-off-by: Eryu Guan \u003ceguan@linux.alibaba.com\u003e\nReviewed-by: Stefan Hajnoczi \u003cstefanha@redhat.com\u003e\nSigned-off-by: Dr. David Alan Gilbert \u003cdgilbert@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9f6582343c6b4867c8e92731195e833ec952f4f0",
      "old_mode": 33188,
      "old_path": "tools/virtiofsd/fuse_virtio.c",
      "new_id": "80a6e929dfc3003b8479353401e4e6d8687ff015",
      "new_mode": 33188,
      "new_path": "tools/virtiofsd/fuse_virtio.c"
    }
  ]
}
