From b8ca87fca977382a10064449ae21261cfcbf647f Mon Sep 17 00:00:00 2001 From: Kirill Tkhai Date: Wed, 7 Jun 2017 14:25:57 +0300 Subject: [PATCH] net: Fixup net ns_id of sockets on old dumps Set them equal to top_net_ns. Signed-off-by: Kirill Tkhai Signed-off-by: Andrei Vagin --- criu/include/sockets.h | 1 + criu/sk-inet.c | 1 + criu/sk-netlink.c | 1 + criu/sk-packet.c | 1 + criu/sk-unix.c | 1 + criu/sockets.c | 8 ++++++++ 6 files changed, 13 insertions(+) diff --git a/criu/include/sockets.h b/criu/include/sockets.h index 381244077..d9ed4e96b 100644 --- a/criu/include/sockets.h +++ b/criu/include/sockets.h @@ -44,6 +44,7 @@ extern int unix_note_scm_rights(int id_for, uint32_t *file_ids, int *fds, int n_ extern struct collect_image_info netlink_sk_cinfo; extern struct socket_desc *lookup_socket(unsigned ino, int family, int proto); +extern void fixup_sock_net_ns_id(uint32_t *ns_id, protobuf_c_boolean *has_ns_id); extern const struct fdtype_ops unix_dump_ops; extern const struct fdtype_ops inet_dump_ops; diff --git a/criu/sk-inet.c b/criu/sk-inet.c index a84e1c23f..21165511d 100644 --- a/criu/sk-inet.c +++ b/criu/sk-inet.c @@ -535,6 +535,7 @@ static int collect_one_inetsk(void *o, ProtobufCMessage *base, struct cr_img *i) ii->port = port_add(ii, ii->ie->src_port); if (ii->port == NULL) return -1; + fixup_sock_net_ns_id(&ii->ie->ns_id, &ii->ie->has_ns_id); return file_desc_add(&ii->d, ii->ie->id, &inet_desc_ops); } diff --git a/criu/sk-netlink.c b/criu/sk-netlink.c index f26c4dec0..2f0880520 100644 --- a/criu/sk-netlink.c +++ b/criu/sk-netlink.c @@ -259,6 +259,7 @@ static int collect_one_netlink_sk(void *o, ProtobufCMessage *base, struct cr_img struct netlink_sock_info *si = o; si->nse = pb_msg(base, NetlinkSkEntry); + fixup_sock_net_ns_id(&si->nse->ns_id, &si->nse->has_ns_id); return file_desc_add(&si->d, si->nse->id, &netlink_sock_desc_ops); } diff --git a/criu/sk-packet.c b/criu/sk-packet.c index ed4cfeb26..90619f12e 100644 --- a/criu/sk-packet.c +++ b/criu/sk-packet.c @@ -569,6 +569,7 @@ static int collect_one_packet_sk(void *o, ProtobufCMessage *base, struct cr_img struct packet_sock_info *si = o; si->pse = pb_msg(base, PacketSockEntry); + fixup_sock_net_ns_id(&si->pse->ns_id, &si->pse->has_ns_id); return file_desc_add(&si->d, si->pse->id, &packet_sock_desc_ops); } diff --git a/criu/sk-unix.c b/criu/sk-unix.c index 87f292965..81587ac69 100644 --- a/criu/sk-unix.c +++ b/criu/sk-unix.c @@ -1575,6 +1575,7 @@ static int collect_one_unixsk(void *o, ProtobufCMessage *base, struct cr_img *i) INIT_LIST_HEAD(&ui->node); INIT_LIST_HEAD(&ui->scm_fles); ui->flags = 0; + fixup_sock_net_ns_id(&ui->ue->ns_id, &ui->ue->has_ns_id); uname = ui->name; ulen = ui->ue->name.len; diff --git a/criu/sockets.c b/criu/sockets.c index caa1d6966..28fabaac0 100644 --- a/criu/sockets.c +++ b/criu/sockets.c @@ -782,3 +782,11 @@ int set_netns(uint32_t ns_id) return 0; } + +void fixup_sock_net_ns_id(uint32_t *ns_id, protobuf_c_boolean *has_ns_id) +{ + if (*has_ns_id) + return; + *has_ns_id = true; + *ns_id = top_net_ns->id; +}