diff options
author | Jakub Kicinski <kuba@kernel.org> | 2020-10-09 20:22:49 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2020-10-09 20:22:49 -0700 |
commit | c77fb07fae36a02c382b729f856d45dade88a581 (patch) | |
tree | e36d5d8e5795a8992618cc2f756c5bc38d977434 /include/net | |
parent | c4cc0b9c771a5199ef4e37f65e12dd25c56859d6 (diff) | |
parent | 44f3625bc61653ea3bde9960298faf2f5518fda5 (diff) | |
download | linux-c77fb07fae36a02c382b729f856d45dade88a581.tar.gz linux-c77fb07fae36a02c382b729f856d45dade88a581.tar.bz2 linux-c77fb07fae36a02c382b729f856d45dade88a581.zip |
Merge branch 'netlink-export-policy-on-validation-failures'
Johannes Berg says:
====================
netlink: export policy on validation failures
Export the policy used for attribute validation when it fails,
so e.g. for an out-of-range attribute userspace immediately gets
the valid ranges back.
v2 incorporates the suggestion from Jakub to have a function to
estimate the size (netlink_policy_dump_attr_size_estimate()) and
check that it does the right thing on the *normal* policy dumps,
not (just) when calling it from the error scenario.
v3 only addresses a few minor style issues.
v4 fixes up a forgotten 'git add' ... sorry.
v5 is a resend, I messed up v4's cover letter subject (saying v3)
and apparently the second patch didn't go out at all.
Tested using nl80211/iw in a few scenarios, seems to work fine
and return the policy back, e.g.
kernel reports: integer out of range
policy: 04 00 0b 00 0c 00 04 00 01 00 00 00 00 00 00 00
^ padding
^ minimum allowed value
policy: 04 00 0b 00 0c 00 05 00 ff ff ff ff 00 00 00 00
^ padding
^ maximum allowed value
policy: 08 00 01 00 04 00 00 00
^ type 4 == U32
for an out-of-range case.
====================
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/netlink.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/net/netlink.h b/include/net/netlink.h index 2b9e41075f19..7356f41d23ba 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -1957,6 +1957,10 @@ int netlink_policy_dump_get_policy_idx(struct netlink_policy_dump_state *state, bool netlink_policy_dump_loop(struct netlink_policy_dump_state *state); int netlink_policy_dump_write(struct sk_buff *skb, struct netlink_policy_dump_state *state); +int netlink_policy_dump_attr_size_estimate(const struct nla_policy *pt); +int netlink_policy_dump_write_attr(struct sk_buff *skb, + const struct nla_policy *pt, + int nestattr); void netlink_policy_dump_free(struct netlink_policy_dump_state *state); #endif |