Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
net: deal with integer overflows in kmalloc_reserve()
commit 915d975 upstream. Blamed commit changed: ptr = kmalloc(size); if (ptr) size = ksize(ptr); to: size = kmalloc_size_roundup(size); ptr = kmalloc(size); This allowed various crash as reported by syzbot [1] and Kyle Zeng. Problem is that if @size is bigger than 0x80000001, kmalloc_size_roundup(size) returns 2^32. kmalloc_reserve() uses a 32bit variable (obj_size), so 2^32 is truncated to 0. kmalloc(0) returns ZERO_SIZE_PTR which is not handled by skb allocations. Following trace can be triggered if a netdev->mtu is set close to 0x7fffffff We might in the future limit netdev->mtu to more sensible limit (like KMALLOC_MAX_SIZE). This patch is based on a syzbot report, and also a report and tentative fix from Kyle Zeng. [1] BUG: KASAN: user-memory-access in __build_skb_around net/core/skbuff.c:294 [inline] BUG: KASAN: user-memory-access in __alloc_skb+0x3c4/0x6e8 net/core/skbuff.c:527 Write of size 32 at addr 00000000fffffd10 by task syz-executor.4/22554 CPU: 1 PID: 22554 Comm: syz-executor.4 Not tainted 6.1.39-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/03/2023 Call trace: dump_backtrace+0x1c8/0x1f4 arch/arm64/kernel/stacktrace.c:279 show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:286 __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x120/0x1a0 lib/dump_stack.c:106 print_report+0xe4/0x4b4 mm/kasan/report.c:398 kasan_report+0x150/0x1ac mm/kasan/report.c:495 kasan_check_range+0x264/0x2a4 mm/kasan/generic.c:189 memset+0x40/0x70 mm/kasan/shadow.c:44 __build_skb_around net/core/skbuff.c:294 [inline] __alloc_skb+0x3c4/0x6e8 net/core/skbuff.c:527 alloc_skb include/linux/skbuff.h:1316 [inline] igmpv3_newpack+0x104/0x1088 net/ipv4/igmp.c:359 add_grec+0x81c/0x1124 net/ipv4/igmp.c:534 igmpv3_send_cr net/ipv4/igmp.c:667 [inline] igmp_ifc_timer_expire+0x1b0/0x1008 net/ipv4/igmp.c:810 call_timer_fn+0x1c0/0x9f0 kernel/time/timer.c:1474 expire_timers kernel/time/timer.c:1519 [inline] __run_timers+0x54c/0x710 kernel/time/timer.c:1790 run_timer_softirq+0x28/0x4c kernel/time/timer.c:1803 _stext+0x380/0xfbc ____do_softirq+0x14/0x20 arch/arm64/kernel/irq.c:79 call_on_irq_stack+0x24/0x4c arch/arm64/kernel/entry.S:891 do_softirq_own_stack+0x20/0x2c arch/arm64/kernel/irq.c:84 invoke_softirq kernel/softirq.c:437 [inline] __irq_exit_rcu+0x1c0/0x4cc kernel/softirq.c:683 irq_exit_rcu+0x14/0x78 kernel/softirq.c:695 el0_interrupt+0x7c/0x2e0 arch/arm64/kernel/entry-common.c:717 __el0_irq_handler_common+0x18/0x24 arch/arm64/kernel/entry-common.c:724 el0t_64_irq_handler+0x10/0x1c arch/arm64/kernel/entry-common.c:729 el0t_64_irq+0x1a0/0x1a4 arch/arm64/kernel/entry.S:584 Fixes: 12d6c1d ("skbuff: Proactively round up to kmalloc bucket size") Reported-by: syzbot <syzkaller@googlegroups.com> Reported-by: Kyle Zeng <zengyhkyle@gmail.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Kees Cook <keescook@chromium.org> Cc: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: David S. Miller <davem@davemloft.net> [Ajay: Regenerated the patch for v6.1.y] Signed-off-by: Ajay Kaher <akaher@vmware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- linux-6.1.100-mpi
- linux-6.1.101-mpi
- linux-6.1.102-mpi
- linux-6.1.103-mpi
- linux-6.1.104-mpi
- linux-6.1.105-mpi
- linux-6.1.106-mpi
- linux-6.1.107-mpi
- linux-6.1.108-mpi
- linux-6.1.109-mpi
- linux-6.1.110-mpi
- linux-6.1.111-mpi
- linux-6.1.112-mpi
- linux-6.1.113-mpi
- linux-6.1.114-mpi
- linux-6.1.115-mpi
- linux-6.1.116-mpi
- linux-6.1.117-mpi
- linux-6.1.118-mpi
- linux-6.1.119-mpi
- linux-6.1.120-mpi
- linux-6.1.121-mpi
- linux-6.1.122-mpi
- linux-6.1.123-mpi
- linux-6.1.124-mpi
- linux-6.1.125-mpi
- linux-6.1.126-mpi
- linux-6.1.127-mpi
- linux-6.1.128-mpi
- linux-6.1.129-mpi
- linux-6.1.130-mpi
- linux-6.1.131-mpi
- linux-6.1.132-mpi
- linux-6.1.133-mpi
- linux-6.1.134-mpi
- linux-6.1.135-mpi
- linux-6.1.136-mpi
- linux-6.1.137-mpi
- linux-6.1.138-mpi
- linux-6.1.139-mpi
- linux-6.1.140-mpi
- linux-6.1.141-mpi
- linux-6.1.142-mpi
- linux-6.1.143-mpi
- linux-6.1.144-mpi
- linux-6.1.145-mpi
- linux-6.1.146-mpi
- linux-6.1.147-mpi
- linux-6.1.54-mpi
- linux-6.1.55-mpi
- linux-6.1.56-mpi
- linux-6.1.57-mpi
- linux-6.1.58-mpi
- linux-6.1.59-mpi
- linux-6.1.60-mpi
- linux-6.1.61-mpi
- linux-6.1.62-mpi
- linux-6.1.63-mpi
- linux-6.1.64-mpi
- linux-6.1.65-mpi
- linux-6.1.66-mpi
- linux-6.1.67-mpi
- linux-6.1.68-mpi
- linux-6.1.69-mpi
- linux-6.1.70-mpi
- linux-6.1.71-mpi
- linux-6.1.72-mpi
- linux-6.1.73-mpi
- linux-6.1.74-mpi
- linux-6.1.75-mpi
- linux-6.1.76-mpi
- linux-6.1.77-mpi
- linux-6.1.78-mpi
- linux-6.1.79-mpi
- linux-6.1.80-mpi
- linux-6.1.81-mpi
- linux-6.1.82-mpi
- linux-6.1.83-mpi
- linux-6.1.84-mpi
- linux-6.1.85-mpi
- linux-6.1.86-mpi
- linux-6.1.87-mpi
- linux-6.1.88-mpi
- linux-6.1.89-mpi
- linux-6.1.90-mpi
- linux-6.1.91-mpi
- linux-6.1.92-mpi
- linux-6.1.93-mpi
- linux-6.1.94-mpi
- linux-6.1.95-mpi
- linux-6.1.96-mpi
- linux-6.1.97-mpi
- linux-6.1.98-mpi
- linux-6.1.99-mpi