[Mesa-dev] [PATCH 7/7] dri: Disable user-specified driconf options when in a setuid environment.
Eric Anholt
eric at anholt.net
Tue Mar 6 14:57:18 PST 2012
A user (for example, without DRI priveleges) should not be able to
modify the behavior of the X Server's AIGLX driver.
---
src/mesa/drivers/dri/common/xmlconfig.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/mesa/drivers/dri/common/xmlconfig.c b/src/mesa/drivers/dri/common/xmlconfig.c
index 6d1d5ec..9248cc8 100644
--- a/src/mesa/drivers/dri/common/xmlconfig.c
+++ b/src/mesa/drivers/dri/common/xmlconfig.c
@@ -580,7 +580,11 @@ static void parseOptInfoAttr (struct OptInfoData *data, const XML_Char **attr) {
else
XML_FATAL ("illegal type in option: %s.", attrVal[OA_TYPE]);
- defaultVal = getenv (cache->info[opt].name);
+ if (geteuid() == getuid())
+ defaultVal = getenv (cache->info[opt].name);
+ else
+ defaultVal = NULL;
+
if (defaultVal != NULL) {
/* don't use XML_WARNING, we want the user to see this! */
fprintf (stderr,
@@ -813,7 +817,7 @@ static void parseOptConfAttr (struct OptConfData *data, const XML_Char **attr) {
GLuint opt = findOption (cache, name);
if (cache->info[opt].name == NULL)
XML_WARNING ("undefined option: %s.", name);
- else if (getenv (cache->info[opt].name))
+ else if (geteuid() == getuid() && getenv (cache->info[opt].name))
/* don't use XML_WARNING, we want the user to see this! */
fprintf (stderr, "ATTENTION: option value of option %s ignored.\n",
cache->info[opt].name);
@@ -957,7 +961,7 @@ void driParseConfigFiles (driOptionCache *cache, const driOptionCache *info,
userData.driverName = driverName;
userData.execName = GET_PROGRAM_NAME();
- if ((home = getenv ("HOME"))) {
+ if (geteuid() == getuid() && (home = getenv ("HOME"))) {
GLuint len = strlen (home);
filenames[1] = MALLOC (len + 7+1);
if (filenames[1] == NULL)
--
1.7.9.1
More information about the mesa-dev
mailing list