| From foo@baz Fri Jan 22 01:21:57 PM CET 2021 |
| From: Petr Machata <me@pmachata.org> |
| Date: Tue, 22 Dec 2020 22:49:44 +0100 |
| Subject: net: dcb: Validate netlink message in DCB handler |
| |
| From: Petr Machata <me@pmachata.org> |
| |
| [ Upstream commit 826f328e2b7e8854dd42ea44e6519cd75018e7b1 ] |
| |
| DCB uses the same handler function for both RTM_GETDCB and RTM_SETDCB |
| messages. dcb_doit() bounces RTM_SETDCB mesasges if the user does not have |
| the CAP_NET_ADMIN capability. |
| |
| However, the operation to be performed is not decided from the DCB message |
| type, but from the DCB command. Thus DCB_CMD_*_GET commands are used for |
| reading DCB objects, the corresponding SET and DEL commands are used for |
| manipulation. |
| |
| The assumption is that set-like commands will be sent via an RTM_SETDCB |
| message, and get-like ones via RTM_GETDCB. However, this assumption is not |
| enforced. |
| |
| It is therefore possible to manipulate DCB objects without CAP_NET_ADMIN |
| capability by sending the corresponding command in an RTM_GETDCB message. |
| That is a bug. Fix it by validating the type of the request message against |
| the type used for the response. |
| |
| Fixes: 2f90b8657ec9 ("ixgbe: this patch adds support for DCB to the kernel and ixgbe driver") |
| Signed-off-by: Petr Machata <me@pmachata.org> |
| Link: https://lore.kernel.org/r/a2a9b88418f3a58ef211b718f2970128ef9e3793.1608673640.git.me@pmachata.org |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/dcb/dcbnl.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/net/dcb/dcbnl.c |
| +++ b/net/dcb/dcbnl.c |
| @@ -1756,6 +1756,8 @@ static int dcb_doit(struct sk_buff *skb, |
| fn = &reply_funcs[dcb->cmd]; |
| if (!fn->cb) |
| return -EOPNOTSUPP; |
| + if (fn->type != nlh->nlmsg_type) |
| + return -EPERM; |
| |
| if (!tb[DCB_ATTR_IFNAME]) |
| return -EINVAL; |