Applied, thanks!

Milos Nikic, le dim. 01 nov. 2026 22:56:09 -0800, a ecrit:
> netfs_S_dir_lookup released NEWPI on each exit of the translator path,
> and missed some: when making the port failed, it dereferenced a null
> NEWPI; when asprintf of the translator's path failed, and when an
> O_EXLOCK or O_SHLOCK open could not get its lock, the port leaked.
> 
> Release it at OUT, as libdiskfs's dir_lookup does, clearing it where
> the translator vanished and the lookup goes on.  In both, the release
> of a successful open's port just before OUT is left to OUT as well.
> ---
>  libdiskfs/dir-lookup.c |  2 --
>  libnetfs/dir-lookup.c  | 10 ++++------
>  2 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/libdiskfs/dir-lookup.c b/libdiskfs/dir-lookup.c
> index 5c787ccfe..60316a3f6 100644
> --- a/libdiskfs/dir-lookup.c
> +++ b/libdiskfs/dir-lookup.c
> @@ -545,8 +545,6 @@ diskfs_S_dir_lookup (struct protid *dircred,
>       err = errno;
>  
>        *retry_port = ports_get_right (newpi);
> -      ports_port_deref (newpi);
> -      newpi = 0;
>      }
>  
>   out:
> diff --git a/libnetfs/dir-lookup.c b/libnetfs/dir-lookup.c
> index accc1cf1e..ccc420712 100644
> --- a/libnetfs/dir-lookup.c
> +++ b/libnetfs/dir-lookup.c
> @@ -316,17 +316,14 @@ netfs_S_dir_lookup (struct protid *dircred,
>                 if (complete_path != translator_path)
>                   free(complete_path);
>                 if (err)
> -                 {
> -                   ports_port_deref (newpi);
> -                   goto out;
> -                 }
> +                 goto out;
>               }
>  
> -           ports_port_deref (newpi);
>             goto out;
>           }
>  
>         ports_port_deref (newpi);
> +       newpi = NULL;
>  
>         /* ENOENT means there was a hiccup, and the translator vanished
>            while NP was unlocked inside fshelp_fetch_root; continue as 
> normal. */
> @@ -491,7 +488,6 @@ netfs_S_dir_lookup (struct protid *dircred,
>       err = errno;
>  
>        *retry_port = ports_get_right (newpi);
> -      ports_port_deref (newpi);
>      }
>  
>   out:
> @@ -499,6 +495,8 @@ netfs_S_dir_lookup (struct protid *dircred,
>      netfs_nput (np);
>    if (dnp)
>      netfs_nrele (dnp);
> +  if (newpi)
> +    ports_port_deref (newpi);
>    free (relpath);
>    return err;
>  }
> -- 
> 2.56.0
> 
> 

-- 
Samuel
Hi ! I'm a .signature virus ! Copy me into your ~/.signature, please !

Reply via email to