ports/130583: [patch] emulators/open-vm-tools does not compile on 8-CURRENT
Lawrence Stewart
lstewart at FreeBSD.org
Thu Jan 15 12:30:09 UTC 2009
>Number: 130583
>Category: ports
>Synopsis: [patch] emulators/open-vm-tools does not compile on 8-CURRENT
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jan 15 12:30:04 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator: Lawrence Stewart
>Release: 8-CURRENT
>Organization:
>Environment:
FreeBSD freebsd8-i386-clean.loshell.home 8.0-CURRENT FreeBSD 8.0-CURRENT #0 r187214: Thu Jan 15 00:16:11 EST 2009 root at freebsd8-i386-clean.loshell.room52.net:/usr/obj/usr/src/sys/GENERIC i386
>Description:
The currently used suser(9) KPI was removed a while ago. The replacement is priv_check(9).
The "a_mode" member of struct vop_access_args has been renamed to "a_accmode".
Both of these issues stop the vmhgfs and vmblock FreeBSD kernel drivers from building as part of the port build on recent 8-CURRENT.
>How-To-Repeat:
cd /usr/ports/emulators/open-vm-tools && make
(note the problem is also present with emulators/open-vm-tools-nox11)
>Fix:
Attached patch renames struct vop_access_args member "a_mode" to "a_accmode", and updates suser(9) calls to priv_check(9). Privs checked for are a guess based on code comments and the contents of sys/sys/priv.h and should be reviewed to make sure I picked the correct ones to check for.
I've done no other validation than to check it compiles and the modules load correctly into the kernel. I don't use the functionality of either module as far as I'm aware so I can't vouch for the correctness of my changes.
It may also be possible to indirect through a compat layer to avoid the patch altogether... not sure as I haven't investigated this at all. Probably best to go with some sort of patch though to future proof the fix.
Patch attached with submission follows:
--- modules/freebsd/vmhgfs/vfsops.c.orig 2009-01-15 22:29:18.000000000 +1100
+++ modules/freebsd/vmhgfs/vfsops.c 2009-01-15 22:29:43.000000000 +1100
@@ -139,7 +139,7 @@
* Since Hgfs requires the caller to be root, only allow mount attempts made
* by the superuser.
*/
- if ((ret = suser(td)) != 0) {
+ if ((ret = priv_check(td, PRIV_VFS_MOUNT)) != 0) {
return ret;
}
--- modules/freebsd/vmhgfs/vnops.c.orig 2009-01-15 22:28:42.000000000 +1100
+++ modules/freebsd/vmhgfs/vnops.c 2009-01-15 22:28:53.000000000 +1100
@@ -352,7 +352,7 @@
*/
{
struct vnode *vp = ap->a_vp;
- int mode = ap->a_mode;
+ int mode = ap->a_accmode;
return HgfsAccessInt(vp, mode);
}
--- modules/freebsd/vmblock/vnops.c.orig 2009-01-15 22:29:59.000000000 +1100
+++ modules/freebsd/vmblock/vnops.c 2009-01-15 22:30:29.000000000 +1100
@@ -723,7 +723,7 @@
* NB: Allowing only the superuser to open this directory breaks
* readdir() of the filesystem root for non-privileged users.
*/
- if ((retval = suser(ap->a_td)) == 0) {
+ if ((retval = priv_check(ap->a_td, PRIV_VFS_GETFH)) == 0) {
#if __FreeBSD_version >= 700000
fp = ap->a_fp;
#else
@@ -1007,7 +1007,7 @@
*/
{
struct vnode *vp = ap->a_vp;
- mode_t mode = ap->a_mode;
+ mode_t mode = ap->a_accmode;
/*
* Disallow write attempts on read-only layers; unless the file is a
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list