|
@@ -497,7 +497,8 @@ static int genl_lock_done(struct netlink_callback *cb)
|
|
|
|
|
|
static int genl_family_rcv_msg(const struct genl_family *family,
|
|
|
struct sk_buff *skb,
|
|
|
- struct nlmsghdr *nlh)
|
|
|
+ struct nlmsghdr *nlh,
|
|
|
+ struct netlink_ext_ack *extack)
|
|
|
{
|
|
|
const struct genl_ops *ops;
|
|
|
struct net *net = sock_net(skb->sk);
|
|
@@ -584,6 +585,7 @@ static int genl_family_rcv_msg(const struct genl_family *family,
|
|
|
info.genlhdr = nlmsg_data(nlh);
|
|
|
info.userhdr = nlmsg_data(nlh) + GENL_HDRLEN;
|
|
|
info.attrs = attrbuf;
|
|
|
+ info.extack = extack;
|
|
|
genl_info_net_set(&info, net);
|
|
|
memset(&info.user_ptr, 0, sizeof(info.user_ptr));
|
|
|
|
|
@@ -618,7 +620,7 @@ static int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|
|
if (!family->parallel_ops)
|
|
|
genl_lock();
|
|
|
|
|
|
- err = genl_family_rcv_msg(family, skb, nlh);
|
|
|
+ err = genl_family_rcv_msg(family, skb, nlh, extack);
|
|
|
|
|
|
if (!family->parallel_ops)
|
|
|
genl_unlock();
|