On Sun, 24 Nov 2024 17:28:40 +0100 Christian Schoenebeck <qemu_...@crudebyte.com> wrote:
> This fixes an infamous, long standing bug: > https://gitlab.com/qemu-project/qemu/-/issues/103 > \o/ It is great if you manage to fix that once and far all ! > * Actual fix of this bug is patch 5. > > * Patches 1 and 6 add a test case to verify the expected behaviour. > > * The other patches (2, 3, 4) are basically just minor cleanup patches more > or less (un)related that I simply did not bother to send separately. > > Probably there are still other 9p request types that should be fixed for this > use-after-unlink idiom, but this series fixes the mentioned bug report as > described by reporter, so fair enough to round this up here for now. > When I last worked on that issue I had spotted some other places to fix. Maybe you can find some ideas for future work at : https://github.com/gkurz/qemu/tree/9p-attr-fixes > Simple test app to verify this behaviour on a Linux guest: > > #include <stdio.h> > #include <stdlib.h> > #include <sys/types.h> > #include <sys/stat.h> > #include <unistd.h> > #include <fcntl.h> > > int main() { > struct stat st; > int fd = open("doa-file", O_RDWR | O_CREAT | O_EXCL, 0600); > unlink("doa-file"); > int res = fstat(fd, &st); > printf("fstat() = %d\n", res); > return res; > } > > Christian Schoenebeck (6): > tests/9p: add 'use-after-unlink' test > tests/9p: fix Rreaddir response name > tests/9p: add missing Rgetattr response name > 9pfs: remove obsolete comment in v9fs_getattr() > 9pfs: fix 'Tgetattr' after unlink > tests/9p: also check 'Tgetattr' in 'use-after-unlink' test > > hw/9pfs/9p.c | 12 ++++--- > tests/qtest/libqos/virtio-9p-client.c | 3 +- > tests/qtest/virtio-9p-test.c | 46 +++++++++++++++++++++++++++ > 3 files changed, 55 insertions(+), 6 deletions(-) > Cheers, -- Greg