From: Hemant Kumar Shaw <hkshaw@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: Mikhail.Kulemin@ru.ibm.com, srikar@linux.vnet.ibm.com,
peterz@infradead.org, oleg@redhat.com, mingo@redhat.com,
anton@redhat.com, systemtap@sourceware.org,
masami.hiramatsu.pt@hitachi.com
Subject: [PATCH] uprobes: Fix limiting un-nested return probes
Date: Tue, 03 Sep 2013 11:44:00 +0530 [thread overview]
Message-ID: <20130903060959.1351.16587.stgit@hemant-fedora> (raw)
Here is a sample program which shows a problem in uretprobes:
#include <stdlib.h>
int some_work(int num)
{
while (num != 0)
num--;
return 0;
};
int main(int argc, char **argv)
{
if (argc != 2)
return EXIT_FAILURE;
int num = atoi(argv[1]);
while(num != 0) {
some_work(100);
num--;
};
return EXIT_SUCCESS;
}
$ gcc -o sample sample.c
- Add probe for returning from some_work():
$ sudo perf probe -x ./sample -a ret=some_work%return
Added new event:
probe_sample:ret (on 0x530%return)
You can now use it in all perf tools, such as:
perf record -e probe_sample:ret -aR sleep 1
- Record events :
$ sudo perf record -e probe_sample:ret -aR ./sample 134
- View report :
$ sudo perf report --stdio
# captured on: Wed Aug 14 17:03:42 2013
# hostname : hemant-fedora
# os release : 3.11.0-rc3+
# perf version : 3.9.4-200.fc18.x86_64
# arch : x86_64
# nrcpus online : 2
# nrcpus avail : 2
# cpudesc : QEMU Virtual CPU version 1.2.2
# cpuid : GenuineIntel,6,2,3
# total memory : 2051912 kB
# cmdline : /usr/bin/perf record -e probe_sample:ret -aR ./sample 134
# event : name = probe_sample:ret, type = 2, config = 0x38c, config1 =
0x0, config2 = 0x0,
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# pmu mappings: software = 1, tracepoint = 2, breakpoint = 5
# ========
#
# Samples: 64 of event 'probe_sample:ret'
# Event count (approx.): 64
#
# Overhead Command Shared Object Symbol
# ........ ....... ............. ........
#
100.00% sample sample [.] main
#
# (For a higher level overview, try: perf report --sort comm,dso)
#
>From report we can see that there were only 64 return events, but
actually it should be 134. It looks like uprobes identified return
events as recursive events and used restrictions for number of such events.
So, here is a patch which fixes this issue.
--->8---
There exists a limit to the number of nested return probes. The current limit is 64.
However this limit is getting enforced on even non nested return probes.
Hence, registering 64 independent non nested return probes results in failure of
return probes on the same task. The problem is utask->depth is getting incremented
unconditionally but decremented only if chained. So, utask->depth should be
incremented only if chained. This should fix the issue.
Signed-off-by: Hemant Kumar Shaw <hkshaw@linux.vnet.ibm.com>
Reported-by: Mikhail Kulemin <Mikhail.Kulemin@ru.ibm.com>
---
kernel/events/uprobes.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
index f356974..4fb20fe 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
@@ -1442,7 +1442,8 @@ static void prepare_uretprobe(struct uprobe *uprobe, struct pt_regs *regs)
ri->orig_ret_vaddr = orig_ret_vaddr;
ri->chained = chained;
- utask->depth++;
+ if (chained)
+ utask->depth++;
/* add instance to the stack */
ri->next = utask->return_instances;
next reply other threads:[~2013-09-03 6:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-03 6:14 Hemant Kumar Shaw [this message]
2013-09-08 16:32 ` Oleg Nesterov
2013-09-09 8:36 ` Anton Arapov
2013-09-09 14:55 ` Oleg Nesterov
2013-09-12 4:49 ` Hemant
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130903060959.1351.16587.stgit@hemant-fedora \
--to=hkshaw@linux.vnet.ibm.com \
--cc=Mikhail.Kulemin@ru.ibm.com \
--cc=anton@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=srikar@linux.vnet.ibm.com \
--cc=systemtap@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®