• Lin Ma's avatar
    net/sched: act_pedit: Add size check for TCA_PEDIT_PARMS_EX · 30c45b53
    Lin Ma authored
    The attribute TCA_PEDIT_PARMS_EX is not be included in pedit_policy and
    one malicious user could fake a TCA_PEDIT_PARMS_EX whose length is
    smaller than the intended sizeof(struct tc_pedit). Hence, the
    dereference in tcf_pedit_init() could access dirty heap data.
    
    static int tcf_pedit_init(...)
    {
      // ...
      pattr = tb[TCA_PEDIT_PARMS]; // TCA_PEDIT_PARMS is included
      if (!pattr)
        pattr = tb[TCA_PEDIT_PARMS_EX]; // but this is not
    
      // ...
      parm = nla_data(pattr);
    
      index = parm->index; // parm is able to be smaller than 4 bytes
                           // and this dereference gets dirty skb_buff
                           // data created in netlink_sendmsg
    }
    
    This commit adds TCA_PEDIT_PARMS_EX length in pedit_policy which avoid
    the above case, just like the TCA_PEDIT_PARMS.
    
    Fixes: 71d0ed70 ("net/act_pedit: Support using offset relative to the conventional network headers")
    Signed-off-by: default avatarLin Ma <linma@zju.edu.cn>
    Reviewed-by: default avatarPedro Tammela <pctammela@mojatatu.com>
    Link: https://lore.kernel.org/r/20230703110842.590282-1-linma@zju.edu.cnSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    30c45b53
act_pedit.c 15.6 KB