Message ID | E1nTpyU-0000yR-9o@lizzy.crudebyte.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | 9pfs: fix inode sequencing in 'synth' driver | expand |
On Mon, 14 Mar 2022 19:58:11 +0100 Christian Schoenebeck <qemu_oss@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_oss@crudebyte.com> > --- Good catch ! Reviewed-by: Greg Kurz <groug@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;
On Mittwoch, 16. März 2022 12:10:43 CET Greg Kurz wrote: > On Mon, 14 Mar 2022 19:58:11 +0100 > > Christian Schoenebeck <qemu_oss@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_oss@crudebyte.com> > > --- > > Good catch ! > > Reviewed-by: Greg Kurz <groug@kaod.org> Queued on 9p.next: https://github.com/cschoenebeck/qemu/commits/9p.next Thanks! Best regards, Christian Schoenebeck
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;
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_oss@crudebyte.com> --- hw/9pfs/9p-synth.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)