diff --git a/mnexec.c b/mnexec.c
index ed44f60810c0354854fb827ca799b51a11f566a1..a9cb8678956aab449a4ad37a4eb1b56be4a6ffe5 100644
--- a/mnexec.c
+++ b/mnexec.c
@@ -99,6 +99,7 @@ int main(int argc, char *argv[])
     char path[PATH_MAX];
     int nsid;
     int pid;
+    char *cwd = get_current_dir_name();
 
     static struct sched_param sp;
     while ((c = getopt(argc, argv, "+cdnpa:g:r:vh")) != -1)
@@ -157,18 +158,17 @@ int main(int argc, char *argv[])
             sprintf(path, "/proc/%d/ns/mnt", pid);
             nsid = open(path, O_RDONLY);
             if (nsid < 0 || setns(nsid, 0) != 0) {
-                char *cwd = get_current_dir_name();
                 /* Plan B: chroot/chdir into pid's root file system */
                 sprintf(path, "/proc/%d/root", pid);
                 if (chroot(path) < 0) {
                     perror(path);
                     return 1;
                 }
-                /* need to chdir to correct working directory */
-                if (chdir(cwd) != 0) {
-                    perror(cwd);
-                    return 1;
-                }
+            }
+            /* chdir to correct working directory */
+            if (chdir(cwd) != 0) {
+                perror(cwd);
+                return 1;
             }
             break;
         case 'g':