[CRIU] [PATCH] criu tests: Add more debug info to caps00 test
Kirill Tkhai
ktkhai at parallels.com
Thu Mar 12 02:00:05 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 | 35 ++++++++++++++++++++++++++++-------
1 file changed, 28 insertions(+), 7 deletions(-)
diff --git a/test/zdtm/live/static/caps00.c b/test/zdtm/live/static/caps00.c
index 4c770be..ce41659 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);
@@ -148,8 +162,15 @@ int main(int argc, char **argv)
if (res == '0')
pass();
- else
+ else {
+ read(result_pipe[0], data, sizeof(data));
+ read(result_pipe[0], data_2, sizeof(data_2));
+ test_msg("%x %x %x %x %x %x\n", data[0].eff, data[0].prm, data[0].inh,
+ data[1].eff, data[1].prm, data[1].inh);
+ test_msg("%x %x %x %x %x %x\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);
+ }
return 0;
}
More information about the CRIU
mailing list