svn commit: r226073 - head/sys/compat/linux
Jung-uk Kim
jkim at FreeBSD.org
Thu Oct 6 21:09:29 UTC 2011
Author: jkim
Date: Thu Oct 6 21:09:28 2011
New Revision: 226073
URL: http://svn.freebsd.org/changeset/base/226073
Log:
Make sure to ignore the leading NULL byte from Linux abstract namespace.
Modified:
head/sys/compat/linux/linux_socket.c
Modified: head/sys/compat/linux/linux_socket.c
==============================================================================
--- head/sys/compat/linux/linux_socket.c Thu Oct 6 20:48:23 2011 (r226072)
+++ head/sys/compat/linux/linux_socket.c Thu Oct 6 21:09:28 2011 (r226073)
@@ -90,6 +90,7 @@ linux_getsockaddr(struct sockaddr **sap,
int oldv6size;
struct sockaddr_in6 *sin6;
#endif
+ char *name;
int alloclen, hdrlen, namelen;
if (osalen < 2 || osalen > UCHAR_MAX || !osa)
@@ -158,8 +159,15 @@ linux_getsockaddr(struct sockaddr **sap,
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);
+ name = ((struct sockaddr_un *)kosa)->sun_path;
+ if (*name == '\0') {
+ /*
+ * Linux abstract namespace starts with a NULL byte.
+ * XXX We do not support abstract namespace yet.
+ */
+ namelen = strnlen(name + 1, osalen - hdrlen - 1) + 1;
+ } else
+ namelen = strnlen(name, osalen - hdrlen);
if (hdrlen + namelen > sizeof(struct sockaddr_un)) {
error = ENAMETOOLONG;
goto out;
More information about the svn-src-head
mailing list