已开启
Fix PT_REGS macro definition being overwritten in sw_64 #223
zhangzikang创建于 7月1日
Fix PT_REGS macro definition being overwritten in sw_64 #223
已开启
共 2 个文件变更+100-1
| @@ -0,0 +1,95 @@ | |||
| 1 | +From e7f1afd947de88be91a85f51e59cd66255028d29 Mon Sep 17 00:00:00 2001 | ||
| 2 | +From: zhangzikang <zhangzikang@kylinos.cn> | ||
| 3 | +Date: Sun, 26 Apr 2026 00:39:24 +0800 | ||
| 4 | +Subject: [PATCH] Fix PT_REGS macro definition being overwritten in sw_64 | ||
| 5 | + | ||
| 6 | +--- | ||
| 7 | + src/bpf_tracing.h | 58 +++++++++++++++++++++++------------------------ | ||
| 8 | + 1 file changed, 29 insertions(+), 29 deletions(-) | ||
| 9 | + | ||
| 10 | +diff --git a/src/bpf_tracing.h b/src/bpf_tracing.h | ||
| 11 | +index 7f75b95..f9d4331 100644 | ||
| 12 | +--- a/src/bpf_tracing.h | ||
| 13 | ++++ b/src/bpf_tracing.h | ||
| 14 | +@@ -448,35 +448,6 @@ struct pt_regs___arm64 { | ||
| 15 | + #define __PT_SP_REG regs[3] | ||
| 16 | + #define __PT_IP_REG csr_era | ||
| 17 | + | ||
| 18 | +-#elif defined(bpf_target_sw64) | ||
| 19 | +- | ||
| 20 | +-/* sw64 provides struct user_pt_regs instead of struct pt_regs to userspace */ | ||
| 21 | +-struct pt_regs; | ||
| 22 | +-#define PT_REGS_SW64 const volatile struct user_pt_regs | ||
| 23 | +-#define PT_REGS_PARM1(x) (((PT_REGS_SW64 *)(x))->regs[16]) | ||
| 24 | +-#define PT_REGS_PARM2(x) (((PT_REGS_SW64 *)(x))->regs[17]) | ||
| 25 | +-#define PT_REGS_PARM3(x) (((PT_REGS_SW64 *)(x))->regs[18]) | ||
| 26 | +-#define PT_REGS_PARM4(x) (((PT_REGS_SW64 *)(x))->regs[19]) | ||
| 27 | +-#define PT_REGS_PARM5(x) (((PT_REGS_SW64 *)(x))->regs[20]) | ||
| 28 | +-#define PT_REGS_RET(x) (((PT_REGS_SW64 *)(x))->regs[26]) | ||
| 29 | +-/* Works only with CONFIG_FRAME_POINTER */ | ||
| 30 | +-#define PT_REGS_FP(x) (((PT_REGS_SW64 *)(x))->regs[15]) | ||
| 31 | +-#define PT_REGS_RC(x) (((PT_REGS_SW64 *)(x))->regs[0]) | ||
| 32 | +-#define PT_REGS_SP(x) (((PT_REGS_SW64 *)(x))->regs[30]) | ||
| 33 | +-#define PT_REGS_IP(x) (((PT_REGS_SW64 *)(x))->pc) | ||
| 34 | +- | ||
| 35 | +-#define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[16]) | ||
| 36 | +-#define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[17]) | ||
| 37 | +-#define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[18]) | ||
| 38 | +-#define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[19]) | ||
| 39 | +-#define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[20]) | ||
| 40 | +-#define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[26]) | ||
| 41 | +-#define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[15]) | ||
| 42 | +-#define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[0]) | ||
| 43 | +-#define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[30]) | ||
| 44 | +-#define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), pc) | ||
| 45 | +- | ||
| 46 | +- | ||
| 47 | + #endif | ||
| 48 | + | ||
| 49 | + #if defined(bpf_target_defined) | ||
| 50 | +@@ -518,6 +489,34 @@ struct pt_regs; | ||
| 51 | + #define __PT_PARM7_SYSCALL_REG __unsupported__ | ||
| 52 | + #endif | ||
| 53 | + | ||
| 54 | ++#if defined(bpf_target_sw64) | ||
| 55 | ++/* sw64 provides struct user_pt_regs instead of struct pt_regs to userspace */ | ||
| 56 | ++struct pt_regs; | ||
| 57 | ++#define PT_REGS_SW64 const volatile struct user_pt_regs | ||
| 58 | ++#define PT_REGS_PARM1(x) (((PT_REGS_SW64 *)(x))->regs[16]) | ||
| 59 | ++#define PT_REGS_PARM2(x) (((PT_REGS_SW64 *)(x))->regs[17]) | ||
| 60 | ++#define PT_REGS_PARM3(x) (((PT_REGS_SW64 *)(x))->regs[18]) | ||
| 61 | ++#define PT_REGS_PARM4(x) (((PT_REGS_SW64 *)(x))->regs[19]) | ||
| 62 | ++#define PT_REGS_PARM5(x) (((PT_REGS_SW64 *)(x))->regs[20]) | ||
| 63 | ++#define PT_REGS_RET(x) (((PT_REGS_SW64 *)(x))->regs[26]) | ||
| 64 | ++/* Works only with CONFIG_FRAME_POINTER */ | ||
| 65 | ++#define PT_REGS_FP(x) (((PT_REGS_SW64 *)(x))->regs[15]) | ||
| 66 | ++#define PT_REGS_RC(x) (((PT_REGS_SW64 *)(x))->regs[0]) | ||
| 67 | ++#define PT_REGS_SP(x) (((PT_REGS_SW64 *)(x))->regs[30]) | ||
| 68 | ++#define PT_REGS_IP(x) (((PT_REGS_SW64 *)(x))->pc) | ||
| 69 | ++ | ||
| 70 | ++#define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[16]) | ||
| 71 | ++#define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[17]) | ||
| 72 | ++#define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[18]) | ||
| 73 | ++#define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[19]) | ||
| 74 | ++#define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[20]) | ||
| 75 | ++#define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[26]) | ||
| 76 | ++#define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[15]) | ||
| 77 | ++#define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[0]) | ||
| 78 | ++#define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), regs[30]) | ||
| 79 | ++#define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_SW64 *)(x), pc) | ||
| 80 | ++ | ||
| 81 | ++#else | ||
| 82 | + #define PT_REGS_PARM1(x) (__PT_REGS_CAST(x)->__PT_PARM1_REG) | ||
| 83 | + #define PT_REGS_PARM2(x) (__PT_REGS_CAST(x)->__PT_PARM2_REG) | ||
| 84 | + #define PT_REGS_PARM3(x) (__PT_REGS_CAST(x)->__PT_PARM3_REG) | ||
| 85 | +@@ -545,6 +544,7 @@ struct pt_regs; | ||
| 86 | + #define PT_REGS_RC_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_RC_REG) | ||
| 87 | + #define PT_REGS_SP_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_SP_REG) | ||
| 88 | + #define PT_REGS_IP_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_IP_REG) | ||
| 89 | ++#endif | ||
| 90 | + | ||
| 91 | + #if defined(bpf_target_powerpc) | ||
| 92 | + | ||
| 93 | +-- | ||
| 94 | +2.43.0 | ||
| 95 | + | ||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | Name: %{githubname} | 5 | Name: %{githubname} |
| 6 | Version: %{githubver} | 6 | Version: %{githubver} |
| 7 | -Release: 13 | 7 | +Release: 14 |
| 8 | Summary: Libbpf library | 8 | Summary: Libbpf library |
| 9 | 9 | ||
| 10 | License: LGPLv2 or BSD | 10 | License: LGPLv2 or BSD |
| @@ -35,6 +35,7 @@ Patch0018: backport-libbpf-fix-LDX_STX_ST-CO-RE-relocation-size-adjustment- | |||
| 35 | Patch0019: backport-libbpf-Fix-hypothetical-STT_SECTION-extern-NULL-deref-case.patch | 35 | Patch0019: backport-libbpf-Fix-hypothetical-STT_SECTION-extern-NULL-deref-case.patch |
| 36 | Patch0020: backport-libbpf-Adaption-for-sched-type-eBPF-program.patch | 36 | Patch0020: backport-libbpf-Adaption-for-sched-type-eBPF-program.patch |
| 37 | Patch0021: backport-libbpf-Fix-buffer-overflow-in-bpf_object__init_prog.patch | 37 | Patch0021: backport-libbpf-Fix-buffer-overflow-in-bpf_object__init_prog.patch |
| 38 | +Patch0022: Fix-PT_REGS-macro-definition-being-overwritten-in-sw_64.patch | ||
| 38 | 39 | ||
| 39 | # This package supersedes libbpf from kernel-tools, | 40 | # This package supersedes libbpf from kernel-tools, |
| 40 | # which has default Epoch: 0. By having Epoch: 1 | 41 | # which has default Epoch: 0. By having Epoch: 1 |
| @@ -87,6 +88,9 @@ developing applications that use %{name} | |||
| 87 | %{_libdir}/libbpf.a | 88 | %{_libdir}/libbpf.a |
| 88 | 89 | ||
| 89 | %changelog | 90 | %changelog |
| 91 | +* Wed Jul 01 2026 zhangzikang <zhangzikang@kylinos.cn> - 2:1.2.2-14 | ||
| 92 | +- Fix PT_REGS macro definition being overwritten in sw_64 | ||
| 93 | + | ||
| 90 | * Mon Jun 15 2026 houxu <houxu5@h-partners.com> - 2:1.2.2-13 | 94 | * Mon Jun 15 2026 houxu <houxu5@h-partners.com> - 2:1.2.2-13 |
| 91 | - revert 0001-libbpf-1.2.2-fix-cve-2025-29481.patch | 95 | - revert 0001-libbpf-1.2.2-fix-cve-2025-29481.patch |
| 92 | libbpf: Fix buffer overflow in bpf_object__init_prog | 96 | libbpf: Fix buffer overflow in bpf_object__init_prog |