From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE1E7378839 for ; Sun, 9 Aug 2026 05:13:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786252403; cv=none; b=ZerZMVJpU1dfumpcsIvCYl9L+G55PZ5lvcPKkhG7lgiyum3R9C0GftdJeNdQpdaGcB4PqkVi20HRlyemEcS45fzbQRItAUNUirZTB4GZPaoetl22dbcAn+eQbMJPdaSxGe6jaf68k8F94pGA3yoaA4kMCLnLIEobrTiM4FS5ttM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786252403; c=relaxed/simple; bh=CdRaoqrf4mitwqnuTmZg9JiSXp90MrPDsPBYyNFz4iQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fft8dZpGL4/Jk+kGq8JbwCjCBumKazxGSTph0QZrpqtL99g3JWFjZET9CwurJzdQJPZ7p7Lnblg8JPO8ONHtQXz7uPYvDjsPG7B2Yax4TVe83JuLFzWYghtZvQvhHhPT5hHRIrBsfCZuOUXYwW7nrRWG7EP+GarKwY4qiB084qw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JdXCmKdJ; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JdXCmKdJ" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2cace91f112so7880995ad.0 for ; Sat, 08 Aug 2026 22:13:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786252401; x=1786857201; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Mqhs7Zhem08+gKWpC13qqFjQ+/RUK8tqoU89vwfPtBM=; b=JdXCmKdJBhODRHiK/VUfoP+okcYnVMAyPfLHlD5cSx1AdJVM8/up/C1iNnuorzkoWE C9JDERpRlbkuVJQgPAINqEeH1p4n6ck/1+pepMcTiebtCxQqkemU8iboHYC4F2nJ3nE6 JtbPsnsGJPjQZC7hJpeU9HUNyiLeVhZYSI/7WNJc5JQq+Sd3rRBBwmpYu8HGl8kZ0fTy nn+xAky1oi1tCUOZkaebwSgEtA1tdIVLUJsU3NNLPMZwCIa1lKbXpqDNmBeIGFiZl8Ao OT/c53NC1Nn374zvFa3/HysNE5ccV8LsPtX5xlr7/GbcIAcLJL3Rjn99iukR1uNE2x8N u1Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786252401; x=1786857201; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Mqhs7Zhem08+gKWpC13qqFjQ+/RUK8tqoU89vwfPtBM=; b=r4iTRqfM3JvgrKp2XXviZ+GjnDiNKZHRHw15o8NNTKFZy9qTQjEVXnDe8MRb8MZCAJ ruYFi4uN9VIxqU+iXHdm4Dr3f+ipepBdUP14/vozSBhKIeJSuxM+pyq7IOWEJ8ThF79w odQYkzMaIcOkbRthKDVR9bBkipqpO1zITzQGhIUtBc2XOkm0hRQwODfJpwyPLysc8ItR 3IOOnD0a19cb7AJ3bAcurEKdRY+yh3WNgaAnTADGWyjjli2n+vYU5TAskMqW81d4bqLc KrD6ceQwyhQeszvsbPR8qpAvFjKr5p1hSTQIwnLT3R4vO6C1pSxJaJngYMjwdCaFC/EM ekCw== X-Forwarded-Encrypted: i=1; AHgh+Rp88W44tJ3WTokE58ydQ06jHD3LJXLDPtzMpf/FIClooJZEmz8HZmbBpEWRY7PapuhJJQSa0M/yGOZpLNY=@vger.kernel.org X-Gm-Message-State: AOJu0YwUPUtBvHLgfXFh8vgThfan27w+OtK2fHaPkq08qylhMaluU6ig 6oHkKUVc0HoerYeTgoAxGAGySUYE7aoNueVkbCv400Xp0p0X7MsfabVi X-Gm-Gg: AR+sD13E5xt2uqCzfADZAgeNxvMeeJBUyQINc/uRzKmek8tDitysIvEbeIb5/yb8eBm 9jlXomQy6jJvi3HcOAWcTBGqcnYHgdEhGfjXGZMWU9xyVnJCV+tFCUAp3bjkiepndTVMSrAOzDU e/G3vV0iKYeb5GUr3TyB/Tll/+/Br42METVeQ90+faDGP7RNjnqWAtu6KWaeHjQSRMb3RWZjtjs XHusB1FNVWHnwHICTfxFmKPFgge1w3P31V1IduWbTOdRlcIuUezDdA986OlqJ70py0GXiWfiizP NlMhK5bXSsESvrs+bUFPrlO6APIXfX69ipkJfN9xyoZA/4Qg25GLma9Chr1KLAGYXiSGh5SvPAo 7t7e/9o/Up+Qjsow2OLKKcT9VCU3OniWvqYxUSNdrkYSw5kmMP3gpI5qCgsmYBYrRriAW+CwRB4 WFmZofD0SAI/58VSeVQKrvg3769JBzGkyXFC24QJFImqAACPFeoh6SJE5P5b6qO0paFRsI7dH9a Pc9FIohNmW7PzP7GMsrRa8= X-Received: by 2002:a05:6a20:9e0e:b0:3c3:66c5:68cc with SMTP id adf61e73a8af0-3cb85efa4f9mr43331123637.21.1786252401232; Sat, 08 Aug 2026 22:13:21 -0700 (PDT) Received: from localhost.localdomain ([103.178.204.108]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-315be8a7395sm27095702eec.9.2026.08.08.22.13.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Aug 2026 22:13:20 -0700 (PDT) From: Sreeraj S Kurup To: alexander.deucher@amd.com, christian.koenig@amd.com Cc: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, airlied@gmail.com, simona@ffwll.ch, Sreeraj S Kurup Subject: [PATCH v3 3/6] drm/amdgpu/aca: Fix inverted validation logic and list cleanup Date: Sun, 9 Aug 2026 05:11:57 +0000 Message-ID: <20260809051200.3276-4-sreekuttan2156239@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260809051200.3276-1-sreekuttan2156239@gmail.com> References: <20260809051200.3276-1-sreekuttan2156239@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit aca_handle_is_valid() returned false if !list_empty(&handle->node) evaluated to true. Because active registered handles have non-empty nodes in the handle list, valid handles evaluated as invalid. Consequently, amdgpu_aca_get_error_data() returned -EOPNOTSUPP whenever aca_handle_is_valid() evaluated to true. Fix the logic in aca_handle_is_valid() to verify that the handle is non-NULL, contains a valid mask, and is currently registered in the list. Update amdgpu_aca_get_error_data() to check for invalid handles and return 0 instead of -EOPNOTSUPP so non-ACA blocks in global RAS queries pass through safely without breaking error telemetry. Additionally, update remove_aca_handle() to use list_del_init() instead of list_del(). Standard list_del() leaves node pointers poisoned, which causes !list_empty() in aca_handle_is_valid() to evaluate to true for removed handles, leading to a potential use-after-free during device teardown. Signed-off-by: Sreeraj S Kurup --- drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c index c76664af9902..06cb3ad1ce62 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c @@ -586,10 +586,7 @@ static int __aca_get_error_data(struct amdgpu_device *adev, struct aca_handle *h static bool aca_handle_is_valid(struct aca_handle *handle) { - if (!handle->mask || !list_empty(&handle->node)) - return false; - - return true; + return handle && handle->mask && !list_empty(&handle->node); } int amdgpu_aca_get_error_data(struct amdgpu_device *adev, struct aca_handle *handle, @@ -599,8 +596,8 @@ int amdgpu_aca_get_error_data(struct amdgpu_device *adev, struct aca_handle *han if (!handle || !err_data) return -EINVAL; - if (aca_handle_is_valid(handle)) - return -EOPNOTSUPP; + if (!aca_handle_is_valid(handle)) + return 0; if ((type < 0) || (!(BIT(type) & handle->mask))) return 0; @@ -717,7 +714,7 @@ static void remove_aca_handle(struct aca_handle *handle) struct aca_handle_manager *mgr = handle->mgr; aca_fini_error_cache(handle); - list_del(&handle->node); + list_del_init(&handle->node); mgr->nr_handles--; } -- 2.54.0