From: Heiko Carstens <hca@linux.ibm.com>
To: Kees Cook <kees@kernel.org>
Cc: Josephine Pfeiffer <hi@josie.lol>,
Vasily Gorbik <gor@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-hardening@vger.kernel.org
Subject: Re: [PATCH] s390/sysinfo: Replace sprintf with snprintf for buffer safety
Date: Thu, 2 Oct 2025 19:47:27 +0200 [thread overview]
Message-ID: <20251002174727.12242Ae2-hca@linux.ibm.com> (raw)
In-Reply-To: <202510020942.9BBB100C6@keescook>
On Thu, Oct 02, 2025 at 10:20:35AM -0700, Kees Cook wrote:
> On Thu, Oct 02, 2025 at 09:48:21AM +0200, Heiko Carstens wrote:
> > On Wed, Oct 01, 2025 at 07:41:04PM +0200, Josephine Pfeiffer wrote:
> > > - sprintf(link_to, "15_1_%d", topology_mnest_limit());
> > > + snprintf(link_to, sizeof(link_to), "15_1_%d", topology_mnest_limit());
> >
> > [Adding Kees]
> >
> > I don't think that patches like this will make the world a better
>
> topology_mnest_limit() returns u8, so length will never be >3, so the
> link_to is already sized to the max possible needed size. In this case
> the existing code is provably _currently_ safe. If the return type of
> topology_mnest_limit() ever changed, though, it would be a problem. For
> that reason, I would argue that in the interests of defensiveness, the
> change is good. For more discoverable robustness, you could write it as:
>
> WARN_ON(snprintf(link_to, sizeof(link_to), "15_1_%d",
> topology_mnest_limit()) >= sizeof(link_to))
>
> But that starts to get pretty ugly.
If you take the context into account: the returned value of
topology_mnest_limit() cannot be larger than 6, but that's
not obvious for anybody not familiar with the code.
So taking your feedback into account I guess I will apply
this and similar patches, even though it seems to be quite
pointless. :)
> Yeah, it should be possible. I actually thought CONFIG_FORTIFY_SOURCE
> already covered sprintf, but it doesn't yet. Totally untested, and
> requires renaming the existing sprintf to __sprintf:
>
> #define sprintf(dst, fmt...) \
> __builtin_choose_expr(__is_array(dst), \
> snprintf(dst, sizeof(dst), fmt), \
> __sprintf(dst, fmt))
>
> The return values between sprintf and snprintf should be the same,
> though there is a potential behavioral difference in that dst contents
> will be terminated now, so any "silent" overflows that happened to work
> before (e.g. writing the \0 just past the end of a buffer into padding)
> will suddenly change. Making this kind of global change could lead to a
> number of hard-to-find bugs.
Ok, agreed, there is all kind of odd code around, so it is probably not a
good idea to do such a global change.
> tl;dr: I think it's worth switching to snprintf (or scnprintf) where
> possible to make an explicit choice about what the destination buffer
> is expected to contain in the case of an overflow. Using sprintf leaves
> it potentially ambiguous.
Thank you for taking the time to look into this!
prev parent reply other threads:[~2025-10-02 17:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-01 17:41 [PATCH] s390/sysinfo: Replace sprintf with snprintf for buffer safety Josephine Pfeiffer
2025-10-02 7:48 ` Heiko Carstens
2025-10-02 17:20 ` Kees Cook
2025-10-02 17:47 ` Heiko Carstens [this message]
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=20251002174727.12242Ae2-hca@linux.ibm.com \
--to=hca@linux.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hi@josie.lol \
--cc=kees@kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=svens@linux.ibm.com \
/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.