From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (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 79B5678F3A for ; Mon, 13 Jul 2026 07:15:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783926952; cv=none; b=l/j0FZtkJc3H2JW9hQqODf62A8X7QdGXigKvapu2vIJyc5t0AkdRcDUkXMTMh8iItqv5dyWeaZrSRRvMPpYVD9mUXmDdKxMFYW0pycHMXmkv65c3oaMDotNYbAwP2rA91bDI4XVlhJSu0evlY0dzfPKUPUfgIooHWbCPL8s/c5E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783926952; c=relaxed/simple; bh=hAKGgd+eyWYsOVmA8tKCv7sB4BvxPMg7Y969IvjkRiM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=NeG7MufM77o/95cxtHs7VqgNomeJTw82xXEUtHZEcI0G0wj8HRMb+ZbVyQGfFQhZpEXF5em6oY21vDyiyEesvEiTCWSAF68wL86HsfrWmSFbaXlPS0OQPmERMun4xEb5dRuV4xKVz/U2ChNmpA3ysftge7NTeWekuYSBVtDy5IE= 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=hT9aSInO; arc=none smtp.client-ip=209.85.214.178 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="hT9aSInO" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2c6b67d5fa1so44197105ad.2 for ; Mon, 13 Jul 2026 00:15:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783926951; x=1784531751; 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=81rPNZTdUEVTmG3i5/CNvXVNSIlUq1klAsjkynHXubM=; b=hT9aSInOLIDhcMG9qPsLCjPzW3Oc2ZYXno6bf7yhbeg5aye07jZ5xI6RMCoIhwyVdM w07a0WfZm/BeAJWLMG1OaLG9iD9vBptBYHDChVz8htj3WkbKj0wApfCMe8+t0s29dBHS qjmvbP2IIfc/40GkX+bjIFtRwuETh2eYCepoJp2sxY9M/SgJXRR1eQYgzr4RVGGCAneH seWLGz1JAYrC7RxYRoXTlTtXaKsbiXolavIM8hvfziCGuIY5WR2BONsxCuUWOZRIsXo/ fG335oBpPD07isCtYPLq+vkc2AwJfBUFBgLvQ1k0rjhZk2KQGxdhFB6DD2W4q6KgZtmL iBMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783926951; x=1784531751; 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=81rPNZTdUEVTmG3i5/CNvXVNSIlUq1klAsjkynHXubM=; b=DlqHn7BpPe+24dtv/VvVLVN33YuERc9NwEH0IDVjJrtqXwsvP0jRUfbOZJa5q+H8Jr 5ZAbhLz8cl2IJ46T9JM7H1j8brrRB+54W4+ltcPBRgm1c7gLwu4ft8KfNZfQ/X03emEi rV2FP9rNu+LW3L6Z0gtwssPUUvhxm5msdijuS0Umxcmp21gkJk+kgPDLTPz2cNEERc3K i6W3Pnq1e/ETg2kAZAmFjtDUM0MrWjL6B1+xEyMWPClPaZ5z2BasWFym00GXix9oqx27 1wiMjXvlsICaUeOp+B1zvmr83wLqTIncwNB4s80pvbqkKwQbqLu9QO0Rf4h/8qxmWXWz KCRA== X-Forwarded-Encrypted: i=1; AHgh+Rrt5cNkNdh4fWvJuyt4XyBAcqg8E4Uxt2AopCCZrZ5WgIQX6aSWIkx2/JeF85stYGnB7AoyHNeu6w59XMc=@vger.kernel.org X-Gm-Message-State: AOJu0YzxuXQiPWiKmh4o96Ri0AmHwzpFvSnujMkw2AOUttvfbmg9M5Ms r5+Jd9kbZIMaP7k8wUkfYoE/tFNZyMBiqezwh95RxLhcZdk4gtGqRkaf X-Gm-Gg: AfdE7cm209WoDpTemLXGkSxM+UWQ/Z42T0g0VfOncaguOrYZ/I3kCRbcA2HjcIXaUs8 n2Cs3Ym9sILKh2RdpiMy0C5s18HAbSdCS4ZYPLFdPIkMiL70uM6t3gNIwWa/kbNghSInqOqPXbn C45/rbc8/tV3jICDoUT0iG190BF8QduWuMU391iUZiiSaF1ne0mY99GQpMlvCzMygarwJs61ZgC JO+/MBU9DbMCq8owI5nMjp2TOTSCSIEU4qB1kTxcuSWD0FVE7691QXkL0RnZl9igRmMWQrAThNX hXhkbK2Cb8QNb3YUwcwydx813RL2stztiO7X152z3giQSnaOPZW2MfB0c8sOuAwPjV3g9vtMmqy hm2c+huYhECvF7URHF+N0PpBXxTOV1jP6Zjx8Wm5DPF1NgT3LIB4mfGVolJknI+TVMT4CZO46yh Yc2eLhaEvyFAi+K2vxwH8LpuuP0gfbV8XuDVYtJF4dOPEAzcz3jmIUgP3/aTOKsEco X-Received: by 2002:a17:903:fab:b0:2ce:8551:318c with SMTP id d9443c01a7336-2ce9f160242mr72965685ad.40.1783926950831; Mon, 13 Jul 2026 00:15:50 -0700 (PDT) Received: from localhost.localdomain ([2409:8a60:5a63:5c40:25d1:91b:1b22:c7d2]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ccc9d3d2efsm94055435ad.64.2026.07.13.00.15.47 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 13 Jul 2026 00:15:49 -0700 (PDT) From: Eric Wu To: Vinod Koul , Bard Liao Cc: Pierre-Louis Bossart , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Eric Wu Subject: [PATCH] soundwire: stream: validate slave port against DisCo port bitmap Date: Mon, 13 Jul 2026 15:15:44 +0800 Message-ID: <20260713071544.35722-1-kunjinkao.jp@gmail.com> X-Mailer: git-send-email 2.48.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 sdw_slave_port_config() checks that the port number falls in the generic valid range, but never checks whether the Slave actually exposes that port for the requested direction. An in-range but unsupported port number (or the right port with the wrong direction) gets accepted without complaint. sdw_get_slave_dpn_prop() already does this lookup against the source_ports/sink_ports bitmaps for other purposes, so reuse it here instead of open-coding a new check. Slaves that don't report source_ports/sink_ports at all (both zero) are left unchecked, since that's treated elsewhere in the driver as "property not provided" rather than "no ports supported". Signed-off-by: Eric Wu --- Only compile-tested: x86_64 gcc, arm64 and arm32 clang (LLVM=1), all clean with W=1. I do not have SoundWire hardware to test with. drivers/soundwire/stream.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c index 4ed8fb7663ad..30cb8a8552d8 100644 --- a/drivers/soundwire/stream.c +++ b/drivers/soundwire/stream.c @@ -1054,14 +1054,23 @@ static int sdw_slave_port_config(struct sdw_slave *slave, i = 0; list_for_each_entry(p_rt, &s_rt->port_list, port_node) { - /* - * TODO: Check valid port range as defined by DisCo/ - * slave - */ if (!is_bpt_stream) { ret = sdw_slave_port_is_valid_range(&slave->dev, port_config[i].num); if (ret < 0) return ret; + + /* + * source_ports/sink_ports are optional DisCo properties: + * both zero means "not provided" rather than "no ports", + * so only enforce the check when the Slave reports them. + */ + if ((slave->prop.source_ports || slave->prop.sink_ports) && + !sdw_get_slave_dpn_prop(slave, s_rt->direction, port_config[i].num)) { + dev_err(&slave->dev, "port %d not supported for %s\n", + port_config[i].num, + s_rt->direction == SDW_DATA_DIR_TX ? "TX" : "RX"); + return -EINVAL; + } } else if (port_config[i].num) { return -EINVAL; } -- 2.25.1