From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (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 60F0B3750C9 for ; Tue, 7 Jul 2026 15:06:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783436779; cv=none; b=GMYy9lum7j0YM0euNZ10PgVV+KbfRHwy20WOeT7GPI6kOOc0Taysf0Q7k8LvNbHmBWASQ2rRLFtFJrG3faMcg3l5b0sUbf63ut6e3QYUIjDXXWPEVhDs0OnqjeFpbZJnkWIOqL+ZRqUO6p7Udg5zzH4WMaJ4bRQr2q+LL1xz+Co= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783436779; c=relaxed/simple; bh=VJbiLxjuLtw2ZDpVa8oIt+SV6G0E5M2f4Ct6nlFd72E=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=EW3fWKqh6X3ntYV6iWPAKpsTQOQUqnbblUylt7YXgWgoLtxvwfa3/lo8cFHBYCdXueZXk2Aqtjx4Ny7G5BsblPPDfpe0WWSjGVl9cYC27P2cRkbFBsyJd9WTZnfRsXnXIJT3YQwYTd+tsMiJP4ib8IE8eWTKEdB4FUATjsH8NPI= 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=jm9LUGO/; arc=none smtp.client-ip=209.85.215.172 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="jm9LUGO/" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-ca1328b8584so3424021a12.1 for ; Tue, 07 Jul 2026 08:06:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783436778; x=1784041578; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=5SjgDzZeIMTL9X91tZ0pgVIK9jW7UN9flsvre64Izsw=; b=jm9LUGO/aOYdoyZuUTVT4OFmmIAe/mMsjaabEvP+oc4jWWGHZLOsQih9suoXY/lBJC mzCrhhJjLZxJh0/tbwpT8W8UBjFydWkRmo2OPpjLqyle41CEL2vQglVvE4Z9Kzi9dXeR /4oVYjGGmqpfC2iAG5cbUK32iEhUWU2uYRkCsti1WpQExkUOaiHIFF1T/V6Ap4eM/9Bm YcxWOP6ktPfVac9NGX+IQEdEHkuMCnXvsNssVgXFaPEjK5v+tmxAjtDdXwew4d0wG5ai f1TttjebabBn4DdOxh8+8y+ce80dqw6Y/OSlj2Pw6Yjmu8rpgSq1du5+WtFEtDOM8R+J GMOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783436778; x=1784041578; h=content-transfer-encoding:mime-version: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=5SjgDzZeIMTL9X91tZ0pgVIK9jW7UN9flsvre64Izsw=; b=hd/pl58XNdNiowKrSiDxXHGZqTY5o5Ng4TbqVWllJopwwLcTgxI6Lag+FgpOZYBkPl jJXEInLVnCrvE+GDzgfbqZACcsx/avIwlrCag5GIszNB6V+JdbV7g8b9oQvEm+UCp29M oPHVW5zolRT5RmxApEHgmr4512yslnhMe8bkm12MssyQS6XB5xPk/XVdAjtJERXVOAMU 3+mQ2VY0PlRjlMLlmyr6t86lCw4bVkNfMAYCYXeKuZ1wtGjXSBFdrpNrIoTNyjcaEh+K CY74MpyGll3YshWAvzLriEOGpEnvrDnOr7qHz1KypGgqF1/Jc/+pc2R7BoYERNr6Src4 boFw== X-Forwarded-Encrypted: i=1; AHgh+Rpw0AOu+Qo4CteBNQioplHa5JoF+W7iRWF1fZd5tivSpnIVSv58Gy67h5yLIZsd8Hjle3iFXPMPey4+XBc=@vger.kernel.org X-Gm-Message-State: AOJu0YyH/D8lkFkVcau8FBy4PTlyNBYx5DL5A8ejlI+CGgwE7ylZggyF Rkg61oWk2MCBPVO6uNBrkMIl94/Ld0i0BTEbv6ay/XXSASqdQxZQ5J+hfwnfDDGo X-Gm-Gg: AfdE7clMRfL/4DPOiAnQ289u04KTmaKXRKBEacyrqITi3YGsdk6g32rzsvtxFzMm/5K 1VOYkPrNmXws8SiGPS9lti9LAs7jmybITzawiAbieRBbvoCuVv3AukNPS6jukktnaEfArpOga9J NLhrgQAeFK/u4t/KBLDkd8MQ7oy/xjjobVHJXJUQF/PrciCjGwWkyHu6IKCxwVBdpxNas6q38Mj RGeNI2oxmWzLnfdRYytMW41ktpiCUeSv8gIO+7eRhNarEQ2XKOdt7LkusNfDcV8claUHpXfRI5b IpHIZgIHSG0BpkfVqT+7vHsIAiKTYILOclV0A7ZqT3InOKFQWnq/AOp/IWvmxPNYfN8DYpNN9gR vVCOBFiGigjeXP0hqiVzsLqku49rUV9agCOoxxiyocaz5q6T/sUbVN3zo+kbFTW2swNPneoU00I 3hykPWDU4g/x+jXaEjCiT4ITYR15XcHTsm X-Received: by 2002:a05:6a20:9151:b0:3bf:80a5:51b0 with SMTP id adf61e73a8af0-3c08ea3d412mr6462278637.0.1783436777654; Tue, 07 Jul 2026 08:06:17 -0700 (PDT) Received: from haichao.tail057a43.ts.net ([2001:da8:e000:1206:239e:a31b:1d0d:374f]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca5b3162b59sm1116536a12.16.2026.07.07.08.06.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 08:06:17 -0700 (PDT) From: Ruoyu Wang To: hverkuil@kernel.org, mchehab@kernel.org Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ruoyu Wang Subject: [PATCH v3 26/44] media: cec: Serialize exclusive follower delivery Date: Tue, 7 Jul 2026 23:06:12 +0800 Message-ID: <20260707150612.2276688-1-ruoyuw560@gmail.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit cec_receive_notify() read the exclusive follower pointer without the adapter lock. Serialize the no-follower check and message delivery against mode changes and release. Signed-off-by: Ruoyu Wang --- drivers/media/cec/core/cec-adap.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/media/cec/core/cec-adap.c b/drivers/media/cec/core/cec-adap.c index a90cb84a4b4d0..b616ed382c0e7 100644 --- a/drivers/media/cec/core/cec-adap.c +++ b/drivers/media/cec/core/cec-adap.c @@ -2219,9 +2219,13 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg, * Unprocessed messages are aborted if userspace isn't doing * any processing either. */ + mutex_lock(&adap->lock); if (!is_broadcast && !is_reply && !adap->follower_cnt && - !adap->cec_follower && msg->msg[1] != CEC_MSG_FEATURE_ABORT) + !adap->cec_follower && msg->msg[1] != CEC_MSG_FEATURE_ABORT) { + mutex_unlock(&adap->lock); return cec_feature_abort(adap, msg); + } + mutex_unlock(&adap->lock); break; } @@ -2234,10 +2238,12 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg, * Send to the exclusive follower if there is one, otherwise send * to all followers. */ + mutex_lock(&adap->lock); if (adap->cec_follower) cec_queue_msg_fh(adap->cec_follower, msg); else cec_queue_msg_followers(adap, msg); + mutex_unlock(&adap->lock); return 0; }