diff --git a/criu/include/util.h b/criu/include/util.h index 4e29c079ef..0d18972dd1 100644 --- a/criu/include/util.h +++ b/criu/include/util.h @@ -162,7 +162,8 @@ extern int is_anon_link_type(char *link, char *type); #define is_hex_digit(c) (((c) >= '0' && (c) <= '9') || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) -#define CRS_CAN_FAIL 0x1 /* cmd can validly exit with non zero code */ +#define CRS_CAN_FAIL 0x1 /* cmd can validly exit with non zero code */ +#define CRS_CAN_ENOENT 0x2 /* cmd can fail with "No such file or directory" */ extern int cr_system(int in, int out, int err, char *cmd, char *const argv[], unsigned flags); extern int cr_system_userns(int in, int out, int err, char *cmd, char *const argv[], unsigned flags, int userns_pid); diff --git a/criu/util.c b/criu/util.c index 060ca3bd44..49b0a9485c 100644 --- a/criu/util.c +++ b/criu/util.c @@ -623,9 +623,11 @@ int cr_system_userns(int in, int out, int err, char *cmd, char *const argv[], un execvp(cmd, argv); - /* We can't use pr_error() as log file fd is closed. */ - fprintf(stderr, "Error (%s:%d): " LOG_PREFIX "execvp(\"%s\", ...) failed: %s\n", __FILE__, __LINE__, - cmd, strerror(errno)); + if (!(errno == ENOENT && (flags & CRS_CAN_ENOENT))) { + /* We can't use pr_error() as log file fd is closed. */ + fprintf(stderr, "Error (%s:%d): " LOG_PREFIX "execvp(\"%s\", ...) failed: %s\n", __FILE__, + __LINE__, cmd, strerror(errno)); + } out_chld: _exit(1); } @@ -638,7 +640,7 @@ int cr_system_userns(int in, int out, int err, char *cmd, char *const argv[], un } if (WIFEXITED(status)) { - if (!(flags & CRS_CAN_FAIL) && WEXITSTATUS(status)) + if (!(flags & CRS_CAN_ENOENT) && !(flags & CRS_CAN_FAIL) && WEXITSTATUS(status)) pr_err("exited, status=%d\n", WEXITSTATUS(status)); break; } else if (WIFSIGNALED(status)) { @@ -1562,9 +1564,9 @@ static int is_iptables_nft(char *bin) goto err; } - ret = cr_system(-1, pfd[1], -1, cmd[0], cmd, 0); + ret = cr_system(-1, pfd[1], -1, cmd[0], cmd, CRS_CAN_ENOENT); if (ret) { - pr_err("%s -V failed\n", cmd[0]); + pr_debug("%s -V failed\n", cmd[0]); goto err; }