From: David Gibson <david@gibson.dropbear.id.au>
To: Jon Maloy <jmaloy@redhat.com>
Cc: sbrivio@redhat.com, passt-dev@passt.top
Subject: Re: [PATCH 4/7] doc/migration: Use strncpy() for socket path and fix argv access
Date: Thu, 9 Jul 2026 12:20:20 +1000 [thread overview]
Message-ID: <ak8FY_WMIx1qLX21@zatzit> (raw)
In-Reply-To: <20260708223203.885345-5-jmaloy@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2765 bytes --]
On Wed, Jul 08, 2026 at 06:32:00PM -0400, Jon Maloy wrote:
> Replace strcpy() with strncpy() when copying the helper socket path
> into sun_path, preventing a potential buffer overflow from a long
> argument.
>
> In target.c, move the argc check before accessing argv[4], so we
> don't dereference past the end of argv.
This fixes real bugs in the examples, but..
strncpy() does not guarantee the target is \0-terminated. In this
case we will end up \0-terminated, because we limit the strncpy() to
exclude the last byte of the target buffer, which is initialized to
all 0s. That's rather more riskly subtle than I'd like.
In the passt code proper we usually use snprintf() rather than
strncpy() to move an arbitrary length string into a fixed sized buffer
like (including sun_path in several cases). It's strictly speaking
more heavyweight than we need, but the meaning is pretty clear and it
guarantees \0 termination. I'd suggest using that instead.
>
> Signed-off-by: Jon Maloy <jmaloy@redhat.com>
> ---
> doc/migration/source.c | 2 +-
> doc/migration/target.c | 8 +++-----
> 2 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/doc/migration/source.c b/doc/migration/source.c
> index d44ebf1f..77ff8fda 100644
> --- a/doc/migration/source.c
> +++ b/doc/migration/source.c
> @@ -47,7 +47,7 @@ int main(int argc, char **argv)
> return -1;
> }
>
> - strcpy(a_helper.sun_path, argv[4]);
> + strncpy(a_helper.sun_path, argv[4], sizeof(a_helper.sun_path) - 1);
> getaddrinfo(argv[1], argv[2], &hints, &r);
>
> /* Connect socket to server and send some data */
> diff --git a/doc/migration/target.c b/doc/migration/target.c
> index f7d31083..0eb1f6ac 100644
> --- a/doc/migration/target.c
> +++ b/doc/migration/target.c
> @@ -38,11 +38,6 @@ int main(int argc, char **argv)
> struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);
> struct addrinfo *r;
>
> - (void)argc;
> -
> - strcpy(a_helper.sun_path, argv[4]);
> - getaddrinfo(argv[1], argv[2], &hints, &r);
> -
> if (argc != 7) {
> fprintf(stderr,
> "%s DST_ADDR DST_PORT SRC_PORT HELPER_PATH SSEQ RSEQ\n",
> @@ -50,6 +45,9 @@ int main(int argc, char **argv)
> return -1;
> }
>
> + strncpy(a_helper.sun_path, argv[4], sizeof(a_helper.sun_path) - 1);
> + getaddrinfo(argv[1], argv[2], &hints, &r);
> +
> /* Prepare socket, bind to source port */
> s = socket(r->ai_family, SOCK_STREAM, IPPROTO_TCP);
> setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &((int){ 1 }), sizeof(int));
> --
> 2.52.0
>
--
David Gibson (he or they) | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you, not the other way
| around.
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2026-07-09 2:42 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-08 22:31 [PATCH 0/7] Fix issues and false positives in code coverge tool Jon Maloy
2026-07-08 22:31 ` [PATCH 1/7] passt: Initialise listening socket fds to -1 Jon Maloy
2026-07-09 2:09 ` David Gibson
2026-07-08 22:31 ` [PATCH 2/7] udp_vu: Assert iov_tail_clone() return before assigning to msg_iovlen Jon Maloy
2026-07-09 2:11 ` David Gibson
2026-07-08 22:31 ` [PATCH 3/7] tap: Assert IPv6 tail size before subtracting header length Jon Maloy
2026-07-09 2:13 ` David Gibson
2026-07-08 22:32 ` [PATCH 4/7] doc/migration: Use strncpy() for socket path and fix argv access Jon Maloy
2026-07-09 2:20 ` David Gibson [this message]
2026-07-08 22:32 ` [PATCH 5/7] doc/migration: Fix buffer type mismatch in recv() call Jon Maloy
2026-07-09 2:22 ` David Gibson
2026-07-08 22:32 ` [PATCH 6/7] doc/platform-requirements: Initialise va_list before va_start() Jon Maloy
2026-07-09 2:40 ` David Gibson
2026-07-08 22:32 ` [PATCH 7/7] doc/platform-requirements: Close leaked sockets in test_close_dup() Jon Maloy
2026-07-09 2:41 ` David Gibson
2026-07-09 2:09 ` [PATCH 0/7] Fix issues and false positives in code coverge tool David Gibson
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=ak8FY_WMIx1qLX21@zatzit \
--to=david@gibson.dropbear.id.au \
--cc=jmaloy@redhat.com \
--cc=passt-dev@passt.top \
--cc=sbrivio@redhat.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.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
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 IMAP folder(s).