From: Kees Cook <keescook@chromium.org>
To: Justin Stitt <justinstitt@google.com>
Cc: Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-hardening@vger.kernel.org
Subject: Re: [PATCH] soc: qcom: cmd-db: replace deprecated strncpy with memcpy
Date: Mon, 18 Mar 2024 14:52:20 -0700 [thread overview]
Message-ID: <202403181443.F4021C9F63@keescook> (raw)
In-Reply-To: <20240314-strncpy-drivers-soc-qcom-cmd-db-c-v1-1-70f5d5e70732@google.com>
On Thu, Mar 14, 2024 at 10:29:37PM +0000, Justin Stitt wrote:
> strncpy() is deprecated for use on NUL-terminated destination strings
> [1] and as such we should prefer more robust and less ambiguous string
> interfaces.
>
> @query is already marked as __nonstring and doesn't need to be
> NUL-terminated. Due to this, we don't need to use a string API here
> (especially a deprecated one). Let's have our stack allocation also
> zero-initialize so that we can just perform a standard memcpy. Since the
> code now speaks for itself we can drop the comment. A memcpy on a
> __nonstring buffer explains everything that this comment talks about.
>
> Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
> Link: https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html [2]
> Link: https://github.com/KSPP/linux/issues/90
> Cc: linux-hardening@vger.kernel.org
> Signed-off-by: Justin Stitt <justinstitt@google.com>
> ---
> Note: build-tested only.
>
> Found with: $ rg "strncpy\("
> ---
> drivers/soc/qcom/cmd-db.c | 9 ++-------
> 1 file changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/soc/qcom/cmd-db.c b/drivers/soc/qcom/cmd-db.c
> index a5fd68411bed..512556366a3e 100644
> --- a/drivers/soc/qcom/cmd-db.c
> +++ b/drivers/soc/qcom/cmd-db.c
> @@ -141,18 +141,13 @@ static int cmd_db_get_header(const char *id, const struct entry_header **eh,
> const struct rsc_hdr *rsc_hdr;
> const struct entry_header *ent;
> int ret, i, j;
> - u8 query[sizeof(ent->id)] __nonstring;
> + u8 query[sizeof(ent->id)] __nonstring = { 0 };
>
> ret = cmd_db_ready();
> if (ret)
> return ret;
>
> - /*
> - * Pad out query string to same length as in DB. NOTE: the output
> - * query string is not necessarily '\0' terminated if it bumps up
> - * against the max size. That's OK and expected.
> - */
> - strncpy(query, id, sizeof(query));
> + memcpy(query, id, sizeof(query));
Hm, no, this isn't right. We do want to stop copying at the first NUL
character, but we don't care about truncation. e.g. imagine if "id" was
a 3 character string followed by other bytes in memory. We'd copy beyond
the end of "id" into query, and the later memcmp()s would start failing.
I think what you want here is:
strtomem(query, id);
-Kees
>
> for (i = 0; i < MAX_SLV_ID; i++) {
> rsc_hdr = &cmd_db_header->header[i];
>
> ---
> base-commit: fe46a7dd189e25604716c03576d05ac8a5209743
> change-id: 20240314-strncpy-drivers-soc-qcom-cmd-db-c-284f3abaabb8
>
> Best regards,
> --
> Justin Stitt <justinstitt@google.com>
>
>
--
Kees Cook
next prev parent reply other threads:[~2024-03-18 21:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-14 22:29 [PATCH] soc: qcom: cmd-db: replace deprecated strncpy with memcpy Justin Stitt
2024-03-18 21:52 ` Kees Cook [this message]
2024-03-18 22:47 ` Justin Stitt
2024-03-18 23:49 ` Kees Cook
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202403181443.F4021C9F63@keescook \
--to=keescook@chromium.org \
--cc=andersson@kernel.org \
--cc=justinstitt@google.com \
--cc=konrad.dybcio@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.