OpenCloudOS-Kernel/arch/powerpc/platforms/pseries
Kajol Jain 348c713441 powerpc/papr_scm: Fix buffer overflow issue with CONFIG_FORTIFY_SOURCE
With CONFIG_FORTIFY_SOURCE enabled, string functions will also perform
dynamic checks for string size which can panic the kernel, like incase
of overflow detection.

In papr_scm, papr_scm_pmu_check_events function uses stat->stat_id with
string operations, to populate the nvdimm_events_map array. Since
stat_id variable is not NULL terminated, the kernel panics with
CONFIG_FORTIFY_SOURCE enabled at boot time.

Below are the logs of kernel panic:

  detected buffer overflow in __fortify_strlen
  ------------[ cut here ]------------
  kernel BUG at lib/string_helpers.c:980!
  Oops: Exception in kernel mode, sig: 5 [#1]
  NIP [c00000000077dad0] fortify_panic+0x28/0x38
  LR [c00000000077dacc] fortify_panic+0x24/0x38
  Call Trace:
  [c0000022d77836e0] [c00000000077dacc] fortify_panic+0x24/0x38 (unreliable)
  [c00800000deb2660] papr_scm_pmu_check_events.constprop.0+0x118/0x220 [papr_scm]
  [c00800000deb2cb0] papr_scm_probe+0x288/0x62c [papr_scm]
  [c0000000009b46a8] platform_probe+0x98/0x150

Fix this issue by using kmemdup_nul() to copy the content of
stat->stat_id directly to the nvdimm_events_map array.

mpe: stat->stat_id comes from the hypervisor, not userspace, so there is
no security exposure.

Fixes: 4c08d4bbc0 ("powerpc/papr_scm: Add perf interface support")
Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220505153451.35503-1-kjain@linux.ibm.com
2022-05-06 12:44:03 +10:00
..
Kconfig powerpc/pseries: Stop selecting PPC_HASH_MMU_NATIVE 2021-12-02 22:57:23 +11:00
Makefile powerpc/pseries: Interface to represent PAPR firmware attributes 2022-03-08 00:05:00 +11:00
cc_platform.c powerpc/pseries/svm: Add a powerpc version of cc_platform_has() 2021-10-04 11:46:33 +02:00
cmm.c mm: remove unneeded includes of <asm/pgalloc.h> 2020-08-07 11:33:26 -07:00
dlpar.c powerpc/pseries/dlpar: use rtas_get_sensor() 2021-06-25 14:47:20 +10:00
dtl.c powerpc: rename powerpc_debugfs_root to arch_debugfs_dir 2021-08-13 22:04:26 +10:00
eeh_pseries.c pseries/eeh: Fix the kdump kernel crash during eeh_pseries_init 2021-10-07 23:37:22 +11:00
event_sources.c powerpc/pseries: Add __init attribute to eligible functions 2021-12-23 22:33:15 +11:00
firmware.c powerpc/pseries: Interface to represent PAPR firmware attributes 2022-03-08 00:05:00 +11:00
hotplug-cpu.c powerpc/pseries: use slab context cpumask allocation in CPU hotplug init 2021-12-16 21:31:46 +11:00
hotplug-memory.c Merge branch 'akpm' (patches from Andrew) 2021-09-08 12:55:35 -07:00
hvCall.S powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
hvCall_inst.c powerpc/pseries: Make symbol '__pcpu_scope_hcall_stats' static 2021-04-14 23:04:17 +10:00
hvconsole.c powerpc updates for 5.3 2019-07-13 16:08:36 -07:00
hvcserver.c powerpc: Use fallthrough pseudo-keyword 2020-07-29 21:09:37 +10:00
ibmebus.c bus: Make remove callback return void 2021-07-21 11:53:42 +02:00
io_event_irq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
iommu.c powerpc/pseries: Add __init attribute to eligible functions 2021-12-23 22:33:15 +11:00
kexec.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
lpar.c powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
lparcfg.c powerpc/pseries: read the lpar name from the firmware 2022-02-02 20:32:10 +11:00
mobility.c powerpc/pseries/vas: Add VAS migration handler 2022-03-08 00:04:56 +11:00
msi.c powerpc/pseries/msi: Let core code check for contiguous entries 2021-12-16 22:16:40 +01:00
nvram.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
of_helpers.c powerpc/pseries: Fix of_read_drc_info_cell() to point at next record 2020-03-25 12:06:43 +11:00
of_helpers.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
papr_platform_attributes.c powerpc/pseries: Interface to represent PAPR firmware attributes 2022-03-08 00:05:00 +11:00
papr_scm.c powerpc/papr_scm: Fix buffer overflow issue with CONFIG_FORTIFY_SOURCE 2022-05-06 12:44:03 +10:00
pci.c powerpc/powernv: remove the nvlink support 2021-05-02 23:35:32 +10:00
pci_dlpar.c powerpc/pseries: Fix use after free in remove_phb_dynamic() 2022-03-21 13:17:47 +11:00
pmem.c powerpc/pseries/pmem: Make symbol 'drc_pmem_match' static 2021-04-14 23:04:17 +10:00
power.c powerpc: declare unmodified attribute_group usages const 2022-03-08 22:15:32 +11:00
pseries.h powerpc/mce: Avoid using irq_work_queue() in realmode 2022-03-08 00:05:00 +11:00
pseries_energy.c powerpc/pseries: Fix drc-info mappings of logical cpus to drc-index 2019-11-13 16:57:57 +11:00
ras.c powerpc/mce: Avoid using irq_work_queue() in realmode 2022-03-08 00:05:00 +11:00
reconfig.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
rng.c powerpc/pseries: Fix missing of_node_put() in rng_init() 2020-08-25 01:31:31 +10:00
rtas-fadump.c powerpc/pseries: Add __init attribute to eligible functions 2021-12-23 22:33:15 +11:00
rtas-fadump.h powerpc/fadump: support holes in kernel boot memory area 2019-09-14 00:04:46 +10:00
setup.c Merge branch 'topic/ppc-kvm' into next 2022-03-28 21:11:24 +11:00
smp.c powerpc/preempt: Don't touch the idle task's preempt_count during hotplug 2021-07-08 23:38:10 +10:00
suspend.c powerpc/pseries/hibernation: remove prepare_late() callback 2020-12-08 21:41:02 +11:00
svm.c Merge branch 'akpm' (patches from Andrew) 2021-11-06 14:08:17 -07:00
vas-sysfs.c powerpc/pseries/vas: Use QoS credits from the userspace 2022-05-04 22:00:47 +10:00
vas.c powerpc/pseries/vas: Use QoS credits from the userspace 2022-05-04 22:00:47 +10:00
vas.h powerpc/pseries/vas: Use QoS credits from the userspace 2022-05-04 22:00:47 +10:00
vio.c powerpc/pseries: Add __init attribute to eligible functions 2021-12-23 22:33:15 +11:00
vphn.c powerpc/vphn: Check for error from hcall_vphn 2020-03-04 22:44:30 +11:00