projects/guix·blob python-team · refs

114 lines · 3.8 KiB

1From 4699a580ca1aeecd35742494eb0259ee962e89a8 Mon Sep 17 00:00:00 2001
2Message-Id: <4699a580ca1aeecd35742494eb0259ee962e89a8.1685735399.git.dev@jpoiret.xyz>
3From: Josselin Poiret <[email protected]>
4Date: Fri, 2 Jun 2023 21:42:31 +0200
5Subject: [PATCH] Add clone3.
6
7From: Josselin Poiret <[email protected]>
8
9---
10 src/syscall/sysnums-arm.h | 1 +
11 src/syscall/sysnums-arm64.h | 1 +
12 src/syscall/sysnums-i386.h | 1 +
13 src/syscall/sysnums-sh4.h | 1 +
14 src/syscall/sysnums-x32.h | 1 +
15 src/syscall/sysnums-x86_64.h | 1 +
16 src/syscall/sysnums.list | 1 +
17 src/tracee/tracee.c | 4 ++++
18 8 files changed, 11 insertions(+)
19
20diff --git a/src/syscall/sysnums-arm.h b/src/syscall/sysnums-arm.h
21index dfd512f..306e2b1 100644
22--- a/src/syscall/sysnums-arm.h
23+++ b/src/syscall/sysnums-arm.h
24@@ -341,4 +341,5 @@ static const Sysnum sysnums_arm[] = {
25 [ 382 ] = PR_renameat2,
26 [ 397 ] = PR_statx,
27 [ 412 ] = PR_utimensat_time64,
28+ [ 435 ] = PR_clone3,
29 };
30diff --git a/src/syscall/sysnums-arm64.h b/src/syscall/sysnums-arm64.h
31index dfb9889..65ccc4e 100644
32--- a/src/syscall/sysnums-arm64.h
33+++ b/src/syscall/sysnums-arm64.h
34@@ -264,4 +264,5 @@ static const Sysnum sysnums_arm64[] = {
35 [ 275 ] = PR_sched_getattr,
36 [ 276 ] = PR_renameat2,
37 [ 291 ] = PR_statx,
38+ [ 435 ] = PR_clone3,
39 };
40diff --git a/src/syscall/sysnums-i386.h b/src/syscall/sysnums-i386.h
41index 3bbb70e..0f3daf2 100644
42--- a/src/syscall/sysnums-i386.h
43+++ b/src/syscall/sysnums-i386.h
44@@ -353,4 +353,5 @@ static const Sysnum sysnums_i386[] = {
45 [ 353 ] = PR_renameat2,
46 [ 383 ] = PR_statx,
47 [ 412 ] = PR_utimensat_time64,
48+ [ 435 ] = PR_clone3,
49 };
50diff --git a/src/syscall/sysnums-sh4.h b/src/syscall/sysnums-sh4.h
51index 1d3758c..09acca6 100644
52--- a/src/syscall/sysnums-sh4.h
53+++ b/src/syscall/sysnums-sh4.h
54@@ -344,4 +344,5 @@ static const Sysnum sysnums_sh4[] = {
55 [ 369 ] = PR_sched_setattr,
56 [ 370 ] = PR_sched_getattr,
57 [ 371 ] = PR_renameat2,
58+ [ 435 ] = PR_clone3,
59 };
60diff --git a/src/syscall/sysnums-x32.h b/src/syscall/sysnums-x32.h
61index 448c699..a9fdb48 100644
62--- a/src/syscall/sysnums-x32.h
63+++ b/src/syscall/sysnums-x32.h
64@@ -277,6 +277,7 @@ static const Sysnum sysnums_x32[] = {
65 [ 315 ] = PR_sched_getattr,
66 [ 316 ] = PR_renameat2,
67 [ 332 ] = PR_statx,
68+ [ 435 ] = PR_clone3,
69 [ 439 ] = PR_faccessat2,
70 [ 512 ] = PR_rt_sigaction,
71 [ 513 ] = PR_rt_sigreturn,
72diff --git a/src/syscall/sysnums-x86_64.h b/src/syscall/sysnums-x86_64.h
73index 92229f8..9840b4a 100644
74--- a/src/syscall/sysnums-x86_64.h
75+++ b/src/syscall/sysnums-x86_64.h
76@@ -319,5 +319,6 @@ static const Sysnum sysnums_x86_64[] = {
77 [ 315 ] = PR_sched_getattr,
78 [ 316 ] = PR_renameat2,
79 [ 332 ] = PR_statx,
80+ [ 435 ] = PR_clone3,
81 [ 439 ] = PR_faccessat2,
82 };
83diff --git a/src/syscall/sysnums.list b/src/syscall/sysnums.list
84index 1d6e666..2b6c9b2 100644
85--- a/src/syscall/sysnums.list
86+++ b/src/syscall/sysnums.list
87@@ -38,6 +38,7 @@ SYSNUM(clock_gettime)
88 SYSNUM(clock_nanosleep)
89 SYSNUM(clock_settime)
90 SYSNUM(clone)
91+SYSNUM(clone3)
92 SYSNUM(close)
93 SYSNUM(connect)
94 SYSNUM(creat)
95diff --git a/src/tracee/tracee.c b/src/tracee/tracee.c
96index 58ab7df..9b16f6a 100644
97--- a/src/tracee/tracee.c
98+++ b/src/tracee/tracee.c
99@@ -403,6 +403,10 @@ int new_child(Tracee *parent, word_t clone_flags)
100 status = fetch_regs(parent);
101 if (status >= 0 && get_sysnum(parent, CURRENT) == PR_clone)
102 clone_flags = peek_reg(parent, CURRENT, SYSARG_1);
103+ else if (status >= 0 && get_sysnum(parent, CURRENT) == PR_clone3)
104+ // Look at the first word of the clone_args structure, which
105+ // contains the usual clone flags.
106+ clone_flags = peek_word(parent, peek_reg(parent, CURRENT, SYSARG_1));
107
108 /* Get the pid of the parent's new child. */
109 status = ptrace(PTRACE_GETEVENTMSG, parent->pid, NULL, &pid);
110
111base-commit: bd5a5f63d72f8210d8cee76195eb9f0749e5bd70
112--
1132.40.1
114