Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1758556ybh; Sun, 15 Mar 2020 10:18:19 -0700 (PDT) X-Google-Smtp-Source: ADFU+vuvKR6l2ZrzbRHHdSOpVW1gyQO2xCtdJQ2+TFeMSiVQ14Q58s67n9i26W76l844t/372eQo X-Received: by 2002:aca:8ce:: with SMTP id 197mr14142029oii.35.1584292699216; Sun, 15 Mar 2020 10:18:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584292699; cv=none; d=google.com; s=arc-20160816; b=fA4xlmPt2SlTPeyj9taTpVdScaAHWP2F+vQLuWJmxLQmRQOrN5BGDUA3TR0fe1z7DX kifIy1qPdE1yfWIX7PaLplwQ36CBNJpNjpBwW1l6PailnWzeWpvbddapQsfoBjnv4MaH XUERl+W8bcvnEPxw3zvOfHqbVbCy3D51s6kgem5qAp0+8MazYHbzLtdvxnxiT8bV6VZQ yxxEfVqxXe0jwHmBKo4jqQKcBiVgB0+2oiKTFpt0RmF19q0R04tawnnkLbsRwkC3qmFi n962NhhQ11BR9UiOd7E1m43FOjedM36atBcfpx1s8WeR9T6V4re8IgG/zis3HrMQvqNG 5q1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:cc:to:subject:from:references :in-reply-to:message-id; bh=T1MbKDEZy82G6P8nNCPoDrrVqkTPj3B/kfWVSyRYhik=; b=twdB7gdEbP9F2TV6ABaRCoRs06THC9xf18RM31pCAgCGxUqGzdNSLP2i3N3qdFzwML LtCf1O/9Pqqhj9UzBdQBuR5zr4y2sgRtZBFZQ5qCF290gghvk1Rn/1Cf2zcRBSramVxn BTXxjiVEwEs2MHIcKy7fxxJUkcm8u7xXt8wWcbAyvQftMMqsYA42tsQ0BqmrSaiXffkp qgBLZo6BB7spcasIFLV3Zlh61VVl0I6uHn0oaHL54+LopFgFpXs5WBHZJT3S2V5mmpe8 sxw0fpPgZ52JjO1VjC+OpRLwIafQPFjhn7rRu1HrvG9+AvoaPJX8PboIJvOE0/DPFsd2 dvOQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p19si8491944oic.39.2020.03.15.10.18.07; Sun, 15 Mar 2020 10:18:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728990AbgCORRp (ORCPT + 99 others); Sun, 15 Mar 2020 13:17:45 -0400 Received: from mx2.suse.de ([195.135.220.15]:56438 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728887AbgCORRp (ORCPT ); Sun, 15 Mar 2020 13:17:45 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 79710ADFE; Sun, 15 Mar 2020 17:17:43 +0000 (UTC) Received: by unicorn.suse.cz (Postfix, from userid 1000) id 2AEF3E0C04; Sun, 15 Mar 2020 18:17:43 +0100 (CET) Message-Id: <6bb18205e2876e4ab804dfc8ec141f895f2fd83a.1584292182.git.mkubecek@suse.cz> In-Reply-To: References: From: Michal Kubecek Subject: [PATCH net 1/3] netlink: allow extack cookie also for error messages To: David Miller , Jakub Kicinski , netdev@vger.kernel.org Cc: Johannes Berg , linux-kernel@vger.kernel.org Date: Sun, 15 Mar 2020 18:17:43 +0100 (CET) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit ba0dc5f6e0ba ("netlink: allow sending extended ACK with cookie on success") introduced a cookie which can be sent to userspace as part of extended ack message in the form of NLMSGERR_ATTR_COOKIE attribute. Currently the cookie is ignored if error code is non-zero but there is no technical reason for such limitation and it can be useful to provide machine parseable information as part of an error message. Include NLMSGERR_ATTR_COOKIE whenever the cookie has been set, regardless of error code. Signed-off-by: Michal Kubecek --- net/netlink/af_netlink.c | 43 ++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 5313f1cec170..2f234791b879 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -2392,19 +2392,14 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err, 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 && extack->bad_attr) - tlvlen += nla_total_size(sizeof(u32)); - } else { + if (err && !(nlk->flags & NETLINK_F_CAP_ACK)) + payload += nlmsg_len(nlh); + else flags |= NLM_F_CAPPED; - - if (nlk_has_extack && extack && extack->cookie_len) - tlvlen += nla_total_size(extack->cookie_len); - } + if (err && nlk_has_extack && extack && extack->bad_attr) + tlvlen += nla_total_size(sizeof(u32)); + if (nlk_has_extack && extack && extack->cookie_len) + tlvlen += nla_total_size(extack->cookie_len); if (tlvlen) flags |= NLM_F_ACK_TLVS; @@ -2427,20 +2422,16 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err, WARN_ON(nla_put_string(skb, NLMSGERR_ATTR_MSG, extack->_msg)); } - if (err) { - if (extack->bad_attr && - !WARN_ON((u8 *)extack->bad_attr < in_skb->data || - (u8 *)extack->bad_attr >= in_skb->data + - in_skb->len)) - WARN_ON(nla_put_u32(skb, NLMSGERR_ATTR_OFFS, - (u8 *)extack->bad_attr - - (u8 *)nlh)); - } else { - if (extack->cookie_len) - WARN_ON(nla_put(skb, NLMSGERR_ATTR_COOKIE, - extack->cookie_len, - extack->cookie)); - } + if (err && extack->bad_attr && + !WARN_ON((u8 *)extack->bad_attr < in_skb->data || + (u8 *)extack->bad_attr >= in_skb->data + + in_skb->len)) + WARN_ON(nla_put_u32(skb, NLMSGERR_ATTR_OFFS, + (u8 *)extack->bad_attr - + (u8 *)nlh)); + if (extack->cookie_len) + WARN_ON(nla_put(skb, NLMSGERR_ATTR_COOKIE, + extack->cookie_len, extack->cookie)); } nlmsg_end(skb, rep); -- 2.25.1