diff options
author | Jakub Kicinski <kuba@kernel.org> | 2025-04-14 14:18:47 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2025-04-16 18:09:41 -0700 |
commit | 57e7dedf2b8c72caa6f04b9e08b19e4f370562fa (patch) | |
tree | 2862de6ae62eeca73eb10395f79737ac5cca31c5 /tools/net/ynl/pyynl/ynl_gen_c.py | |
parent | ce6cb8113c842b94e77364b247c4f85c7b34e0c2 (diff) | |
download | linux-57e7dedf2b8c72caa6f04b9e08b19e4f370562fa.tar.gz linux-57e7dedf2b8c72caa6f04b9e08b19e4f370562fa.tar.bz2 linux-57e7dedf2b8c72caa6f04b9e08b19e4f370562fa.zip |
tools: ynl-gen: make sure we validate subtype of array-nest
ArrayNest AKA indexed-array support currently skips inner type
validation. We count the attributes and then we parse them,
make sure we call validate, too. Otherwise buggy / unexpected
kernel response may lead to crashes.
Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink")
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20250414211851.602096-5-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/net/ynl/pyynl/ynl_gen_c.py')
-rwxr-xr-x | tools/net/ynl/pyynl/ynl_gen_c.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/tools/net/ynl/pyynl/ynl_gen_c.py b/tools/net/ynl/pyynl/ynl_gen_c.py index 2d856ccc88f4..30c0a34b2784 100755 --- a/tools/net/ynl/pyynl/ynl_gen_c.py +++ b/tools/net/ynl/pyynl/ynl_gen_c.py @@ -714,8 +714,11 @@ class TypeArrayNest(Type): def _attr_get(self, ri, var): local_vars = ['const struct nlattr *attr2;'] get_lines = [f'attr_{self.c_name} = attr;', - 'ynl_attr_for_each_nested(attr2, attr)', - f'\t{var}->n_{self.c_name}++;'] + 'ynl_attr_for_each_nested(attr2, attr) {', + '\tif (ynl_attr_validate(yarg, attr2))', + '\t\treturn YNL_PARSE_CB_ERROR;', + f'\t{var}->n_{self.c_name}++;', + '}'] return get_lines, None, local_vars |