diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2024-12-02 10:57:36 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-12-11 15:22:17 +0000 |
| commit | 13dbd03bf7ca0a245cfdfd2d8c8b73e486bbaa7b (patch) | |
| tree | a5dacd038d0ebfa8f3515b42ecb45656f59b933f /tools | |
| parent | 60f80647a03647bdf6c736952d6216b0ba32580e (diff) | |
pkg/declextract: emit more netlink families
Emit families w/o policy, emit duplicate commands.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/syz-declextract/testdata/netlink.c | 27 | ||||
| -rw-r--r-- | tools/syz-declextract/testdata/netlink.c.info | 1 | ||||
| -rw-r--r-- | tools/syz-declextract/testdata/netlink.c.json | 30 | ||||
| -rw-r--r-- | tools/syz-declextract/testdata/netlink.c.txt | 12 |
4 files changed, 70 insertions, 0 deletions
diff --git a/tools/syz-declextract/testdata/netlink.c b/tools/syz-declextract/testdata/netlink.c index 355b84f1f..dc6ea4388 100644 --- a/tools/syz-declextract/testdata/netlink.c +++ b/tools/syz-declextract/testdata/netlink.c @@ -28,6 +28,10 @@ const struct nla_policy foo_genl_policy[] = { [NETLINK_FOO_ATTR7] = { .len = sizeof(var) }, }; +const struct nla_policy foo_dump_genl_policy[] = { + [NETLINK_FOO_ATTR1] = { .type = NLA_U32 }, +}; + const struct nla_policy genl_policy_reject_all[] = { { .type = NLA_REJECT }, { .type = NLA_REJECT }, @@ -47,7 +51,13 @@ static const struct genl_ops foo_ops[] = { { .cmd = NETLINK_FOO_CMD_BAR, .flags = GENL_UNS_ADMIN_PERM, + .doit = bar_cmd, + }, + { + .cmd = NETLINK_FOO_CMD_BAR, + .flags = GENL_UNS_ADMIN_PERM, .dumpit = bar_cmd, + .policy = foo_dump_genl_policy, }, }; @@ -85,3 +95,20 @@ struct genl_family bar_family = { struct genl_family noops_family = { .name = "NOOPS", }; + +enum netlink_nopolicy_cmds { + NETLINK_NOPOLICY_CMD, +}; + +static const struct genl_ops nopolicy_ops[] = { + { + .cmd = NETLINK_NOPOLICY_CMD, + .doit = foo_cmd, + }, +}; + +struct genl_family nopolicy_family = { + .name = "nopolicy", + .ops = nopolicy_ops, + .n_ops = ARRAY_SIZE(nopolicy_ops), +}; diff --git a/tools/syz-declextract/testdata/netlink.c.info b/tools/syz-declextract/testdata/netlink.c.info index e15a8e738..e57a57c73 100644 --- a/tools/syz-declextract/testdata/netlink.c.info +++ b/tools/syz-declextract/testdata/netlink.c.info @@ -1,3 +1,4 @@ NETLINK NETLINK_BAR_CMD_FOO func:NETLINK_BAR_CMD_FOO access:user manual_desc:false auto_desc:true file:netlink.c subsystem:kernel NETLINK NETLINK_FOO_CMD_BAR func:bar_cmd access:ns_admin manual_desc:false auto_desc:true file:netlink.c subsystem:kernel NETLINK NETLINK_FOO_CMD_FOO func:foo_cmd access:admin manual_desc:false auto_desc:true file:netlink.c subsystem:kernel +NETLINK NETLINK_NOPOLICY_CMD func:foo_cmd access:user manual_desc:false auto_desc:true file:netlink.c subsystem:kernel diff --git a/tools/syz-declextract/testdata/netlink.c.json b/tools/syz-declextract/testdata/netlink.c.json index 99b18aae8..ed3a04b79 100644 --- a/tools/syz-declextract/testdata/netlink.c.json +++ b/tools/syz-declextract/testdata/netlink.c.json @@ -14,6 +14,10 @@ { "name": "NETLINK_FOO_NESTED_ATTR2", "value": "1" + }, + { + "name": "NETLINK_NOPOLICY_CMD", + "value": "0" } ], "structs": [ @@ -127,6 +131,23 @@ "func": "bar_cmd", "access": "ns_admin", "policy": "foo_genl_policy_netlink" + }, + { + "name": "NETLINK_FOO_CMD_BAR", + "func": "bar_cmd", + "access": "ns_admin", + "policy": "foo_dump_genl_policy_netlink" + } + ], + "source_file": "netlink.c" + }, + { + "name": "nopolicy", + "ops": [ + { + "name": "NETLINK_NOPOLICY_CMD", + "func": "foo_cmd", + "access": "user" } ], "source_file": "netlink.c" @@ -134,6 +155,15 @@ ], "netlink_policies": [ { + "name": "foo_dump_genl_policy_netlink", + "attrs": [ + { + "name": "NETLINK_FOO_ATTR1", + "kind": "NLA_U32" + } + ] + }, + { "name": "foo_genl_nested_policy_netlink", "attrs": [ { diff --git a/tools/syz-declextract/testdata/netlink.c.txt b/tools/syz-declextract/testdata/netlink.c.txt index 96af4f31b..f4042d816 100644 --- a/tools/syz-declextract/testdata/netlink.c.txt +++ b/tools/syz-declextract/testdata/netlink.c.txt @@ -36,6 +36,17 @@ syz_genetlink_get_family_id$auto_foo_family(name ptr[in, string["foo family"]], sendmsg$auto_NETLINK_FOO_CMD_FOO(fd sock_nl_generic, msg ptr[in, msghdr_foo_family$auto[NETLINK_FOO_CMD_FOO, foo_genl_policy_netlink$auto]], f flags[send_flags]) sendmsg$auto_NETLINK_FOO_CMD_BAR(fd sock_nl_generic, msg ptr[in, msghdr_foo_family$auto[NETLINK_FOO_CMD_BAR, foo_genl_policy_netlink$auto]], f flags[send_flags]) +sendmsg$auto_NETLINK_FOO_CMD_BAR2(fd sock_nl_generic, msg ptr[in, msghdr_foo_family$auto[NETLINK_FOO_CMD_BAR, foo_dump_genl_policy_netlink$auto]], f flags[send_flags]) + +foo_dump_genl_policy_netlink$auto [ + NETLINK_FOO_ATTR1 nlattr[NETLINK_FOO_ATTR1, int32] +] [varlen] + +resource genl_nopolicy_family_id$auto[int16] +type msghdr_nopolicy$auto[CMD, POLICY] msghdr_netlink[netlink_msg_t[genl_nopolicy_family_id$auto, genlmsghdr_t[CMD], POLICY]] +syz_genetlink_get_family_id$auto_nopolicy(name ptr[in, string["nopolicy"]], fd sock_nl_generic) genl_nopolicy_family_id$auto + +sendmsg$auto_NETLINK_NOPOLICY_CMD(fd sock_nl_generic, msg ptr[in, msghdr_nopolicy$auto[NETLINK_NOPOLICY_CMD, void]], f flags[send_flags]) netlink_foo_struct1$auto { a int32 @@ -52,3 +63,4 @@ netlink_foo_struct2$auto { define NETLINK_BAR_CMD_FOO 0 define NETLINK_FOO_NESTED_ATTR1 0 define NETLINK_FOO_NESTED_ATTR2 1 +define NETLINK_NOPOLICY_CMD 0 |
