From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (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 9F0D5472F9F for ; Fri, 7 Aug 2026 11:42:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786102973; cv=none; b=ksvC7XspvSfOm1wOW5l3/pcnESkMK0lH09gAlQrU1QGcdb3Sm9km6Lx39PDnZnvxZwxvy6OKxh279z0RnsmpEd/4kSg2MNAGamnDFAr9rzpwsJNnra3x/y7LVT+5OuxjcX+ESJrKdRZzQVMWuV8OBdQ3zgLPuMDc1/ikGSsBpQA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786102973; c=relaxed/simple; bh=6vnc70YAJ6OLk1J5alGQJ847XnOiFkHduNWP2sl7tdI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r7/04rLKiMXI6FTl/521HeyAQNbpE5cXOgT4KWJVGw7ue+XXP83LhInjzYHctVC44bjRB9rrj9v/YTOVZVFn5tJiK2aJvrN0fbk/Y+ikSF15XLp/BGhzd1OOpkKLC8SocAAMLbPaQkSukQ/ioe0R+5U96sQB7gATZc/+Z4WJNTE= 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=IDirJw0Q; arc=none smtp.client-ip=209.85.214.174 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="IDirJw0Q" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2cc61541f8cso22182495ad.0 for ; Fri, 07 Aug 2026 04:42:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786102960; x=1786707760; 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=Z1KI6aLTxpK9OyfSdZpf8ALQPnrnsIJtqqHlV920g9A=; b=IDirJw0QVCfsqiJJche1uiEG/btukFbvJiDq7LLpM+wWZQS+a60MZy8op5kd42mRDH G53psNggZsTqLlJFiCvkkVQugVHQcSj/g74lSFgEW+mYh9pS0HRPOWIGGjyBFN2q2J0i jC4ceJYNxUvgRbOAM82cy6HWrCqg+yr4K5W+P9135DXiIRJLR3vgKSSRA/HzNih9K9IP O1eP5XKUmyvsnry8uSfAcMxtYkpKV7WmaEQ8DFfX/5HmGjRrRx06QZigSi2uPgm3uen0 gFbTiYq5K/37xY2E+2gnTK6umQh8Nw3UTnlFs7fn1glvpV+xlcS4prHR/5El+Ri/GG7C bJeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786102960; x=1786707760; 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=Z1KI6aLTxpK9OyfSdZpf8ALQPnrnsIJtqqHlV920g9A=; b=s6to6VVCga3fTK5gXXm19ETFONslPByER2s6O7d0TZDPBGxMCqvhgP6XslbMk1TU4f 0PhtcwLiEL8eJv33lQPsesU6uYbtBq8NwQ1OvOrWeI26D8LcymCgmhSFjbmH9bKt1BSX URqzi15sj7SFjKEpbv/2fHdCTYrzoJHksTSJUPErlWTVfHO93+eL/S+66FEb51t0/xic EvrGHn1onZqRp/+T7Fj2kddXdUZQIDNumPB2LJW0usvB+zFGJQTLQ5Zo6tbiORL5F59D Nt8/4mhjazQtiGKet8CAUER3CeETCV8yFi7Fs3vfRVB7Kh1ahNJy8LSr0NO9UgiUS1kS /onQ== X-Forwarded-Encrypted: i=1; AHgh+RphIpx9yMTdgsbk9RFENJaX8Y9XvyXWEVQ0LB2o0Kn8qvTr9ylFVskD5bsPH5B8XVgMQA7jgHuJr/2BB0c=@vger.kernel.org X-Gm-Message-State: AOJu0YyXNfiiJyLFBu3pEWVxMaxZMAt1obEqL4qD+P+O5VGJNKppP+dU pngG0eZOwmX8wQEDFzIH3wzBr9wJIXK3TI90Fh4I4C3xg5D9qf68EAAF X-Gm-Gg: AR+sD11Hs4RTQuhKG07B8TzaVLxvDCAd7X/Avn/HGT3P+XHMrBxNkmf25G01Rewintv u3rmT4vALkXqNKJz4WkWBiNSLWjppWEK/JSCeqDxrHJu2Oygpp6wMd2bNzMjzwSln57/aPmOhA5 QJGWO/gPCSl9KC2NxpkpFpgj6OlFEPKghHhcT0EtUxCHftEZN8zc0IAQDsQ8QZeBX58QXU20pd+ GNTnvuc7sR0GpkoJE1gA4hKswN1MRhGxxf+i36zLIPh0oVrlYMNU1d6ktinU4uhxuix7vVkXLUR FMGezBiHVgcEeUqyupZoQVk59+Hlmu9TtmGaDn90ZSpnnMth+RVYuKopS7ylNDtTrC0Tsk/ZNsi M5WpoR+6t69aFIkXQXoMtX57bPmse96dz4g265/D/HZaYXoqVRSvEqEvC7OB5YysDj3FRTGJGup ayIdlEqNGqgmc9snYQP7DaBeUTmw7ySnb70O7nKdyzv9q7LoGiC26DTWUg5ZQymfpkcOkaOpSq8 paftY1foq8= X-Received: by 2002:a17:903:3885:b0:2cf:af20:4254 with SMTP id d9443c01a7336-2d0f1c0dc3dmr168401505ad.10.1786102959690; Fri, 07 Aug 2026 04:42:39 -0700 (PDT) Received: from localhost.localdomain ([72.255.58.127]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-315be86d3fcsm6930508eec.4.2026.08.07.04.42.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 04:42:39 -0700 (PDT) From: Mahad Ibrahim To: Takashi Iwai , Jaroslav Kysela Cc: Kees Cook , Andy Shevchenko , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Mahad Ibrahim Subject: [PATCH 7/7] ALSA: usb-audio: replace strlcat() in longname construction Date: Fri, 7 Aug 2026 11:41:39 +0000 Message-ID: <20260807114139.1661-8-mahad.ibrahim.dev@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260807114139.1661-1-mahad.ibrahim.dev@gmail.com> References: <20260807114139.1661-1-mahad.ibrahim.dev@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 card->longname was assembled from a chain of strlcat() calls covering the vendor or manufacturer name, the short name, the USB path and the speed suffix. The return value of one of them was reused as the offset for usb_make_path(). Keep the current length in len and write each piece at that offset, with scnprintf() where a format is involved and strscpy() for the plain speed suffixes. len is taken again after strim(), which shortens the string in place, and again after usb_make_path(), which writes into the buffer directly. Both would otherwise leave the offset pointing at the wrong byte. As in the hiface conversion, len now counts characters written rather than requested, so the bounds check before usb_make_path() is always true; in the truncated case it writes only the NUL terminator that is already there. The strings produced for every combination of vendor, manufacturer, short name and link speed are byte for byte the same as before. Signed-off-by: Mahad Ibrahim --- sound/usb/card.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/sound/usb/card.c b/sound/usb/card.c index 24112e491779..3c15a6862046 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -651,7 +651,7 @@ static void usb_audio_make_longname(struct usb_device *dev, struct snd_card *card = chip->card; const struct usb_audio_device_name *preset; const char *s = NULL; - int len; + int len = 0; preset = lookup_device_name(chip->usb_id); @@ -675,32 +675,39 @@ static void usb_audio_make_longname(struct usb_device *dev, if (*card->longname) { strim(card->longname); + len = strlen(card->longname); if (*card->longname) - strlcat(card->longname, " ", sizeof(card->longname)); + len += scnprintf(card->longname + len, + sizeof(card->longname) - len, " "); } - strlcat(card->longname, card->shortname, sizeof(card->longname)); - - len = strlcat(card->longname, " at ", sizeof(card->longname)); + len += scnprintf(card->longname + len, sizeof(card->longname) - len, + "%s at ", card->shortname); if (len < sizeof(card->longname)) usb_make_path(dev, card->longname + len, sizeof(card->longname) - len); + len = strlen(card->longname); switch (snd_usb_get_speed(dev)) { case USB_SPEED_LOW: - strlcat(card->longname, ", low speed", sizeof(card->longname)); + strscpy(card->longname + len, ", low speed", + sizeof(card->longname) - len); break; case USB_SPEED_FULL: - strlcat(card->longname, ", full speed", sizeof(card->longname)); + strscpy(card->longname + len, ", full speed", + sizeof(card->longname) - len); break; case USB_SPEED_HIGH: - strlcat(card->longname, ", high speed", sizeof(card->longname)); + strscpy(card->longname + len, ", high speed", + sizeof(card->longname) - len); break; case USB_SPEED_SUPER: - strlcat(card->longname, ", super speed", sizeof(card->longname)); + strscpy(card->longname + len, ", super speed", + sizeof(card->longname) - len); break; case USB_SPEED_SUPER_PLUS: - strlcat(card->longname, ", super speed plus", sizeof(card->longname)); + strscpy(card->longname + len, ", super speed plus", + sizeof(card->longname) - len); break; default: break; -- 2.54.0