Commit 3f23bde5 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

criu: print correct errno messages from pr_perror()

"%m" can't be used to print strerror(errno), because print_on_level()
calls gettimeofday() which can overwrite errno.

For example:
13486 connect(4, {sa_family=AF_INET, sin_port=htons(8880), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ENETUNREACH (Network is unreachable)
13486 gettimeofday({1423756664, 717423}, NULL) = 0
13486 open("/etc/localtime", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
13486 write(2, "15:57:44.717:     4: ERR: socket_udp.c:73: Can't connect (errno = 101 (Permission denied))\n", 91) = 91
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 9a392dff
...@@ -20,6 +20,13 @@ ...@@ -20,6 +20,13 @@
#ifndef __CRIU_LOG_H__ #ifndef __CRIU_LOG_H__
#define __CRIU_LOG_H__ #define __CRIU_LOG_H__
#ifndef CR_NOGLIBC
#include <string.h>
#include <errno.h>
#endif /* CR_NOGLIBC */
#define LOG_UNSET (-1) #define LOG_UNSET (-1)
#define LOG_MSG (0) /* Print message regardless of log level */ #define LOG_MSG (0) /* Print message regardless of log level */
#define LOG_ERROR (1) /* Errors only, when we're in trouble */ #define LOG_ERROR (1) /* Errors only, when we're in trouble */
...@@ -74,7 +81,11 @@ extern void print_on_level(unsigned int loglevel, const char *format, ...) ...@@ -74,7 +81,11 @@ extern void print_on_level(unsigned int loglevel, const char *format, ...)
print_on_level(LOG_DEBUG, \ print_on_level(LOG_DEBUG, \
LOG_PREFIX fmt, ##__VA_ARGS__) LOG_PREFIX fmt, ##__VA_ARGS__)
#ifndef CR_NOGLIBC
#define pr_perror(fmt, ...) \ #define pr_perror(fmt, ...) \
pr_err(fmt ": %m\n", ##__VA_ARGS__) pr_err(fmt ": %s\n", ##__VA_ARGS__, strerror(errno))
#endif /* CR_NOGLIBC */
#endif /* __CR_LOG_LEVELS_H__ */ #endif /* __CR_LOG_LEVELS_H__ */
...@@ -65,7 +65,7 @@ static inline void tcp_repair_off(int fd) ...@@ -65,7 +65,7 @@ static inline void tcp_repair_off(int fd)
ret = sys_setsockopt(fd, SOL_TCP, TCP_REPAIR, &aux, sizeof(aux)); ret = sys_setsockopt(fd, SOL_TCP, TCP_REPAIR, &aux, sizeof(aux));
if (ret < 0) if (ret < 0)
pr_perror("Failed to turn off repair mode on socket (%d)", ret); pr_err("Failed to turn off repair mode on socket (%d)", ret);
} }
extern void tcp_locked_conn_add(struct inet_sk_info *); extern void tcp_locked_conn_add(struct inet_sk_info *);
......
...@@ -462,7 +462,7 @@ static void rst_tcp_repair_off(struct rst_tcp_sock *rts) ...@@ -462,7 +462,7 @@ static void rst_tcp_repair_off(struct rst_tcp_sock *rts)
ret = sys_setsockopt(rts->sk, SOL_SOCKET, SO_REUSEADDR, &aux, sizeof(aux)); ret = sys_setsockopt(rts->sk, SOL_SOCKET, SO_REUSEADDR, &aux, sizeof(aux));
if (ret < 0) if (ret < 0)
pr_perror("Failed to restore of SO_REUSEADDR on socket (%d)", ret); pr_err("Failed to restore of SO_REUSEADDR on socket (%d)", ret);
} }
static void rst_tcp_socks_all(struct task_restore_args *ta) static void rst_tcp_socks_all(struct task_restore_args *ta)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment