> Modified: head/lib/libutil/getlocalbase.c
> ==============================================================================
> --- 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;
> 
>       if ((pathlen == 0) || (path == NULL)) {
> @@ -49,13 +49,20 @@ getlocalbase(char *path, size_t pathlen)
>               return (-1);
>       }
> 
> +     /* It's unlikely that the buffer would be this big */
> +     if (pathlen > SSIZE_MAX) {
> +             errno = ENOMEM;
> +             return (-1);
> +     }
> +
>       tmppath = NULL;
> -     tmplen = pathlen;
> +     tmplen = (size_t)pathlen;

Typo?  Shouldn’t pathlen be cast to ssize_t?

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

_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to