Rewrite to avoid Coverity false positive.

MFC after:    1 week
Reported by:  Coverity (CID 1502669)
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D37907
This commit is contained in:
Kirk McKusick 2023-01-25 16:57:26 -08:00
parent a04aa80e77
commit 0bd4c448ec

View file

@ -166,6 +166,7 @@ getmntpoint(const char *name)
char *ddevname;
struct statfs *mntbuf, *statfsp;
int i, mntsize, isdev;
u_long len;
if (stat(name, &devstat) != 0)
return (NULL);
@ -178,12 +179,13 @@ getmntpoint(const char *name)
statfsp = &mntbuf[i];
ddevname = statfsp->f_mntfromname;
if (*ddevname != '/') {
if (strlen(_PATH_DEV) + strlen(ddevname) + 1 >
sizeof(statfsp->f_mntfromname))
if ((len = strlen(_PATH_DEV) + strlen(ddevname) + 1) >
sizeof(statfsp->f_mntfromname) ||
len > sizeof(device))
continue;
strcpy(device, _PATH_DEV);
strcat(device, ddevname);
strcpy(statfsp->f_mntfromname, device);
strncpy(device, _PATH_DEV, len);
strncat(device, ddevname, len);
strncpy(statfsp->f_mntfromname, device, len);
}
if (isdev == 0) {
if (strcmp(name, statfsp->f_mntonname))