Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Nov 2020 11:48:27 +0200
From:      Igor Kolesnik <igorkolesnik@posteo.net>
To:        Scott Long <scottl@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r367701 - head/lib/libutil
Message-ID:  <0FE37F7D-6878-40F2-B606-A8CADFF270BF@posteo.net>
In-Reply-To: <202011150748.0AF7mqW3016900@repo.freebsd.org>
References:  <202011150748.0AF7mqW3016900@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

> Modified: head/lib/libutil/getlocalbase.c
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
> --- head/lib/libutil/getlocalbase.c	Sun Nov 15 01:54:44 2020	=
(r367700)
> +++ head/lib/libutil/getlocalbase.c	Sun Nov 15 07:48:52 2020	=
(r367701)
> @@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$");
> ssize_t
> getlocalbase(char *path, size_t pathlen)
> {
> -	size_t tmplen;
> +	ssize_t tmplen;
> 	const char *tmppath;
>=20
> 	if ((pathlen =3D=3D 0) || (path =3D=3D NULL)) {
> @@ -49,13 +49,20 @@ getlocalbase(char *path, size_t pathlen)
> 		return (-1);
> 	}
>=20
> +	/* It's unlikely that the buffer would be this big */
> +	if (pathlen > SSIZE_MAX) {
> +		errno =3D ENOMEM;
> +		return (-1);
> +	}
> +
> 	tmppath =3D NULL;
> -	tmplen =3D pathlen;
> +	tmplen =3D (size_t)pathlen;

Typo?  Shouldn=E2=80=99t pathlen be cast to ssize_t?

> 	if (issetugid() =3D=3D 0)
> 		tmppath =3D getenv("LOCALBASE");
>=20
> 	if ((tmppath =3D=3D NULL) &&
> -	    (sysctlbyname("user.localbase", path, &tmplen, NULL, 0) =3D=3D=
 0)) {
> +	    (sysctlbyname("user.localbase", path, (size_t *)&tmplen, =
NULL,
> +	    0) =3D=3D 0)) {
> 		return (tmplen);
> 	}
>=20
> @@ -67,13 +74,13 @@ getlocalbase(char *path, size_t pathlen)
> #endif
>=20
> 	tmplen =3D strlcpy(path, tmppath, pathlen);
> -	if ((tmplen < 0) || (tmplen >=3D pathlen)) {
> +	if ((tmplen < 0) || (tmplen >=3D (ssize_t)pathlen)) {
> 		errno =3D ENOMEM;
> 		return (-1);
> 	}
>=20
> 	/* It's unlikely that the buffer would be this big */
> -	if (tmplen >=3D SSIZE_MAX) {
> +	if (tmplen > SSIZE_MAX) {
> 		errno =3D ENOMEM;
> 		return (-1);
> 	}




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0FE37F7D-6878-40F2-B606-A8CADFF270BF>