From dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Fri, 10 Apr 2009 12:47:34 +0100 Subject: [PATCH] CHROOT_OUT must preserve errno. --- daemon/daemon.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/daemon/daemon.h b/daemon/daemon.h index e2b6a2a..b2396a1 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -19,12 +19,14 @@ #ifndef GUESTFSD_DAEMON_H #define GUESTFSD_DAEMON_H -#include "../src/guestfs_protocol.h" - #include +#include + #include #include +#include "../src/guestfs_protocol.h" + /* in guestfsd.c */ extern void xwrite (int sock, const void *buf, size_t len); extern void xread (int sock, void *buf, size_t len); @@ -78,8 +80,10 @@ extern void reply (xdrproc_t xdrp, char *ret); * (2) You must not change directory! cwd must always be "/", otherwise * we can't escape our own chroot. * (3) All paths specified must be absolute. + * (4) CHROOT_OUT does not affect errno. */ #define CHROOT_IN chroot ("/sysroot"); -#define CHROOT_OUT chroot ("."); +#define CHROOT_OUT \ + do { int old_errno = errno; chroot ("."); errno = old_errno; } while (0) #endif /* GUESTFSD_DAEMON_H */ -- 1.8.3.1