All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/2] Two BPF fixes for s390
@ 2017-08-04 12:20 Daniel Borkmann
  2017-08-04 12:20 ` [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64 Daniel Borkmann
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Daniel Borkmann @ 2017-08-04 12:20 UTC (permalink / raw)
  To: davem; +Cc: holzheu, ast, netdev, Daniel Borkmann

Found while testing some other work touching JITs.

Thanks!

Daniel Borkmann (2):
  bpf, s390: fix jit branch offset related to ldimm64
  bpf, s390: fix build for libbpf and selftest suite

 arch/s390/net/bpf_jit_comp.c   | 3 ++-
 tools/build/feature/test-bpf.c | 2 ++
 tools/lib/bpf/bpf.c            | 2 ++
 3 files changed, 6 insertions(+), 1 deletion(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64
  2017-08-04 12:20 [PATCH net 0/2] Two BPF fixes for s390 Daniel Borkmann
@ 2017-08-04 12:20 ` Daniel Borkmann
  2017-08-04 13:44   ` Michael Holzheu
  2017-08-04 12:20 ` [PATCH net 2/2] bpf, s390: fix build for libbpf and selftest suite Daniel Borkmann
  2017-08-04 18:19 ` [PATCH net 0/2] Two BPF fixes for s390 David Miller
  2 siblings, 1 reply; 8+ messages in thread
From: Daniel Borkmann @ 2017-08-04 12:20 UTC (permalink / raw)
  To: davem; +Cc: holzheu, ast, netdev, Daniel Borkmann

While testing some other work that required JIT modifications, I
run into test_bpf causing a hang when JIT enabled on s390. The
problematic test case was the one from ddc665a4bb4b (bpf, arm64:
fix jit branch offset related to ldimm64), and turns out that we
do have a similar issue on s390 as well. In bpf_jit_prog() we
update next instruction address after returning from bpf_jit_insn()
with an insn_count. bpf_jit_insn() returns either -1 in case of
error (e.g. unsupported insn), 1 or 2. The latter is only the
case for ldimm64 due to spanning 2 insns, however, next address
is only set to i + 1 not taking actual insn_count into account,
thus fix is to use insn_count instead of 1. bpf_jit_enable in
mode 2 provides also disasm on s390:

Before fix:

  000003ff800349b6: a7f40003   brc     15,3ff800349bc                 ; target
  000003ff800349ba: 0000               unknown
  000003ff800349bc: e3b0f0700024       stg     %r11,112(%r15)
  000003ff800349c2: e3e0f0880024       stg     %r14,136(%r15)
  000003ff800349c8: 0db0               basr    %r11,%r0
  000003ff800349ca: c0ef00000000       llilf   %r14,0
  000003ff800349d0: e320b0360004       lg      %r2,54(%r11)
  000003ff800349d6: e330b03e0004       lg      %r3,62(%r11)
  000003ff800349dc: ec23ffeda065       clgrj   %r2,%r3,10,3ff800349b6 ; jmp
  000003ff800349e2: e3e0b0460004       lg      %r14,70(%r11)
  000003ff800349e8: e3e0b04e0004       lg      %r14,78(%r11)
  000003ff800349ee: b904002e   lgr     %r2,%r14
  000003ff800349f2: e3b0f0700004       lg      %r11,112(%r15)
  000003ff800349f8: e3e0f0880004       lg      %r14,136(%r15)
  000003ff800349fe: 07fe               bcr     15,%r14

After fix:

  000003ff80ef3db4: a7f40003   brc     15,3ff80ef3dba
  000003ff80ef3db8: 0000               unknown
  000003ff80ef3dba: e3b0f0700024       stg     %r11,112(%r15)
  000003ff80ef3dc0: e3e0f0880024       stg     %r14,136(%r15)
  000003ff80ef3dc6: 0db0               basr    %r11,%r0
  000003ff80ef3dc8: c0ef00000000       llilf   %r14,0
  000003ff80ef3dce: e320b0360004       lg      %r2,54(%r11)
  000003ff80ef3dd4: e330b03e0004       lg      %r3,62(%r11)
  000003ff80ef3dda: ec230006a065       clgrj   %r2,%r3,10,3ff80ef3de6 ; jmp
  000003ff80ef3de0: e3e0b0460004       lg      %r14,70(%r11)
  000003ff80ef3de6: e3e0b04e0004       lg      %r14,78(%r11)          ; target
  000003ff80ef3dec: b904002e   lgr     %r2,%r14
  000003ff80ef3df0: e3b0f0700004       lg      %r11,112(%r15)
  000003ff80ef3df6: e3e0f0880004       lg      %r14,136(%r15)
  000003ff80ef3dfc: 07fe               bcr     15,%r14

test_bpf.ko suite runs fine after the fix.

Fixes: 054623105728 ("s390/bpf: Add s390x eBPF JIT compiler backend")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
---
 arch/s390/net/bpf_jit_comp.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
index 01c6fbc..1803797 100644
--- a/arch/s390/net/bpf_jit_comp.c
+++ b/arch/s390/net/bpf_jit_comp.c
@@ -1253,7 +1253,8 @@ static int bpf_jit_prog(struct bpf_jit *jit, struct bpf_prog *fp)
 		insn_count = bpf_jit_insn(jit, fp, i);
 		if (insn_count < 0)
 			return -1;
-		jit->addrs[i + 1] = jit->prg; /* Next instruction address */
+		/* Next instruction address */
+		jit->addrs[i + insn_count] = jit->prg;
 	}
 	bpf_jit_epilogue(jit);
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net 2/2] bpf, s390: fix build for libbpf and selftest suite
  2017-08-04 12:20 [PATCH net 0/2] Two BPF fixes for s390 Daniel Borkmann
  2017-08-04 12:20 ` [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64 Daniel Borkmann
@ 2017-08-04 12:20 ` Daniel Borkmann
  2017-08-04 18:19 ` [PATCH net 0/2] Two BPF fixes for s390 David Miller
  2 siblings, 0 replies; 8+ messages in thread
From: Daniel Borkmann @ 2017-08-04 12:20 UTC (permalink / raw)
  To: davem; +Cc: holzheu, ast, netdev, Daniel Borkmann

The BPF feature test as well as libbpf is missing the __NR_bpf
define for s390 and currently refuses to compile (selftest suite
depends on libbpf as well). Similar issue was fixed some time
ago via b0c47807d31d ("bpf: Add sparc support to tools and
samples."), just do the same and add definitions.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
---
 tools/build/feature/test-bpf.c | 2 ++
 tools/lib/bpf/bpf.c            | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/tools/build/feature/test-bpf.c b/tools/build/feature/test-bpf.c
index 7598361..da2172f 100644
--- a/tools/build/feature/test-bpf.c
+++ b/tools/build/feature/test-bpf.c
@@ -11,6 +11,8 @@
 #  define __NR_bpf 280
 # elif defined(__sparc__)
 #  define __NR_bpf 349
+# elif defined(__s390__)
+#  define __NR_bpf 351
 # else
 #  error __NR_bpf not defined. libbpf does not support your arch.
 # endif
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index 256f571..e5bbb09 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -39,6 +39,8 @@
 #  define __NR_bpf 280
 # elif defined(__sparc__)
 #  define __NR_bpf 349
+# elif defined(__s390__)
+#  define __NR_bpf 351
 # else
 #  error __NR_bpf not defined. libbpf does not support your arch.
 # endif
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64
  2017-08-04 12:20 ` [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64 Daniel Borkmann
@ 2017-08-04 13:44   ` Michael Holzheu
  2017-08-04 13:52     ` Daniel Borkmann
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Holzheu @ 2017-08-04 13:44 UTC (permalink / raw)
  To: Daniel Borkmann; +Cc: davem, ast, netdev

Am Fri,  4 Aug 2017 14:20:54 +0200
schrieb Daniel Borkmann <daniel@iogearbox.net>:

> While testing some other work that required JIT modifications, I
> run into test_bpf causing a hang when JIT enabled on s390. The
> problematic test case was the one from ddc665a4bb4b (bpf, arm64:
> fix jit branch offset related to ldimm64), and turns out that we
> do have a similar issue on s390 as well. In bpf_jit_prog() we
> update next instruction address after returning from bpf_jit_insn()
> with an insn_count. bpf_jit_insn() returns either -1 in case of
> error (e.g. unsupported insn), 1 or 2. The latter is only the
> case for ldimm64 due to spanning 2 insns, however, next address
> is only set to i + 1 not taking actual insn_count into account,
> thus fix is to use insn_count instead of 1. bpf_jit_enable in
> mode 2 provides also disasm on s390:
> 
> Before fix:
> 
>   000003ff800349b6: a7f40003   brc     15,3ff800349bc                 ; target
>   000003ff800349ba: 0000               unknown
>   000003ff800349bc: e3b0f0700024       stg     %r11,112(%r15)
>   000003ff800349c2: e3e0f0880024       stg     %r14,136(%r15)
>   000003ff800349c8: 0db0               basr    %r11,%r0
>   000003ff800349ca: c0ef00000000       llilf   %r14,0
>   000003ff800349d0: e320b0360004       lg      %r2,54(%r11)
>   000003ff800349d6: e330b03e0004       lg      %r3,62(%r11)
>   000003ff800349dc: ec23ffeda065       clgrj   %r2,%r3,10,3ff800349b6 ; jmp
>   000003ff800349e2: e3e0b0460004       lg      %r14,70(%r11)
>   000003ff800349e8: e3e0b04e0004       lg      %r14,78(%r11)
>   000003ff800349ee: b904002e   lgr     %r2,%r14
>   000003ff800349f2: e3b0f0700004       lg      %r11,112(%r15)
>   000003ff800349f8: e3e0f0880004       lg      %r14,136(%r15)
>   000003ff800349fe: 07fe               bcr     15,%r14
> 
> After fix:
> 
>   000003ff80ef3db4: a7f40003   brc     15,3ff80ef3dba
>   000003ff80ef3db8: 0000               unknown
>   000003ff80ef3dba: e3b0f0700024       stg     %r11,112(%r15)
>   000003ff80ef3dc0: e3e0f0880024       stg     %r14,136(%r15)
>   000003ff80ef3dc6: 0db0               basr    %r11,%r0
>   000003ff80ef3dc8: c0ef00000000       llilf   %r14,0
>   000003ff80ef3dce: e320b0360004       lg      %r2,54(%r11)
>   000003ff80ef3dd4: e330b03e0004       lg      %r3,62(%r11)
>   000003ff80ef3dda: ec230006a065       clgrj   %r2,%r3,10,3ff80ef3de6 ; jmp
>   000003ff80ef3de0: e3e0b0460004       lg      %r14,70(%r11)
>   000003ff80ef3de6: e3e0b04e0004       lg      %r14,78(%r11)          ; target
>   000003ff80ef3dec: b904002e   lgr     %r2,%r14
>   000003ff80ef3df0: e3b0f0700004       lg      %r11,112(%r15)
>   000003ff80ef3df6: e3e0f0880004       lg      %r14,136(%r15)
>   000003ff80ef3dfc: 07fe               bcr     15,%r14
> 
> test_bpf.ko suite runs fine after the fix.
> 
> Fixes: 054623105728 ("s390/bpf: Add s390x eBPF JIT compiler backend")
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> Tested-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>

What about "Cc: stable@vger.kernel.org"?

Michael

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64
  2017-08-04 13:44   ` Michael Holzheu
@ 2017-08-04 13:52     ` Daniel Borkmann
  2017-08-04 17:10       ` Michael Holzheu
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Borkmann @ 2017-08-04 13:52 UTC (permalink / raw)
  To: Michael Holzheu; +Cc: davem, ast, netdev

On 08/04/2017 03:44 PM, Michael Holzheu wrote:
> Am Fri,  4 Aug 2017 14:20:54 +0200
> schrieb Daniel Borkmann <daniel@iogearbox.net>:
[...]
>
> What about "Cc: stable@vger.kernel.org"?

Handled by Dave, see also: Documentation/networking/netdev-FAQ.txt +117

Cheers,
Daniel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64
  2017-08-04 13:52     ` Daniel Borkmann
@ 2017-08-04 17:10       ` Michael Holzheu
  2017-08-04 17:13         ` David Miller
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Holzheu @ 2017-08-04 17:10 UTC (permalink / raw)
  To: Daniel Borkmann; +Cc: davem, ast, netdev

Am Fri, 04 Aug 2017 15:52:47 +0200
schrieb Daniel Borkmann <daniel@iogearbox.net>:

> On 08/04/2017 03:44 PM, Michael Holzheu wrote:
> > Am Fri,  4 Aug 2017 14:20:54 +0200
> > schrieb Daniel Borkmann <daniel@iogearbox.net>:
> [...]
> >
> > What about "Cc: stable@vger.kernel.org"?
> 
> Handled by Dave, see also: Documentation/networking/netdev-FAQ.txt +117

Thanks, good to know! At least I would vote for "Cc: stable".

Michael

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64
  2017-08-04 17:10       ` Michael Holzheu
@ 2017-08-04 17:13         ` David Miller
  0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2017-08-04 17:13 UTC (permalink / raw)
  To: holzheu; +Cc: daniel, ast, netdev

From: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Date: Fri, 4 Aug 2017 19:10:33 +0200

> At least I would vote for "Cc: stable".

No, please do not ever do this for networking patches.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH net 0/2] Two BPF fixes for s390
  2017-08-04 12:20 [PATCH net 0/2] Two BPF fixes for s390 Daniel Borkmann
  2017-08-04 12:20 ` [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64 Daniel Borkmann
  2017-08-04 12:20 ` [PATCH net 2/2] bpf, s390: fix build for libbpf and selftest suite Daniel Borkmann
@ 2017-08-04 18:19 ` David Miller
  2 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2017-08-04 18:19 UTC (permalink / raw)
  To: daniel; +Cc: holzheu, ast, netdev

From: Daniel Borkmann <daniel@iogearbox.net>
Date: Fri,  4 Aug 2017 14:20:53 +0200

> Found while testing some other work touching JITs.

Series applied and patch #1 queued up for -stable, thanks!

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-08-04 18:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-04 12:20 [PATCH net 0/2] Two BPF fixes for s390 Daniel Borkmann
2017-08-04 12:20 ` [PATCH net 1/2] bpf, s390: fix jit branch offset related to ldimm64 Daniel Borkmann
2017-08-04 13:44   ` Michael Holzheu
2017-08-04 13:52     ` Daniel Borkmann
2017-08-04 17:10       ` Michael Holzheu
2017-08-04 17:13         ` David Miller
2017-08-04 12:20 ` [PATCH net 2/2] bpf, s390: fix build for libbpf and selftest suite Daniel Borkmann
2017-08-04 18:19 ` [PATCH net 0/2] Two BPF fixes for s390 David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.