From patchwork Wed Aug 26 04:02:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Sugino X-Patchwork-Id: 21928 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 3A56744B508 for ; Wed, 26 Aug 2020 07:32:24 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1F251689AE3; Wed, 26 Aug 2020 07:32:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f195.google.com (mail-qt1-f195.google.com [209.85.160.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 503546879A0 for ; Wed, 26 Aug 2020 07:32:17 +0300 (EEST) Received: by mail-qt1-f195.google.com with SMTP id d27so546861qtg.4 for ; Tue, 25 Aug 2020 21:32:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=3way-com-ar.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=E04gdoLpYi6xsUdWV8q0QY6tHz5ABi6M7lWjqNewTgQ=; b=AeyuM4KCBbuLZZYIRnCG016RB7VIpY6y/7UXkpF4aTnW5eIQ29tBPLBn39+jux/zOb YIxk8mgX7fx9dRFpUjx6oEFayHSRCFxzYy9cMmPBmS8/7sX/LzgT2CXijG6Qvbb8cpWU XXdLQvaTDlDDxQUF4QZ9C+vkGXbZlgCnHTM0LRJXa1Fub9Hl8UM+5eYA4BWIPp0ng3lr vP48dZp2opUdsHD6N4rNNHPTUYmlHYzoUTjK3VVWwtpS3YWw1dGwUFYSg4WeQMqTiNDD wzXlf1XdAb7vNBUBXCVluIYqJzlvCu1mX13/1BJcniSgrowkn4om8qyinSqWD5hG2fjr NQsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=E04gdoLpYi6xsUdWV8q0QY6tHz5ABi6M7lWjqNewTgQ=; b=Dt9AVJqT3PVXzxl7xvc08PMTOoR2xCnF3jVW7zrdTeaG9UIZSEdPfjNqXQy36JE0Gy KKxNRyyzJ5OlWtKiLVg06wJ/yYZ5to7EWY7iLr67mTtpHzy8vcDtj6F3a5bmNQroMjue X+ZDWl+HhdSo/YMsNJVJSEhCHfApwOAXiHnEdTd3ITNu1ZgmXvzzjG+k8k/5Ia8c3HVx g/EJwU8KmJSqLRqumVzN/uL0eLh08DdUpKzFu2lLi9VSF9nIEkW50DgJ5jFDGgpYSrQV wIdK0mjeuzZLXcA4s38iIDnKCEoQZn8/ckOUG2W9uRLbs1oS8EJHLywqaGMfqmTSP//F fgEQ== X-Gm-Message-State: AOAM530cXbTIAPhgW0DEBw32wn0XeVdo6LjGbcV/gjXIgDgLqNCW+WvZ XaY18bd76wqo0NGz/fp9HRPtO1xOQ9NLCimb X-Google-Smtp-Source: ABdhPJzJx5WTwiRDiAm1pgGdSnNrhwXosxM9VhHXgkKQx6KuESl20UlBbLukIcb943FfG3Lb1S6gWQ== X-Received: by 2002:aed:3789:: with SMTP id j9mr12923300qtb.251.1598414591256; Tue, 25 Aug 2020 21:03:11 -0700 (PDT) Received: from DESKTOP-7F99H9A.localdomain ([181.169.172.160]) by smtp.gmail.com with ESMTPSA id o31sm990339qte.65.2020.08.25.21.03.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Aug 2020 21:03:10 -0700 (PDT) From: Nicolas Sugino To: ffmpeg-devel@ffmpeg.org Date: Wed, 26 Aug 2020 01:02:57 -0300 Message-Id: <20200826040257.9709-1-nsugino@3way.com.ar> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avformat/libsrt: Fix epoll fd leak X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Nicolas Sugino MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Call srt_epoll_release() to avoid fd leak on libsrt_open() error. --- libavformat/libsrt.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index 4025b24976..6da372081e 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -380,10 +380,13 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), &port, path, sizeof(path), uri); - if (strcmp(proto, "srt")) + if (strcmp(proto, "srt")) { + srt_epoll_release(s->eid); return AVERROR(EINVAL); + } if (port <= 0 || port >= 65536) { av_log(h, AV_LOG_ERROR, "Port missing in uri\n"); + srt_epoll_release(s->eid); return AVERROR(EINVAL); } p = strchr(uri, '?'); @@ -408,6 +411,7 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) av_log(h, AV_LOG_ERROR, "Failed to resolve hostname %s: %s\n", hostname, gai_strerror(ret)); + srt_epoll_release(s->eid); return AVERROR(EIO); } @@ -495,6 +499,7 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) if (listen_fd >= 0) srt_close(listen_fd); freeaddrinfo(ai); + srt_epoll_release(s->eid); return ret; } @@ -632,10 +637,16 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) s->linger = strtol(buf, NULL, 10); } } - return libsrt_setup(h, uri, flags); + ret = libsrt_setup(h, uri, flags); + if (ret) { + goto err; + } + return 0; + err: av_freep(&s->smoother); av_freep(&s->streamid); + srt_cleanup(); return ret; }