[CRIU] [PATCH 03/10] inet: raw -- Fetch socket type and check for being raw in can_dump_ipproto
Cyrill Gorcunov
gorcunov at gmail.com
Thu Mar 22 01:10:55 MSK 2018
Don't allow to proceed dumping since we don't support
raw sockets restore yet.
Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
---
criu/sk-inet.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/criu/sk-inet.c b/criu/sk-inet.c
index 14a8e17c4bfe..e29e4f478770 100644
--- a/criu/sk-inet.c
+++ b/criu/sk-inet.c
@@ -102,8 +102,14 @@ static void show_one_inet_img(const char *act, const InetSkEntry *e)
e->state, src_addr);
}
-static int can_dump_ipproto(int ino, int proto)
+static int can_dump_ipproto(int ino, int proto, int type)
{
+ /* Raw sockets may have any protocol inside */
+ if (type == SOCK_RAW) {
+ pr_err("Unsupported raw socket %x\n", ino);
+ return 0;
+ }
+
/* Make sure it's a proto we support */
switch (proto) {
case IPPROTO_IP:
@@ -331,14 +337,17 @@ static int do_dump_one_inet_fd(int lfd, u32 id, const struct fd_parms *p, int fa
InetSkEntry ie = INET_SK_ENTRY__INIT;
IpOptsEntry ipopts = IP_OPTS_ENTRY__INIT;
SkOptsEntry skopts = SK_OPTS_ENTRY__INIT;
- int ret = -1, err = -1, proto, aux;
+ int ret = -1, err = -1, proto, aux, type;
ret = do_dump_opt(lfd, SOL_SOCKET, SO_PROTOCOL,
&proto, sizeof(proto));
if (ret)
goto err;
- if (!can_dump_ipproto(p->stat.st_ino, proto))
+ if (do_dump_opt(lfd, SOL_SOCKET, SO_TYPE, &type, sizeof(type)))
+ goto err;
+
+ if (!can_dump_ipproto(p->stat.st_ino, proto, type))
goto err;
sk = (struct inet_sk_desc *)lookup_socket(p->stat.st_ino, family, proto);
--
2.14.3
More information about the CRIU
mailing list