Unverified Commit 96bf49b5 authored by Mohanram Meenakshisundaram's avatar Mohanram Meenakshisundaram Committed by Rodrigo Vivi
Browse files

drm/xe/pf: Fix CFI failure in debugfs access



Reading debugfs file (/sys/kernel/debug/dri/0/gt*/pf/adverse_events)
with CFI (Control Flow Integrity) enabled, the kernel panics at
xe_gt_debugfs_simple_show+0x82/0xc0.

xe_gt_debugfs_simple_show() declare a function pointer expecting int
return type, but xe_gt_sriov_pf_monitor_print_events() is void return
type, leading to CFI failure and kernel panic.

[507620.973657] CFI failure at xe_gt_debugfs_simple_show+0x82/0xc0 [xe]
(target: xe_gt_sriov_pf_monitor_print_events+0x0/0x130 [xe]; expected
type: 0xd72c7139)

Fix xe_gt_sriov_pf_monitor_print_events() function by updating to return
an int type.

Fixes: 1c99d3d3 ("drm/xe/pf: Expose PF monitor details via debugfs")
Signed-off-by: default avatarMohanram Meenakshisundaram <mohanram.meenakshisundaram@intel.com>
Reviewed-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://patch.msgid.link/20260514174918.1556357-2-mohanram.meenakshisundaram@intel.com


(cherry picked from commit ff1d386a8359746d9699ac30336e3b0684c68958)
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 9bb2f1d7
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -114,8 +114,10 @@ int xe_gt_sriov_pf_monitor_process_guc2pf(struct xe_gt *gt, const u32 *msg, u32
 * VFs with no events are not printed.
 *
 * This function can only be called on PF.
 *
 * Return: always 0
 */
void xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p)
int xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p)
{
	unsigned int n, total_vfs = xe_gt_sriov_pf_get_totalvfs(gt);
	const struct xe_gt_sriov_monitor *data;
@@ -144,4 +146,6 @@ void xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p
#undef __format
#undef __value
	}

	return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ struct drm_printer;
struct xe_gt;

void xe_gt_sriov_pf_monitor_flr(struct xe_gt *gt, u32 vfid);
void xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p);
int xe_gt_sriov_pf_monitor_print_events(struct xe_gt *gt, struct drm_printer *p);

#ifdef CONFIG_PCI_IOV
int xe_gt_sriov_pf_monitor_process_guc2pf(struct xe_gt *gt, const u32 *msg, u32 len);