Skip to content

Commit 35909e4

Browse files
committed
update(drivers): add cmd to exit events
Signed-off-by: rohith-raju <[email protected]>
1 parent 03ab1bf commit 35909e4

File tree

11 files changed

+72
-10
lines changed

11 files changed

+72
-10
lines changed

Diff for: driver/SCHEMA_VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.12.2
1+
2.12.3

Diff for: driver/bpf/fillers.h

+22-1
Original file line numberDiff line numberDiff line change
@@ -5568,7 +5568,12 @@ FILLER(sys_quotactl_x, true)
55685568
quota_fmt_out = quotactl_fmt_to_scap(tmp);
55695569
}
55705570

5571-
return bpf_push_u8_to_ring(data, quota_fmt_out);
5571+
/*
5572+
* cmd
5573+
*/
5574+
bpf_push_u8_to_ring(data, quota_fmt_out);
5575+
5576+
return bpf_push_u16_to_ring(data, cmd);
55725577
}
55735578

55745579
FILLER(sys_semget_e, true)
@@ -5634,6 +5639,22 @@ FILLER(sys_semctl_e, true)
56345639
return bpf_push_s32_to_ring(data, val);
56355640
}
56365641

5642+
FILLER (sys_semctl_x, true)
5643+
{
5644+
unsigned long val = 0;
5645+
long retval;
5646+
int res;
5647+
5648+
/* Parameter 1: res (PT_ERRNO) */
5649+
retval = bpf_syscall_get_retval(data->ctx);
5650+
res = bpf_push_s64_to_ring(data, (s64)retval);
5651+
CHECK_RES(res);
5652+
5653+
/* Parameter 2: cmd (PT_FLAGS16) */
5654+
val = bpf_syscall_get_argument(data, 2);
5655+
return bpf_push_u16_to_ring(data, semctl_cmd_to_scap(val));
5656+
}
5657+
56375658
FILLER(sys_ptrace_e, true)
56385659
{
56395660

Diff for: driver/event_table.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ const struct ppm_event_info g_event_info[] = {
241241
[PPME_SYSCALL_SENDFILE_E] = {"sendfile", EC_IO_WRITE | EC_SYSCALL, EF_USES_FD, 4, {{"out_fd", PT_FD, PF_DEC}, {"in_fd", PT_FD, PF_DEC}, {"offset", PT_UINT64, PF_DEC}, {"size", PT_UINT64, PF_DEC} } },
242242
[PPME_SYSCALL_SENDFILE_X] = {"sendfile", EC_IO_WRITE | EC_SYSCALL, EF_USES_FD, 2, {{"res", PT_ERRNO, PF_DEC}, {"offset", PT_UINT64, PF_DEC} } },
243243
[PPME_SYSCALL_QUOTACTL_E] = {"quotactl", EC_USER | EC_SYSCALL, EF_NONE, 4, {{"cmd", PT_FLAGS16, PF_DEC, quotactl_cmds }, {"type", PT_FLAGS8, PF_DEC, quotactl_types}, {"id", PT_UINT32, PF_DEC}, {"quota_fmt", PT_FLAGS8, PF_DEC, quotactl_quota_fmts } } },
244-
[PPME_SYSCALL_QUOTACTL_X] = {"quotactl", EC_USER | EC_SYSCALL, EF_NONE, 14, {{"res", PT_ERRNO, PF_DEC}, {"special", PT_CHARBUF, PF_NA }, {"quotafilepath", PT_CHARBUF, PF_NA}, {"dqb_bhardlimit", PT_UINT64, PF_DEC }, {"dqb_bsoftlimit", PT_UINT64, PF_DEC }, {"dqb_curspace", PT_UINT64, PF_DEC }, {"dqb_ihardlimit", PT_UINT64, PF_DEC }, {"dqb_isoftlimit", PT_UINT64, PF_DEC }, {"dqb_btime", PT_RELTIME, PF_DEC }, {"dqb_itime", PT_RELTIME, PF_DEC }, {"dqi_bgrace", PT_RELTIME, PF_DEC }, {"dqi_igrace", PT_RELTIME, PF_DEC }, {"dqi_flags", PT_FLAGS8, PF_DEC, quotactl_dqi_flags }, {"quota_fmt_out", PT_FLAGS8, PF_DEC, quotactl_quota_fmts } } },
244+
[PPME_SYSCALL_QUOTACTL_X] = {"quotactl", EC_USER | EC_SYSCALL, EF_NONE, 15, {{"res", PT_ERRNO, PF_DEC}, {"special", PT_CHARBUF, PF_NA }, {"quotafilepath", PT_CHARBUF, PF_NA}, {"dqb_bhardlimit", PT_UINT64, PF_DEC }, {"dqb_bsoftlimit", PT_UINT64, PF_DEC }, {"dqb_curspace", PT_UINT64, PF_DEC }, {"dqb_ihardlimit", PT_UINT64, PF_DEC }, {"dqb_isoftlimit", PT_UINT64, PF_DEC }, {"dqb_btime", PT_RELTIME, PF_DEC }, {"dqb_itime", PT_RELTIME, PF_DEC }, {"dqi_bgrace", PT_RELTIME, PF_DEC }, {"dqi_igrace", PT_RELTIME, PF_DEC }, {"dqi_flags", PT_FLAGS8, PF_DEC, quotactl_dqi_flags }, {"quota_fmt_out", PT_FLAGS8, PF_DEC, quotactl_quota_fmts }, {"cmd", PT_FLAGS16, PF_DEC, quotactl_cmds }} },
245245
[PPME_SYSCALL_SETRESUID_E] = {"setresuid", EC_USER | EC_SYSCALL, EF_MODIFIES_STATE, 3, {{"ruid", PT_UID, PF_DEC }, {"euid", PT_UID, PF_DEC }, {"suid", PT_UID, PF_DEC } } },
246246
[PPME_SYSCALL_SETRESUID_X] = {"setresuid", EC_USER | EC_SYSCALL, EF_MODIFIES_STATE, 1, {{"res", PT_ERRNO, PF_DEC} } },
247247
[PPME_SYSCALL_SETRESGID_E] = {"setresgid", EC_USER | EC_SYSCALL, EF_MODIFIES_STATE, 3, {{"rgid", PT_GID, PF_DEC }, {"egid", PT_GID, PF_DEC }, {"sgid", PT_GID, PF_DEC } } },
@@ -303,7 +303,7 @@ const struct ppm_event_info g_event_info[] = {
303303
[PPME_SYSCALL_SEMOP_E] = {"semop", EC_PROCESS | EC_SYSCALL, EF_NONE, 1, {{"semid", PT_INT32, PF_DEC} } },
304304
[PPME_SYSCALL_SEMOP_X] = {"semop", EC_PROCESS | EC_SYSCALL, EF_NONE, 8, {{"res", PT_ERRNO, PF_DEC}, {"nsops", PT_UINT32, PF_DEC}, {"sem_num_0", PT_UINT16, PF_DEC}, {"sem_op_0", PT_INT16, PF_DEC}, {"sem_flg_0", PT_FLAGS16, PF_HEX, semop_flags}, {"sem_num_1", PT_UINT16, PF_DEC}, {"sem_op_1", PT_INT16, PF_DEC}, {"sem_flg_1", PT_FLAGS16, PF_HEX, semop_flags} } },
305305
[PPME_SYSCALL_SEMCTL_E] = {"semctl", EC_PROCESS | EC_SYSCALL, EF_NONE, 4, {{"semid", PT_INT32, PF_DEC}, {"semnum", PT_INT32, PF_DEC}, {"cmd", PT_FLAGS16, PF_HEX, semctl_commands}, {"val", PT_INT32, PF_DEC} } },
306-
[PPME_SYSCALL_SEMCTL_X] = {"semctl", EC_PROCESS | EC_SYSCALL, EF_NONE, 1, {{"res", PT_ERRNO, PF_DEC} } },
306+
[PPME_SYSCALL_SEMCTL_X] = {"semctl", EC_PROCESS | EC_SYSCALL, EF_NONE, 2, {{"res", PT_ERRNO, PF_DEC}, {"cmd", PT_FLAGS16, PF_HEX, semctl_commands} } },
307307
[PPME_SYSCALL_PPOLL_E] = {"ppoll", EC_WAIT | EC_SYSCALL, EF_WAITS, 3, {{"fds", PT_FDLIST, PF_DEC}, {"timeout", PT_RELTIME, PF_DEC}, {"sigmask", PT_SIGSET, PF_DEC} } },
308308
[PPME_SYSCALL_PPOLL_X] = {"ppoll", EC_WAIT | EC_SYSCALL, EF_WAITS, 2, {{"res", PT_ERRNO, PF_DEC}, {"fds", PT_FDLIST, PF_DEC} } },
309309
[PPME_SYSCALL_MOUNT_E] = {"mount", EC_FILE | EC_SYSCALL, EF_MODIFIES_STATE, 1, {{"flags", PT_FLAGS32, PF_HEX, mount_flags} } },

Diff for: driver/fillers_table.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ const struct ppm_event_entry g_ppm_events[PPM_EVENT_MAX] = {
227227
[PPME_SYSCALL_SEMOP_E] = {FILLER_REF(sys_single)},
228228
[PPME_SYSCALL_SEMOP_X] = {FILLER_REF(sys_semop_x)},
229229
[PPME_SYSCALL_SEMCTL_E] = {FILLER_REF(sys_semctl_e)},
230-
[PPME_SYSCALL_SEMCTL_X] = {FILLER_REF(sys_single_x)},
230+
[PPME_SYSCALL_SEMCTL_X] = {FILLER_REF(sys_semctl_x)},
231231
[PPME_SYSCALL_PPOLL_E] = {FILLER_REF(sys_ppoll_e)},
232232
[PPME_SYSCALL_PPOLL_X] = {FILLER_REF(sys_poll_x)}, /* exit same for poll() and ppoll() */
233233
[PPME_SYSCALL_MOUNT_E] = {FILLER_REF(sys_mount_e)},

Diff for: driver/modern_bpf/definitions/events_dimensions.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@
189189
#define SEMGET_E_SIZE HEADER_LEN + sizeof(int32_t) * 2 + sizeof(uint32_t) + PARAM_LEN * 3
190190
#define SEMGET_X_SIZE HEADER_LEN + sizeof(int64_t) + PARAM_LEN
191191
#define SEMCTL_E_SIZE HEADER_LEN + sizeof(int32_t) * 3 + sizeof(uint16_t) + PARAM_LEN * 4
192-
#define SEMCTL_X_SIZE HEADER_LEN + sizeof(int64_t) + PARAM_LEN
192+
#define SEMCTL_X_SIZE HEADER_LEN + sizeof(int64_t) + sizeof(uint16_t) + PARAM_LEN * 2
193193
#define SELECT_E_SIZE HEADER_LEN
194194
#define SELECT_X_SIZE HEADER_LEN + sizeof(int64_t) + PARAM_LEN
195195
#define SPLICE_E_SIZE HEADER_LEN + sizeof(int64_t) * 2 + sizeof(uint64_t) + sizeof(uint32_t) + PARAM_LEN * 4

Diff for: driver/modern_bpf/programs/tail_called/events/syscall_dispatched_events/quotactl.bpf.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ int BPF_PROG(quotactl_x,
9494
unsigned long special_pointer = extract__syscall_argument(regs, 1);
9595
auxmap__store_charbuf_param(auxmap, special_pointer, MAX_PATH, USER);
9696

97-
int32_t cmd = (int32_t)extract__syscall_argument(regs, 0);
97+
uint32_t cmd = (uint32_t)extract__syscall_argument(regs, 0);
9898
u16 scap_cmd = quotactl_cmd_to_scap(cmd);
9999

100100
/* The `addr` argument is the address of an optional, command-
@@ -242,6 +242,9 @@ int BPF_PROG(quotactl_x,
242242
}
243243
auxmap__store_u8_param(auxmap, quota_fmt_out);
244244

245+
/* Parameter 16: cmd (PT_FLAG16) */
246+
auxmap__store_u16_param(auxmap, scap_cmd);
247+
245248
/*=============================== COLLECT PARAMETERS ===========================*/
246249

247250
auxmap__finalize_event_header(auxmap);

Diff for: driver/modern_bpf/programs/tail_called/events/syscall_dispatched_events/semctl.bpf.c

+4
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ int BPF_PROG(semctl_x,
7070
/* Parameter 1: res (type: PT_ERRNO) */
7171
ringbuf__store_s64(&ringbuf, (s64)ret);
7272

73+
/* Parameter 2: cmd (type: PT_FLAG16)*/
74+
u16 cmd = (u16)extract__syscall_argument(regs, 2);
75+
ringbuf__store_u16(&ringbuf, semctl_cmd_to_scap(cmd));
76+
7377
/*=============================== COLLECT PARAMETERS ===========================*/
7478

7579
ringbuf__submit_event(&ringbuf);

Diff for: driver/ppm_fillers.c

+28-1
Original file line numberDiff line numberDiff line change
@@ -6272,8 +6272,16 @@ int f_sys_quotactl_x(struct event_filler_arguments *args)
62726272
quota_fmt_out = quotactl_fmt_to_scap(quota_fmt_out);
62736273
}
62746274
res = val_to_ring(args, quota_fmt_out, 0, false, 0);
6275-
CHECK_RES(res);
6275+
if (unlikely(res != PPM_SUCCESS))
6276+
return res;
62766277

6278+
/*
6279+
* cmd
6280+
*/
6281+
res = val_to_ring(args, cmd, 0, false, 0);
6282+
if (unlikely(res != PPM_SUCCESS))
6283+
return res;
6284+
62776285
return add_sentinel(args);
62786286
}
62796287

@@ -6673,6 +6681,25 @@ int f_sys_semctl_e(struct event_filler_arguments *args)
66736681
else
66746682
val = 0;
66756683
res = val_to_ring(args, val, 0, true, 0);
6684+
if (unlikely(res != PPM_SUCCESS))
6685+
return res;
6686+
6687+
return add_sentinel(args);
6688+
}
6689+
6690+
int f_sys_semctl_x(struct event_filler_arguments *args)
6691+
{
6692+
unsigned long val = 0;
6693+
int res;
6694+
6695+
/* Parameter 1: res (PT_ERRNO) */
6696+
res = (int64_t) syscall_get_return_value(current, args->regs);
6697+
res = val_to_ring(args, res, 0, false, 0);
6698+
CHECK_RES(res);
6699+
6700+
/* Parameter 2: cmd (PT_FLAGS16)*/
6701+
syscall_get_arguments_deprecated(args, 2, 1, &val);
6702+
res = val_to_ring(args, semctl_cmd_to_scap(val), 0, true ,0);
66766703
CHECK_RES(res);
66776704

66786705
return add_sentinel(args);

Diff for: driver/ppm_fillers.h

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ or GPL2.txt for full copies of the license.
9797
FN(sys_semop_x) \
9898
FN(sys_semget_e) \
9999
FN(sys_semctl_e) \
100+
FN(sys_semctl_x) \
100101
FN(sys_ppoll_e) \
101102
FN(sys_mount_e) \
102103
FN(sys_access_e) \

Diff for: test/drivers/test_suites/syscall_exit_suite/quotactl_x.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,12 @@ TEST(SyscallExit, quotactlX)
8181
/* Parameter 14: quota_fmt_out (type: PT_FLAGS8) */
8282
evt_test->assert_numeric_param(14, (uint8_t)PPM_QFMT_NOT_USED);
8383

84+
/* Parameter 15: cmd (type: PT_FLAG16) */
85+
evt_test->assert_numeric_param(15, (uint16_t)PPM_Q_SYNC);
86+
8487
/*=============================== ASSERT PARAMETERS ===========================*/
8588

86-
evt_test->assert_num_params_pushed(14);
89+
evt_test->assert_num_params_pushed(15);
8790
}
8891

8992
/// TODO: Probably we can add further tests on this exit event

Diff for: test/drivers/test_suites/syscall_exit_suite/semctl_x.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ TEST(SyscallExit, semctlX)
4141
/* Parameter 1: res (type: PT_ERRNO) */
4242
evt_test->assert_numeric_param(1, (int64_t)errno_value);
4343

44+
/* Parameter 2: cmd (type: PT_FLAGS16) */
45+
evt_test->assert_numeric_param(2, (uint16_t)PPM_SETVAL);
46+
4447
/*=============================== ASSERT PARAMETERS ===========================*/
4548

46-
evt_test->assert_num_params_pushed(1);
49+
evt_test->assert_num_params_pushed(2);
4750
}
4851
#endif

0 commit comments

Comments
 (0)