[PATCH net-next 1/4] netlink: specs: fix duplicate if/then keys in netlink-raw schema

From: Taylor Bates

Date: Tue Sep 08 2026 - 19:47:54 EST


Currently netlink-raw.yaml contains two if keys and two then keys in a
single mapping that enforces a "len" for "pad" members and a "len" or
"struct" for binary members.

During validation PyYAML resolves duplicate keys last-wins, so only the
binary rule survives. Pad has not been validated since January 2024.

None of the current specs violate this rule, but this validation should
not be parser dependent and unspecified. Strict YAML validators such as
Red Hat's VS Code YAML extension and Adrien Verge's yamllint will
reject the netlink-raw.yaml schema:

Command:
$ yamllint Documentation/netlink/netlink-raw.yaml

Output:
185:13 error duplication of key "if" in mapping (key-duplicates)
189:13 error duplication of key "then" in mapping (key-duplicates)

The following invalid netlink family spec will pass validation in the
current ynl tooling:

# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
---
name: minimal-raw
doc: Minimal netlink-raw family for schema validation testing.
protocol: netlink-raw
protonum: 0

definitions:
-
name: test-struct
type: struct
members:
-
name: reserved
type: pad
# len intentionally omitted

attribute-sets: []

operations:
list: []

Fixes: bf08f32c8ced ("tools/net/ynl: Add support for nested structs")
Signed-off-by: Taylor Bates <tmbates12@xxxxxxxxx>
---
Documentation/netlink/netlink-raw.yaml | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/Documentation/netlink/netlink-raw.yaml b/Documentation/netlink/netlink-raw.yaml
index 4c436b59a34b..18ccfe05048a 100644
--- a/Documentation/netlink/netlink-raw.yaml
+++ b/Documentation/netlink/netlink-raw.yaml
@@ -176,20 +176,23 @@ properties:
struct:
description: Name of the nested struct type.
type: string
- if:
- properties:
- type:
- const: pad
- then:
- required: [ len ]
- if:
- properties:
- type:
- const: binary
- then:
- oneOf:
- - required: [ len ]
- - required: [ struct ]
+ allOf:
+ -
+ if:
+ properties:
+ type:
+ const: pad
+ then:
+ required: [ len ]
+ -
+ if:
+ properties:
+ type:
+ const: binary
+ then:
+ oneOf:
+ - required: [ len ]
+ - required: [ struct ]
# End genetlink-legacy

attribute-sets:

--
2.55.0