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;


Reply via email to