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 <[email protected]>
---
 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
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to