]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: shaper: reject QUEUE scope handle with missing id
authorJakub Kicinski <kuba@kernel.org>
Sun, 10 May 2026 19:29:04 +0000 (12:29 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 12 May 2026 14:15:00 +0000 (16:15 +0200)
net_shaper_parse_handle() does not enforce that the user provides
the handle ID. For NODE the ID defaults to UNSPEC for all other
cases it defaults to 0.

For NETDEV 0 is the only option. For QUEUE defaulting to 0 makes
less intuitive sense. Specifically because the behavior should
(IMHO) be the same for all cases where there may be more than
one ID (QUEUE and NODE).

We should either document this as intentional or reject.
I picked the latter with no strong conviction.

Fixes: 4b623f9f0f59 ("net-shapers: implement NL get operation")
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Link: https://patch.msgid.link/20260510192904.3987113-11-kuba@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/shaper/shaper.c

index 4ae3ee6764a0a4978c681cfe7c07922af678cb69..b1c65110f04d37aa141b3e28b7e11cd6c398cbcb 100644 (file)
@@ -477,10 +477,15 @@ static int net_shaper_parse_handle(const struct nlattr *attr,
         * shaper (any other value).
         */
        id_attr = tb[NET_SHAPER_A_HANDLE_ID];
-       if (id_attr)
+       if (id_attr) {
                id = nla_get_u32(id_attr);
-       else if (handle->scope == NET_SHAPER_SCOPE_NODE)
+       } else if (handle->scope == NET_SHAPER_SCOPE_NODE) {
                id = NET_SHAPER_ID_UNSPEC;
+       } else if (handle->scope == NET_SHAPER_SCOPE_QUEUE) {
+               NL_SET_ERR_ATTR_MISS(info->extack, attr,
+                                    NET_SHAPER_A_HANDLE_ID);
+               return -EINVAL;
+       }
 
        if (id && handle->scope == NET_SHAPER_SCOPE_NETDEV) {
                NL_SET_ERR_MSG_ATTR(info->extack, id_attr,