diff options
author | Michael Holzheu <holzheu@linux.vnet.ibm.com> | 2015-01-08 08:36:21 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2015-01-09 04:10:30 -0500 |
commit | df3eed3d282f2fe1ffb73d3545fcde4e9b80a0d3 (patch) | |
tree | 26b328857f004c83f45eb3a5af446ead0dbc973c | |
parent | fbc89c952f004fb9191c23605a1428df6dd39a90 (diff) |
s390/bpf: Fix ALU_NEG (A = -A)
Currently the LOAD NEGATIVE (lnr) instruction is used for ALU_NEG. This
instruction always loads the negative value. Therefore, if A is already
negative, it remains unchanged. To fix this use LOAD COMPLEMENT (lcr)
instead.
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | arch/s390/net/bpf_jit_comp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index c52ac77408ca..8bc474fb52fd 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c | |||
@@ -431,8 +431,8 @@ static int bpf_jit_insn(struct bpf_jit *jit, struct sock_filter *filter, | |||
431 | EMIT4_DISP(0x88500000, K); | 431 | EMIT4_DISP(0x88500000, K); |
432 | break; | 432 | break; |
433 | case BPF_ALU | BPF_NEG: /* A = -A */ | 433 | case BPF_ALU | BPF_NEG: /* A = -A */ |
434 | /* lnr %r5,%r5 */ | 434 | /* lcr %r5,%r5 */ |
435 | EMIT2(0x1155); | 435 | EMIT2(0x1355); |
436 | break; | 436 | break; |
437 | case BPF_JMP | BPF_JA: /* ip += K */ | 437 | case BPF_JMP | BPF_JA: /* ip += K */ |
438 | offset = addrs[i + K] + jit->start - jit->prg; | 438 | offset = addrs[i + K] + jit->start - jit->prg; |