All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Petr Oros <poros@redhat.com>
Cc: "Donald Hunter" <donald.hunter@gmail.com>,
	"David S. Miller" <davem@davemloft.net>,
	"Eric Dumazet" <edumazet@google.com>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Simon Horman" <horms@kernel.org>,
	"Jacob Keller" <jacob.e.keller@intel.com>,
	"Asbjørn Sloth Tønnesen" <ast@fiberby.net>,
	netdev@vger.kernel.org, ivecera@redhat.com, mschmidt@redhat.com,
	"Zahari Doychev" <zahari.doychev@linux.com>
Subject: Re: [PATCH net] tools: ynl: fix string attribute length to include null terminator
Date: Fri, 24 Oct 2025 17:03:47 -0700	[thread overview]
Message-ID: <20251024170347.2bd06bf0@kernel.org> (raw)
In-Reply-To: <20251024132438.351290-1-poros@redhat.com>

On Fri, 24 Oct 2025 15:24:38 +0200 Petr Oros wrote:
> The ynl_attr_put_str() function was not including the null terminator
> in the attribute length calculation. This caused kernel to reject
> CTRL_CMD_GETFAMILY requests with EINVAL:
> "Attribute failed policy validation".
> 
> For a 4-character family name like "dpll":
> - Sent: nla_len=8 (4 byte header + 4 byte string without null)
> - Expected: nla_len=9 (4 byte header + 5 byte string with null)
> 
> The bug was introduced in commit 15d2540e0d62 ("tools: ynl: check for
> overflow of constructed messages") when refactoring from stpcpy() to
> strlen(). The original code correctly included the null terminator:
> 
>   end = stpcpy(ynl_attr_data(attr), str);
>   attr->nla_len = NLA_HDRLEN + NLA_ALIGN(end -
>                                 (char *)ynl_attr_data(attr));
> 
> Since stpcpy() returns a pointer past the null terminator, the length
> included it. The refactored version using strlen() omitted the +1.
> 
> The fix also removes NLA_ALIGN() from nla_len calculation, since
> nla_len should contain actual attribute length, not aligned length.
> Alignment is only for calculating next attribute position. This makes
> the code consistent with ynl_attr_put().
> 
> CTRL_ATTR_FAMILY_NAME uses NLA_NUL_STRING policy which requires
> null terminator. Kernel validates with memchr() and rejects if not
> found.
> 
> Fixes: 15d2540e0d62 ("tools: ynl: check for overflow of constructed messages")
> Signed-off-by: Petr Oros <poros@redhat.com>
> ---
>  tools/net/ynl/lib/ynl-priv.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/net/ynl/lib/ynl-priv.h b/tools/net/ynl/lib/ynl-priv.h
> index 29481989ea7662..ced7dce44efb43 100644
> --- a/tools/net/ynl/lib/ynl-priv.h
> +++ b/tools/net/ynl/lib/ynl-priv.h
> @@ -313,7 +313,7 @@ ynl_attr_put_str(struct nlmsghdr *nlh, unsigned int attr_type, const char *str)
>  	struct nlattr *attr;
>  	size_t len;
>  
> -	len = strlen(str);
> +	len = strlen(str) + 1;
>  	if (__ynl_attr_put_overflow(nlh, len))
>  		return;
>  
> @@ -321,7 +321,7 @@ ynl_attr_put_str(struct nlmsghdr *nlh, unsigned int attr_type, const char *str)
>  	attr->nla_type = attr_type;
>  
>  	strcpy((char *)ynl_attr_data(attr), str);
> -	attr->nla_len = NLA_HDRLEN + NLA_ALIGN(len);
> +	attr->nla_len = NLA_HDRLEN + len;
>  
>  	nlh->nlmsg_len += NLMSG_ALIGN(attr->nla_len);
>  }

looks familiar...

Link: https://lore.kernel.org/20251018151737.365485-3-zahari.doychev@linux.com

  parent reply	other threads:[~2025-10-25  0:03 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-24 13:24 [PATCH net] tools: ynl: fix string attribute length to include null terminator Petr Oros
2025-10-24 13:38 ` Ivan Vecera
2025-10-25  0:03 ` Jakub Kicinski [this message]
     [not found]   ` <CAPR2-9=UeTLfqWbfX+NcLef0BQ_xbKq7MJgt4YsjMi==FWZD-Q@mail.gmail.com>
2025-10-25 19:05     ` Zahari Doychev
2025-10-27  9:08 ` Ivan Vecera
2025-10-28  0:00 ` patchwork-bot+netdevbpf

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=20251024170347.2bd06bf0@kernel.org \
    --to=kuba@kernel.org \
    --cc=ast@fiberby.net \
    --cc=davem@davemloft.net \
    --cc=donald.hunter@gmail.com \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=ivecera@redhat.com \
    --cc=jacob.e.keller@intel.com \
    --cc=mschmidt@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=poros@redhat.com \
    --cc=zahari.doychev@linux.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.