Skip to content

Commit 316d06b

Browse files
committed
selftests/landlock: Add audit tests for filesystem
Test all filesystem blockers, including events with several records, and record with several blockers: - fs.execute - fs.write_file - fs.read_file - fs_read_dir - fs.remove_dir - fs.remove_file - fs.make_char - fs.make_dir - fs.make_reg - fs.make_sock - fs.make_fifo - fs.make_block - fs.make_sym - fs.refer - fs.truncate - fs.ioctl_dev - fs.change_topology Cc: Günther Noack <gnoack@google.com> Cc: Paul Moore <paul@paul-moore.com> Link: https://lore.kernel.org/r/20250320190717.2287696-27-mic@digikod.net Signed-off-by: Mickaël Salaün <mic@digikod.net>
1 parent e115687 commit 316d06b

File tree

3 files changed

+645
-0
lines changed

3 files changed

+645
-0
lines changed

tools/testing/selftests/landlock/audit.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,41 @@ static int audit_set_status(int fd, __u32 key, __u32 val)
208208
return audit_request(fd, &msg, NULL);
209209
}
210210

211+
/* Returns a pointer to the last filled character of @dst, which is `\0`. */
212+
static __maybe_unused char *regex_escape(const char *const src, char *dst,
213+
size_t dst_size)
214+
{
215+
char *d = dst;
216+
217+
for (const char *s = src; *s; s++) {
218+
switch (*s) {
219+
case '$':
220+
case '*':
221+
case '.':
222+
case '[':
223+
case '\\':
224+
case ']':
225+
case '^':
226+
if (d >= dst + dst_size - 2)
227+
return (char *)-ENOMEM;
228+
229+
*d++ = '\\';
230+
*d++ = *s;
231+
break;
232+
default:
233+
if (d >= dst + dst_size - 1)
234+
return (char *)-ENOMEM;
235+
236+
*d++ = *s;
237+
}
238+
}
239+
if (d >= dst + dst_size - 1)
240+
return (char *)-ENOMEM;
241+
242+
*d = '\0';
243+
return d;
244+
}
245+
211246
/*
212247
* @domain_id: The domain ID extracted from the audit message (if the first part
213248
* of @pattern is REGEX_LANDLOCK_PREFIX). It is set to 0 if the domain ID is

tools/testing/selftests/landlock/common.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,22 @@ enforce_ruleset(struct __test_metadata *const _metadata, const int ruleset_fd)
208208
}
209209
}
210210

211+
static void __maybe_unused
212+
drop_access_rights(struct __test_metadata *const _metadata,
213+
const struct landlock_ruleset_attr *const ruleset_attr)
214+
{
215+
int ruleset_fd;
216+
217+
ruleset_fd =
218+
landlock_create_ruleset(ruleset_attr, sizeof(*ruleset_attr), 0);
219+
EXPECT_LE(0, ruleset_fd)
220+
{
221+
TH_LOG("Failed to create a ruleset: %s", strerror(errno));
222+
}
223+
enforce_ruleset(_metadata, ruleset_fd);
224+
EXPECT_EQ(0, close(ruleset_fd));
225+
}
226+
211227
struct protocol_variant {
212228
int domain;
213229
int type;

0 commit comments

Comments
 (0)