[PATCH] xhost: check return value of X{Add,Remove}Host

Kees Cook kees.cook at canonical.com
Sat Jul 9 13:05:17 PDT 2011


In the ServerInterpreted case, XAddHost and XRemoveHost are capable of
failing when they lack request buffer memory. Notice this situation,
and report correctly.

Signed-off-by: Kees Cook <kees.cook at canonical.com>
---
 xhost.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/xhost.c b/xhost.c
index c7faeff..49d4690 100644
--- a/xhost.c
+++ b/xhost.c
@@ -450,7 +450,7 @@ change_host(Display *dpy, char *name, Bool add)
 
     if (family == FamilyServerInterpreted) {
 	XServerInterpretedAddress siaddr;
-	int namelen;
+	int namelen, rc;
 
 	cp = strchr(name, ':');
 	if (cp == NULL || cp == name) {
@@ -472,11 +472,14 @@ change_host(Display *dpy, char *name, Bool add)
 	siaddr.value = siaddr.type + siaddr.typelength + 1;
 	siaddr.valuelength = namelen - (siaddr.typelength + 1);
 	if (add)
-	    XAddHost(dpy, &ha);
+	    rc = XAddHost(dpy, &ha);
 	else
-	    XRemoveHost(dpy, &ha);
+	    rc = XRemoveHost(dpy, &ha);
 	free(siaddr.type);
-	printf( "%s %s\n", name, add ? add_msg : remove_msg);
+	printf( "%s %s%s\n", name, rc == 1 ? "" : "failed when ",
+		add ? add_msg : remove_msg);
+	if (rc != 1)
+	    return 0;
 	return 1;
     }
 
-- 
1.7.4.1


-- 
Kees Cook
Ubuntu Security Team


More information about the xorg-devel mailing list