Date: Thu, 6 Oct 2011 21:09:29 +0000 (UTC) From: Jung-uk Kim <jkim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r226073 - head/sys/compat/linux Message-ID: <201110062109.p96L9TSU077785@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201110062109.p96L9TSU077785>