mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
netlink: make nla_nest_start() add NLA_F_NESTED flag
Even if the NLA_F_NESTED flag was introduced more than 11 years ago, most netlink based interfaces (including recently added ones) are still not setting it in kernel generated messages. Without the flag, message parsers not aware of attribute semantics (e.g. wireshark dissector or libmnl's mnl_nlmsg_fprintf()) cannot recognize nested attributes and won't display the structure of their contents. Unfortunately we cannot just add the flag everywhere as there may be userspace applications which check nlattr::nla_type directly rather than through a helper masking out the flags. Therefore the patch renames nla_nest_start() to nla_nest_start_noflag() and introduces nla_nest_start() as a wrapper adding NLA_F_NESTED. The calls which add NLA_F_NESTED manually are rewritten to use nla_nest_start(). Except for changes in include/net/netlink.h, the patch was generated using this semantic patch: @@ expression E1, E2; @@ -nla_nest_start(E1, E2) +nla_nest_start_noflag(E1, E2) @@ expression E1, E2; @@ -nla_nest_start_noflag(E1, E2 | NLA_F_NESTED) +nla_nest_start(E1, E2) Signed-off-by: Michal Kubecek <[email protected]> Acked-by: Jiri Pirko <[email protected]> Acked-by: David Ahern <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
c7881b4a97
commit
ae0be8de9a
111 changed files with 539 additions and 466 deletions
|
|
@ -114,7 +114,7 @@ static int drbd_msg_put_info(struct sk_buff *skb, const char *info)
|
|||
if (!info || !info[0])
|
||||
return 0;
|
||||
|
||||
nla = nla_nest_start(skb, DRBD_NLA_CFG_REPLY);
|
||||
nla = nla_nest_start_noflag(skb, DRBD_NLA_CFG_REPLY);
|
||||
if (!nla)
|
||||
return err;
|
||||
|
||||
|
|
@ -135,7 +135,7 @@ static int drbd_msg_sprintf_info(struct sk_buff *skb, const char *fmt, ...)
|
|||
int err = -EMSGSIZE;
|
||||
int len;
|
||||
|
||||
nla = nla_nest_start(skb, DRBD_NLA_CFG_REPLY);
|
||||
nla = nla_nest_start_noflag(skb, DRBD_NLA_CFG_REPLY);
|
||||
if (!nla)
|
||||
return err;
|
||||
|
||||
|
|
@ -3269,7 +3269,7 @@ static int nla_put_drbd_cfg_context(struct sk_buff *skb,
|
|||
struct drbd_device *device)
|
||||
{
|
||||
struct nlattr *nla;
|
||||
nla = nla_nest_start(skb, DRBD_NLA_CFG_CONTEXT);
|
||||
nla = nla_nest_start_noflag(skb, DRBD_NLA_CFG_CONTEXT);
|
||||
if (!nla)
|
||||
goto nla_put_failure;
|
||||
if (device &&
|
||||
|
|
@ -3837,7 +3837,7 @@ static int nla_put_status_info(struct sk_buff *skb, struct drbd_device *device,
|
|||
if (err)
|
||||
goto nla_put_failure;
|
||||
|
||||
nla = nla_nest_start(skb, DRBD_NLA_STATE_INFO);
|
||||
nla = nla_nest_start_noflag(skb, DRBD_NLA_STATE_INFO);
|
||||
if (!nla)
|
||||
goto nla_put_failure;
|
||||
if (nla_put_u32(skb, T_sib_reason, sib ? sib->sib_reason : SIB_GET_STATUS_REPLY) ||
|
||||
|
|
|
|||
|
|
@ -2047,7 +2047,7 @@ static int populate_nbd_status(struct nbd_device *nbd, struct sk_buff *reply)
|
|||
*/
|
||||
if (refcount_read(&nbd->config_refs))
|
||||
connected = 1;
|
||||
dev_opt = nla_nest_start(reply, NBD_DEVICE_ITEM);
|
||||
dev_opt = nla_nest_start_noflag(reply, NBD_DEVICE_ITEM);
|
||||
if (!dev_opt)
|
||||
return -EMSGSIZE;
|
||||
ret = nla_put_u32(reply, NBD_DEVICE_INDEX, nbd->index);
|
||||
|
|
@ -2095,7 +2095,7 @@ static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info)
|
|||
goto out;
|
||||
}
|
||||
|
||||
dev_list = nla_nest_start(reply, NBD_ATTR_DEVICE_LIST);
|
||||
dev_list = nla_nest_start_noflag(reply, NBD_ATTR_DEVICE_LIST);
|
||||
if (index == -1) {
|
||||
ret = idr_for_each(&nbd_index_idr, &status_cb, reply);
|
||||
if (ret) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue