From 4365d16c8629e824973ee0c357efdfbfd28b672c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristan=20H=C3=B8gsberg?= Date: Mon, 19 Jun 2006 22:13:22 -0400 Subject: [PATCH 1/2] Pull over convolution filter fixes from xgl-0-0-1 branch. Cherry-picking patches: 8a5ea68800b9d7dca90ff4e573ad8533852f1ea3 and 4d755fe14274a7293748ce9aa666ab85df6297c5 --- fb/fbcompose.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fb/fbcompose.c b/fb/fbcompose.c index 41fff7b8a..6f7e3e6ec 100644 --- a/fb/fbcompose.c +++ b/fb/fbcompose.c @@ -3280,8 +3280,8 @@ static void fbFetchTransformed(PicturePtr pict, int x, int y, int width, CARD32 xFixed *params = pict->filter_params; INT32 cwidth = xFixedToInt(params[0]); INT32 cheight = xFixedToInt(params[1]); - int xoff = params[0] >> 1; - int yoff = params[1] >> 1; + int xoff = (params[0] - xFixed1) >> 1; + int yoff = (params[1] - xFixed1) >> 1; params += 2; for (i = 0; i < width; ++i) { if (!v.vector[2]) { @@ -3325,6 +3325,11 @@ static void fbFetchTransformed(PicturePtr pict, int x, int y, int width, CARD32 } } + satot >>= 16; + srtot >>= 16; + sgtot >>= 16; + sbtot >>= 16; + if (satot < 0) satot = 0; else if (satot > 0xff) satot = 0xff; if (srtot < 0) srtot = 0; else if (srtot > 0xff) srtot = 0xff; if (sgtot < 0) sgtot = 0; else if (sgtot > 0xff) sgtot = 0xff; From 2b58685402e70f123e131fd8146e6083ff5214a4 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Tue, 20 Jun 2006 21:07:53 +0200 Subject: [PATCH 2/2] Check setuid() return value. Bugzilla #7116. --- hw/xfree86/common/xf86Init.c | 6 +++++- hw/xfree86/os-support/shared/libc_wrapper.c | 5 ++++- hw/xfree86/parser/write.c | 5 ++++- os/utils.c | 20 +++++++++++++------- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index 9bb2bf8b2..3aed36974 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -1896,7 +1896,11 @@ xf86RunVtInit(void) 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) { diff --git a/hw/xfree86/os-support/shared/libc_wrapper.c b/hw/xfree86/os-support/shared/libc_wrapper.c index fc4edc378..1663893d9 100644 --- a/hw/xfree86/os-support/shared/libc_wrapper.c +++ b/hw/xfree86/os-support/shared/libc_wrapper.c @@ -1270,7 +1270,10 @@ xf86execl(const char *pathname, const char *arg, ...) #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++) diff --git a/hw/xfree86/parser/write.c b/hw/xfree86/parser/write.c index 285080d99..82baa5a04 100644 --- a/hw/xfree86/parser/write.c +++ b/hw/xfree86/parser/write.c @@ -170,7 +170,10 @@ xf86writeConfigFile (const char *filename, XF86ConfigPtr cptr) 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; diff --git a/os/utils.c b/os/utils.c index 43c6365a4..617d20119 100644 --- a/os/utils.c +++ b/os/utils.c @@ -1,4 +1,4 @@ -/* $XdotOrg: xserver/xorg/os/utils.c,v 1.25 2006/03/25 19:52:05 ajax Exp $ */ +/* $XdotOrg: xserver/xorg/os/utils.c,v 1.26 2006-06-01 22:06:41 daniels Exp $ */ /* $Xorg: utils.c,v 1.5 2001/02/09 02:05:24 xorgcvs Exp $ */ /* @@ -1713,8 +1713,10 @@ System(char *command) 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 */ @@ -1765,8 +1767,10 @@ Popen(char *command, char *type) 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 */ @@ -1840,8 +1844,10 @@ Fopen(char *file, char *type) 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 */