On Tue, Dec 21, 2010 at 10:38:42PM +0100, frantisek holop wrote:
> hmm, on Tue, Dec 21, 2010 at 10:10:22PM +0100, Matthieu Herrb said that
> > Don't pass -keepPriv to X server (would be in /etc/X11/xdm/Xservers)
>
> bingo.
>
> > I don't know if something went wrong with the snapshot builds recently
> > or if you changed something that you forgot to tell me in you
> > install, but on all machines I checked privsep is still active by
> > default.
>
> the only reason i can think of that option being there
> is when i was asked to do so for producing a bug report
> for the intel driver :]
>
> but that was weeks, months ago. i am quite sure
> xdm has been restarted many times since then
> (altough nowadays i hybernate :])
>
> a semi-mystery.
>
> thanks a million.
>
> -f
> --
> the man who makes no mistakes does not usually make anything.
>
Can you test the patch below for the -keepPriv case?
Index: lib/libdrm/xf86drm.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libdrm/xf86drm.c,v
retrieving revision 1.4
diff -u -p -u -r1.4 xf86drm.c
--- lib/libdrm/xf86drm.c 31 Mar 2010 06:31:45 -0000 1.4
+++ lib/libdrm/xf86drm.c 21 Dec 2010 21:25:43 -0000
@@ -293,7 +293,7 @@ static int drmOpenDevice(long dev, int m
return fd;
drmMsg("drmOpenDevice: Open failed\n");
- remove(buf);
+
return -errno;
}
Index: xserver/os/privsep.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/xserver/os/privsep.c,v
retrieving revision 1.15
diff -u -p -u -r1.15 privsep.c
--- xserver/os/privsep.c 5 Dec 2010 15:36:10 -0000 1.15
+++ xserver/os/privsep.c 21 Dec 2010 21:48:41 -0000
@@ -299,14 +299,21 @@ int
priv_open_device(const char *path)
{
priv_cmd_t cmd;
+ struct okdev *dev;
if (priv_fd != -1) {
cmd.cmd = PRIV_OPEN_DEVICE;
strlcpy(cmd.arg.open.path, path, MAXPATHLEN);
write(priv_fd, &cmd, sizeof(cmd));
return receive_fd(priv_fd);
- } else
- return open(path, O_RDWR | O_NONBLOCK | O_EXCL);
+ } else {
+ if ((dev = open_ok(path)) != NULL)
+ return open(path, dev->flags);
+ else {
+ errno = EPERM;
+ return -1;
+ }
+ }
}
/* send signal to parent process */
--
Matthieu Herrb