[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f331c935-85b6-5e1a-d01b-57041aa12419@mojatatu.com>
Date: Tue, 25 Apr 2023 09:27:32 -0300
From: Pedro Tammela <pctammela@...atatu.com>
To: Ido Schimmel <idosch@...sch.org>
Cc: netdev@...r.kernel.org, jhs@...atatu.com, xiyou.wangcong@...il.com,
jiri@...nulli.us, davem@...emloft.net, edumazet@...gle.com,
kuba@...nel.org, pabeni@...hat.com, simon.horman@...igine.com
Subject: Re: [PATCH net-next v5 3/5] net/sched: act_pedit: check static
offsets a priori
On 25/04/2023 09:13, Ido Schimmel wrote:
> On Fri, Apr 21, 2023 at 06:25:15PM -0300, Pedro Tammela wrote:
>> diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
>> index 24976cd4e4a2..cc4dfb01c6c7 100644
>> --- a/net/sched/act_pedit.c
>> +++ b/net/sched/act_pedit.c
>> @@ -251,8 +251,16 @@ static int tcf_pedit_init(struct net *net, struct nlattr *nla,
>> memcpy(nparms->tcfp_keys, parm->keys, ksize);
>>
>> for (i = 0; i < nparms->tcfp_nkeys; ++i) {
>> + u32 offmask = nparms->tcfp_keys[i].offmask;
>> u32 cur = nparms->tcfp_keys[i].off;
>>
>> + /* The AT option can be added to static offsets in the datapath */
>> + if (!offmask && cur % 4) {
>> + NL_SET_ERR_MSG_MOD(extack, "Offsets must be on 32bit boundaries");
>> + ret = -EINVAL;
>> + goto put_chain;
>
> I think this leaks 'nparms->tcfp_keys'. See full syzkaller report here
> [1].
>
Hi Ido,
Indeed! Thanks for the report.
Can you run the syzkaller corpus with the following patch?
---
diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
index fb93d4c1faca..fc945c7e4123 100644
--- a/net/sched/act_pedit.c
+++ b/net/sched/act_pedit.c
@@ -258,7 +258,7 @@ static int tcf_pedit_init(struct net *net, struct
nlattr *nla,
if (!offmask && cur % 4) {
NL_SET_ERR_MSG_MOD(extack, "Offsets must be on
32bit boundaries");
ret = -EINVAL;
- goto put_chain;
+ goto out_free_keys;
}
/* sanitize the shift value for any later use */
@@ -291,6 +291,8 @@ static int tcf_pedit_init(struct net *net, struct
nlattr *nla,
return ret;
+out_free_keys:
+ kfree(nparms->tcfp_keys);
put_chain:
if (goto_ch)
tcf_chain_put_by_act(goto_ch);
Powered by blists - more mailing lists