On Mon, 14 Mar 2022 19:58:11 +0100 Christian Schoenebeck <qemu_...@crudebyte.com> wrote:
> The 'synth' driver's root node and the 'synth' driver's first > subdirectory node falsely share the same inode number (zero), which > makes it impossible for 9p clients (i.e. 9p test cases) to distinguish > root node and first subdirectory from each other by comparing their QIDs > (which are derived by 9p server from driver's inode numbers). > > Fix this issue by using prefix-increment instead of postfix-increment > operator while generating new inode numbers for subdirectories and files. > > Link: https://lore.kernel.org/qemu-devel/3859307.hTDP4D0zbi@silver/ > Signed-off-by: Christian Schoenebeck <qemu_...@crudebyte.com> > --- Good catch ! Reviewed-by: Greg Kurz <gr...@kaod.org> > hw/9pfs/9p-synth.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/9pfs/9p-synth.c b/hw/9pfs/9p-synth.c > index b3080e415b..f3c73d3b0b 100644 > --- a/hw/9pfs/9p-synth.c > +++ b/hw/9pfs/9p-synth.c > @@ -92,7 +92,7 @@ int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode, > } > } > /* Add the name */ > - node = v9fs_add_dir_node(parent, mode, name, NULL, synth_node_count++); > + node = v9fs_add_dir_node(parent, mode, name, NULL, ++synth_node_count); > v9fs_add_dir_node(node, parent->attr->mode, "..", > parent->attr, parent->attr->inode); > v9fs_add_dir_node(node, node->attr->mode, ".", > @@ -130,7 +130,7 @@ int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int > mode, > mode = ((mode & 0777) | S_IFREG); > node = g_malloc0(sizeof(V9fsSynthNode)); > node->attr = &node->actual_attr; > - node->attr->inode = synth_node_count++; > + node->attr->inode = ++synth_node_count; > node->attr->nlink = 1; > node->attr->read = read; > node->attr->write = write;