[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20181008101725.zjdsnwcyww7tmwnr@brauner.io>
Date: Mon, 8 Oct 2018 12:17:26 +0200
From: Christian Brauner <christian@...uner.io>
To: David Ahern <dsahern@...nel.org>
Cc: netdev@...r.kernel.org, davem@...emloft.net, jbenc@...hat.com,
stephen@...workplumber.org, David Ahern <dsahern@...il.com>
Subject: Re: [PATCH v2 net-next 11/23] rtnetlink: Update rtnl_stats_dump for
strict data checking
On Sun, Oct 07, 2018 at 08:16:32PM -0700, David Ahern wrote:
> From: David Ahern <dsahern@...il.com>
>
> Update rtnl_stats_dump for strict data checking. If the flag is set,
> the dump request is expected to have an if_stats_msg struct as the header.
> All elements of the struct are expected to be 0 except filter_mask which
> must be non-0 (legacy behavior). No attributes are supported.
>
> Signed-off-by: David Ahern <dsahern@...il.com>
> ---
> net/core/rtnetlink.c | 24 ++++++++++++++++++++++--
> 1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index e38e1f178611..f6d2609cfa9f 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
> @@ -4680,6 +4680,7 @@ static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh,
>
> static int rtnl_stats_dump(struct sk_buff *skb, struct netlink_callback *cb)
> {
> + struct netlink_ext_ack *extack = cb->extack;
> int h, s_h, err, s_idx, s_idxattr, s_prividx;
> struct net *net = sock_net(skb->sk);
> unsigned int flags = NLM_F_MULTI;
> @@ -4696,13 +4697,32 @@ static int rtnl_stats_dump(struct sk_buff *skb, struct netlink_callback *cb)
>
> cb->seq = net->dev_base_seq;
>
> - if (nlmsg_len(cb->nlh) < sizeof(*ifsm))
> + if (nlmsg_len(cb->nlh) < sizeof(*ifsm)) {
> + NL_SET_ERR_MSG(extack, "Invalid header for stats dump");
> return -EINVAL;
> + }
>
> ifsm = nlmsg_data(cb->nlh);
> +
> + /* only requests using NLM_F_DUMP_PROPER_HDR can pass data to
That looks like an accidental leftover before we changed this to a
socket option. :)
> + * influence the dump. The legacy exception is filter_mask.
> + */
> + if (cb->strict_check) {
> + if (ifsm->pad1 || ifsm->pad2 || ifsm->ifindex) {
> + NL_SET_ERR_MSG(extack, "Invalid values in header for stats dump request");
> + return -EINVAL;
> + }
> + if (nlmsg_attrlen(cb->nlh, sizeof(*ifsm))) {
> + NL_SET_ERR_MSG(extack, "Invalid attributes after stats header");
> + return -EINVAL;
> + }
> + }
> +
> filter_mask = ifsm->filter_mask;
> - if (!filter_mask)
> + if (!filter_mask) {
> + NL_SET_ERR_MSG(extack, "Filter mask must be set for stats dump");
> return -EINVAL;
> + }
>
> for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
> idx = 0;
> --
> 2.11.0
>
Powered by blists - more mailing lists