Bug #1171
closedlttng_ust_delete_fd_from_tracker: Assertion failure
100%
Description
$> ./lttng_ust_elf_test ..lttng_ust_delete_fd_from_tracker: Assertion `IS_FD_SET(fd, lttng_fd_set)' failed. Aborted
It seems to be introduced in 2.9.3 and 2.10.1 ( http://git.lttng.org/?p=lttng-ust.git;a=commit;h=0dd6b494078f56264600e17d93e6c980f8bc36ba )
ANALYSIS:
It seems the file descriptor is initialized to 0 in lttng_ust_elf_create() and later on it is trying to clean up in error path when the file ("/home/..... (deleted)") can not be opened. Not really sure how it can be triggered from application, but the executable have of some reason been deleted at the time it tries to read ELF info.
Please see the attached test program for triggering.
We have a fix proposal but I'm inclined to see your opinion on root cause maybe these a deeper reason why this happens.
Files
Updated by Jonathan Rajotte Julien about 6 years ago
- Status changed from New to Confirmed
- Assignee set to Jonathan Rajotte Julien
Hi Stefan,
I'm looking into it. I was able to reproduce the problem.
In the mean time could you share with us your potential fix?
Thanks
Updated by Jonathan Rajotte Julien about 6 years ago
Updated by Jonathan Rajotte Julien about 6 years ago
- Status changed from Confirmed to Feedback
Updated by Stefan Palade about 6 years ago
Jonathan Rajotte Julien wrote:
Hi Stefan,
I'm looking into it. I was able to reproduce the problem.
In the mean time could you share with us your potential fix?
Thanks
The fix on our side was the same as your proposal.
--- a/liblttng-ust/lttng-ust-elf.c
++ b/liblttng-ust/lttng-ust-elf.c@ -249,7 +249,7
@ struct lttng_ust_elf *lttng_ust_elf_create(const char *path)
if (!elf) {
goto error;
} elf>fd = -1;
elf->path = strdup(path);
if (!elf->path) {
Updated by Stefan Palade about 6 years ago
Stefan Palade wrote:
Jonathan Rajotte Julien wrote:
Hi Stefan,
I'm looking into it. I was able to reproduce the problem.
In the mean time could you share with us your potential fix?
Thanks
The fix on our side was the same as your proposal.
--- a/liblttng-ust/lttng-ust-elf.c
+++ b/liblttng-ust/lttng-ust-elf.c
@@ -249,7 +249,7 @@ struct lttng_ust_elf *lttng_ust_elf_create(const char *path)
if (!elf) {
goto error;
}
-
+ elf->fd = -1;
elf->path = strdup(path);
if (!elf->path) {
Updated by Jonathan Rajotte Julien almost 6 years ago
- Status changed from Feedback to Resolved
- % Done changed from 0 to 100
Applied in changeset lttng-ust|1ac2e79cfa9574fde7b3d09d4c6c2ec368185f7f.