Commit 37359ae
committed
fix(modern_bpf): resolve dirfd path in kernel space to prevent race conditions
This patch resolves the directory file descriptor path in kernel space
at syscall time, preventing race conditions where the dirfd may point
to a different directory by the time user space processes the event.
The race condition occurs when:
1. openat(dirfd=3, name="hosts") is called with dirfd pointing to /etc
2. Event is captured in kernel space with dirfd=3
3. Process closes dirfd=3 and opens a new file, reusing FD number 3
for a different directory (e.g., /dev)
4. User space resolves dirfd=3 at processing time via /proc/<pid>/fd/3,
which now points to /dev instead of /etc
5. Result: /dev/hosts instead of /etc/hosts
By resolving the path in kernel space, we capture the actual directory
at the moment of the syscall, eliminating the race condition.
Changes:
- Append new parameter 'dirfdpath' (PT_FSPATH) to existing event versions
(PPME_SYSCALL_OPENAT_2_X and PPME_SYSCALL_OPENAT2_X) for backward
compatibility with old scap files
- Resolve dirfd path in BPF programs using extract__file_struct_from_fd()
and auxmap__store_d_path_approx()
- For AT_FDCWD, capture CWD from task_struct->fs->pwd in kernel space
- Update user space to prefer kernel-resolved path over user-space resolution
- Add comprehensive test coverage for both AT_FDCWD and real dirfd cases
The new parameter is appended at the end of the parameter list, allowing
older libsinsp versions to safely ignore it when processing old scap files
with fewer parameters.
Related to: falcosecurity/falco#37891 parent 0ea6d55 commit 37359ae
File tree
9 files changed
+464
-18
lines changed- driver
- modern_bpf/programs/tail_called/events/syscall_dispatched_events
- test/drivers
- event_class
- flags
- test_suites/syscall_exit_suite
- userspace/libsinsp
9 files changed
+464
-18
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2083 | 2083 | | |
2084 | 2084 | | |
2085 | 2085 | | |
2086 | | - | |
| 2086 | + | |
2087 | 2087 | | |
2088 | 2088 | | |
2089 | 2089 | | |
2090 | 2090 | | |
2091 | 2091 | | |
2092 | 2092 | | |
2093 | | - | |
| 2093 | + | |
| 2094 | + | |
2094 | 2095 | | |
2095 | 2096 | | |
2096 | 2097 | | |
| |||
2182 | 2183 | | |
2183 | 2184 | | |
2184 | 2185 | | |
2185 | | - | |
| 2186 | + | |
2186 | 2187 | | |
2187 | 2188 | | |
2188 | 2189 | | |
2189 | 2190 | | |
2190 | 2191 | | |
2191 | 2192 | | |
2192 | 2193 | | |
2193 | | - | |
| 2194 | + | |
| 2195 | + | |
2194 | 2196 | | |
2195 | 2197 | | |
2196 | 2198 | | |
| |||
Lines changed: 43 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
68 | 111 | | |
69 | 112 | | |
70 | 113 | | |
| |||
Lines changed: 43 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
77 | 120 | | |
78 | 121 | | |
79 | 122 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
1157 | 1158 | | |
1158 | 1159 | | |
1159 | 1160 | | |
| 1161 | + | |
| 1162 | + | |
| 1163 | + | |
| 1164 | + | |
| 1165 | + | |
| 1166 | + | |
| 1167 | + | |
| 1168 | + | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
| 1177 | + | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + | |
| 1181 | + | |
| 1182 | + | |
| 1183 | + | |
| 1184 | + | |
| 1185 | + | |
| 1186 | + | |
| 1187 | + | |
| 1188 | + | |
| 1189 | + | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + | |
| 1193 | + | |
1160 | 1194 | | |
1161 | 1195 | | |
1162 | 1196 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
| 101 | + | |
101 | 102 | | |
102 | 103 | | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
108 | 111 | | |
109 | 112 | | |
110 | 113 | | |
| |||
569 | 572 | | |
570 | 573 | | |
571 | 574 | | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
572 | 591 | | |
573 | 592 | | |
574 | 593 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | | - | |
| 12 | + | |
0 commit comments