mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
netlink: advertise incomplete dumps
Consider the following situation: * a dump that would show 8 entries, four in the first round, and four in the second * between the first and second rounds, 6 entries are removed * now the second round will not show any entry, and even if there is a sequence/generation counter the application will not know To solve this problem, add a new flag NLM_F_DUMP_INTR to the netlink header that indicates the dump wasn't consistent, this flag can also be set on the MSG_DONE message that terminates the dump, and as such above situation can be detected. To achieve this, add a sequence counter to the netlink callback struct. Of course, netlink code still needs to use this new functionality. The correct way to do that is to always set cb->seq when a dumpit callback is invoked and call nl_dump_check_consistent() for each new message. The core code will also call this function for the final MSG_DONE message. To make it usable with generic netlink, a new function genlmsg_nlhdr() is needed to obtain the netlink header from the genetlink user header. Signed-off-by: Johannes Berg <[email protected]> Acked-by: David S. Miller <[email protected]> Signed-off-by: John W. Linville <[email protected]>
This commit is contained in:
parent
c1c3daee97
commit
670dc2833d
4 changed files with 60 additions and 0 deletions
|
|
@ -1693,6 +1693,8 @@ static int netlink_dump(struct sock *sk)
|
|||
if (!nlh)
|
||||
goto errout_skb;
|
||||
|
||||
nl_dump_check_consistent(cb, nlh);
|
||||
|
||||
memcpy(nlmsg_data(nlh), &len, sizeof(len));
|
||||
|
||||
if (sk_filter(sk, skb))
|
||||
|
|
|
|||
Loading…
Reference in a new issue