diff --git a/criu/socket-uid.patch b/criu/socket-uid.patch index 5dad359..325cec5 100644 --- a/criu/socket-uid.patch +++ b/criu/socket-uid.patch @@ -11,19 +11,27 @@ index 69ee8589e..0a60fc5bb 100644 int rfd; int cpt_reuseaddr; diff --git a/criu/sk-inet.c b/criu/sk-inet.c -index 422edc656..1597ca5b4 100644 +index 566d1c230..a9e9f1aea 100644 --- a/criu/sk-inet.c +++ b/criu/sk-inet.c -@@ -526,6 +526,8 @@ static int do_dump_one_inet_fd(int lfd, u32 id, const struct fd_parms *p, int fa +@@ -272,6 +272,7 @@ static struct inet_sk_desc *gen_uncon_sk(int lfd, const struct fd_parms *p, int + + sk->sd.family = family; + sk->type = type; ++ sk->uid = p->stat.st_uid; + + if (sk->sd.family == AF_INET) + aux = sizeof(struct sockaddr_in); +@@ -527,6 +528,8 @@ static int do_dump_one_inet_fd(int lfd, u32 id, const struct fd_parms *p, int fa ie.dst_port = sk->dst_port; ie.backlog = sk->wqlen; ie.flags = p->flags; ++ ie.uid = userns_uid(sk->uid); + ie.has_uid = true; -+ ie.uid = sk->uid; ie.fown = (FownEntry *)&p->fown; ie.opts = &skopts; -@@ -678,6 +680,7 @@ int inet_collect_one(struct nlmsghdr *h, int family, int type, struct ns_id *ns) +@@ -679,6 +682,7 @@ int inet_collect_one(struct nlmsghdr *h, int family, int type, struct ns_id *ns) d->wqlen = m->idiag_wqueue; memcpy(d->src_addr, m->id.idiag_src, sizeof(u32) * 4); memcpy(d->dst_addr, m->id.idiag_dst, sizeof(u32) * 4); @@ -31,13 +39,13 @@ index 422edc656..1597ca5b4 100644 if (tb[INET_DIAG_SHUTDOWN]) d->shutdown = nla_get_u8(tb[INET_DIAG_SHUTDOWN]); -@@ -890,6 +893,13 @@ static int open_inet_sk(struct file_desc *d, int *new_fd) +@@ -897,6 +901,13 @@ static int open_inet_sk(struct file_desc *d, int *new_fd) return -1; } + if (ie->has_uid) { + if (fchown(sk, ie->uid, -1) < 0) { -+ pr_err("Failed to set socket UID to %u\n", ie->uid); ++ pr_perror("Failed to set socket UID to %u", ie->uid); + goto err; + } + }