From: Peter Maydell <peter.maydell@linaro.org>
To: Bernhard Beschow <shentey@gmail.com>
Cc: qemu-devel@nongnu.org, Jason Wang <jasowang@redhat.com>,
Stefan Weil <sw@weilnetz.de>
Subject: Re: [PATCH] net/tap-win32: Fix gcc 14 format truncation errors
Date: Mon, 7 Oct 2024 11:36:59 +0100 [thread overview]
Message-ID: <CAFEAcA-d0jcDiJASmvS5S2jWUijUGuk5Vu7QT8wrD+HKUgEJqQ@mail.gmail.com> (raw)
In-Reply-To: <20241007101313.3900-1-shentey@gmail.com>
On Mon, 7 Oct 2024 at 11:14, Bernhard Beschow <shentey@gmail.com> wrote:
>
> The patch fixes the following errors generated by GCC 14.2:
>
> ../src/net/tap-win32.c:343:19: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size 176 [-Werror=format-truncation=]
> 343 | "%s\\%s\\Connection",
> | ^~
> 344 | NETWORK_CONNECTIONS_KEY, enum_name);
> | ~~~~~~~~~
>
> ../src/net/tap-win32.c:341:9: note: 'snprintf' output between 92 and 347 bytes into a destination of size 256
> 341 | snprintf(connection_string,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> 342 | sizeof(connection_string),
> | ~~~~~~~~~~~~~~~~~~~~~~~~~~
> 343 | "%s\\%s\\Connection",
> | ~~~~~~~~~~~~~~~~~~~~~
> 344 | NETWORK_CONNECTIONS_KEY, enum_name);
> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> ../src/net/tap-win32.c:242:58: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size 178 [-Werror=format-truncation=]
> 242 | snprintf (unit_string, sizeof(unit_string), "%s\\%s",
> | ^~
> 243 | ADAPTER_KEY, enum_name);
> | ~~~~~~~~~
>
> ../src/net/tap-win32.c:242:9: note: 'snprintf' output between 79 and 334 bytes into a destination of size 256
> 242 | snprintf (unit_string, sizeof(unit_string), "%s\\%s",
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 243 | ADAPTER_KEY, enum_name);
> | ~~~~~~~~~~~~~~~~~~~~~~~
>
> ../src/net/tap-win32.c:620:52: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size 245 [-Werror=format-truncation=]
> 620 | snprintf (device_path, sizeof(device_path), "%s%s%s",
> | ^~
> 621 | USERMODEDEVICEDIR,
> 622 | device_guid,
> | ~~~~~~~~~~~
> ../src/net/tap-win32.c:620:5: note: 'snprintf' output between 16 and 271 bytes into a destination of size 256
> 620 | snprintf (device_path, sizeof(device_path), "%s%s%s",
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 621 | USERMODEDEVICEDIR,
> | ~~~~~~~~~~~~~~~~~~
> 622 | device_guid,
> | ~~~~~~~~~~~~
> 623 | TAPSUFFIX);
> | ~~~~~~~~~~
>
> Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2607
Probably also worth
Cc: qemu-stable@nongnu.org
> ---
> net/tap-win32.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/net/tap-win32.c b/net/tap-win32.c
> index 7edbd71633..4a4625af2b 100644
> --- a/net/tap-win32.c
> +++ b/net/tap-win32.c
> @@ -214,7 +214,7 @@ static int is_tap_win32_dev(const char *guid)
>
> for (;;) {
> char enum_name[256];
> - char unit_string[256];
> + char unit_string[512];
> HKEY unit_key;
> char component_id_string[] = "ComponentId";
> char component_id[256];
> @@ -315,7 +315,7 @@ static int get_device_guid(
> while (!stop)
> {
> char enum_name[256];
> - char connection_string[256];
> + char connection_string[512];
> HKEY connection_key;
> char name_data[256];
> DWORD name_type;
> @@ -595,7 +595,7 @@ static void tap_win32_free_buffer(tap_win32_overlapped_t *overlapped,
> static int tap_win32_open(tap_win32_overlapped_t **phandle,
> const char *preferred_name)
> {
> - char device_path[256];
> + char device_path[512];
> char device_guid[0x100];
> int rc;
> HANDLE handle;
Rather than just increasing the array sizes, I think we
should use g_autofree and g_strdup_printf(), like:
g_autofree char* unit_string = NULL;
[...]
unit_string = g_strdup_printf("%s\\%s", ADAPTER_KEY, enum_name);
(then no need for an explicit free)
All this only happens once at open, so we can certainly
happily take the cost of memory allocation, and it saves
us wondering about whether there's actually a maximum
limit on these string values. (Looking at the MS documentation,
I think registry keys have a limit of 255 chars, but
values are 16383 chars, so 512 would be more than needed
for a key and less than the theoretical maximum for a value.)
thanks
-- PMM
next prev parent reply other threads:[~2024-10-07 10:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-07 10:13 [PATCH] net/tap-win32: Fix gcc 14 format truncation errors Bernhard Beschow
2024-10-07 10:36 ` Peter Maydell [this message]
2024-10-07 15:47 ` Michael Tokarev
2024-10-08 20:32 ` Bernhard Beschow
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=CAFEAcA-d0jcDiJASmvS5S2jWUijUGuk5Vu7QT8wrD+HKUgEJqQ@mail.gmail.com \
--to=peter.maydell@linaro.org \
--cc=jasowang@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=shentey@gmail.com \
--cc=sw@weilnetz.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).