summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2011-10-06 19:59:14 +0000
committerjkim <jkim@FreeBSD.org>2011-10-06 19:59:14 +0000
commit9a911728e76f65555fab4e616679856f71205f36 (patch)
tree488efd3691e3e3c73b1b1d9e023e68a0e96429a6 /sys/compat
parente2b10ad6873260e564e97bf5775be672135eb754 (diff)
downloadFreeBSD-src-9a911728e76f65555fab4e616679856f71205f36.zip
FreeBSD-src-9a911728e76f65555fab4e616679856f71205f36.tar.gz
Unroll inlined strnlen(9) and make it easier to read. No functional change.
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linux/linux_socket.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index a86a23f..ccecb81 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -99,12 +99,11 @@ do_sa_get(struct sockaddr **sap, const struct osockaddr *osa, int *osalen,
int error=0, bdom;
struct sockaddr *sa;
struct osockaddr *kosa;
- int alloclen;
#ifdef INET6
int oldv6size;
struct sockaddr_in6 *sin6;
#endif
- int namelen;
+ int alloclen, hdrlen, namelen;
if (*osalen < 2 || *osalen > UCHAR_MAX || !osa)
return (EINVAL);
@@ -167,14 +166,11 @@ do_sa_get(struct sockaddr **sap, const struct osockaddr *osa, int *osalen,
}
}
- if ((bdom == AF_LOCAL) && (*osalen > sizeof(struct sockaddr_un))) {
- for (namelen = 0;
- namelen < *osalen - offsetof(struct sockaddr_un, sun_path);
- namelen++)
- if (!((struct sockaddr_un *)kosa)->sun_path[namelen])
- break;
- if (namelen + offsetof(struct sockaddr_un, sun_path) >
- sizeof(struct sockaddr_un)) {
+ if (bdom == AF_LOCAL && *osalen > sizeof(struct sockaddr_un)) {
+ hdrlen = offsetof(struct sockaddr_un, sun_path);
+ namelen = strnlen(((struct sockaddr_un *)kosa)->sun_path,
+ *osalen - hdrlen);
+ if (hdrlen + namelen > sizeof(struct sockaddr_un)) {
error = EINVAL;
goto out;
}
OpenPOWER on IntegriCloud