| From 00faccb49acde7ac6f757d27984306223852db5d Mon Sep 17 00:00:00 2001 |
| From: Cong Wang <xiyou.wangcong@gmail.com> |
| Date: Mon, 7 Oct 2019 13:26:29 -0700 |
| Subject: [PATCH] net_sched: fix backward compatibility for TCA_ACT_KIND |
| |
| commit 4b793feccae3b06764268377a4030eb774ed924e upstream. |
| |
| For TCA_ACT_KIND, we have to keep the backward compatibility too, |
| and rely on nla_strlcpy() to check and terminate the string with |
| a NUL. |
| |
| Note for TC actions, nla_strcmp() is already used to compare kind |
| strings, so we don't need to fix other places. |
| |
| Fixes: 199ce850ce11 ("net_sched: add policy validation for action attributes") |
| Reported-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> |
| Cc: Jamal Hadi Salim <jhs@mojatatu.com> |
| Cc: Jiri Pirko <jiri@resnulli.us> |
| Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> |
| Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> |
| Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/sched/act_api.c b/net/sched/act_api.c |
| index 061e0d047f4f..29ef4912058a 100644 |
| --- a/net/sched/act_api.c |
| +++ b/net/sched/act_api.c |
| @@ -829,8 +829,7 @@ static struct tc_cookie *nla_memdup_cookie(struct nlattr **tb) |
| } |
| |
| static const struct nla_policy tcf_action_policy[TCA_ACT_MAX + 1] = { |
| - [TCA_ACT_KIND] = { .type = NLA_NUL_STRING, |
| - .len = IFNAMSIZ - 1 }, |
| + [TCA_ACT_KIND] = { .type = NLA_STRING }, |
| [TCA_ACT_INDEX] = { .type = NLA_U32 }, |
| [TCA_ACT_COOKIE] = { .type = NLA_BINARY, |
| .len = TC_COOKIE_MAX_SIZE }, |
| @@ -862,8 +861,10 @@ struct tc_action *tcf_action_init_1(struct net *net, struct tcf_proto *tp, |
| NL_SET_ERR_MSG(extack, "TC action kind must be specified"); |
| goto err_out; |
| } |
| - nla_strlcpy(act_name, kind, IFNAMSIZ); |
| - |
| + if (nla_strlcpy(act_name, kind, IFNAMSIZ) >= IFNAMSIZ) { |
| + NL_SET_ERR_MSG(extack, "TC action name too long"); |
| + goto err_out; |
| + } |
| if (tb[TCA_ACT_COOKIE]) { |
| cookie = nla_memdup_cookie(tb); |
| if (!cookie) { |
| -- |
| 2.7.4 |
| |