[Libguestfs] [PATCH] lib: Better handling for problems creating the socket path
Laszlo Ersek
lersek at redhat.com
Mon Jan 17 14:55:13 UTC 2022
On 01/17/22 13:40, Richard W.M. Jones wrote:
> GCC 12 gives a warning about our previous attempt to check the length
> of the socket path. In the ensuing discussion it was pointed out that
> it is easier to get snprintf to do the hard work. snprintf will
> return an int >= UNIX_PATH_MAX if the path is too long, or -1 if there
> are other errors such as locale/encoding problems. So we should just
> check for those two cases instead.
>
> https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/NPKWMTSJ2A2ABNJJEH6WTZIAEFTX6CQY/
>
> Thanks: Martin Sebor and Laszlo Ersek
> ---
> lib/launch.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/lib/launch.c b/lib/launch.c
> index 253189b200..e3f64aec90 100644
> --- a/lib/launch.c
> +++ b/lib/launch.c
> @@ -325,15 +325,20 @@ int
> guestfs_int_create_socketname (guestfs_h *g, const char *filename,
> char (*sockpath)[UNIX_PATH_MAX])
> {
> + int r;
> +
> if (guestfs_int_lazy_make_sockdir (g) == -1)
> return -1;
>
> - if (strlen (g->sockdir) + 1 + strlen (filename) > UNIX_PATH_MAX-1) {
> + r = snprintf (*sockpath, UNIX_PATH_MAX, "%s/%s", g->sockdir, filename);
> + if (r >= UNIX_PATH_MAX) {
> error (g, _("socket path too long: %s/%s"), g->sockdir, filename);
> return -1;
> }
> -
> - snprintf (*sockpath, UNIX_PATH_MAX, "%s/%s", g->sockdir, filename);
> + if (r == -1) {
> + perrorf (g, _("%s"), g->sockdir);
> + return -1;
> + }
>
> return 0;
> }
>
The specs don't say (-1), they say "a negative value". I suggest
updating both the commit message and the last error check.
With that:
Reviewed-by: Laszlo Ersek <lersek at redhat.com>
Thanks,
Laszlo
More information about the Libguestfs
mailing list