[CRIU] Re: [PATCH] sockets: Fix file-bound socket check for dgram sockets

Cyrill Gorcunov gorcunov at openvz.org
Wed Feb 8 06:41:13 EST 2012


On Wed, Feb 08, 2012 at 03:31:17PM +0400, Cyrill Gorcunov wrote:
> On Wed, Feb 08, 2012 at 03:27:36PM +0400, Pavel Emelyanov wrote:
> > > 
> > > Надо примерно так, но после этого тест повисает где-то на синхронизации кто отресторился а кто нет :(
> > 
> > А, не, вру. Все ОК, просто у меня ядро без поддержки exe линка. Что, кстати, тоже херово -- линк
> > не отресторился, а все висит.
> > 
> 
> Это потому что виснет в паразитном коде -- там стоит endless-loop при ошибке.
> Надо, наверное, на sys_kill заменить (просто я оставался в таком цикле для
> отладки, там сложно отлаживать очеь было, а когда он в лупе висит, можно
> присосаться ptrace было).
> 

Agreed?

	Cyrill
---
From: Pavel Emelyanov <xemul at parallels.com>
Date: Wed, 8 Feb 2012 15:35:13 +0400
Subject: [PATCH] sockets: Update device encoding in file-bound sockets test

Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 include/util.h |   21 +++++++++++++++++++++
 sockets.c      |    5 ++++-
 2 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/include/util.h b/include/util.h
index e9c1832..ec23791 100644
--- a/include/util.h
+++ b/include/util.h
@@ -264,4 +264,25 @@ FILE *fopen_proc(int pid_dir_fd, char *fmt, ...);
 #define pr_img_head(type, ...)	pr_info("\n"#type __VA_ARGS__ "\n----------------\n")
 #define pr_img_tail(type)	pr_info("----------------\n")
 
+#define KDEV_MINORBITS 20
+#define KDEV_MINORMASK ((1UL << KDEV_MINORBITS) - 1)
+
+static inline u32 kdev_major(u32 kdev)
+{
+	return kdev >> KDEV_MINORBITS;
+}
+
+static inline u32 kdev_minor(u32 kdev)
+{
+	return kdev & KDEV_MINORMASK;
+}
+
+static inline dev_t kdev_to_odev(u32 kdev)
+{
+	/*
+        * New kernels envcode devices in a new form
+        */
+	return (kdev_major(kdev) << 8) | kdev_minor(kdev);
+}
+
 #endif /* UTIL_H_ */
diff --git a/sockets.c b/sockets.c
index 2b8a1b4..874d3ef 100644
--- a/sockets.c
+++ b/sockets.c
@@ -466,7 +466,10 @@ static int unix_collect_one(struct unix_diag_msg *m, struct rtattr **tb)
 			}
 
 			if ((st.st_ino != uv->udiag_vfs_ino) ||
-			    (st.st_dev != uv->udiag_vfs_dev)) {
+			    (st.st_dev != kdev_to_odev(uv->udiag_vfs_dev))) {
+				pr_info("unix: Dropping path for unlinked bound sk %x.%x real %x.%x\n",
+					(int)st.st_dev, (int)st.st_ino,
+					(int)uv->udiag_vfs_dev, (int)uv->udiag_vfs_ino);
 				/*
 				 * When a listen socket is bound to
 				 * unlinked file, we just drop his name,
-- 
1.7.7.6



More information about the CRIU mailing list