[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen stable-4.4] tools/console: xenconsole tolerate tty errors



commit 7b161be2e51c519754ac4435d63c8fc03db606ec
Author:     Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
AuthorDate: Thu Feb 27 17:46:49 2014 +0000
Commit:     Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CommitDate: Tue Oct 20 17:49:41 2015 +0100

    tools/console: xenconsole tolerate tty errors
    
    Since 28d386fc4341 (XSA-57), libxl writes an empty value for the
    console tty node, with read-only permission for the guest, when
    setting up pv console "frontends".  (The actual tty value is later set
    by xenconsoled.)   Writing an empty node is not strictly necessary to
    stop the frontend from writing dangerous values here, but it is a good
    belt-and-braces approach.
    
    Unfortunately this confuses xenconsole.  It reads the empty value, and
    tries to open it as the tty.  xenconsole then exits.
    
    Fix this by having xenconsole treat an empty value the same way as no
    value at all.
    
    Also, make the error opening the tty be nonfatal: we just print a
    warning, but do not exit.  I think this is helpful in theoretical
    situations where xenconsole is racing with libxl and/or xenconsoled.
    
    Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
    Acked-by: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
    CC: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
    
    ---
    v2: Combine two conditions and move the free
    (cherry picked from commit 39ba2989b10b6a1852e253b204eb010f8e7026f1)
---
 tools/console/client/main.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/console/client/main.c b/tools/console/client/main.c
index 3242008..dd040a7 100644
--- a/tools/console/client/main.c
+++ b/tools/console/client/main.c
@@ -115,12 +115,12 @@ static int get_pty_fd(struct xs_handle *xs, char *path, 
int seconds)
                        /* We only watch for one thing, so no need to 
                         * disambiguate: just read the pty path */
                        pty_path = xs_read(xs, XBT_NULL, path, &len);
-                       if (pty_path != NULL) {
+                       if (pty_path != NULL && pty_path[0] != '\0') {
                                pty_fd = open(pty_path, O_RDWR | O_NOCTTY);
                                if (pty_fd == -1)
-                                       err(errno, "Could not open tty `%s'", 
pty_path);
-                               free(pty_path);
+                                       warn("Could not open tty `%s'", 
pty_path);
                        }
+                       free(pty_path);
                }
        } while (pty_fd == -1 && (now = time(NULL)) < start + seconds);
 
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.4

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.