From nobody Mon May 5 03:14:32 2025 Received: from out-181.mta1.migadu.com (out-181.mta1.migadu.com [95.215.58.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA08323718F for <linux-kernel@vger.kernel.org>; Wed, 2 Apr 2025 11:58:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743595109; cv=none; b=JdXisW4ytDCDdondU30N3cMcw0hy7IGsEPUHSBWWZmSxGYBl+Vwq7CKVBG/74nSycok14u/EVJMWwEPiiQ6YcyGb01l3a8zUolJbhRLrViadmnv6mypJ5gdOeCQuOuI7PmX6FkzV1WlOe7ga00YRx0SEinF0o3dJXZPISzlNcEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743595109; c=relaxed/simple; bh=pZPdCTaoWC1/7dFCjd2O1sOG2cCN+FGVNvy3q8/ObVE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=N5odPiycwjz4GIHtW0VSNzzsJZJYB3vR6AblIEKCw7FjZws9npkbM+ZRXXxM8agRzDLB3HIuw+js18ntDslZQ6mYwM+n7QEPw1gcc8GBEoikFFylhp4SEYltrt7QIdjIZ3KEYeHNQTxwYbRZbceb1bF/E+hpd6zGIHvfCB3+Ifc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=D/Q9sGRM; arc=none smtp.client-ip=95.215.58.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="D/Q9sGRM" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1743595104; 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=U6s5Q93fZJsXAS6nby2Y8nIyT8Bor7D/QRKLwNJnvT0=; b=D/Q9sGRM1jql8E7+oRkENiw36/pF+FpK3DLPJ11tTn+gNjvCZAIY90YYYJaDd/0c0TI4qL fsjcAjp+0NRy2ndD2ZQuZNhm6TtUql6L2b/xnyg7pOnxs1jgoxj2gmj9LfUHMs6tmNHDxc wyo8OpSY0oJrnZiSAo8d/KEAN8uQhZI= From: Thorsten Blum <thorsten.blum@linux.dev> To: Viresh Kumar <vireshk@kernel.org>, Johan Hovold <johan@kernel.org>, Alex Elder <elder@kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Thorsten Blum <thorsten.blum@linux.dev>, greybus-dev@lists.linaro.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2] staging: greybus: Check for string truncation instead of NUL-termination Date: Wed, 2 Apr 2025 13:57:54 +0200 Message-ID: <20250402115755.1929043-1-thorsten.blum@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Commit 18f44de63f88 ("staging: greybus: change strncpy() to strscpy_pad()") didn't remove the now unnecessary NUL-termination checks. Unlike strncpy(), strscpy_pad() guarantees that the destination buffer is NUL-terminated, making these checks obsolete. Remove them and check for string truncation instead. Compile-tested only. Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev> --- Changes in v2: - Check the return value of strscpy_pad() for string truncation instead of NUL-termination as suggested by Alex Elder - Link to v1: https://lore.kernel.org/r/20250331183935.1880097-2-thorsten.b= lum@linux.dev/ --- drivers/staging/greybus/fw-management.c | 48 +++++++++---------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/drivers/staging/greybus/fw-management.c b/drivers/staging/grey= bus/fw-management.c index a47385175582..152949c23d65 100644 --- a/drivers/staging/greybus/fw-management.c +++ b/drivers/staging/greybus/fw-management.c @@ -123,17 +123,11 @@ static int fw_mgmt_interface_fw_version_operation(str= uct fw_mgmt *fw_mgmt, fw_info->major =3D le16_to_cpu(response.major); fw_info->minor =3D le16_to_cpu(response.minor); =20 - strscpy_pad(fw_info->firmware_tag, response.firmware_tag); - - /* - * The firmware-tag should be NULL terminated, otherwise throw error but - * don't fail. - */ - if (fw_info->firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] !=3D '\0') { + ret =3D strscpy_pad(fw_info->firmware_tag, response.firmware_tag); + if (ret =3D=3D -E2BIG) dev_err(fw_mgmt->parent, - "fw-version: firmware-tag is not NULL terminated\n"); - fw_info->firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] =3D '\0'; - } + "fw-version: truncated firmware tag: %s\n", + fw_info->firmware_tag); =20 return 0; } @@ -152,14 +146,12 @@ static int fw_mgmt_load_and_validate_operation(struct= fw_mgmt *fw_mgmt, } =20 request.load_method =3D load_method; - strscpy_pad(request.firmware_tag, tag); =20 - /* - * The firmware-tag should be NULL terminated, otherwise throw error and - * fail. - */ - if (request.firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] !=3D '\0') { - dev_err(fw_mgmt->parent, "load-and-validate: firmware-tag is not NULL te= rminated\n"); + ret =3D strscpy_pad(request.firmware_tag, tag); + if (ret =3D=3D -E2BIG) { + dev_err(fw_mgmt->parent, + "load-and-validate: truncated firmware tag: %s\n", + request.firmware_tag); return -EINVAL; } =20 @@ -248,14 +240,11 @@ static int fw_mgmt_backend_fw_version_operation(struc= t fw_mgmt *fw_mgmt, struct gb_fw_mgmt_backend_fw_version_response response; int ret; =20 - strscpy_pad(request.firmware_tag, fw_info->firmware_tag); - - /* - * The firmware-tag should be NULL terminated, otherwise throw error and - * fail. - */ - if (request.firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] !=3D '\0') { - dev_err(fw_mgmt->parent, "backend-version: firmware-tag is not NULL term= inated\n"); + ret =3D strscpy_pad(request.firmware_tag, fw_info->firmware_tag); + if (ret =3D=3D -E2BIG) { + dev_err(fw_mgmt->parent, + "backend-fw-version: truncated firmware tag: %s\n", + request.firmware_tag); return -EINVAL; } =20 @@ -302,13 +291,10 @@ static int fw_mgmt_backend_fw_update_operation(struct= fw_mgmt *fw_mgmt, int ret; =20 ret =3D strscpy_pad(request.firmware_tag, tag); - - /* - * The firmware-tag should be NULL terminated, otherwise throw error and - * fail. - */ if (ret =3D=3D -E2BIG) { - dev_err(fw_mgmt->parent, "backend-update: firmware-tag is not NULL termi= nated\n"); + dev_err(fw_mgmt->parent, + "backend-fw-update: truncated firmware tag: %s\n", + request.firmware_tag); return -EINVAL; } =20 --=20 2.49.0