android_kernel_xiaomi_sm8450/net/sched
Eric Dumazet 3b55ce96ef sch_netem: fix issues in netem_change() vs get_dist_table()
commit 11b73313c12403f617b47752db0ab3deef201af7 upstream.

In blamed commit, I missed that get_dist_table() was allocating
memory using GFP_KERNEL, and acquiring qdisc lock to perform
the swap of newly allocated table with current one.

In this patch, get_dist_table() is allocating memory and
copy user data before we acquire the qdisc lock.

Then we perform swap operations while being protected by the lock.

Note that after this patch netem_change() no longer can do partial changes.
If an error is returned, qdisc conf is left unchanged.

Fixes: 2174a08db80d ("sch_netem: acquire qdisc lock in netem_change()")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Link: https://lore.kernel.org/r/20230622181503.2327695-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-08-16 18:21:03 +02:00
..
act_api.c net/sched: act_api: Notify user space if any actions were flushed before error 2022-07-07 17:52:18 +02:00
act_bpf.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_connmark.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_csum.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_ct.c netfilter: conntrack: Fix data-races around ct mark 2022-12-02 17:40:00 +01:00
act_ctinfo.c net/sched: act_ctinfo: use percpu stats 2023-02-22 12:55:59 +01:00
act_gact.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_gate.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_ife.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_ipt.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_meta_mark.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
act_meta_skbprio.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
act_meta_skbtcindex.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
act_mirred.c act_mirred: use the backlog for nested calls to mirred ingress 2023-05-30 12:57:56 +01:00
act_mpls.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_nat.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_pedit.c net/sched: act_pedit: Add size check for TCA_PEDIT_PARMS_EX 2023-07-27 08:44:09 +02:00
act_police.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_sample.c net/sched: act_sample: fix action bind logic 2023-03-11 16:40:13 +01:00
act_simple.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_skbedit.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_skbmod.c flow_offload: fill flags to action structure 2023-02-22 12:55:59 +01:00
act_tunnel_key.c net/sched: act_tunnel_key: fix OOB write in case of IPv6 ERSPAN tunnels 2020-10-20 21:10:41 -07:00
act_vlan.c net/sched: act_vlan: Fix modify to allow 0 2021-07-14 16:56:19 +02:00
cls_api.c net/sched: cls_api: Fix lockup on flushing explicitly created chain 2023-06-21 15:45:40 +02:00
cls_basic.c net_sched: fix ops->bind_class() implementations 2020-01-27 10:51:43 +01:00
cls_bpf.c net_sched: fix ops->bind_class() implementations 2020-01-27 10:51:43 +01:00
cls_cgroup.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cls_flow.c Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
cls_flower.c net/sched: flower: Ensure both minimum and maximum ports are specified 2023-07-27 08:44:24 +02:00
cls_fw.c net/sched: cls_fw: No longer copy tcf_result on update to avoid use-after-free 2023-08-11 11:57:49 +02:00
cls_matchall.c net: qos offload add flow status with dropped count 2020-06-19 12:53:30 -07:00
cls_route.c net/sched: cls_route: No longer copy tcf_result on update to avoid use-after-free 2023-08-11 11:57:49 +02:00
cls_rsvp6.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cls_rsvp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cls_rsvp.h cls_rsvp: fix rsvp_policy 2020-02-01 12:25:06 -08:00
cls_u32.c net/sched: cls_u32: No longer copy tcf_result on update to avoid use-after-free 2023-08-11 11:57:49 +02:00
em_canid.c net: sched: kerneldoc fixes 2020-07-13 17:20:40 -07:00
em_cmp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
em_ipset.c sched: consistently handle layer3 header accesses in the presence of VLANs 2020-07-03 14:34:53 -07:00
em_ipt.c sched: consistently handle layer3 header accesses in the presence of VLANs 2020-07-03 14:34:53 -07:00
em_meta.c sched: consistently handle layer3 header accesses in the presence of VLANs 2020-07-03 14:34:53 -07:00
em_nbyte.c net: sched: Replace zero-length array with flexible-array member 2020-02-29 21:27:02 -08:00
em_text.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
em_u32.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ematch.c net_sched: reject TCF_EM_SIMPLE case for complex ematch module 2023-01-14 10:16:12 +01:00
Kconfig net/sched: Retire tcindex classifier 2023-03-11 16:40:08 +01:00
Makefile net/sched: Retire tcindex classifier 2023-03-11 16:40:08 +01:00
sch_api.c net/sched: Refactor qdisc_graft() for ingress and clsact Qdiscs 2023-06-28 10:28:06 +02:00
sch_atm.c net: sched: atm: dont intepret cls results when asked to drop 2023-01-14 10:16:47 +01:00
sch_blackhole.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_cake.c net: sched: cake: fix null pointer access issue when cake_init() fails 2022-10-30 09:41:17 +01:00
sch_cbq.c net: sched: cbq: dont intepret cls results when asked to drop 2023-01-14 10:16:47 +01:00
sch_cbs.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_choke.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_codel.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_drr.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_dsmark.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_etf.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_ets.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_fifo.c net_sched: fix NULL deref in fifo_set_limit() 2021-10-13 10:04:26 +02:00
sch_fq_codel.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_fq_pie.c net/sched: fq_pie: ensure reasonable TCA_FQ_PIE_QUANTUM values 2023-06-14 11:09:39 +02:00
sch_fq.c net/sched: sch_fq: fix integer overflow of "credit" 2023-05-17 11:47:53 +02:00
sch_generic.c net/sched: fix netdevice reference leaks in attach_default_qdiscs() 2022-09-08 11:11:36 +02:00
sch_gred.c net: sched: validate stab values 2021-03-30 14:31:57 +02:00
sch_hfsc.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_hhf.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_htb.c net: sched: sch: Fix off by one in htb_activate_prios() 2023-02-22 12:56:00 +01:00
sch_ingress.c net/sched: Reserve TC_H_INGRESS (TC_H_CLSACT) for ingress (clsact) Qdiscs 2023-06-09 10:30:06 +02:00
sch_mq.c net: sched: update default qdisc visibility after Tx queue cnt changes 2021-11-18 14:03:53 +01:00
sch_mqprio.c net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64 2023-08-11 11:57:37 +02:00
sch_multiq.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_netem.c sch_netem: fix issues in netem_change() vs get_dist_table() 2023-08-16 18:21:03 +02:00
sch_pie.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_plug.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_prio.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_qfq.c net/sched: sch_qfq: reintroduce lmax bound check for MTU 2023-07-27 08:44:33 +02:00
sch_red.c net: sched: Fix use after free in red_enqueue() 2022-11-10 18:14:18 +01:00
sch_sfb.c net: sched: sfb: fix null pointer access issue when sfb_init() fails 2022-10-30 09:41:17 +01:00
sch_sfq.c net: sched: validate stab values 2021-03-30 14:31:57 +02:00
sch_skbprio.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_taprio.c Revert "net/sched: taprio: make qdisc_leaf() see the per-netdev-queue pfifo child qdiscs" 2023-02-25 11:55:04 +01:00
sch_tbf.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_teql.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00