[CRIU] [PATCH criu v2] tests: Add more debug info to caps00 test

Kirill Tkhai ktkhai at parallels.com
Mon Mar 16 02:02:38 PDT 2015


Print all cap values in case of test is failed.
Also check for capset() and capsget() return values.

Signed-off-by: Kirill Tkhai <ktkhai at parallels.com>
---
 test/zdtm/live/static/caps00.c |   41 +++++++++++++++++++++++++++++++---------
 1 file changed, 32 insertions(+), 9 deletions(-)

diff --git a/test/zdtm/live/static/caps00.c b/test/zdtm/live/static/caps00.c
index 4c770be..967f4fb 100644
--- a/test/zdtm/live/static/caps00.c
+++ b/test/zdtm/live/static/caps00.c
@@ -36,6 +36,8 @@ int main(int argc, char **argv)
 {
 	task_waiter_t t;
 	int pid, result_pipe[2];
+	struct cap_data data[_LINUX_CAPABILITY_U32S_3];
+	struct cap_data data_2[_LINUX_CAPABILITY_U32S_3];
 	char res = 'x';
 	FILE *f;
 
@@ -60,9 +62,6 @@ int main(int argc, char **argv)
 	pid = test_fork();
 	if (pid == 0) {
 		struct cap_hdr hdr;
-		struct cap_data data[_LINUX_CAPABILITY_U32S_3];
-		struct cap_data data_2[_LINUX_CAPABILITY_U32S_3];
-
 		if (prctl(PR_CAPBSET_DROP, CAP_SETPCAP, 0, 0, 0)) {
 			res = 'x';
 			task_waiter_complete_current(&t);
@@ -72,7 +71,10 @@ int main(int argc, char **argv)
 		hdr.version = _LINUX_CAPABILITY_VERSION_3;
 		hdr.pid = 0;
 
-		capget(&hdr, data);
+		if (capget(&hdr, data) < 0) {
+			err("capget");
+			return -1;
+		}
 
 		hdr.version = _LINUX_CAPABILITY_VERSION_3;
 		hdr.pid = 0;
@@ -80,7 +82,10 @@ int main(int argc, char **argv)
 		data[0].eff &= ~((1 << CAP_CHOWN) | (1 << CAP_DAC_OVERRIDE));
 		data[0].prm &= ~(1 << CAP_DAC_OVERRIDE);
 
-		capset(&hdr, data);
+		if (capset(&hdr, data) < 0) {
+			err("capset\n");
+			return -1;
+		}
 
 		task_waiter_complete_current(&t);
 		task_waiter_wait4(&t, getppid());
@@ -88,7 +93,10 @@ int main(int argc, char **argv)
 		hdr.version = _LINUX_CAPABILITY_VERSION_3;
 		hdr.pid = 0;
 
-		capget(&hdr, data_2);
+		if (capget(&hdr, data_2) < 0) {
+			err("second capget");
+			return -1;
+		}
 
 		NORM_CAPS(data, eff);
 		NORM_CAPS(data, prm);
@@ -130,6 +138,12 @@ int main(int argc, char **argv)
 		res = '0';
 bad:
 		write(result_pipe[1], &res, 1);
+
+		if (res != '0') {
+			write(result_pipe[1], data, sizeof(data));
+			write(result_pipe[1], data_2, sizeof(data_2));
+		}
+
 		close(result_pipe[0]);
 		close(result_pipe[1]);
 		_exit(0);
@@ -143,13 +157,22 @@ int main(int argc, char **argv)
 	task_waiter_complete_current(&t);
 
 	read(result_pipe[0], &res, 1);
-	close(result_pipe[0]);
-	close(result_pipe[1]);
 
 	if (res == '0')
 		pass();
-	else
+	else {
+		read(result_pipe[0], data, sizeof(data));
+		read(result_pipe[0], data_2, sizeof(data_2));
+		test_msg("{eff,prm,inh}[]={%08x,%08x,%08x}, {%08x,%08x,%08x}\n",
+			  data[0].eff, data[0].prm, data[0].inh,
+			  data[1].eff, data[1].prm, data[1].inh);
+		test_msg("{eff,prm,inh}[]={%08x,%08x,%08x}, {%08x,%08x,%08x}\n",
+			  data_2[0].eff, data_2[0].prm, data_2[0].inh,
+			  data_2[1].eff, data_2[1].prm, data_2[1].inh);
 		fail("Fail: %c", res);
+	}
+	close(result_pipe[0]);
+	close(result_pipe[1]);
 
 	return 0;
 }





More information about the CRIU mailing list