net: netlink: add helper to retrieve NETLINK_F_STRICT_CHK
authorJakub Kicinski <jakub.kicinski@netronome.com>
Fri, 18 Jan 2019 18:46:13 +0000 (10:46 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 19 Jan 2019 18:09:58 +0000 (10:09 -0800)
Dumps can read state of the NETLINK_F_STRICT_CHK flag from
a field in the callback structure.  For non-dump GET requests
we need a way to access the state of that flag from a socket.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netlink.h
net/netlink/af_netlink.c

index 4e8add2702009167faa0b4503753826876980106..593d1b9c33a85e65971050b6319b0a3652620b87 100644 (file)
@@ -126,6 +126,7 @@ void __netlink_clear_multicast_users(struct sock *sk, unsigned int group);
 void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err,
                 const struct netlink_ext_ack *extack);
 int netlink_has_listeners(struct sock *sk, unsigned int group);
+bool netlink_strict_get_check(struct sk_buff *skb);
 
 int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 portid, int nonblock);
 int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 portid,
index 3c023d6120f657b098639d7fbdef56776225b676..8fa35df94c0721f95243bc1159ee03ec127aa7be 100644 (file)
@@ -1371,6 +1371,14 @@ int netlink_has_listeners(struct sock *sk, unsigned int group)
 }
 EXPORT_SYMBOL_GPL(netlink_has_listeners);
 
+bool netlink_strict_get_check(struct sk_buff *skb)
+{
+       const struct netlink_sock *nlk = nlk_sk(NETLINK_CB(skb).sk);
+
+       return nlk->flags & NETLINK_F_STRICT_CHK;
+}
+EXPORT_SYMBOL_GPL(netlink_strict_get_check);
+
 static int netlink_broadcast_deliver(struct sock *sk, struct sk_buff *skb)
 {
        struct netlink_sock *nlk = nlk_sk(sk);