Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'x86-urgent-2026-04-05' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Ingo Molnar:

- Fix kexec crash on KCOV-instrumented kernels (Aleksandr Nogikh)

- Fix Geode platform driver on-stack property data use-after-return
bug (Dmitry Torokhov)

* tag 'x86-urgent-2026-04-05' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/platform/geode: Fix on-stack property data use-after-return bug
x86/kexec: Disable KCOV instrumentation after load_segments()

+34 -6
+14
arch/x86/kernel/Makefile
··· 44 44 KCOV_INSTRUMENT_unwind_frame.o := n 45 45 KCOV_INSTRUMENT_unwind_guess.o := n 46 46 47 + # Disable KCOV to prevent crashes during kexec: load_segments() invalidates 48 + # the GS base, which KCOV relies on for per-CPU data. 49 + # 50 + # As KCOV and KEXEC compatibility should be preserved (e.g. syzkaller is 51 + # using it to collect crash dumps during kernel fuzzing), disabling 52 + # KCOV for KEXEC kernels is not an option. Selectively disabling KCOV 53 + # instrumentation for individual affected functions can be fragile, while 54 + # adding more checks to KCOV would slow it down. 55 + # 56 + # As a compromise solution, disable KCOV instrumentation for the whole 57 + # source code file. If its coverage is ever needed, other approaches 58 + # should be considered. 59 + KCOV_INSTRUMENT_machine_kexec_64.o := n 60 + 47 61 CFLAGS_head32.o := -fno-stack-protector 48 62 CFLAGS_head64.o := -fno-stack-protector 49 63 CFLAGS_irq.o := -I $(src)/../include/asm/trace
+2
arch/x86/mm/Makefile
··· 4 4 KCOV_INSTRUMENT_mem_encrypt.o := n 5 5 KCOV_INSTRUMENT_mem_encrypt_amd.o := n 6 6 KCOV_INSTRUMENT_pgprot.o := n 7 + # See the "Disable KCOV" comment in arch/x86/kernel/Makefile. 8 + KCOV_INSTRUMENT_physaddr.o := n 7 9 8 10 KASAN_SANITIZE_mem_encrypt.o := n 9 11 KASAN_SANITIZE_mem_encrypt_amd.o := n
+18 -6
arch/x86/platform/geode/geode-common.c
··· 28 28 .properties = geode_gpio_keys_props, 29 29 }; 30 30 31 - static struct property_entry geode_restart_key_props[] = { 32 - { /* Placeholder for GPIO property */ }, 31 + static struct software_node_ref_args geode_restart_gpio_ref; 32 + 33 + static const struct property_entry geode_restart_key_props[] = { 34 + PROPERTY_ENTRY_REF_ARRAY_LEN("gpios", &geode_restart_gpio_ref, 1), 33 35 PROPERTY_ENTRY_U32("linux,code", KEY_RESTART), 34 36 PROPERTY_ENTRY_STRING("label", "Reset button"), 35 37 PROPERTY_ENTRY_U32("debounce-interval", 100), ··· 66 64 struct platform_device *pd; 67 65 int err; 68 66 69 - geode_restart_key_props[0] = PROPERTY_ENTRY_GPIO("gpios", 70 - &geode_gpiochip_node, 67 + geode_restart_gpio_ref = SOFTWARE_NODE_REFERENCE(&geode_gpiochip_node, 71 68 pin, GPIO_ACTIVE_LOW); 72 69 73 70 err = software_node_register_node_group(geode_gpio_keys_swnodes); ··· 100 99 const struct software_node *group[MAX_LEDS + 2] = { 0 }; 101 100 struct software_node *swnodes; 102 101 struct property_entry *props; 102 + struct software_node_ref_args *gpio_refs; 103 103 struct platform_device_info led_info = { 104 104 .name = "leds-gpio", 105 105 .id = PLATFORM_DEVID_NONE, ··· 129 127 goto err_free_swnodes; 130 128 } 131 129 130 + gpio_refs = kzalloc_objs(*gpio_refs, n_leds); 131 + if (!gpio_refs) { 132 + err = -ENOMEM; 133 + goto err_free_props; 134 + } 135 + 132 136 group[0] = &geode_gpio_leds_node; 133 137 for (i = 0; i < n_leds; i++) { 134 138 node_name = kasprintf(GFP_KERNEL, "%s:%d", label, i); ··· 143 135 goto err_free_names; 144 136 } 145 137 138 + gpio_refs[i] = SOFTWARE_NODE_REFERENCE(&geode_gpiochip_node, 139 + leds[i].pin, 140 + GPIO_ACTIVE_LOW); 146 141 props[i * 3 + 0] = 147 - PROPERTY_ENTRY_GPIO("gpios", &geode_gpiochip_node, 148 - leds[i].pin, GPIO_ACTIVE_LOW); 142 + PROPERTY_ENTRY_REF_ARRAY_LEN("gpios", &gpio_refs[i], 1); 149 143 props[i * 3 + 1] = 150 144 PROPERTY_ENTRY_STRING("linux,default-trigger", 151 145 leds[i].default_on ? ··· 181 171 err_free_names: 182 172 while (--i >= 0) 183 173 kfree(swnodes[i].name); 174 + kfree(gpio_refs); 175 + err_free_props: 184 176 kfree(props); 185 177 err_free_swnodes: 186 178 kfree(swnodes);