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 !