From: Shay Drory <shayd@nvidia.com>
To: <netdev@vger.kernel.org>, <kuba@kernel.org>, <davem@davemloft.net>
Cc: <danielj@nvidia.com>, <yishaih@nvidia.com>, <jiri@nvidia.com>,
<saeedm@nvidia.com>, <parav@nvidia.com>,
Shay Drory <shayd@nvidia.com>
Subject: [PATCH net-next V3 2/8] devlink: Validate port function request
Date: Sun, 4 Dec 2022 16:16:26 +0200 [thread overview]
Message-ID: <20221204141632.201932-3-shayd@nvidia.com> (raw)
In-Reply-To: <20221204141632.201932-1-shayd@nvidia.com>
In order to avoid partial request processing, validate the request
before processing it.
Signed-off-by: Shay Drory <shayd@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
v2->v3:
- replace NL_SET_ERR_MSG_MOD with NL_SET_ERR_MSG_ATTR
---
net/core/devlink.c | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/net/core/devlink.c b/net/core/devlink.c
index fca3ebee97b0..2b6e11277837 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -1644,11 +1644,6 @@ static int devlink_port_function_hw_addr_set(struct devlink_port *port,
}
}
- if (!ops->port_function_hw_addr_set) {
- NL_SET_ERR_MSG_MOD(extack, "Port doesn't support function attributes");
- return -EOPNOTSUPP;
- }
-
return ops->port_function_hw_addr_set(port, hw_addr, hw_addr_len,
extack);
}
@@ -1662,12 +1657,27 @@ static int devlink_port_fn_state_set(struct devlink_port *port,
state = nla_get_u8(attr);
ops = port->devlink->ops;
- if (!ops->port_fn_state_set) {
- NL_SET_ERR_MSG_MOD(extack,
- "Function does not support state setting");
+ return ops->port_fn_state_set(port, state, extack);
+}
+
+static int devlink_port_function_validate(struct devlink_port *devlink_port,
+ struct nlattr **tb,
+ struct netlink_ext_ack *extack)
+{
+ const struct devlink_ops *ops = devlink_port->devlink->ops;
+
+ if (tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] &&
+ !ops->port_function_hw_addr_set) {
+ NL_SET_ERR_MSG_ATTR(extack, tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR],
+ "Port doesn't support function attributes");
return -EOPNOTSUPP;
}
- return ops->port_fn_state_set(port, state, extack);
+ if (tb[DEVLINK_PORT_FN_ATTR_STATE] && !ops->port_fn_state_set) {
+ NL_SET_ERR_MSG_ATTR(extack, tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR],
+ "Function does not support state setting");
+ return -EOPNOTSUPP;
+ }
+ return 0;
}
static int devlink_port_function_set(struct devlink_port *port,
@@ -1684,6 +1694,10 @@ static int devlink_port_function_set(struct devlink_port *port,
return err;
}
+ err = devlink_port_function_validate(port, tb, extack);
+ if (err)
+ return err;
+
attr = tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR];
if (attr) {
err = devlink_port_function_hw_addr_set(port, attr, extack);
--
2.38.1
next prev parent reply other threads:[~2022-12-04 14:17 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-04 14:16 [PATCH net-next V3 0/8] devlink: Add port function attribute to enable/disable Roce and migratable Shay Drory
2022-12-04 14:16 ` [PATCH net-next V3 1/8] net/mlx5: Introduce IFC bits for migratable Shay Drory
2022-12-04 14:16 ` Shay Drory [this message]
2022-12-04 14:16 ` [PATCH net-next V3 3/8] devlink: Move devlink port function hw_addr attr documentation Shay Drory
2022-12-04 14:16 ` [PATCH net-next V3 4/8] devlink: Expose port function commands to control RoCE Shay Drory
2022-12-05 10:12 ` Jiri Pirko
2022-12-05 23:37 ` Shannon Nelson
2022-12-06 2:02 ` Jakub Kicinski
2022-12-06 8:52 ` Jiri Pirko
2022-12-04 14:16 ` [PATCH net-next V3 5/8] net/mlx5: Add generic getters for other functions caps Shay Drory
2022-12-04 14:16 ` [PATCH net-next V3 6/8] net/mlx5: E-Switch, Implement devlink port function cmds to control RoCE Shay Drory
2022-12-04 14:16 ` [PATCH net-next V3 7/8] devlink: Expose port function commands to control migratable Shay Drory
2022-12-05 23:37 ` Shannon Nelson
2022-12-06 1:56 ` Jakub Kicinski
2022-12-06 8:55 ` Jiri Pirko
2022-12-06 17:52 ` Shannon Nelson
2022-12-04 14:16 ` [PATCH net-next V3 8/8] net/mlx5: E-Switch, Implement devlink port function cmds " Shay Drory
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=20221204141632.201932-3-shayd@nvidia.com \
--to=shayd@nvidia.com \
--cc=danielj@nvidia.com \
--cc=davem@davemloft.net \
--cc=jiri@nvidia.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=parav@nvidia.com \
--cc=saeedm@nvidia.com \
--cc=yishaih@nvidia.com \
/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.