OpenBSD 5.3: Replace use of copyinstr for setting mount point name.
authorAntoine Verheijen <antoine@ualberta.ca>
Tue, 9 Apr 2013 02:29:58 +0000 (20:29 -0600)
committerDerrick Brashear <shadow@your-file-system.com>
Tue, 9 Apr 2013 14:17:05 +0000 (07:17 -0700)
As a result of a realignment of kernel memory in OpenBSD 5.3,
the copyinstr() routine no longer works for copying the mount
point name into the internal mount table structure. It also
fails silently, so it's not noticed until someone looks at
the mount table and discovers that the mount point name for
AFS is missing.

This patch replaces the use of copyinstr() with strlcpy() for
copying the mount point name in OpenBSD 5.3.

Note that this is consistent with how other similar device
support has addressed the same issue in OpenBSD 5.3.

Change-Id: I57619f989e51a8c1a320be7d451683b7c0abb7c1
Reviewed-on: http://gerrit.openafs.org/9752
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/afs/OBSD/osi_vfsops.c

index 7b4125f..3db75e2 100644 (file)
@@ -245,8 +245,13 @@ afs_mount(mp, path, data, ndp, p)
     mp->osi_vfs_fsid.val[0] = AFS_VFSMAGIC;    /* magic */
     mp->osi_vfs_fsid.val[1] = (int)AFS_VFSFSID;
 
+#if defined(AFS_OBSD53_ENV)
+    bzero(mp->mnt_stat.f_mntonname, MNAMELEN);
+    strlcpy(mp->mnt_stat.f_mntonname, path, MNAMELEN);
+#else
     (void)copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
     bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
+#endif
     bzero(mp->mnt_stat.f_mntfromname, MNAMELEN);
     strcpy(mp->mnt_stat.f_mntfromname, "AFS");
     /* null terminated string "AFS" will fit, just leave it be. */