s390/bpf: correct broken uapi for BPF_PROG_TYPE_PERF_EVENT program type
To mitigate and correct the broken uapi for the BPF_PROG_TYPE_PERF_EVENT program type, introduce a user_pt_regs structure (similar to arm64) that exports parts from the beginnig of the pt_regs structure. The export must start with the beginning of the pt_regs structure because to correctly calculate BPF prologues for perf (regs_query_register_offset()). For BPF_PROG_TYPE_PERF_EVENT program types, the BPF program is then passed a user_pt_regs structure. Note: Depending on future changes to the s390 pt_regs structure, consider the user_pt_regs structure to be stable for a particular kernel version only. (Of course, s390 tries to ensure keep it stable as much as possible.) Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Reviewed-and-tested-by: Thomas Richter <tmricht@linux.vnet.ibm.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:

committed by
Daniel Borkmann

parent
c895f6f703
commit
466698e654
@@ -74,9 +74,14 @@ enum {
|
||||
*/
|
||||
struct pt_regs
|
||||
{
|
||||
unsigned long args[1];
|
||||
psw_t psw;
|
||||
unsigned long gprs[NUM_GPRS];
|
||||
union {
|
||||
user_pt_regs user_regs;
|
||||
struct {
|
||||
unsigned long args[1];
|
||||
psw_t psw;
|
||||
unsigned long gprs[NUM_GPRS];
|
||||
};
|
||||
};
|
||||
unsigned long orig_gpr2;
|
||||
unsigned int int_code;
|
||||
unsigned int int_parm;
|
||||
|
Reference in New Issue
Block a user