net: sched: return error code when tcf proto is not found
authorVlad Buslov <vladbu@mellanox.com>
Mon, 4 Jun 2018 15:32:23 +0000 (18:32 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Jun 2018 21:31:44 +0000 (17:31 -0400)
If requested tcf proto is not found, get and del filter netlink protocol
handlers output error message to extack, but do not return actual error
code. Add check to return ENOENT when result of tp find function is NULL
pointer.

Fixes: c431f89b18a2 ("net: sched: split tc_ctl_tfilter into three handlers")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_api.c

index c06585fb2dc6fd53b47bdc98ae79d55db462671c..cdc3c87c53e62d4db4bb18fa5f59d7889b9866cb 100644 (file)
@@ -1274,7 +1274,7 @@ static int tc_del_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
                               prio, false);
        if (!tp || IS_ERR(tp)) {
                NL_SET_ERR_MSG(extack, "Filter with specified priority/protocol not found");
-               err = PTR_ERR(tp);
+               err = tp ? PTR_ERR(tp) : -ENOENT;
                goto errout;
        } else if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], tp->ops->kind)) {
                NL_SET_ERR_MSG(extack, "Specified filter kind does not match existing one");
@@ -1374,7 +1374,7 @@ static int tc_get_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
                               prio, false);
        if (!tp || IS_ERR(tp)) {
                NL_SET_ERR_MSG(extack, "Filter with specified priority/protocol not found");
-               err = PTR_ERR(tp);
+               err = tp ? PTR_ERR(tp) : -ENOENT;
                goto errout;
        } else if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], tp->ops->kind)) {
                NL_SET_ERR_MSG(extack, "Specified filter kind does not match existing one");