From patchwork Sun Dec 3 20:10:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timo Rothenpieler X-Patchwork-Id: 44891 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a301:b0:181:818d:5e7f with SMTP id x1csp2390933pzk; Sun, 3 Dec 2023 12:10:48 -0800 (PST) X-Google-Smtp-Source: AGHT+IHLGZPYMoKlEBAlud5xv24bh/amdSZKf3+rEyHJU7UH8yWBXiriL6/2yDcW7OjTLRP/wfca X-Received: by 2002:a17:906:6955:b0:a00:893f:58cf with SMTP id c21-20020a170906695500b00a00893f58cfmr2572128ejs.54.1701634247801; Sun, 03 Dec 2023 12:10:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701634247; cv=none; d=google.com; s=arc-20160816; b=Jjipd1jlDI8K256C3eN29RfqHD8JULHkEslIkeLih4vDnSHnXEItSbC7T1jOtWO0Eo VNjlSqRiEViBfR2uKLjvVOPCZdeVvc+wKGwFS7LhKDeL0KPWOyeQSEZGxwt2yLqLvdUh Q8Bw520r/owqkv3/BjNOScHBdVx+lrTV584Jz5mKgtjAQ+wHYyN4to6OLrQkl1gwdLh+ JREp0W1tU9KPVxNHj8+dKAolbYMucdXBIGK6MwgfnATyoyt4qOjpTeZDFCLW6QjJo94i 3uHZGCTGGqZqKYf7UTrfPx8+yxdr14J5sf6JuR1uIeMkR1Q6TzlJzrhIv29QkBKr2UOL r8VA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=6eAoVTQVzuG27WCacq+Npx30OHFVAelIJM6i0LJCUes=; fh=LnlYe9qYwgML7nWWXqAumr7YCmPjjpEPjQf6GasgJC0=; b=x+lD7eHjlYooU4XdrV9j4wUnUP/vl7UdOZronGszGN0F6OfQdGCd1H+rMzJcBCT17o avAFq1I474X/qwK4zFEWl6SIW6rYgRJj7NJKpnX4kLEy7o+dGoTrcPQg46fx8eC3t1Pi QwLcXeJCedNShZD8P4PaARtODsWX0f0K85N0dzrjB4y/22wOyAzr4+w1qp+1s4yYlKTD ET3EOZuSGGh9NP87yLY5bsPBv8POMREB3VAlEeOFnL1xCGuOnoDYpwDR/S8fA/f0gFg2 yqjrNWHtTdI5lpS5asGxK/S1Y4c1XfBlD+/dlFWPIexVYfdPmS9UU94y1GKzaEeUzaw3 Rozg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rothenpieler.org header.s=mail header.b=WB9RIH8x; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=rothenpieler.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a19-20020a170906685300b00a1853c7d08dsi3863585ejs.484.2023.12.03.12.10.47; Sun, 03 Dec 2023 12:10:47 -0800 (PST) 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=@rothenpieler.org header.s=mail header.b=WB9RIH8x; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=rothenpieler.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A097968C66D; Sun, 3 Dec 2023 22:10:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from btbn.de (btbn.de [136.243.74.85]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2633368C66D for ; Sun, 3 Dec 2023 22:10:37 +0200 (EET) Received: from [authenticated] by btbn.de (Postfix) with ESMTPSA id E642D444EAB; Sun, 3 Dec 2023 21:10:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rothenpieler.org; s=mail; t=1701634236; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=XXTH4X1ZCDi7h1VxE/VgypB4szIXK79musXLK/VgTmg=; b=WB9RIH8xJXVBXR8XrQgPqjfA3QszUm1llCqw5gbdNY9+uSIHTbubLyfMdNtl/LvsjOh17t wemYjIeRpIczjhsN7pjzmb9Jvm7JekoUY/pmVEAbNcyGf6DPMAyv/D6K1uYmqnU7rEIYQ7 Byb/tjZvXiGGhm5/GUg9X9brhzrZ9HhqN7zdgKJRbvZnSI1mjBxALuE+2PpaEwOGsds10G +AwFvWLn13dkikRzR9vbA7hb92PQj3+vL3rSPy1q0Vgkdiy3XQ+25msYyEB6crIBHhQ1tS q2AEBtZrVCh6XxGzbzCDr0GX8onO8Bwp1FDTNwVThzrLfDyieDX1laTha0YTTw== From: Timo Rothenpieler To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Dec 2023 21:10:27 +0100 Message-Id: <20231203201027.2255-1-timo@rothenpieler.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avutil/mem: always align by at least 32 bytes 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 Cc: Timo Rothenpieler Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: puf0yDIqFZiS FFmpeg has instances of DECLARE_ALIGNED(32, ...) in a lot of structs, which then end up heap-allocated. By declaring any variable in a struct, or tree of structs, to be 32 byte aligned, it allows the compiler to safely assume the entire struct itself is also 32 byte aligned. This might make the compiler emit code which straight up crashes or misbehaves in other ways, and at least in one instances is now documented to actually do (see ticket 10549 on trac). The issue there is that an unrelated variable in SingleChannelElement is declared to have an alignment of 32 bytes. So if the compiler does a copy in decode_cpe() with avx instructions, but ffmpeg is built with --disable-avx, this results in a crash, since the memory is only 16 byte aligned. Mind you, even if the compiler does not emit avx instructions, the code is still invalid and could misbehave. It just happens not to. Declaring any variable in a struct with a 32 byte alignment promises 32 byte alignment of the whole struct to the compiler. Instead of now going through all instances of variables in structs being declared as 32 byte aligned, this patch bumps the minimum alignment to 32 bytes. --- libavutil/mem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavutil/mem.c b/libavutil/mem.c index 36b8940a0c..26a9b9753b 100644 --- a/libavutil/mem.c +++ b/libavutil/mem.c @@ -62,7 +62,7 @@ void free(void *ptr); #endif /* MALLOC_PREFIX */ -#define ALIGN (HAVE_AVX512 ? 64 : (HAVE_AVX ? 32 : 16)) +#define ALIGN (HAVE_AVX512 ? 64 : 32) /* NOTE: if you want to override these functions with your own * implementations (not recommended) you have to link libav* as