Commit c95fdeb
PCI: pci-epf-test: Fix free_mem in case of epc_set_bar failure
This fixes a double free bug exhibited by the pci_epf_test_set_bar function
in sequence from pci_epf_test_set_bar
ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no,
epf_bar);
if (ret) {
pci_epf_free_space(epf, epf_test->reg[bar], bar,
PRIMARY_INTERFACE);
dev_err(dev, "Failed to set BAR%d\n", bar);
if (bar == test_reg_bar)
return ret;
}
pci_epf_test_core_init from two contexts: either in bind or from
init_notifier. epf_space should be freed only from bind in case
of error to avoid double free.
This can happens with the init_notifier that is called upon a perst
interrupt from the host (bind/unbind RC driver for instance).
to reproduce:
on the EP . start the epf-test driver
on the RC . unbind / rebind the pcie-stm32 driver 2 times
22.877524] stm32-ep-pcie 48400000.pcie-ep: No free inbound window
[ 22.883688] ------------[ cut here ]------------
[ 22.888324] Trying to vfree() nonexistent vm area (00000000fe826670)
[ 22.894685] WARNING: CPU: 0 PID: 94 at mm/vmalloc.c:2693 __vunmap+0x2d0/0x310
[ 22.901741] Modules linked in: pci_epf_test crct10dif_ce irq_rpmsg
[ 22.907892] CPU: 0 PID: 94 Comm: irq/56-perst_ir Not tainted 6.1.73 torvalds#36 [ 22.914535] Hardware name: STMicroelectronics STM32MP257F VALID3 REVB/ MB1706 (DDR4 Power discrete) + MB1703 (DT)
[ 22.924692] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 22.931635] pc : __vunmap+0x2d0/0x310
[ 22.935364] lr : __vunmap+0x2d0/0x310
[ 22.938993] sp : ffff800009ed3b70
[ 22.942314] x29: ffff800009ed3b70 x28: ffff0000066fac80 x27: ffff0000050bc000
[ 22.949365] x26: 0000000000000000 x25: ffff800008f41968 x24: 0000000000000000
[ 22.956515] x23: 0000000000000000 x22: ffff0000048cd010 x21: 0000000000000000
[ 22.963664] x20: ffff80000a415000 x19: 0000000000000000 x18: ffff000004eb5d10
[ 22.970714] x17: 0000000000000000 x16: 0000000000000000 x15: ffffffffffffffff
[ 22.977864] x14: 0000000000000000 x13: 00000000000001bf x12: ffff000004eb5d10
[ 22.985014] x11: 00000000ffffffea x10: ffff8000097da970 x9 : 0000000000000001
[ 22.992064] x8 : 0000000000000001 x7 : 0000000000017fe8 x6 : c0000000ffffefff
[ 22.999213] x5 : 0000000000057fa8 x4 : 0000000000000000 x3 : ffff800009ed3908
[ 23.006363] x2 : ffff800009782868 x1 : 3776615508e77000 x0 : 0000000000000000
[ 23.013413] Call trace:
[ 23.015830] __vunmap+0x2d0/0x310
[ 23.019158] vunmap+0x28/0x40
[ 23.022083] dma_direct_free+0xf8/0x120
[ 23.025914] dma_free_attrs+0x98/0xe0
[ 23.029641] pci_epf_free_space+0x48/0x80
[ 23.033573] pci_epf_test_core_init+0x1d0/0x1f0 [pci_epf_test]
[ 23.039421] pci_epf_test_notifier+0x18/0x90 [pci_epf_test]
[ 23.044964] atomic_notifier_call_chain+0x60/0x90
[ 23.049599] pci_epc_init_notify+0x28/0x40
[ 23.053730] dw_pcie_ep_init_notify+0x14/0x20
[ 23.058061] stm32_pcie_ep_perst_irq_thread+0x120/0x220
[ 23.063297] irq_thread_fn+0x2c/0xb0
[ 23.066824] irq_thread+0x174/0x260
[ 23.070350] kthread+0x110/0x120
[ 23.073475] ret_from_fork+0x10/0x20
[ 23.077104] ---[ end trace 0000000000000000 ]---
[ 23.081670] Unable to handle kernel paging request at virtual address fffffbfffe000000
Fixes: 349e7a8 ("PCI: endpoint: functions: Add an EP function to test PCI")
Change-Id: Id9d4137cf48c7ae101647e8b76e89978a34523d7
Signed-off-by: Christian Bruel <christian.bruel@foss.st.com>
Reviewed-on: https://gerrit.st.com/c/mpu/oe/st/linux-stm32/+/380530
Domain-Review: Fabrice GASNIER <fabrice.gasnier@foss.st.com>
Reviewed-by: Fabrice GASNIER <fabrice.gasnier@foss.st.com>
ACI: CITOOLS <MDG-smet-aci-reviews@list.st.com>
ACI: CIBUILD <MDG-smet-aci-builds@list.st.com>1 parent 3eb0574 commit c95fdeb
1 file changed
+17
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
735 | 735 | | |
736 | 736 | | |
737 | 737 | | |
738 | | - | |
739 | | - | |
740 | 738 | | |
741 | 739 | | |
742 | 740 | | |
| |||
877 | 875 | | |
878 | 876 | | |
879 | 877 | | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
880 | 892 | | |
881 | 893 | | |
882 | 894 | | |
| |||
931 | 943 | | |
932 | 944 | | |
933 | 945 | | |
934 | | - | |
| 946 | + | |
| 947 | + | |
935 | 948 | | |
| 949 | + | |
936 | 950 | | |
937 | 951 | | |
938 | 952 | | |
| |||
0 commit comments