From: Richard Alpe <richard.alpe@ericsson.com>
To: David Miller <davem@davemloft.net>
Cc: <netdev@vger.kernel.org>, <tipc-discussion@lists.sourceforge.net>
Subject: Re: [PATCH net-next 04/14] tipc: add sock dump to new netlink api
Date: Mon, 15 Sep 2014 09:55:24 +0200 [thread overview]
Message-ID: <54169B6C.5060709@ericsson.com> (raw)
In-Reply-To: <20140912.171038.1165432718811920305.davem@davemloft.net>
On 09/12/2014 11:10 PM, David Miller wrote:
> From: <richard.alpe@ericsson.com>
> Date: Thu, 11 Sep 2014 10:29:17 +0200
>
>> + list_for_each_entry_from(p, &tsk->publications, pport_list) {
>> + publ = nla_nest_start(skb, TIPC_NLA_SOCK_PUBL);
>> + if (nla_put_u32(skb, TIPC_NLA_PUBL_TYPE, p->type))
>> + goto msg_full;
>> + if (nla_put_u32(skb, TIPC_NLA_PUBL_LOWER, p->lower))
>> + goto msg_full;
>> + if (nla_put_u32(skb, TIPC_NLA_PUBL_UPPER, p->upper))
>> + goto msg_full;
>> + nla_nest_end(skb, publ);
>> + }
>> +
>> + *prev_publ = 0;
>> +
>> + return 0;
>> +
>> +msg_full:
>> + *prev_publ = p->key;
>> + nla_nest_cancel(skb, publ);
>
> This restart mechanism is broken.
>
> You can't public nested information this way.
>
> What happens in your code is that if we hit the limit in the middle of
> adding the publications, the next time we'll put the same socket into
> the netlink message and then the rest of the nested publications.
> That's malformed.
Yes, that's true.
> You can't just say sometimes you'll partially list the set of nested
> attributes in an object, you must public the entire object fully in
> the netlink message or skip the object entirely.
Ok. I bluntly assumed we could put some reassemble logic in the client
as the end integrity should still be preserved(?).
> I would suggest that you instead size the amount of space you'll
> need for at least the first socket being listed, and if NLMSG_GOODSIZE
> is insufficient, allocate as much as you will actually need.
>
> Then you put full socket netlink blobs in there, including all nested
> attributes, and then stop and reset back the the most recent full socket
> published if you run out of space.
The amount of publications a socket can have is large (~65 000). Do you
still think this a viable solution?
I thought about querying socket publications individually. Meaning that
the user-space tool would have to first list sockets, then ask for there
publications. This would remove the nested malformation but create some
overhead and increase the potential port-gone window. What do you think?
Thanks for the review, much appreciated!
/Richard
next prev parent reply other threads:[~2014-09-15 7:56 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-11 8:29 [PATCH net-next 00/14] tipc: new netlink API richard.alpe
2014-09-11 8:29 ` [PATCH net-next 01/14] tipc: add bearer disable/enable to new netlink api richard.alpe
2014-09-12 21:07 ` David Miller
2014-09-11 8:29 ` [PATCH net-next 02/14] tipc: add bearer get/dump " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 03/14] tipc: add bearer set " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 04/14] tipc: add sock dump " richard.alpe
2014-09-12 21:10 ` David Miller
2014-09-15 7:55 ` Richard Alpe [this message]
2014-09-15 8:51 ` Florian Westphal
2014-09-15 12:35 ` Richard Alpe
2014-09-15 15:38 ` David Miller
2014-09-15 16:35 ` Jon Maloy
2014-09-23 11:12 ` Richard Alpe
2014-09-23 15:37 ` David Miller
2014-09-11 8:29 ` [PATCH net-next 05/14] tipc: add link get/dump " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 06/14] tipc: add link set " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 07/14] tipc: add link stat reset " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 08/14] tipc: add media get/dump " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 09/14] tipc: add media set " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 10/14] tipc: add node get/dump " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 11/14] tipc: add net dump " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 12/14] tipc: add net set " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 13/14] tipc: add name table dump " richard.alpe
2014-09-11 8:29 ` [PATCH net-next 14/14] tipc: remove old ASCII netlink API richard.alpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54169B6C.5060709@ericsson.com \
--to=richard.alpe@ericsson.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=tipc-discussion@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).