From patchwork Sat Jun 8 23:10:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 49716 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:c209:0:b0:460:55fa:d5ed with SMTP id d9csp1781912vqo; Sat, 8 Jun 2024 16:12:03 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVQnNe0vH/UGQaR1xzxeu5/hqFO0u1t54kYe04ucazYjZlhWk1TKiIKAesKsd/Qd4e6RMmkuWqz4spJBRDi/WSktj9DH2P0P0RQrA== X-Google-Smtp-Source: AGHT+IF06KpfedEMGaszOxf1+wzEW1Hi+MvboBJb9USQz84UELR95SKglADXMZHyyp+CHCW7jk8M X-Received: by 2002:a05:651c:1a2a:b0:2eb:e266:f9ba with SMTP id 38308e7fff4ca-2ebe266fb74mr1500171fa.23.1717888323075; Sat, 08 Jun 2024 16:12:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717888323; cv=none; d=google.com; s=arc-20160816; b=CXKA9bvDHrpKHUXWsHpYB5CnROA91jNACzjldM8MWLP2C7SKSYU3H57AJF/RNnyDbL xbaHvwKGLjNG0RvbNRvauJVphQwKMO67q7Bw1BRsVAKeHO8SGERABt5MX580MUBUW1ZV o4rTdZ/tpiJRWwbfMrp0BttoJzUltLHd/NrwjYYdweZP+cAA2XgtEZ4m9mZQUAXOK/86 zKrXAtZAad5i4rLPbAq5ufknQvk+Zw1fNmzRvrpRCW+31U7c8/B0uLF6vVXlS5dN0kXQ toA9OxB8BKcEc9KjS2opWaalMkrkULlMGsBfXVaSAjnoqTvHemyMmGOvpi85w6+Xb3mO wYOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=trPD6TfizdJabfp2uE5/zw56mXzdQLoHGZBPwN2q/Qc=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=uzPqnW+RbNwLIYMiHDFhNrdwOjEWAKG8JMGlmoA5up2+pfsMyjTQF+p2SzH9EDZbdx sHE8Twq56BMgURh2DzNry2v/yn3Sxi7WR0Ll61Ng6ZEklguk+Ly9zIlc6x6pv/N0hfT1 xmdS0n66e6svpICD6E7rWV2Q2nZdmjU7Pmr6sRzQaiJeyg3HymZ31Nxjbfdm6pzI9Nzk Xwf7FTJXOk+dHbTQm39F0ud73sCHb8BoF/7zgXUO7d46Mu/E7oFP2PYYiKlOjvj+IrlA fAazJYGottdtmnXy2a6NtLNfy/rHdXw1fUgsVqLZwyN8Mntyig/F9VDwJq8dTD5Ghcxv uDtA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=gowzPZMm; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a6c8074a7casi331297566b.956.2024.06.08.16.12.02; Sat, 08 Jun 2024 16:12:03 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=gowzPZMm; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 289CE68D75A; Sun, 9 Jun 2024 02:11:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A3A668D736 for ; Sun, 9 Jun 2024 02:10:54 +0300 (EEST) Received: by mail.gandi.net (Postfix) with ESMTPSA id 07818C0002 for ; Sat, 8 Jun 2024 23:10:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc; s=gm1; t=1717888254; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7d/pa86zWj8Vok8pTpylGijE87xmWBUm/KzaazdEhn4=; b=gowzPZMmNguMGeOn9VLik8VWPML1xPHEkqYcRIgBFwcMsKkyvojNP/bk6usGZB9HBdHtLT tvatRxRkdo55kefvrd+Jf0+RE6wSPe6yPtYEVuikzLaJdFh/S6xI/WGqZQPsHfXWdv05Bc 02ewgEW3g75J/K+6UobfbMuWTpE/ffyKkfswIJ1PuFZlBeMWCyK3xq/jZinFyt7Lp/IOLv PZEp3Z40KVwoDxV6EnSVAyVR9I2fhJlWxw2FZphgL74rL566uT2/4gih9mbVxaoSx9/VL6 +Ov43cq/n1DQWu4YJOAE7C3SkM7nkacRYI9eRUmpF5Txph2bIf0jzRIGeasBLQ== From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sun, 9 Jun 2024 01:10:45 +0200 Message-ID: <20240608231046.3619551-8-michael@niedermayer.cc> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240608231046.3619551-1-michael@niedermayer.cc> References: <20240608231046.3619551-1-michael@niedermayer.cc> MIME-Version: 1.0 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH 8/9] avformat/udp: Fix temporary buffer race X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: a36oZQncb3qv Fixes: CID1551679 Data race condition Fixes: CID1551687 Data race condition Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer --- libavformat/udp.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavformat/udp.c b/libavformat/udp.c index c1ebdd12220..fd4847eda71 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -107,7 +107,8 @@ typedef struct UDPContext { pthread_cond_t cond; int thread_started; #endif - uint8_t tmp[UDP_MAX_PKT_SIZE+4]; + uint8_t tmp_rx[UDP_MAX_PKT_SIZE+4]; + uint8_t tmp_tx[UDP_MAX_PKT_SIZE+4]; int remaining_in_dg; char *localaddr; int timeout; @@ -504,7 +505,7 @@ static void *circular_buffer_task_rx( void *_URLContext) see "General Information" / "Thread Cancelation Overview" in Single Unix. */ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old_cancelstate); - len = recvfrom(s->udp_fd, s->tmp+4, sizeof(s->tmp)-4, 0, (struct sockaddr *)&addr, &addr_len); + len = recvfrom(s->udp_fd, s->tmp_rx+4, sizeof(s->tmp_rx)-4, 0, (struct sockaddr *)&addr, &addr_len); pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate); pthread_mutex_lock(&s->mutex); if (len < 0) { @@ -516,7 +517,7 @@ static void *circular_buffer_task_rx( void *_URLContext) } if (ff_ip_check_source_lists(&addr, &s->filters)) continue; - AV_WL32(s->tmp, len); + AV_WL32(s->tmp_rx, len); if (av_fifo_can_write(s->fifo) < len + 4) { /* No Space left */ @@ -532,7 +533,7 @@ static void *circular_buffer_task_rx( void *_URLContext) goto end; } } - av_fifo_write(s->fifo, s->tmp, len + 4); + av_fifo_write(s->fifo, s->tmp_rx, len + 4); pthread_cond_signal(&s->cond); } @@ -581,9 +582,9 @@ static void *circular_buffer_task_tx( void *_URLContext) len = AV_RL32(tmp); av_assert0(len >= 0); - av_assert0(len <= sizeof(s->tmp)); + av_assert0(len <= sizeof(s->tmp_tx)); - av_fifo_read(s->fifo, s->tmp, len); + av_fifo_read(s->fifo, s->tmp_tx, len); pthread_mutex_unlock(&s->mutex); @@ -607,7 +608,7 @@ static void *circular_buffer_task_tx( void *_URLContext) target_timestamp = start_timestamp + sent_bits * 1000000 / s->bitrate; } - p = s->tmp; + p = s->tmp_tx; while (len) { int ret; av_assert0(len > 0);