Thread (6 messages) flat view 6 messages, 2 authors, 2019-10-10

Re: [PATCH net-next] genetlink: do not parse attributes for families with zero maxattr

From: Michal Kubecek <hidden>
Date: 2019-10-10 10:45:48
Also in: lkml

On Thu, Oct 10, 2019 at 11:31:53AM +0200, Jiri Pirko wrote:
Wed, Oct 09, 2019 at 06:44:32PM CEST, mkubecek@suse.cz wrote:
quoted
Commit c10e6cf85e7d ("net: genetlink: push attrbuf allocation and parsing
to a separate function") moved attribute buffer allocation and attribute
parsing from genl_family_rcv_msg_doit() into a separate function
genl_family_rcv_msg_attrs_parse() which, unlike the previous code, calls
__nlmsg_parse() even if family->maxattr is 0 (i.e. the family does its own
parsing). The parser error is ignored and does not propagate out of
genl_family_rcv_msg_attrs_parse() but an error message ("Unknown attribute
type") is set in extack and if further processing generates no error or
warning, it stays there and is interpreted as a warning by userspace.

Dumpit requests are not affected as genl_family_rcv_msg_dumpit() bypasses
the call of genl_family_rcv_msg_doit() if family->maxattr is zero. Do the
same also in genl_family_rcv_msg_doit().

Fixes: c10e6cf85e7d ("net: genetlink: push attrbuf allocation and parsing to a separate function")
Signed-off-by: Michal Kubecek <redacted>
---
net/netlink/genetlink.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index ecc2bd3e73e4..c4bf8830eedf 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -639,21 +639,23 @@ static int genl_family_rcv_msg_doit(const struct genl_family *family,
				    const struct genl_ops *ops,
				    int hdrlen, struct net *net)
{
-	struct nlattr **attrbuf;
+	struct nlattr **attrbuf = NULL;
	struct genl_info info;
	int err;

	if (!ops->doit)
		return -EOPNOTSUPP;

+	if (!family->maxattr)
+		goto no_attrs;
	attrbuf = genl_family_rcv_msg_attrs_parse(family, nlh, extack,
						  ops, hdrlen,
						  GENL_DONT_VALIDATE_STRICT,
-						  family->maxattr &&
						  family->parallel_ops);
Please also adjust genl_family_rcv_msg_attrs_free() call arg
below in this function in the similar way.
Sent v2.

Michal
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help