Hello community,
here is the log from the commit of package xorg-x11
checked in at Sun Jun 25 01:29:21 CEST 2006.
--------
--- xorg-x11/xorg-x11.changes 2006-06-23 10:11:33.000000000 +0200
+++ xorg-x11/xorg-x11.changes 2006-06-24 10:29:51.000000000 +0200
@@ -1,0 +2,7 @@
+Sat Jun 24 10:29:23 CEST 2006 - sndirsch@suse.de
+
+- x11r6.9.0-setuid.diff:
+ * setuid() return value check problems on Linux systems
+ (Bug #179768)
+
+-------------------------------------------------------------------
New:
----
x11r6.9.0-setuid.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xorg-x11.spec ++++++
--- /var/tmp/diff_new_pack.Bkb9u7/_old 2006-06-25 01:27:24.000000000 +0200
+++ /var/tmp/diff_new_pack.Bkb9u7/_new 2006-06-25 01:27:24.000000000 +0200
@@ -40,7 +40,7 @@
%endif
Autoreqprov: on
Version: 6.9.0
-Release: 63
+Release: 64
Summary: The basic X Window System package
Source: xorg-6.9.0.tar.bz2
Source1: xdm.tar.gz
@@ -125,6 +125,7 @@
Patch367: p_xlib_skip_ext_env.diff
Patch368: p_xnest-ignore-getimage-errors.diff
Patch369: libXfont-X11R7.0-1.0.0-no-ft-internals.patch
+Patch370: x11r6.9.0-setuid.diff
Patch400: p_bug96328.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -1567,6 +1568,7 @@
pushd lib/font
%patch369 -p2
popd
+%patch370 -p1
#
UTS_RELEASE=`uname -r`
UTS_MAJOR=${UTS_RELEASE%%%%.*}
@@ -2724,6 +2726,10 @@
%clean
%changelog -n xorg-x11
+* Sat Jun 24 2006 - sndirsch@suse.de
+- x11r6.9.0-setuid.diff:
+ * setuid() return value check problems on Linux systems
+ (Bug #179768)
* Fri Jun 23 2006 - sndirsch@suse.de
- libXfont-X11R7.0-1.0.0-no-ft-internals.patch:
* removes use of internal freetype stuff
++++++ FILES ++++++
--- xorg-x11/FILES 2006-06-23 08:54:43.000000000 +0200
+++ xorg-x11/FILES 2006-06-24 10:30:28.000000000 +0200
@@ -179,3 +179,5 @@
- ignores the X error on GetImage in Xnest (Bug #174228, X.Org Bug #4411)
libXfont-X11R7.0-1.0.0-no-ft-internals.patch [KEEP?]
- removes use of internal freetype stuff
+x11r6.9.0-setuid.diff [KEEP?]
+- setuid() return value check problems on Linux systems (Bug #179768)
++++++ x11r6.9.0-setuid.diff ++++++
Index: xc/config/util/chownxterm.c
===================================================================
RCS file: /cvs/xorg/xc/config/util/chownxterm.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 chownxterm.c
--- xc/config/util/chownxterm.c 14 Nov 2003 16:48:20 -0000 1.1.1.1
+++ xc/config/util/chownxterm.c 5 Jun 2006 10:35:10 -0000
@@ -41,8 +41,10 @@
void help()
{
- setgid(getgid());
- setuid(getuid());
+ if (setgid(getgid()) == -1)
+ exit(1);
+ if (setuid(getuid()) == -1)
+ exit(1);
printf("chown-xterm makes %s suid root\n", XTERM_PATH);
printf("This is necessary on Ultrix for /dev/tty operation.\n");
exit(0);
@@ -51,8 +53,10 @@
void print_error(err_string)
char *err_string;
{
- setgid(getgid());
- setuid(getuid());
+ if (setgid(getgid()) == -1)
+ exit(1);
+ if (setuid(getuid()) == -1)
+ exit(1);
fprintf(stderr, "%s: \"%s\"", prog_name, err_string);
perror(" failed");
exit(1);
Index: xc/lib/X11/lcFile.c
===================================================================
RCS file: /cvs/xorg/xc/lib/X11/lcFile.c,v
retrieving revision 1.6
diff -u -r1.6 lcFile.c
--- xc/lib/X11/lcFile.c 13 May 2005 22:53:44 -0000 1.6
+++ xc/lib/X11/lcFile.c 5 Jun 2006 10:35:14 -0000
@@ -269,7 +269,11 @@
if (seteuid(0) != 0) {
priv = 0;
} else {
- seteuid(oldeuid);
+ if (seteuid(oldeuid) == -1) {
+ /* XXX ouch, coudn't get back to original uid
+ what can we do ??? */
+ _exit(127);
+ }
priv = 1;
}
#endif
Index: xc/lib/xtrans/Xtranslcl.c
===================================================================
RCS file: /cvs/xorg/xc/lib/xtrans/Xtranslcl.c,v
retrieving revision 1.4
diff -u -r1.4 Xtranslcl.c
--- xc/lib/xtrans/Xtranslcl.c 8 Nov 2005 06:33:26 -0000 1.4
+++ xc/lib/xtrans/Xtranslcl.c 5 Jun 2006 10:35:15 -0000
@@ -360,7 +360,10 @@
uid_t saved_euid;
saved_euid = geteuid();
- setuid( getuid() ); /** sets the euid to the actual/real uid **/
+ /** sets the euid to the actual/real uid **/
+ if (setuid( getuid() ) == -1) {
+ exit(1);
+ }
if( chown( slave, saved_euid, -1 ) < 0 ) {
exit( 1 );
}
@@ -369,7 +372,13 @@
}
waitpid(saved_pid, &exitval, 0);
-
+ if (WIFEXITED(exitval) && WEXITSTATUS(exitval) != 0) {
+ close(fd);
+ close(server);
+ PRMSG(1, "PTSOpenClient: cannot set the owner of %s\n",
+ slave, 0, 0);
+ return(-1);
+ }
if (chmod(slave, 0666) < 0) {
close(fd);
close(server);
Index: xc/programs/Xserver/hw/xfree86/common/xf86Init.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/common/xf86Init.c,v
retrieving revision 1.29
diff -u -r1.29 xf86Init.c
--- xc/programs/Xserver/hw/xfree86/common/xf86Init.c 14 Dec 2005 20:12:00 -0000 1.29
+++ xc/programs/Xserver/hw/xfree86/common/xf86Init.c 5 Jun 2006 10:35:19 -0000
@@ -1905,7 +1905,11 @@
FatalError("xf86RunVtInit: fork failed (%s)\n", strerror(errno));
break;
case 0: /* child */
- setuid(getuid());
+ if (setuid(getuid()) == -1) {
+ xf86Msg(X_ERROR, "xf86RunVtInit: setuid failed (%s)\n",
+ strerror(errno));
+ exit(255);
+ }
/* set stdin, stdout to the consoleFd */
for (i = 0; i < 2; i++) {
if (xf86Info.consoleFd != i) {
Index: xc/programs/Xserver/hw/xfree86/os-support/shared/libc_wrapper.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/os-support/shared/libc_wrapper.c,v
retrieving revision 1.9
diff -u -r1.9 libc_wrapper.c
--- xc/programs/Xserver/hw/xfree86/os-support/shared/libc_wrapper.c 3 Jul 2005 08:53:48 -0000 1.9
+++ xc/programs/Xserver/hw/xfree86/os-support/shared/libc_wrapper.c 5 Jun 2006 10:35:19 -0000
@@ -1270,7 +1270,10 @@
#ifndef SELF_CONTAINED_WRAPPER
xf86DisableIO();
#endif
- setuid(getuid());
+ if (setuid(getuid()) == -1) {
+ ErrorF("xf86Execl: setuid() failed: %s\n", strerror(errno));
+ exit(255);
+ }
#if !defined(SELF_CONTAINED_WRAPPER)
/* set stdin, stdout to the consoleFD, and leave stderr alone */
for (i = 0; i < 2; i++)
Index: xc/programs/Xserver/hw/xfree86/parser/write.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/parser/write.c,v
retrieving revision 1.3
diff -u -r1.3 write.c
--- xc/programs/Xserver/hw/xfree86/parser/write.c 3 Jul 2005 07:01:37 -0000 1.3
+++ xc/programs/Xserver/hw/xfree86/parser/write.c 5 Jun 2006 10:35:19 -0000
@@ -170,7 +170,10 @@
strerror(errno));
return 0;
case 0: /* child */
- setuid(getuid());
+ if (setuid(getuid() == -1)
+ FatalError("xf86writeConfigFile(): "
+ "setuid failed(%s)\n",
+ strerror(errno));
ret = doWriteConfigFile(filename, cptr);
exit(ret);
break;
Index: xc/programs/Xserver/os/utils.c
===================================================================
RCS file: /cvs/xorg/xc/programs/Xserver/os/utils.c,v
retrieving revision 1.21
diff -u -r1.21 utils.c
--- xc/programs/Xserver/os/utils.c 8 Nov 2005 06:33:30 -0000 1.21
+++ xc/programs/Xserver/os/utils.c 5 Jun 2006 10:35:20 -0000
@@ -1718,8 +1718,10 @@
case -1: /* error */
p = -1;
case 0: /* child */
- setgid(getgid());
- setuid(getuid());
+ if (setgid(getgid()) == -1)
+ _exit(127);
+ if (setuid(getuid()) == -1)
+ _exit(127);
execl("/bin/sh", "sh", "-c", command, (char *)NULL);
_exit(127);
default: /* parent */
@@ -1770,8 +1772,10 @@
xfree(cur);
return NULL;
case 0: /* child */
- setgid(getgid());
- setuid(getuid());
+ if (setgid(getgid()) == -1)
+ _exit(127);
+ if (setuid(getuid()) == -1)
+ _exit(127);
if (*type == 'r') {
if (pdes[1] != 1) {
/* stdout */
@@ -1845,8 +1849,10 @@
xfree(cur);
return NULL;
case 0: /* child */
- setgid(getgid());
- setuid(getuid());
+ if (setgid(getgid()) == -1)
+ _exit(127);
+ if (setuid(getuid()) == -1)
+ _exit(127);
if (*type == 'r') {
if (pdes[1] != 1) {
/* stdout */
Index: xc/programs/xdm/session.c
===================================================================
RCS file: /cvs/xorg/xc/programs/xdm/session.c,v
retrieving revision 1.3
diff -u -r1.3 session.c
--- xc/programs/xdm/session.c 8 Nov 2005 06:33:31 -0000 1.3
+++ xc/programs/xdm/session.c 5 Jun 2006 10:35:21 -0000
@@ -488,8 +488,14 @@
else
ResetServer (d);
if (removeAuth) {
- setgid (verify.gid);
- setuid (verify.uid);
+ if (setgid (verify.gid) == -1) {
+ LogError( "SessionExit: setgid: %s\n", strerror(errno));
+ exit(status);
+ }
+ if (setuid (verify.uid) == -1) {
+ LogError( "SessionExit: setuid: %s\n", strerror(errno));
+ exit(status);
+ }
RemoveUserAuthorization (d, &verify);
#ifdef K5AUTH
/* do like "kdestroy" program */
Index: xc/programs/xdm/xdmshell.c
===================================================================
RCS file: /cvs/xorg/xc/programs/xdm/xdmshell.c,v
retrieving revision 1.3
diff -u -r1.3 xdmshell.c
--- xc/programs/xdm/xdmshell.c 14 Jul 2005 22:58:25 -0000 1.3
+++ xc/programs/xdm/xdmshell.c 5 Jun 2006 10:35:21 -0000
@@ -183,7 +183,11 @@
#endif
/* make xdm run in a non-setuid environment */
- setuid (geteuid());
+ if (setuid (geteuid()) == -1) {
+ fprintf(stderr, "%s: cannot setuid (error %d, %s)\r\n",
+ ProgramName, errno, strerror(errno));
+ exit(1);
+ }
/*
* exec /usr/bin/X11/xdm -nodaemon -udpPort 0
Index: xc/programs/xf86dga/dga.c
===================================================================
RCS file: /cvs/xorg/xc/programs/xf86dga/dga.c,v
retrieving revision 1.2
diff -u -r1.2 dga.c
--- xc/programs/xf86dga/dga.c 23 Apr 2004 19:54:47 -0000 1.2
+++ xc/programs/xf86dga/dga.c 5 Jun 2006 10:35:21 -0000
@@ -16,6 +16,7 @@
#include