From: Johannes Berg <johannes@sipsolutions.net>
To: netdev@vger.kernel.org
Cc: David Ahern <dsa@cumulusnetworks.com>,
Pablo Neira Ayuso <pablo@netfilter.org>,
Johannes Berg <johannes.berg@intel.com>
Subject: [PATCH 4/6] netlink: remove NLA_EXACT_LEN_WARN
Date: Fri, 26 Apr 2019 14:13:04 +0200 [thread overview]
Message-ID: <20190426121306.10871-5-johannes@sipsolutions.net> (raw)
In-Reply-To: <20190426121306.10871-1-johannes@sipsolutions.net>
From: Johannes Berg <johannes.berg@intel.com>
Use a validation type instead, so we can later expose
the NLA_* values to userspace for policy descriptions.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
include/net/netlink.h | 15 ++++++++-------
lib/nlattr.c | 16 ++++++++++------
2 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/include/net/netlink.h b/include/net/netlink.h
index 2a75927d368a..0a02d25fb163 100644
--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -182,7 +182,6 @@ enum {
NLA_BITFIELD32,
NLA_REJECT,
NLA_EXACT_LEN,
- NLA_EXACT_LEN_WARN,
NLA_MIN_LEN,
__NLA_TYPE_MAX,
};
@@ -204,6 +203,7 @@ enum nla_policy_validation {
NLA_VALIDATE_MAX,
NLA_VALIDATE_RANGE_PTR,
NLA_VALIDATE_FUNCTION,
+ NLA_VALIDATE_WARN_TOO_LONG,
};
/**
@@ -237,10 +237,10 @@ enum nla_policy_validation {
* just like "All other"
* NLA_BITFIELD32 Unused
* NLA_REJECT Unused
- * NLA_EXACT_LEN Attribute must have exactly this length, otherwise
- * it is rejected.
- * NLA_EXACT_LEN_WARN Attribute should have exactly this length, a warning
- * is logged if it is longer, shorter is rejected.
+ * NLA_EXACT_LEN Attribute should have exactly this length, otherwise
+ * it is rejected or warned about, the latter happening
+ * if and only if the `validation_type' is set to
+ * NLA_VALIDATE_WARN_TOO_LONG.
* NLA_MIN_LEN Minimum length of attribute payload
* All other Minimum length of attribute payload
*
@@ -353,8 +353,9 @@ struct nla_policy {
};
#define NLA_POLICY_EXACT_LEN(_len) { .type = NLA_EXACT_LEN, .len = _len }
-#define NLA_POLICY_EXACT_LEN_WARN(_len) { .type = NLA_EXACT_LEN_WARN, \
- .len = _len }
+#define NLA_POLICY_EXACT_LEN_WARN(_len) \
+ { .type = NLA_EXACT_LEN, .len = _len, \
+ .validation_type = NLA_VALIDATE_WARN_TOO_LONG, }
#define NLA_POLICY_MIN_LEN(_len) { .type = NLA_MIN_LEN, .len = _len }
#define NLA_POLICY_ETH_ADDR NLA_POLICY_EXACT_LEN(ETH_ALEN)
diff --git a/lib/nlattr.c b/lib/nlattr.c
index c8789de96046..05761d2a74cc 100644
--- a/lib/nlattr.c
+++ b/lib/nlattr.c
@@ -245,7 +245,9 @@ static int validate_nla(const struct nlattr *nla, int maxtype,
BUG_ON(pt->type > NLA_TYPE_MAX);
if ((nla_attr_len[pt->type] && attrlen != nla_attr_len[pt->type]) ||
- (pt->type == NLA_EXACT_LEN_WARN && attrlen != pt->len)) {
+ (pt->type == NLA_EXACT_LEN &&
+ pt->validation_type == NLA_VALIDATE_WARN_TOO_LONG &&
+ attrlen != pt->len)) {
pr_warn_ratelimited("netlink: '%s': attribute type %d has an invalid length.\n",
current->comm, type);
if (validate & NL_VALIDATE_STRICT_ATTRS) {
@@ -256,11 +258,6 @@ static int validate_nla(const struct nlattr *nla, int maxtype,
}
switch (pt->type) {
- case NLA_EXACT_LEN:
- if (attrlen != pt->len)
- goto out_err;
- break;
-
case NLA_REJECT:
if (extack && pt->reject_message) {
NL_SET_BAD_ATTR(extack, nla);
@@ -373,6 +370,13 @@ static int validate_nla(const struct nlattr *nla, int maxtype,
goto out_err;
break;
+ case NLA_EXACT_LEN:
+ if (pt->validation_type != NLA_VALIDATE_WARN_TOO_LONG) {
+ if (attrlen != pt->len)
+ goto out_err;
+ break;
+ }
+ /* fall through */
default:
if (pt->len)
minlen = pt->len;
--
2.17.2
next prev parent reply other threads:[~2019-04-26 12:13 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-26 12:13 [PATCH 0/6] netlink: expose policies to userspace Johannes Berg
2019-04-26 12:13 ` [PATCH 1/6] netlink: remove type-unsafe validation_data pointer Johannes Berg
2019-04-26 12:13 ` [PATCH 2/6] netlink: extend policy range validation Johannes Berg
2019-04-30 2:49 ` David Miller
2019-04-30 6:51 ` Johannes Berg
2019-04-26 12:13 ` [PATCH 3/6] netlink: allow NLA_MSECS to have " Johannes Berg
2019-04-26 12:13 ` Johannes Berg [this message]
2019-04-26 12:13 ` [PATCH 5/6] netlink: factor out policy range helpers Johannes Berg
2019-04-26 12:13 ` [PATCH 6/6] netlink: add infrastructure to expose policies to userspace Johannes Berg
2019-04-26 18:21 ` Pablo Neira Ayuso
2019-04-26 19:22 ` Johannes Berg
2019-04-27 11:25 ` Pablo Neira Ayuso
2019-04-28 20:03 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190426121306.10871-5-johannes@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=dsa@cumulusnetworks.com \
--cc=johannes.berg@intel.com \
--cc=netdev@vger.kernel.org \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.