netdev.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).