Commit 4c2a26fc authored by Harishankar Vishwanathan's avatar Harishankar Vishwanathan Committed by Andrii Nakryiko
Browse files

bpf-next: Avoid goto in regs_refine_cond_op()



In case of GE/GT/SGE/JST instructions, regs_refine_cond_op()
reuses the logic that does analysis of LE/LT/SLE/SLT instructions.
This commit avoids the use of a goto to perform the reuse.

Signed-off-by: default avatarHarishankar Vishwanathan <harishankar.vishwanathan@gmail.com>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240321002955.808604-1-harishankar.vishwanathan@gmail.com
parent cc9b22df
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -14544,7 +14544,19 @@ static void regs_refine_cond_op(struct bpf_reg_state *reg1, struct bpf_reg_state
	struct tnum t;
	u64 val;
again:
	/* In case of GE/GT/SGE/JST, reuse LE/LT/SLE/SLT logic from below */
	switch (opcode) {
	case BPF_JGE:
	case BPF_JGT:
	case BPF_JSGE:
	case BPF_JSGT:
		opcode = flip_opcode(opcode);
		swap(reg1, reg2);
		break;
	default:
		break;
	}
	switch (opcode) {
	case BPF_JEQ:
		if (is_jmp32) {
@@ -14687,14 +14699,6 @@ static void regs_refine_cond_op(struct bpf_reg_state *reg1, struct bpf_reg_state
			reg2->smin_value = max(reg1->smin_value + 1, reg2->smin_value);
		}
		break;
	case BPF_JGE:
	case BPF_JGT:
	case BPF_JSGE:
	case BPF_JSGT:
		/* just reuse LE/LT logic above */
		opcode = flip_opcode(opcode);
		swap(reg1, reg2);
		goto again;
	default:
		return;
	}