lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 21 Oct 2022 09:43:14 +0800
From:   richard clark <richard.xnu.clark@...il.com>
To:     Steven Rostedt <rostedt@...dmis.org>
Cc:     bristot@...nel.org, linux-trace-devel@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: Re: Question about 'for_each_kernel_tracepoint(...)' function

On Thu, Oct 20, 2022 at 11:14 PM Steven Rostedt <rostedt@...dmis.org> wrote:
>
> On Thu, 20 Oct 2022 17:32:57 +0800
> richard clark <richard.xnu.clark@...il.com> wrote:
>
> > Hi,
> > Can this function only find the trace points defined in the kernel
>
> It should find all tracepoints.
I defined an event trace point in module B(in the header file):
...
#define TRACE_SYSTEM    cus_tp
...
TRACE_EVENT(function_event_a,
        /* all the data struct parameter is in form of pointer instead
of object */
        TP_PROTO(enum event ev),
        TP_ARGS(ev),
        ...
);

After the module B inserted, the output is:

root@...otics:/sys/kernel/debug/tracing# cat available_events | grep func
cus_tp:function_event_a

Then I inserted module A with below code snippet:

void fc(struct tracepoint *ktp, void *priv)
{
    pr_info("events: %s\n", ktp->name);
}

static int module_A_init(void)
{
    for_each_kernel_tracepoint(fc, NULL);
    return 0;
}

Then I insert the module A into the system with module B is inserted,
the dmesg shows:

root@ robotics:/home/robotics/evt-tp# dmesg | grep func
[149421.718576] events: call_function_entry
[149421.718578] events: call_function_exit
[149421.718579] events: call_function_single_entry
[149421.718581] events: call_function_single_exit

So Steve you can see that the 'for_each_kernel_tracepoint' doesn't
find the event tp defined in module B, but that tp indeed shows in
/sys/kernel/debug/tracing/available_events.

Any comments about that?

>
> > image? I want to define a trace event in my kernel module A, then B
> > module to register a probe callback function for that event TP in A. I
> > want to kick off a timer in A and call the traced function
> > periodically, thus I can monitor the events happening in A from B.
>
> You could also export the tracepoint from A and reference it directly in B.
>
> >
> > Can I do that, is it possible?
> >
>
> Try it and find out. Why ask?

Ah, as you can see that I did it, but the result is not what I
expected :-). Help?

Richard

>
> -- Steve

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