mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	
				The pagetable_p*_dtor() are exactly the same except for the handling of ptlock. If we make ptlock_free() handle the case where ptdesc->ptl is NULL and remove VM_BUG_ON_PAGE() from pmd_ptlock_free(), we can unify pagetable_p*_dtor() into one function. Let's introduce pagetable_dtor() to do this. Later, pagetable_dtor() will be moved to tlb_remove_ptdesc(), so that ptlock and page table pages can be freed together (regardless of whether RCU is used). This prevents the use-after-free problem where the ptlock is freed immediately but the page table pages is freed later via RCU. Link: https://lkml.kernel.org/r/47f44fff9dc68d9d9e9a0d6c036df275f820598a.1736317725.git.zhengqi.arch@bytedance.com Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> Originally-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Kevin Brodsky <kevin.brodsky@arm.com> Acked-by: Alexander Gordeev <agordeev@linux.ibm.com> [s390] Cc: Alexandre Ghiti <alex@ghiti.fr> Cc: Alexandre Ghiti <alexghiti@rivosinc.com> Cc: Andreas Larsson <andreas@gaisler.com> Cc: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: David Rientjes <rientjes@google.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jann Horn <jannh@google.com> Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Mike Rapoport (Microsoft) <rppt@kernel.org> Cc: Muchun Song <muchun.song@linux.dev> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Ryan Roberts <ryan.roberts@arm.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com> Cc: Will Deacon <will@kernel.org> Cc: Yu Zhao <yuzhao@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>  | 
			||
|---|---|---|
| .. | ||
| adc.h | ||
| addrspace.h | ||
| alignment.h | ||
| asm-offsets.h | ||
| atomic-grb.h | ||
| atomic-irq.h | ||
| atomic-llsc.h | ||
| atomic.h | ||
| barrier.h | ||
| bitops-cas.h | ||
| bitops-grb.h | ||
| bitops-llsc.h | ||
| bitops-op32.h | ||
| bitops.h | ||
| bl_bit.h | ||
| bl_bit_32.h | ||
| bug.h | ||
| cache.h | ||
| cache_insns.h | ||
| cache_insns_32.h | ||
| cacheflush.h | ||
| cachetype.h | ||
| checksum.h | ||
| checksum_32.h | ||
| clock.h | ||
| cmpxchg-cas.h | ||
| cmpxchg-grb.h | ||
| cmpxchg-irq.h | ||
| cmpxchg-llsc.h | ||
| cmpxchg-xchg.h | ||
| cmpxchg.h | ||
| device.h | ||
| dma-register.h | ||
| dma.h | ||
| dmabrg.h | ||
| dwarf.h | ||
| elf.h | ||
| entry-macros.S | ||
| extable.h | ||
| fixmap.h | ||
| flat.h | ||
| fpu.h | ||
| freq.h | ||
| ftrace.h | ||
| futex-cas.h | ||
| futex-irq.h | ||
| futex-llsc.h | ||
| futex.h | ||
| hardirq.h | ||
| hd64461.h | ||
| heartbeat.h | ||
| hugetlb.h | ||
| hw_breakpoint.h | ||
| hw_irq.h | ||
| i2c-sh7760.h | ||
| io.h | ||
| io_generic.h | ||
| io_noioport.h | ||
| io_trapped.h | ||
| irq.h | ||
| irqflags.h | ||
| Kbuild | ||
| kdebug.h | ||
| kexec.h | ||
| kgdb.h | ||
| kprobes.h | ||
| linkage.h | ||
| machvec.h | ||
| mmiowb.h | ||
| mmu.h | ||
| mmu_context.h | ||
| mmu_context_32.h | ||
| mmzone.h | ||
| module.h | ||
| page.h | ||
| pci.h | ||
| perf_event.h | ||
| pgalloc.h | ||
| pgtable-2level.h | ||
| pgtable-3level.h | ||
| pgtable.h | ||
| pgtable_32.h | ||
| platform_early.h | ||
| posix_types.h | ||
| processor.h | ||
| processor_32.h | ||
| ptrace.h | ||
| ptrace_32.h | ||
| push-switch.h | ||
| reboot.h | ||
| romimage-macros.h | ||
| rtc.h | ||
| seccomp.h | ||
| sections.h | ||
| setup.h | ||
| sfp-machine.h | ||
| sh7760fb.h | ||
| sh_bios.h | ||
| shmparam.h | ||
| siu.h | ||
| smc37c93x.h | ||
| smp-ops.h | ||
| smp.h | ||
| sparsemem.h | ||
| spi.h | ||
| spinlock-cas.h | ||
| spinlock-llsc.h | ||
| spinlock.h | ||
| spinlock_types.h | ||
| sram.h | ||
| stackprotector.h | ||
| stacktrace.h | ||
| string.h | ||
| string_32.h | ||
| suspend.h | ||
| switch_to.h | ||
| switch_to_32.h | ||
| syscall.h | ||
| syscall_32.h | ||
| syscalls.h | ||
| syscalls_32.h | ||
| thread_info.h | ||
| timex.h | ||
| tlb.h | ||
| tlbflush.h | ||
| topology.h | ||
| traps.h | ||
| traps_32.h | ||
| types.h | ||
| uaccess.h | ||
| uaccess_32.h | ||
| uncached.h | ||
| unistd.h | ||
| unwinder.h | ||
| user.h | ||
| vermagic.h | ||
| vmalloc.h | ||
| vmlinux.lds.h | ||
| watchdog.h | ||
| word-at-a-time.h | ||