From: Jakub Kicinski <kuba@kernel.org>
To: Fernando Fernandez Mancera <fmancera@suse.de>
Cc: netdev@vger.kernel.org, tgraf@infradead.org, horms@kernel.org,
pabeni@redhat.com, edumazet@google.com, dsahern@kernel.org,
davem@davemloft.net
Subject: Re: [PATCH 1/2 net-next v2] ipv4: validate IPV4_DEVCONF attributes properly
Date: Sat, 28 Feb 2026 10:43:28 -0800 [thread overview]
Message-ID: <20260228104328.260172d2@kernel.org> (raw)
In-Reply-To: <20260226133949.17070-1-fmancera@suse.de>
On Thu, 26 Feb 2026 14:39:48 +0100 Fernando Fernandez Mancera wrote:
> As the IPV4_DEVCONF netlink attributes are not being validated, it is
> possible to use netlink to set read-only values like mc_forwarding. In
> addition, valid ranges are not being validated neither but that is less
> relevant as they aren't in sysctl.
>
> To avoid similar situations in the future, define a NLA policy for
> IPV4_DEVCONF attributes which are nested in IFLA_INET_CONF.
Very nice, I think we should drop the Fixes tag tho.
Adding missed validation is always tricky, we don't really want people
to backport this to stable releases, the risk of regression (of broken
user space) is too high. Unless there's some crash this prevents, in
which case we'd need a more targeted fix for just those values in net.
> Please note that MEDIUM_ID is defined as NLA_U32 too because currently
> its usage through netlink is broken for its valid value -1. Modifying
> the type to NLA_S32 would break existing users of set/get netlink
> operation.
Say more? The policy type not matching the accessor used by the kernel
is probably fine in this case (since there's a common accessor used for
all attrs). If it helps the policy, we can use a different type.
> +static const struct nla_policy inet_devconf_policy[IPV4_DEVCONF_MAX + 1] = {
> + [IPV4_DEVCONF_FORWARDING] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_MC_FORWARDING] = { .type = NLA_REJECT },
> + [IPV4_DEVCONF_PROXY_ARP] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_ACCEPT_REDIRECTS] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_SECURE_REDIRECTS] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_SEND_REDIRECTS] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_SHARED_MEDIA] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_RP_FILTER] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 2),
> + [IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_BOOTP_RELAY] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_LOG_MARTIANS] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_TAG] = { .type = NLA_U32 },
> + [IPV4_DEVCONF_ARPFILTER] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_MEDIUM_ID] = { .type = NLA_U32 },
> + [IPV4_DEVCONF_NOXFRM] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_NOPOLICY] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_FORCE_IGMP_VERSION] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 3),
> + [IPV4_DEVCONF_ARP_ANNOUNCE] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 2),
> + [IPV4_DEVCONF_ARP_IGNORE] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 8),
> + [IPV4_DEVCONF_PROMOTE_SECONDARIES] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_ARP_ACCEPT] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_ARP_NOTIFY] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_ACCEPT_LOCAL] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_SRC_VMARK] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_PROXY_ARP_PVLAN] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_ROUTE_LOCALNET] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
> + [IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL] = { .type = NLA_U32 },
> + [IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL] = { .type = NLA_U32 },
> + [IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN] = NLA_POLICY_RANGE(NLA_U32,
> + 0, 1),
The indentation is rather awkward, please adjust to fit the common case
on one line and special case the long ones.
// mis-adjust when needed
[IPV4_DEVCONF_PROMOTE_SECONDARIES] = NLA_POLICY_RANGE(NLA_U32, 0, 1),
// common / normal case
[IPV4_DEVCONF_ARP_ACCEPT] = NLA_POLICY_RANGE(NLA_U32, 0, 1),
[IPV4_DEVCONF_ARP_NOTIFY] = NLA_POLICY_RANGE(NLA_U32, 0, 1),
[IPV4_DEVCONF_ACCEPT_LOCAL] = NLA_POLICY_RANGE(NLA_U32, 0, 1),
...
// overflow type fully to next line if doesn't fit even mis-adjusted
[IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL] =
{ .type = NLA_U32 },
[IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL] =
{ .type = NLA_U32 },
[IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN] =
NLA_POLICY_RANGE(NLA_U32, 0, 1),
--
pw-bot: cr
next prev parent reply other threads:[~2026-02-28 18:43 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-26 13:39 [PATCH 1/2 net-next v2] ipv4: validate IPV4_DEVCONF attributes properly Fernando Fernandez Mancera
2026-02-26 13:39 ` [PATCH 2/2 net-next v2] ipv4: bump rt_genid when a relevant devconf value changes through netlink Fernando Fernandez Mancera
2026-02-28 18:45 ` Jakub Kicinski
2026-03-02 8:27 ` Fernando Fernandez Mancera
2026-03-03 0:19 ` Jakub Kicinski
2026-03-03 11:06 ` Fernando Fernandez Mancera
2026-02-28 18:43 ` Jakub Kicinski [this message]
2026-03-02 8:35 ` [PATCH 1/2 net-next v2] ipv4: validate IPV4_DEVCONF attributes properly Fernando Fernandez Mancera
2026-03-03 0:18 ` Jakub Kicinski
2026-03-03 11:04 ` Fernando Fernandez Mancera
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=20260228104328.260172d2@kernel.org \
--to=kuba@kernel.org \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=fmancera@suse.de \
--cc=horms@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=tgraf@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox