[S] Change in libosmocore[master]: gsmtap_util: Avoid sink_fd leak gsmtap_source_add_sinki() called mult...
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/41706?usp=email ) Change subject: gsmtap_util: Avoid sink_fd leak gsmtap_source_add_sinki() called multiple times ...................................................................... gsmtap_util: Avoid sink_fd leak gsmtap_source_add_sinki() called multiple times gti->sink_fd could leak if gsmtap_source_add_sink() was called multiple times. Also if gsmtap_source_add_sink_fd() failed, rc != -1 was returned and hence a close() on a wrong fd would be attempted. This commit fixes both issues, making the whole sink_fd field much more robust. Change-Id: I7af5a6c7d64954ee2cc013711702b846dfaa02b1 --- M src/core/gsmtap_util.c 1 file changed, 10 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/06/41706/1 diff --git a/src/core/gsmtap_util.c b/src/core/gsmtap_util.c index f1a2abf..065dc51 100644 --- a/src/core/gsmtap_util.c +++ b/src/core/gsmtap_util.c @@ -436,7 +436,15 @@ */ int gsmtap_source_add_sink(struct gsmtap_inst *gti) { - return gti->sink_fd = gsmtap_source_add_sink_fd(gsmtap_inst_fd2(gti)); + int rc; + + if (gti->sink_fd >= 0) + return -EALREADY; + + rc = gsmtap_source_add_sink_fd(gsmtap_inst_fd2(gti)); + if (rc >= 0) + gti->sink_fd = rc; + return rc; } /* Registered in Osmo IO as a no-op to set the write callback. */ @@ -520,7 +528,7 @@ close(gti->source_fd); - if (gti->sink_fd != -1) { + if (gti->sink_fd >= 0) { close(gti->sink_fd); gti->sink_fd = -1; } -- To view, visit https://gerrit.osmocom.org/c/libosmocore/+/41706?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: newchange Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Change-Id: I7af5a6c7d64954ee2cc013711702b846dfaa02b1 Gerrit-Change-Number: 41706 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin@sysmocom.de>
participants (1)
-
pespin