In the Linux kernel, the following vulnerability has been resolved:
perf/amlogic: Replace smpprocessorid() with rawsmpprocessorid() in mesonddrpmucreate()
The Amlogic DDR PMU driver mesonddrpmucreate() function incorrectly uses smpprocessorid(), which assumes disabled preemption. This leads to kernel warnings during module loading because mesonddrpmucreate() can be called in a preemptible context.
Following kernel warning and stack trace: [ 31.745138] [ T2289] BUG: using smpprocessorid() in preemptible [00000000] code: (udev-worker)/2289 [ 31.745154] [ T2289] caller is debugsmpprocessorid+0x28/0x38 [ 31.745172] [ T2289] CPU: 4 UID: 0 PID: 2289 Comm: (udev-worker) Tainted: GW 6.14.0-0-MANJARO-ARM #1 59519addcbca6ba8de735e151fd7b9e97aac7ff0 [ 31.745181] [ T2289] Tainted: [W]=WARN [ 31.745183] [ T2289] Hardware name: Hardkernel ODROID-N2Plus (DT) [ 31.745188] [ T2289] Call trace: [ 31.745191] [ T2289] showstack+0x28/0x40 (C) [ 31.745199] [ T2289] dumpstacklvl+0x4c/0x198 [ 31.745205] [ T2289] dumpstack+0x20/0x50 [ 31.745209] [ T2289] checkpreemptiondisabled+0xec/0xf0 [ 31.745213] [ T2289] debugsmpprocessorid+0x28/0x38 [ 31.745216] [ T2289] mesonddrpmucreate+0x200/0x560 [mesonddrpmug12 8095101c49676ad138d9961e3eddaee10acca7bd] [ 31.745237] [ T2289] g12ddrpmuprobe+0x20/0x38 [mesonddrpmug12 8095101c49676ad138d9961e3eddaee10acca7bd] [ 31.745246] [ T2289] platformprobe+0x98/0xe0 [ 31.745254] [ T2289] reallyprobe+0x144/0x3f8 [ 31.745258] [ T2289] _driverprobedevice+0xb8/0x180 [ 31.745261] [ T2289] driverprobedevice+0x54/0x268 [ 31.745264] [ T2289] _driverattach+0x11c/0x288 [ 31.745267] [ T2289] busforeachdev+0xfc/0x160 [ 31.745274] [ T2289] driverattach+0x34/0x50 [ 31.745277] [ T2289] busadddriver+0x160/0x2b0 [ 31.745281] [ T2289] driverregister+0x78/0x120 [ 31.745285] [ T2289] _platformdriverregister+0x30/0x48 [ 31.745288] [ T2289] initmodule+0x30/0xfe0 [mesonddrpmug12 8095101c49676ad138d9961e3eddaee10acca7bd] [ 31.745298] [ T2289] dooneinitcall+0x11c/0x438 [ 31.745303] [ T2289] doinitmodule+0x68/0x228 [ 31.745311] [ T2289] loadmodule+0x118c/0x13a8 [ 31.745315] [ T2289] _arm64sysfinitmodule+0x274/0x390 [ 31.745320] [ T2289] invokesyscall+0x74/0x108 [ 31.745326] [ T2289] el0svccommon+0x90/0xf8 [ 31.745330] [ T2289] doel0svc+0x2c/0x48 [ 31.745333] [ T2289] el0svc+0x60/0x150 [ 31.745337] [ T2289] el0t64synchandler+0x80/0x118 [ 31.745341] [ T2289] el0t64_sync+0x1b8/0x1c0
Changes replaces smpprocessorid() with rawsmpprocessor_id() to ensure safe CPU ID retrieval in preemptible contexts.