History

devlink: Validate port function request

In order to avoid partial request processing, validate the request before processing it.

Shay Drory committed 3 years ago

Commit c0bea691 parent df268f61 file · +23 −9Browse files

Unified · Split

net/core/devlink.c+23−9
@@ -1632,11 +1632,6 @@ static int devlink_port_function_hw_addr_set(struct devlink_port *port, · 1631 unmodified lines
16321632 }
16331633 }
16341634
1635− if (!ops->port_function_hw_addr_set) {
1636− NL_SET_ERR_MSG_MOD(extack, "Port doesn't support function attributes");
1637− return -EOPNOTSUPP;
1638− }
1639−
16401635 return ops->port_function_hw_addr_set(port, hw_addr, hw_addr_len,
16411636 extack);
16421637 }
@@ -1650,12 +1645,27 @@ static int devlink_port_fn_state_set(struct devlink_port *port, · 7 unmodified lines
16501645
16511646 state = nla_get_u8(attr);
16521647 ops = port->devlink->ops;
1653− if (!ops->port_fn_state_set) {
1654− NL_SET_ERR_MSG_MOD(extack,
1655− "Function does not support state setting");
1648+ return ops->port_fn_state_set(port, state, extack);
1649+}
1650+
1651+static int devlink_port_function_validate(struct devlink_port *devlink_port,
1652+ struct nlattr **tb,
1653+ struct netlink_ext_ack *extack)
1654+{
1655+ const struct devlink_ops *ops = devlink_port->devlink->ops;
1656+
1657+ if (tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] &&
1658+ !ops->port_function_hw_addr_set) {
1659+ NL_SET_ERR_MSG_ATTR(extack, tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR],
1660+ "Port doesn't support function attributes");
16561661 return -EOPNOTSUPP;
16571662 }
1658− return ops->port_fn_state_set(port, state, extack);
1663+ if (tb[DEVLINK_PORT_FN_ATTR_STATE] && !ops->port_fn_state_set) {
1664+ NL_SET_ERR_MSG_ATTR(extack, tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR],
1665+ "Function does not support state setting");
1666+ return -EOPNOTSUPP;
1667+ }
1668+ return 0;
16591669 }
16601670
16611671 static int devlink_port_function_set(struct devlink_port *port,
@@ -1672,6 +1682,10 @@ static int devlink_port_function_set(struct devlink_port *port, · 10 unmodified lines
16721682 return err;
16731683 }
16741684
1685+ err = devlink_port_function_validate(port, tb, extack);
1686+ if (err)
1687+ return err;
1688+
16751689 attr = tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR];
16761690 if (attr) {
16771691 err = devlink_port_function_hw_addr_set(port, attr, extack);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t