[CRIU] [PATCH 09/12] check: check that signalfd with SFD_RAW and sigqueueinfo with positive si_code

Andrey Vagin avagin at openvz.org
Tue Dec 18 01:36:12 EST 2012


Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 cr-check.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/cr-check.c b/cr-check.c
index db3bff6..9297382 100644
--- a/cr-check.c
+++ b/cr-check.c
@@ -22,6 +22,7 @@
 #include "proc_parse.h"
 #include "mount.h"
 #include "tty.h"
+#include "signalfd.h"
 
 static int check_tty(void)
 {
@@ -425,6 +426,35 @@ static int check_ipc(void)
 	return -1;
 }
 
+int check_signalfd()
+{
+	int fd;
+	sigset_t mask;
+	sigfillset(&mask);
+
+	fd = signalfd(-1, &mask, SFD_GROUP | SFD_RAW);
+	if (fd < 0) {
+		pr_perror("Can't make signalfd with SFD_GROUP and SFD_RAW");
+		return 1;
+	}
+	close(fd);
+	return 0;
+}
+
+int check_sigqueuinfo()
+{
+	siginfo_t info = { .si_code = 1 };
+
+	signal(SIGUSR1, SIG_IGN);
+
+	if (sys_rt_sigqueueinfo(getpid(), SIGUSR1, &info)) {
+		pr_perror("Unable to send siginfo with positive si_code to itself");
+		return 1;
+	}
+
+	return 0;
+}
+
 int cr_check(void)
 {
 	int ret = 0;
@@ -450,6 +480,8 @@ int cr_check(void)
 	ret |= check_tty();
 	ret |= check_so_gets();
 	ret |= check_ipc();
+	ret |= check_signalfd();
+	ret |= check_sigqueuinfo();
 
 	if (!ret)
 		pr_msg("Looks good.\n");
-- 
1.7.11.7



More information about the CRIU mailing list