android_kernel_motorola_sm6225/net/sched
valis 4f38dc8496 net/sched: cls_fw: No longer copy tcf_result on update to avoid use-after-free
commit 76e42ae831991c828cffa8c37736ebfb831ad5ec upstream.

When fw_change() is called on an existing filter, the whole
tcf_result struct is always copied into the new instance of the filter.

This causes a problem when updating a filter bound to a class,
as tcf_unbind_filter() is always called on the old instance in the
success path, decreasing filter_cnt of the still referenced class
and allowing it to be deleted, leading to a use-after-free.

Fix this by no longer copying the tcf_result struct from the old filter.

Fixes: e35a8ee599 ("net: sched: fw use RCU")
Reported-by: valis <sec@valis.email>
Reported-by: Bing-Jhong Billy Jheng <billy@starlabs.sg>
Signed-off-by: valis <sec@valis.email>
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Reviewed-by: Victor Nogueira <victor@mojatatu.com>
Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
Reviewed-by: M A Ramdhan <ramdhan@starlabs.sg>
Link: https://lore.kernel.org/r/20230729123202.72406-3-jhs@mojatatu.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
[ Fixed small conflict as 'fnew->ifindex' assignment is not protected by
  CONFIG_NET_CLS_IND on upstream since a51486266c3 ]
Signed-off-by: Luiz Capitulino <luizcap@amazon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-09-23 10:48:17 +02:00
..
act_api.c
act_bpf.c
act_connmark.c
act_csum.c
act_gact.c
act_ife.c
act_ipt.c
act_meta_mark.c
act_meta_skbprio.c
act_meta_skbtcindex.c
act_mirred.c net/sched: act_mirred: Add carrier check 2023-05-17 11:13:24 +02:00
act_nat.c
act_pedit.c net/sched: act_pedit: Add size check for TCA_PEDIT_PARMS_EX 2023-08-11 11:45:14 +02:00
act_police.c
act_sample.c
act_simple.c
act_skbedit.c
act_skbmod.c
act_tunnel_key.c
act_vlan.c
cls_api.c net: sched: fix possible refcount leak in tc_chain_tmplt_add() 2023-06-14 10:57:13 +02:00
cls_basic.c
cls_bpf.c
cls_cgroup.c
cls_flow.c treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
cls_flower.c net/sched: flower: fix possible OOB write in fl_set_geneve_opt() 2023-06-09 10:23:57 +02:00
cls_fw.c net/sched: cls_fw: No longer copy tcf_result on update to avoid use-after-free 2023-09-23 10:48:17 +02:00
cls_matchall.c
cls_route.c net/sched: cls_route: No longer copy tcf_result on update to avoid use-after-free 2023-08-11 11:45:37 +02:00
cls_rsvp.c
cls_rsvp.h
cls_rsvp6.c
cls_u32.c net/sched: cls_u32: No longer copy tcf_result on update to avoid use-after-free 2023-08-11 11:45:37 +02:00
em_canid.c
em_cmp.c
em_ipset.c
em_ipt.c
em_meta.c
em_nbyte.c
em_text.c
em_u32.c
ematch.c net_sched: reject TCF_EM_SIMPLE case for complex ematch module 2023-01-18 11:30:32 +01:00
Kconfig net/sched: Retire tcindex classifier 2023-03-11 16:31:55 +01:00
Makefile net/sched: Retire tcindex classifier 2023-03-11 16:31:55 +01:00
sch_api.c net/sched: fix a qdisc modification with ambiguous command request 2023-08-30 16:31:54 +02:00
sch_atm.c net: sched: atm: dont intepret cls results when asked to drop 2023-01-18 11:30:50 +01:00
sch_blackhole.c
sch_cake.c treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
sch_cbq.c treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
sch_cbs.c
sch_choke.c
sch_codel.c
sch_drr.c
sch_dsmark.c
sch_etf.c
sch_fifo.c
sch_fq.c
sch_fq_codel.c treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
sch_generic.c net: Fix data-races around weight_p and dev_weight_[rt]x_bias. 2022-09-05 10:26:30 +02:00
sch_gred.c
sch_hfsc.c net/sched: sch_hfsc: Ensure inner classes have fsc curve 2023-09-23 10:48:01 +02:00
sch_hhf.c
sch_htb.c
sch_ingress.c net/sched: Reserve TC_H_INGRESS (TC_H_CLSACT) for ingress (clsact) Qdiscs 2023-06-09 10:23:56 +02:00
sch_mq.c
sch_mqprio.c net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64 2023-08-11 11:45:31 +02:00
sch_multiq.c
sch_netem.c sch_netem: fix issues in netem_change() vs get_dist_table() 2023-08-16 18:13:01 +02:00
sch_pie.c
sch_plug.c net: sched: sch_qfq: Fix UAF in qfq_dequeue() 2023-09-23 10:48:13 +02:00
sch_prio.c
sch_qfq.c net: sched: sch_qfq: Fix UAF in qfq_dequeue() 2023-09-23 10:48:13 +02:00
sch_red.c net: sched: Fix use after free in red_enqueue() 2022-11-10 17:46:52 +01:00
sch_sfb.c sch_sfb: Also store skb len before calling child enqueue 2022-09-15 12:17:06 +02:00
sch_sfq.c treewide: Remove uninitialized_var() usage 2023-08-11 11:45:01 +02:00
sch_skbprio.c
sch_tbf.c
sch_teql.c