]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/smp/32: Remove safe_smp_processor_id()
authorBrian Gerst <brgerst@gmail.com>
Mon, 3 Mar 2025 17:01:15 +0000 (12:01 -0500)
committerIngo Molnar <mingo@kernel.org>
Mon, 3 Mar 2025 19:30:09 +0000 (20:30 +0100)
The safe_smp_processor_id() function was originally implemented in:

  dc2bc768a009 ("stack overflow safe kdump: safe_smp_processor_id()")

to mitigate the CPU number corruption on a stack overflow.  At the time,
x86-32 stored the CPU number in thread_struct, which was located at the
bottom of the task stack and thus vulnerable to an overflow.

The CPU number is now located in percpu memory, so this workaround
is no longer needed.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Uros Bizjak <ubizjak@gmail.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Link: https://lore.kernel.org/r/20250303170115.2176553-1-brgerst@gmail.com
arch/x86/include/asm/cpu.h
arch/x86/include/asm/smp.h
arch/x86/kernel/apic/ipi.c
arch/x86/kernel/crash.c
arch/x86/kernel/reboot.c

index 98eced5084ca7448a512ed3582e5bba752acf9a0..f44bbce18859e79bfa4a6262459cf90f8005c004 100644 (file)
@@ -12,7 +12,6 @@
 #ifndef CONFIG_SMP
 #define cpu_physical_id(cpu)                   boot_cpu_physical_apicid
 #define cpu_acpi_id(cpu)                       0
-#define safe_smp_processor_id()                        0
 #endif /* CONFIG_SMP */
 
 #ifdef CONFIG_HOTPLUG_CPU
index ca073f40698fad98b0ded3ea854dc35c203fa5f4..2419e5086c9eefd38c01b19ce1b1f34f0bc24262 100644 (file)
@@ -136,12 +136,6 @@ __visible void smp_call_function_single_interrupt(struct pt_regs *r);
 #define raw_smp_processor_id()  this_cpu_read(pcpu_hot.cpu_number)
 #define __smp_processor_id() __this_cpu_read(pcpu_hot.cpu_number)
 
-#ifdef CONFIG_X86_32
-extern int safe_smp_processor_id(void);
-#else
-# define safe_smp_processor_id()       smp_processor_id()
-#endif
-
 static inline struct cpumask *cpu_llc_shared_mask(int cpu)
 {
        return per_cpu(cpu_llc_shared_map, cpu);
index 5da693d633b7801599cedddbd05c8cbb9689ac43..23025a3a1db4da602fe0560ffa3d8ce039b426c6 100644 (file)
@@ -287,34 +287,4 @@ void default_send_IPI_mask_logical(const struct cpumask *cpumask, int vector)
        __default_send_IPI_dest_field(mask, vector, APIC_DEST_LOGICAL);
        local_irq_restore(flags);
 }
-
-#ifdef CONFIG_SMP
-static int convert_apicid_to_cpu(u32 apic_id)
-{
-       int i;
-
-       for_each_possible_cpu(i) {
-               if (per_cpu(x86_cpu_to_apicid, i) == apic_id)
-                       return i;
-       }
-       return -1;
-}
-
-int safe_smp_processor_id(void)
-{
-       u32 apicid;
-       int cpuid;
-
-       if (!boot_cpu_has(X86_FEATURE_APIC))
-               return 0;
-
-       apicid = read_apic_id();
-       if (apicid == BAD_APICID)
-               return 0;
-
-       cpuid = convert_apicid_to_cpu(apicid);
-
-       return cpuid >= 0 ? cpuid : 0;
-}
-#endif
 #endif
index 340af81556584823c0b5fb8d02fe249c9f0fe0a5..0be61c45400cd6d6edad1b8cfe0e06fc87500329 100644 (file)
@@ -140,7 +140,7 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
        x86_platform.guest.enc_kexec_begin();
        x86_platform.guest.enc_kexec_finish();
 
-       crash_save_cpu(regs, safe_smp_processor_id());
+       crash_save_cpu(regs, smp_processor_id());
 }
 
 #if defined(CONFIG_KEXEC_FILE) || defined(CONFIG_CRASH_HOTPLUG)
index 9aaac1f9f45b57cce257d94e794557c9c93f9c46..964f6b0a3d68c316cc42336e299b3daa5bc504cd 100644 (file)
@@ -921,7 +921,7 @@ void nmi_shootdown_cpus(nmi_shootdown_cb callback)
                return;
 
        /* Make a note of crashing cpu. Will be used in NMI callback. */
-       crashing_cpu = safe_smp_processor_id();
+       crashing_cpu = smp_processor_id();
 
        shootdown_callback = callback;