From: "Jason A. Donenfeld" <Jason@zx2c4.com>
To: netdev@vger.kernel.org, kuba@kernel.org, pabeni@redhat.com
Cc: "Asbjørn Sloth Tønnesen" <ast@fiberby.net>,
"Jason A. Donenfeld" <Jason@zx2c4.com>
Subject: [PATCH net-next 02/11] wireguard: netlink: validate nested arrays in policy
Date: Mon, 1 Dec 2025 03:28:40 +0100 [thread overview]
Message-ID: <20251201022849.418666-3-Jason@zx2c4.com> (raw)
In-Reply-To: <20251201022849.418666-1-Jason@zx2c4.com>
From: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Use NLA_POLICY_NESTED_ARRAY() to perform nested array validation
in the policy validation step.
The nested policy was already enforced through nla_parse_nested(),
however extack wasn't passed previously, so no fancy error messages.
With the nested attributes being validated directly in the policy, the
policy argument can be set to NULL in the calls to nla_parse_nested().
Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
drivers/net/wireguard/netlink.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireguard/netlink.c b/drivers/net/wireguard/netlink.c
index 8adeec6f9440..97723f9c7998 100644
--- a/drivers/net/wireguard/netlink.c
+++ b/drivers/net/wireguard/netlink.c
@@ -18,6 +18,8 @@
#include <crypto/utils.h>
static struct genl_family genl_family;
+static const struct nla_policy peer_policy[WGPEER_A_MAX + 1];
+static const struct nla_policy allowedip_policy[WGALLOWEDIP_A_MAX + 1];
static const struct nla_policy device_policy[WGDEVICE_A_MAX + 1] = {
[WGDEVICE_A_IFINDEX] = { .type = NLA_U32 },
@@ -27,7 +29,7 @@ static const struct nla_policy device_policy[WGDEVICE_A_MAX + 1] = {
[WGDEVICE_A_FLAGS] = NLA_POLICY_MASK(NLA_U32, __WGDEVICE_F_ALL),
[WGDEVICE_A_LISTEN_PORT] = { .type = NLA_U16 },
[WGDEVICE_A_FWMARK] = { .type = NLA_U32 },
- [WGDEVICE_A_PEERS] = { .type = NLA_NESTED }
+ [WGDEVICE_A_PEERS] = NLA_POLICY_NESTED_ARRAY(peer_policy),
};
static const struct nla_policy peer_policy[WGPEER_A_MAX + 1] = {
@@ -39,7 +41,7 @@ static const struct nla_policy peer_policy[WGPEER_A_MAX + 1] = {
[WGPEER_A_LAST_HANDSHAKE_TIME] = NLA_POLICY_EXACT_LEN(sizeof(struct __kernel_timespec)),
[WGPEER_A_RX_BYTES] = { .type = NLA_U64 },
[WGPEER_A_TX_BYTES] = { .type = NLA_U64 },
- [WGPEER_A_ALLOWEDIPS] = { .type = NLA_NESTED },
+ [WGPEER_A_ALLOWEDIPS] = NLA_POLICY_NESTED_ARRAY(allowedip_policy),
[WGPEER_A_PROTOCOL_VERSION] = { .type = NLA_U32 }
};
@@ -467,7 +469,7 @@ static int set_peer(struct wg_device *wg, struct nlattr **attrs)
nla_for_each_nested(attr, attrs[WGPEER_A_ALLOWEDIPS], rem) {
ret = nla_parse_nested(allowedip, WGALLOWEDIP_A_MAX,
- attr, allowedip_policy, NULL);
+ attr, NULL, NULL);
if (ret < 0)
goto out;
ret = set_allowedip(peer, allowedip);
@@ -593,7 +595,7 @@ static int wg_set_device(struct sk_buff *skb, struct genl_info *info)
nla_for_each_nested(attr, info->attrs[WGDEVICE_A_PEERS], rem) {
ret = nla_parse_nested(peer, WGPEER_A_MAX, attr,
- peer_policy, NULL);
+ NULL, NULL);
if (ret < 0)
goto out;
ret = set_peer(wg, peer);
--
2.52.0
next prev parent reply other threads:[~2025-12-01 2:28 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-01 2:28 [PATCH net-next 00/11] wireguard updates for 6.19 Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 01/11] wireguard: netlink: enable strict genetlink validation Jason A. Donenfeld
2025-12-01 2:28 ` Jason A. Donenfeld [this message]
2025-12-01 2:28 ` [PATCH net-next 03/11] wireguard: netlink: use WG_KEY_LEN in policies Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 04/11] wireguard: netlink: convert to split ops Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 05/11] wireguard: netlink: lower .maxattr for WG_CMD_GET_DEVICE Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 06/11] netlink: specs: add specification for wireguard Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 07/11] wireguard: uapi: move enum wg_cmd Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 08/11] wireguard: uapi: move flag enums Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 09/11] wireguard: uapi: generate header with ynl-gen Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 10/11] tools: ynl: add sample for wireguard Jason A. Donenfeld
2025-12-01 21:00 ` Asbjørn Sloth Tønnesen
2025-12-02 3:09 ` Jason A. Donenfeld
2025-12-01 2:28 ` [PATCH net-next 11/11] wireguard: netlink: generate netlink code Jason A. Donenfeld
2025-12-01 23:07 ` [PATCH net-next 00/11] wireguard updates for 6.19 Jakub Kicinski
2025-12-02 3:19 ` Jason A. Donenfeld
2025-12-02 4:37 ` Jakub Kicinski
2025-12-04 17:43 ` Jason A. Donenfeld
2025-12-02 4:40 ` 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=20251201022849.418666-3-Jason@zx2c4.com \
--to=jason@zx2c4.com \
--cc=ast@fiberby.net \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@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.
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).