forked from Minki/linux
netlink: Allow ext_ack to carry non-error messages
The NLMSGERR API already carries data (eg, a cookie) on the success path. Allow a message string to be returned as well. Signed-off-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a7b216b1e1
commit
4f6265d485
@ -2313,17 +2313,16 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err,
|
||||
* requests to cap the error message, and get extra error data if
|
||||
* requested.
|
||||
*/
|
||||
if (nlk_has_extack && extack && extack->_msg)
|
||||
tlvlen += nla_total_size(strlen(extack->_msg) + 1);
|
||||
|
||||
if (err) {
|
||||
if (!(nlk->flags & NETLINK_F_CAP_ACK))
|
||||
payload += nlmsg_len(nlh);
|
||||
else
|
||||
flags |= NLM_F_CAPPED;
|
||||
if (nlk_has_extack && extack) {
|
||||
if (extack->_msg)
|
||||
tlvlen += nla_total_size(strlen(extack->_msg) + 1);
|
||||
if (extack->bad_attr)
|
||||
tlvlen += nla_total_size(sizeof(u32));
|
||||
}
|
||||
if (nlk_has_extack && extack && extack->bad_attr)
|
||||
tlvlen += nla_total_size(sizeof(u32));
|
||||
} else {
|
||||
flags |= NLM_F_CAPPED;
|
||||
|
||||
@ -2348,10 +2347,11 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err,
|
||||
memcpy(&errmsg->msg, nlh, payload > sizeof(*errmsg) ? nlh->nlmsg_len : sizeof(*nlh));
|
||||
|
||||
if (nlk_has_extack && extack) {
|
||||
if (extack->_msg) {
|
||||
WARN_ON(nla_put_string(skb, NLMSGERR_ATTR_MSG,
|
||||
extack->_msg));
|
||||
}
|
||||
if (err) {
|
||||
if (extack->_msg)
|
||||
WARN_ON(nla_put_string(skb, NLMSGERR_ATTR_MSG,
|
||||
extack->_msg));
|
||||
if (extack->bad_attr &&
|
||||
!WARN_ON((u8 *)extack->bad_attr < in_skb->data ||
|
||||
(u8 *)extack->bad_attr >= in_skb->data +
|
||||
|
Loading…
Reference in New Issue
Block a user