svn commit: r294364 - in stable/10: contrib/smbfs/lib/smb lib usr.sbin

Ian Lepore ian at FreeBSD.org
Tue Jan 19 23:36:51 UTC 2016


Author: ian
Date: Tue Jan 19 23:36:49 2016
New Revision: 294364
URL: https://svnweb.freebsd.org/changeset/base/294364

Log:
  MFC r292337, r292552, r292553:
  
    Build mount_smbfs for arm.  Also sort the subdirs.
  
    Avoid unaligned memory accesses when encoding netbios names in libsmb.
  
    The current code for encoding a netbios name converts each byte to a 16-bit
    value and stores the result by casting a char* to u_short*, resulting in
    alignment faults on strict-alignment platforms.
  
    This change reimplements the encoding routine using only byte accesses to
    memory. There is no particular reason to work with 16-bit values just
    because the encoding process creates two bytes of output for every byte of
    input. Working a byte at at time also avoids endian problems for big-endian
    platforms.
  
    Make the building of libsmb and mount_smbfs unconditional, now that r292552
    has eliminated alignment and endian problems that were making it fail on
    some platforms.
  
  PR:           180438
  PR:           189415
  Relnotes:	Yes

Modified:
  stable/10/contrib/smbfs/lib/smb/nb_name.c
  stable/10/lib/Makefile
  stable/10/usr.sbin/Makefile
  stable/10/usr.sbin/Makefile.amd64
  stable/10/usr.sbin/Makefile.arm
  stable/10/usr.sbin/Makefile.i386
  stable/10/usr.sbin/Makefile.ia64
  stable/10/usr.sbin/Makefile.powerpc
  stable/10/usr.sbin/Makefile.sparc64
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/contrib/smbfs/lib/smb/nb_name.c
==============================================================================
--- stable/10/contrib/smbfs/lib/smb/nb_name.c	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/contrib/smbfs/lib/smb/nb_name.c	Tue Jan 19 23:36:49 2016	(r294364)
@@ -143,15 +143,13 @@ nb_encname_len(const char *str)
 	return len;
 }
 
-#define	NBENCODE(c)	(htole16((u_short)(((u_char)(c) >> 4) | \
-			 (((u_char)(c) & 0xf) << 8)) + 0x4141))
-
-static void
-memsetw(char *dst, int n, u_short word)
+static inline void
+nb_char_encode(u_char **ptr, u_char c, int n)
 {
+
 	while (n--) {
-		*(u_short*)dst = word;
-		dst += 2;
+		*(*ptr)++ = 0x41 + (c >> 4);
+		*(*ptr)++ = 0x41 + (c & 0x0f);
 	}
 }
 
