android_kernel_motorola_sm6375/net/sched
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ido Schimmel 2b157c3c5d net/sched: act_mpls: Fix warning during failed attribute validation
[ Upstream commit 9e17f99220d111ea031b44153fdfe364b0024ff2 ]

The 'TCA_MPLS_LABEL' attribute is of 'NLA_U32' type, but has a
validation type of 'NLA_VALIDATE_FUNCTION'. This is an invalid
combination according to the comment above 'struct nla_policy':

"
Meaning of `validate' field, use via NLA_POLICY_VALIDATE_FN:
   NLA_BINARY           Validation function called for the attribute.
   All other            Unused - but note that it's a union
"

This can trigger the warning [1] in nla_get_range_unsigned() when
validation of the attribute fails. Despite being of 'NLA_U32' type, the
associated 'min'/'max' fields in the policy are negative as they are
aliased by the 'validate' field.

Fix by changing the attribute type to 'NLA_BINARY' which is consistent
with the above comment and all other users of NLA_POLICY_VALIDATE_FN().
As a result, move the length validation to the validation function.

No regressions in MPLS tests:

 # ./tdc.py -f tc-tests/actions/mpls.json
 [...]
 # echo $?
 0

[1]
WARNING: CPU: 0 PID: 17743 at lib/nlattr.c:118
nla_get_range_unsigned+0x1d8/0x1e0 lib/nlattr.c:117
Modules linked in:
CPU: 0 PID: 17743 Comm: syz-executor.0 Not tainted 6.1.0-rc8 #3
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.13.0-48-gd9c812dda519-prebuilt.qemu.org 04/01/2014
RIP: 0010:nla_get_range_unsigned+0x1d8/0x1e0 lib/nlattr.c:117
[...]
Call Trace:
 <TASK>
 __netlink_policy_dump_write_attr+0x23d/0x990 net/netlink/policy.c:310
 netlink_policy_dump_write_attr+0x22/0x30 net/netlink/policy.c:411
 netlink_ack_tlv_fill net/netlink/af_netlink.c:2454 [inline]
 netlink_ack+0x546/0x760 net/netlink/af_netlink.c:2506
 netlink_rcv_skb+0x1b7/0x240 net/netlink/af_netlink.c:2546
 rtnetlink_rcv+0x18/0x20 net/core/rtnetlink.c:6109
 netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline]
 netlink_unicast+0x5e9/0x6b0 net/netlink/af_netlink.c:1345
 netlink_sendmsg+0x739/0x860 net/netlink/af_netlink.c:1921
 sock_sendmsg_nosec net/socket.c:714 [inline]
 sock_sendmsg net/socket.c:734 [inline]
 ____sys_sendmsg+0x38f/0x500 net/socket.c:2482
 ___sys_sendmsg net/socket.c:2536 [inline]
 __sys_sendmsg+0x197/0x230 net/socket.c:2565
 __do_sys_sendmsg net/socket.c:2574 [inline]
 __se_sys_sendmsg net/socket.c:2572 [inline]
 __x64_sys_sendmsg+0x42/0x50 net/socket.c:2572
 do_syscall_x64 arch/x86/entry/common.c:50 [inline]
 do_syscall_64+0x2b/0x70 arch/x86/entry/common.c:80
 entry_SYSCALL_64_after_hwframe+0x63/0xcd

Link: https://lore.kernel.org/netdev/CAO4mrfdmjvRUNbDyP0R03_DrD_eFCLCguz6OxZ2TYRSv0K9gxA@mail.gmail.com/
Fixes: 2a2ea50870 ("net: sched: add mpls manipulation actions to TC")
Reported-by: Wei Chen <harperchen1110@gmail.com>
Tested-by: Wei Chen <harperchen1110@gmail.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Link: https://lore.kernel.org/r/20230107171004.608436-1-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-01-18 11:42:04 +01:00
..
act_api.c net/sched: act_api: Notify user space if any actions were flushed before error 2022-07-07 17:36:50 +02:00
act_bpf.c
act_connmark.c
act_csum.c
act_ct.c net/sched: act_ct: fix err check for nf_conntrack_confirm 2021-07-25 14:35:14 +02:00
act_ctinfo.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: drop dst for the direction from egress to ingress 2021-11-26 10:47:19 +01:00
act_mpls.c net/sched: act_mpls: Fix warning during failed attribute validation 2023-01-18 11:42:04 +01:00
act_nat.c
act_pedit.c net/sched: act_pedit: sanitize shift argument before usage 2022-05-25 09:14:35 +02:00
act_police.c net/sched: act_police: more accurate MTU policing 2022-06-22 14:11:24 +02:00
act_sample.c net: sched: lock action when translating it to flow_action infra 2021-12-22 09:29:37 +01:00
act_simple.c
act_skbedit.c
act_skbmod.c net/sched: act_skbmod: Skip non-Ethernet packets 2021-07-28 13:30:57 +02:00
act_tunnel_key.c
act_vlan.c net/sched: act_vlan: Fix modify to allow 0 2021-07-14 16:53:27 +02:00
cls_api.c net: sched: fix possible refcount leak in tc_new_tfilter() 2022-09-28 11:04:07 +02:00
cls_basic.c
cls_bpf.c
cls_cgroup.c
cls_flow.c
cls_flower.c net/sched: flower: fix parsing of ethertype following VLAN header 2022-04-20 09:19:34 +02:00
cls_fw.c
cls_matchall.c
cls_route.c net_sched: cls_route: disallow handle of 0 2022-08-25 11:18:18 +02:00
cls_rsvp.c
cls_rsvp.h
cls_rsvp6.c
cls_tcindex.c net: sched: fix memory leak in tcindex_set_parms 2023-01-18 11:41:57 +01:00
cls_u32.c net/sched: cls_u32: fix possible leak in u32_init_knode() 2022-04-27 13:50:47 +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:41:33 +01:00
Kconfig
Makefile
sch_api.c net: sched: disallow noqueue for qdisc classes 2023-01-18 11:42:00 +01:00
sch_atm.c net: sched: atm: dont intepret cls results when asked to drop 2023-01-18 11:41:58 +01:00
sch_blackhole.c
sch_cake.c net: sched: cake: fix null pointer access issue when cake_init() fails 2022-10-29 10:20:35 +02:00
sch_cbq.c net: sched: cbq: dont intepret cls results when asked to drop 2023-01-18 11:41:58 +01:00
sch_cbs.c
sch_choke.c net: sched: validate stab values 2021-03-30 14:35:25 +02:00
sch_codel.c
sch_drr.c
sch_dsmark.c sch_dsmark: fix a NULL deref in qdisc_reset() 2021-06-03 08:59:15 +02:00
sch_etf.c
sch_fifo.c net_sched: fix NULL deref in fifo_set_limit() 2021-10-13 10:08:18 +02:00
sch_fq.c
sch_fq_codel.c fq_codel: reject silly quantum parameters 2021-09-22 12:26:45 +02:00
sch_generic.c net: Fix data-races around weight_p and dev_weight_[rt]x_bias. 2022-09-05 10:27:41 +02:00
sch_gred.c net: sched: validate stab values 2021-03-30 14:35:25 +02:00
sch_hfsc.c
sch_hhf.c
sch_htb.c
sch_ingress.c
sch_mq.c net: sched: update default qdisc visibility after Tx queue cnt changes 2021-11-17 09:48:28 +01:00
sch_mqprio.c net: sched: update default qdisc visibility after Tx queue cnt changes 2021-11-17 09:48:28 +01:00
sch_multiq.c
sch_netem.c net/sched: sch_netem: Fix arithmetic in netem_dump() for 32-bit platforms 2022-06-29 08:58:46 +02:00
sch_pie.c
sch_plug.c
sch_prio.c
sch_qfq.c sch_qfq: prevent shift-out-of-bounds in qfq_init_qdisc 2022-01-11 15:23:32 +01:00
sch_red.c net: sched: Fix use after free in red_enqueue() 2022-11-10 17:57:50 +01:00
sch_sfb.c sch_sfb: Also store skb len before calling child enqueue 2022-09-15 12:04:56 +02:00
sch_sfq.c net: sched: validate stab values 2021-03-30 14:35:25 +02:00
sch_skbprio.c
sch_taprio.c net/sched: taprio: make qdisc_leaf() see the per-netdev-queue pfifo child qdiscs 2022-09-28 11:04:07 +02:00
sch_tbf.c net: sched: tbf: don't call qdisc_put() while holding tree lock 2022-09-15 12:04:50 +02:00
sch_teql.c net: sched: sch_teql: fix null-pointer dereference 2021-04-14 08:24:12 +02:00