Bläddra i källkod

s390/bpf: Fix JMP_JGE_X (A > X) and JMP_JGT_X (A >= X)

Currently the signed COMPARE (cr) instruction is used to compare "A"
with "X". This is not correct because "A" and "X" are both unsigned.
To fix this use the unsigned COMPARE LOGICAL (clr) instruction instead.

Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Michael Holzheu 10 år sedan
förälder
incheckning
ae75097459
1 ändrade filer med 2 tillägg och 2 borttagningar
  1. 2 2
      arch/s390/net/bpf_jit_comp.c

+ 2 - 2
arch/s390/net/bpf_jit_comp.c

@@ -502,8 +502,8 @@ branch:		if (filter->jt == filter->jf) {
 xbranch:	/* Emit compare if the branch targets are different */
 xbranch:	/* Emit compare if the branch targets are different */
 		if (filter->jt != filter->jf) {
 		if (filter->jt != filter->jf) {
 			jit->seen |= SEEN_XREG;
 			jit->seen |= SEEN_XREG;
-			/* cr %r5,%r12 */
-			EMIT2(0x195c);
+			/* clr %r5,%r12 */
+			EMIT2(0x155c);
 		}
 		}
 		goto branch;
 		goto branch;
 	case BPF_JMP | BPF_JSET | BPF_X: /* ip += (A & X) ? jt : jf */
 	case BPF_JMP | BPF_JSET | BPF_X: /* ip += (A & X) ? jt : jf */