@@ -165,19 +163,15 @@ nb_name_encode(struct nb_name *np, u_cha
 	*cp++ = NB_ENCNAMELEN;
 	name = np->nn_name;
 	if (name[0] == '*' && name[1] == 0) {
-		*(u_short*)cp = NBENCODE('*');
-		memsetw(cp + 2, NB_NAMELEN - 1, NBENCODE(' '));
-		cp += NB_ENCNAMELEN;
+		nb_char_encode(&cp, '*', 1);
+		nb_char_encode(&cp, ' ', NB_NAMELEN - 1);
 	} else {
-		for (i = 0; *name && i < NB_NAMELEN - 1; i++, cp += 2, name++)
-			*(u_short*)cp = NBENCODE(toupper(*name));
-		i = NB_NAMELEN - i - 1;
-		if (i > 0) {
-			memsetw(cp, i, NBENCODE(' '));
-			cp += i * 2;
-		}
-		*(u_short*)cp = NBENCODE(np->nn_type);
-		cp += 2;
+		for (i = 0; i < NB_NAMELEN - 1; i++)
+			if (*name != 0)
+				nb_char_encode(&cp, toupper(*name++), 1);
+			else
+				nb_char_encode(&cp, ' ', 1);
+		nb_char_encode(&cp, np->nn_type, 1);
 	}
 	*cp = 0;
 	if (np->nn_scope == NULL)

Modified: stable/10/lib/Makefile
==============================================================================
--- stable/10/lib/Makefile	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/lib/Makefile	Tue Jan 19 23:36:49 2016	(r294364)
@@ -84,7 +84,7 @@ SUBDIR=	${SUBDIR_ORDERED} \
 	libsbuf \
 	${_libsdp} \
 	${_libsm} \
-	${_libsmb} \
+	libsmb \
 	${_libsmdb} \
 	${_libsmutil} \
 	libstand \
@@ -214,7 +214,6 @@ _libypclnt=	libypclnt
 .endif
 
 .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
-_libsmb=	libsmb
 _libvgl=	libvgl
 _libproc=	libproc
 _librtld_db=	librtld_db
@@ -228,7 +227,6 @@ _libvmmapi=	libvmmapi
 
 .if ${MACHINE_CPUARCH} == "ia64"
 _libefi=	libefi
-_libsmb=	libsmb
 .endif
 
 .if ${MACHINE_CPUARCH} == "mips"
@@ -239,11 +237,6 @@ _librtld_db=	librtld_db
 .if ${MACHINE_CPUARCH} == "powerpc"
 _libproc=	libproc
 _librtld_db=	librtld_db
-_libsmb=	libsmb
-.endif
-
-.if ${MACHINE_CPUARCH} == "sparc64"
-_libsmb=	libsmb
 .endif
 
 .if ${MK_OPENSSL} != "no"

Modified: stable/10/usr.sbin/Makefile
==============================================================================
--- stable/10/usr.sbin/Makefile	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/usr.sbin/Makefile	Tue Jan 19 23:36:49 2016	(r294364)
@@ -44,6 +44,7 @@ SUBDIR=	adduser \
 	mixer \
 	mlxcontrol \
 	mountd \
+	mount_smbfs \
 	mptutil \
 	mtest \
 	${_mtree} \

Modified: stable/10/usr.sbin/Makefile.amd64
==============================================================================
--- stable/10/usr.sbin/Makefile.amd64	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/usr.sbin/Makefile.amd64	Tue Jan 19 23:36:49 2016	(r294364)
@@ -25,7 +25,6 @@ SUBDIR+=	hyperv
 .endif
 SUBDIR+=	kgmon
 SUBDIR+=	lptcontrol
-SUBDIR+=	mount_smbfs
 SUBDIR+=	mptable
 .if ${MK_NDIS} != "no"
 SUBDIR+=	ndiscvt

Modified: stable/10/usr.sbin/Makefile.arm
==============================================================================
--- stable/10/usr.sbin/Makefile.arm	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/usr.sbin/Makefile.arm	Tue Jan 19 23:36:49 2016	(r294364)
@@ -1,4 +1,4 @@
 # $FreeBSD$
 
-SUBDIR+=	ofwdump
 SUBDIR+=	kgmon
+SUBDIR+=	ofwdump

Modified: stable/10/usr.sbin/Makefile.i386
==============================================================================
--- stable/10/usr.sbin/Makefile.i386	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/usr.sbin/Makefile.i386	Tue Jan 19 23:36:49 2016	(r294364)
@@ -15,7 +15,6 @@ SUBDIR+=	hyperv
 SUBDIR+=	kgmon
 SUBDIR+=	kgzip
 SUBDIR+=	lptcontrol
-SUBDIR+=	mount_smbfs
 SUBDIR+=	mptable
 .if ${MK_NDIS} != "no"
 SUBDIR+=	ndiscvt

Modified: stable/10/usr.sbin/Makefile.ia64
==============================================================================
--- stable/10/usr.sbin/Makefile.ia64	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/usr.sbin/Makefile.ia64	Tue Jan 19 23:36:49 2016	(r294364)
@@ -4,6 +4,5 @@
 SUBDIR+=	acpi
 .endif
 SUBDIR+=	kgmon
-SUBDIR+=	mount_smbfs
 SUBDIR:=	${SUBDIR:Nuathload}
 SUBDIR+=	zzz

Modified: stable/10/usr.sbin/Makefile.powerpc
==============================================================================
--- stable/10/usr.sbin/Makefile.powerpc	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/usr.sbin/Makefile.powerpc	Tue Jan 19 23:36:49 2016	(r294364)
@@ -1,5 +1,4 @@
 # $FreeBSD$
 
-SUBDIR+=	mount_smbfs
 SUBDIR+=	nvram
 SUBDIR+=	ofwdump

Modified: stable/10/usr.sbin/Makefile.sparc64
==============================================================================
--- stable/10/usr.sbin/Makefile.sparc64	Tue Jan 19 23:35:12 2016	(r294363)
+++ stable/10/usr.sbin/Makefile.sparc64	Tue Jan 19 23:36:49 2016	(r294364)
@@ -1,5 +1,4 @@
 # $FreeBSD$
 
 SUBDIR+=	eeprom
-SUBDIR+=	mount_smbfs
 SUBDIR+=	ofwdump


More information about the svn-src-all mailing list