diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-05-05 03:57:27 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-05-05 03:57:27 -0400 |
commit | e8c8ce54807b19e90ac84e609b13f7d4e337eab1 (patch) | |
tree | ae7d65ae17d55aee197b605ce1a193fe594af614 /lib | |
parent | 5db4298133d99b3dfc60d6899ac9df169769c899 (diff) | |
parent | 04974df8049fc4240d22759a91e035082ccd18b4 (diff) |
Merge tag 'v4.6-rc6' into locking/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/assoc_array.c | 4 | ||||
-rw-r--r-- | lib/lz4/lz4defs.h | 25 | ||||
-rw-r--r-- | lib/stackdepot.c | 4 | ||||
-rw-r--r-- | lib/test_bpf.c | 229 |
4 files changed, 241 insertions, 21 deletions
diff --git a/lib/assoc_array.c b/lib/assoc_array.c index 03dd576e6773..59fd7c0b119c 100644 --- a/lib/assoc_array.c +++ b/lib/assoc_array.c | |||
@@ -524,7 +524,9 @@ static bool assoc_array_insert_into_terminal_node(struct assoc_array_edit *edit, | |||
524 | free_slot = i; | 524 | free_slot = i; |
525 | continue; | 525 | continue; |
526 | } | 526 | } |
527 | if (ops->compare_object(assoc_array_ptr_to_leaf(ptr), index_key)) { | 527 | if (assoc_array_ptr_is_leaf(ptr) && |
528 | ops->compare_object(assoc_array_ptr_to_leaf(ptr), | ||
529 | index_key)) { | ||
528 | pr_devel("replace in slot %d\n", i); | 530 | pr_devel("replace in slot %d\n", i); |
529 | edit->leaf_p = &node->slots[i]; | 531 | edit->leaf_p = &node->slots[i]; |
530 | edit->dead_leaf = node->slots[i]; | 532 | edit->dead_leaf = node->slots[i]; |
diff --git a/lib/lz4/lz4defs.h b/lib/lz4/lz4defs.h index abcecdc2d0f2..c79d7ea8a38e 100644 --- a/lib/lz4/lz4defs.h +++ b/lib/lz4/lz4defs.h | |||
@@ -11,8 +11,7 @@ | |||
11 | /* | 11 | /* |
12 | * Detects 64 bits mode | 12 | * Detects 64 bits mode |
13 | */ | 13 | */ |
14 | #if (defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) \ | 14 | #if defined(CONFIG_64BIT) |
15 | || defined(__ppc64__) || defined(__LP64__)) | ||
16 | #define LZ4_ARCH64 1 | 15 | #define LZ4_ARCH64 1 |
17 | #else | 16 | #else |
18 | #define LZ4_ARCH64 0 | 17 | #define LZ4_ARCH64 0 |
@@ -25,9 +24,7 @@ | |||
25 | typedef struct _U16_S { u16 v; } U16_S; | 24 | typedef struct _U16_S { u16 v; } U16_S; |
26 | typedef struct _U32_S { u32 v; } U32_S; | 25 | typedef struct _U32_S { u32 v; } U32_S; |
27 | typedef struct _U64_S { u64 v; } U64_S; | 26 | typedef struct _U64_S { u64 v; } U64_S; |
28 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) \ | 27 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) |
29 | || defined(CONFIG_ARM) && __LINUX_ARM_ARCH__ >= 6 \ | ||
30 | && defined(ARM_EFFICIENT_UNALIGNED_ACCESS) | ||
31 | 28 | ||
32 | #define A16(x) (((U16_S *)(x))->v) | 29 | #define A16(x) (((U16_S *)(x))->v) |
33 | #define A32(x) (((U32_S *)(x))->v) | 30 | #define A32(x) (((U32_S *)(x))->v) |
@@ -35,6 +32,10 @@ typedef struct _U64_S { u64 v; } U64_S; | |||
35 | 32 | ||
36 | #define PUT4(s, d) (A32(d) = A32(s)) | 33 | #define PUT4(s, d) (A32(d) = A32(s)) |
37 | #define PUT8(s, d) (A64(d) = A64(s)) | 34 | #define PUT8(s, d) (A64(d) = A64(s)) |
35 | |||
36 | #define LZ4_READ_LITTLEENDIAN_16(d, s, p) \ | ||
37 | (d = s - A16(p)) | ||
38 | |||
38 | #define LZ4_WRITE_LITTLEENDIAN_16(p, v) \ | 39 | #define LZ4_WRITE_LITTLEENDIAN_16(p, v) \ |
39 | do { \ | 40 | do { \ |
40 | A16(p) = v; \ | 41 | A16(p) = v; \ |
@@ -51,10 +52,13 @@ typedef struct _U64_S { u64 v; } U64_S; | |||
51 | #define PUT8(s, d) \ | 52 | #define PUT8(s, d) \ |
52 | put_unaligned(get_unaligned((const u64 *) s), (u64 *) d) | 53 | put_unaligned(get_unaligned((const u64 *) s), (u64 *) d) |
53 | 54 | ||
54 | #define LZ4_WRITE_LITTLEENDIAN_16(p, v) \ | 55 | #define LZ4_READ_LITTLEENDIAN_16(d, s, p) \ |
55 | do { \ | 56 | (d = s - get_unaligned_le16(p)) |
56 | put_unaligned(v, (u16 *)(p)); \ | 57 | |
57 | p += 2; \ | 58 | #define LZ4_WRITE_LITTLEENDIAN_16(p, v) \ |
59 | do { \ | ||
60 | put_unaligned_le16(v, (u16 *)(p)); \ | ||
61 | p += 2; \ | ||
58 | } while (0) | 62 | } while (0) |
59 | #endif | 63 | #endif |
60 | 64 | ||
@@ -140,9 +144,6 @@ typedef struct _U64_S { u64 v; } U64_S; | |||
140 | 144 | ||
141 | #endif | 145 | #endif |
142 | 146 | ||
143 | #define LZ4_READ_LITTLEENDIAN_16(d, s, p) \ | ||
144 | (d = s - get_unaligned_le16(p)) | ||
145 | |||
146 | #define LZ4_WILDCOPY(s, d, e) \ | 147 | #define LZ4_WILDCOPY(s, d, e) \ |
147 | do { \ | 148 | do { \ |
148 | LZ4_COPYPACKET(s, d); \ | 149 | LZ4_COPYPACKET(s, d); \ |
diff --git a/lib/stackdepot.c b/lib/stackdepot.c index 654c9d87e83a..9e0b0315a724 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c | |||
@@ -210,10 +210,6 @@ depot_stack_handle_t depot_save_stack(struct stack_trace *trace, | |||
210 | goto fast_exit; | 210 | goto fast_exit; |
211 | 211 | ||
212 | hash = hash_stack(trace->entries, trace->nr_entries); | 212 | hash = hash_stack(trace->entries, trace->nr_entries); |
213 | /* Bad luck, we won't store this stack. */ | ||
214 | if (hash == 0) | ||
215 | goto exit; | ||
216 | |||
217 | bucket = &stack_table[hash & STACK_HASH_MASK]; | 213 | bucket = &stack_table[hash & STACK_HASH_MASK]; |
218 | 214 | ||
219 | /* | 215 | /* |
diff --git a/lib/test_bpf.c b/lib/test_bpf.c index 27a7a26b1ece..8f22fbedc3a6 100644 --- a/lib/test_bpf.c +++ b/lib/test_bpf.c | |||
@@ -2444,6 +2444,22 @@ static struct bpf_test tests[] = { | |||
2444 | { { 0, 4294967295U } }, | 2444 | { { 0, 4294967295U } }, |
2445 | }, | 2445 | }, |
2446 | { | 2446 | { |
2447 | "ALU_ADD_X: 2 + 4294967294 = 0", | ||
2448 | .u.insns_int = { | ||
2449 | BPF_LD_IMM64(R0, 2), | ||
2450 | BPF_LD_IMM64(R1, 4294967294U), | ||
2451 | BPF_ALU32_REG(BPF_ADD, R0, R1), | ||
2452 | BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), | ||
2453 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2454 | BPF_EXIT_INSN(), | ||
2455 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2456 | BPF_EXIT_INSN(), | ||
2457 | }, | ||
2458 | INTERNAL, | ||
2459 | { }, | ||
2460 | { { 0, 1 } }, | ||
2461 | }, | ||
2462 | { | ||
2447 | "ALU64_ADD_X: 1 + 2 = 3", | 2463 | "ALU64_ADD_X: 1 + 2 = 3", |
2448 | .u.insns_int = { | 2464 | .u.insns_int = { |
2449 | BPF_LD_IMM64(R0, 1), | 2465 | BPF_LD_IMM64(R0, 1), |
@@ -2467,6 +2483,23 @@ static struct bpf_test tests[] = { | |||
2467 | { }, | 2483 | { }, |
2468 | { { 0, 4294967295U } }, | 2484 | { { 0, 4294967295U } }, |
2469 | }, | 2485 | }, |
2486 | { | ||
2487 | "ALU64_ADD_X: 2 + 4294967294 = 4294967296", | ||
2488 | .u.insns_int = { | ||
2489 | BPF_LD_IMM64(R0, 2), | ||
2490 | BPF_LD_IMM64(R1, 4294967294U), | ||
2491 | BPF_LD_IMM64(R2, 4294967296ULL), | ||
2492 | BPF_ALU64_REG(BPF_ADD, R0, R1), | ||
2493 | BPF_JMP_REG(BPF_JEQ, R0, R2, 2), | ||
2494 | BPF_MOV32_IMM(R0, 0), | ||
2495 | BPF_EXIT_INSN(), | ||
2496 | BPF_MOV32_IMM(R0, 1), | ||
2497 | BPF_EXIT_INSN(), | ||
2498 | }, | ||
2499 | INTERNAL, | ||
2500 | { }, | ||
2501 | { { 0, 1 } }, | ||
2502 | }, | ||
2470 | /* BPF_ALU | BPF_ADD | BPF_K */ | 2503 | /* BPF_ALU | BPF_ADD | BPF_K */ |
2471 | { | 2504 | { |
2472 | "ALU_ADD_K: 1 + 2 = 3", | 2505 | "ALU_ADD_K: 1 + 2 = 3", |
@@ -2502,6 +2535,21 @@ static struct bpf_test tests[] = { | |||
2502 | { { 0, 4294967295U } }, | 2535 | { { 0, 4294967295U } }, |
2503 | }, | 2536 | }, |
2504 | { | 2537 | { |
2538 | "ALU_ADD_K: 4294967294 + 2 = 0", | ||
2539 | .u.insns_int = { | ||
2540 | BPF_LD_IMM64(R0, 4294967294U), | ||
2541 | BPF_ALU32_IMM(BPF_ADD, R0, 2), | ||
2542 | BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), | ||
2543 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2544 | BPF_EXIT_INSN(), | ||
2545 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2546 | BPF_EXIT_INSN(), | ||
2547 | }, | ||
2548 | INTERNAL, | ||
2549 | { }, | ||
2550 | { { 0, 1 } }, | ||
2551 | }, | ||
2552 | { | ||
2505 | "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff", | 2553 | "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff", |
2506 | .u.insns_int = { | 2554 | .u.insns_int = { |
2507 | BPF_LD_IMM64(R2, 0x0), | 2555 | BPF_LD_IMM64(R2, 0x0), |
@@ -2518,6 +2566,70 @@ static struct bpf_test tests[] = { | |||
2518 | { { 0, 0x1 } }, | 2566 | { { 0, 0x1 } }, |
2519 | }, | 2567 | }, |
2520 | { | 2568 | { |
2569 | "ALU_ADD_K: 0 + 0xffff = 0xffff", | ||
2570 | .u.insns_int = { | ||
2571 | BPF_LD_IMM64(R2, 0x0), | ||
2572 | BPF_LD_IMM64(R3, 0xffff), | ||
2573 | BPF_ALU32_IMM(BPF_ADD, R2, 0xffff), | ||
2574 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2575 | BPF_MOV32_IMM(R0, 2), | ||
2576 | BPF_EXIT_INSN(), | ||
2577 | BPF_MOV32_IMM(R0, 1), | ||
2578 | BPF_EXIT_INSN(), | ||
2579 | }, | ||
2580 | INTERNAL, | ||
2581 | { }, | ||
2582 | { { 0, 0x1 } }, | ||
2583 | }, | ||
2584 | { | ||
2585 | "ALU_ADD_K: 0 + 0x7fffffff = 0x7fffffff", | ||
2586 | .u.insns_int = { | ||
2587 | BPF_LD_IMM64(R2, 0x0), | ||
2588 | BPF_LD_IMM64(R3, 0x7fffffff), | ||
2589 | BPF_ALU32_IMM(BPF_ADD, R2, 0x7fffffff), | ||
2590 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2591 | BPF_MOV32_IMM(R0, 2), | ||
2592 | BPF_EXIT_INSN(), | ||
2593 | BPF_MOV32_IMM(R0, 1), | ||
2594 | BPF_EXIT_INSN(), | ||
2595 | }, | ||
2596 | INTERNAL, | ||
2597 | { }, | ||
2598 | { { 0, 0x1 } }, | ||
2599 | }, | ||
2600 | { | ||
2601 | "ALU_ADD_K: 0 + 0x80000000 = 0x80000000", | ||
2602 | .u.insns_int = { | ||
2603 | BPF_LD_IMM64(R2, 0x0), | ||
2604 | BPF_LD_IMM64(R3, 0x80000000), | ||
2605 | BPF_ALU32_IMM(BPF_ADD, R2, 0x80000000), | ||
2606 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2607 | BPF_MOV32_IMM(R0, 2), | ||
2608 | BPF_EXIT_INSN(), | ||
2609 | BPF_MOV32_IMM(R0, 1), | ||
2610 | BPF_EXIT_INSN(), | ||
2611 | }, | ||
2612 | INTERNAL, | ||
2613 | { }, | ||
2614 | { { 0, 0x1 } }, | ||
2615 | }, | ||
2616 | { | ||
2617 | "ALU_ADD_K: 0 + 0x80008000 = 0x80008000", | ||
2618 | .u.insns_int = { | ||
2619 | BPF_LD_IMM64(R2, 0x0), | ||
2620 | BPF_LD_IMM64(R3, 0x80008000), | ||
2621 | BPF_ALU32_IMM(BPF_ADD, R2, 0x80008000), | ||
2622 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2623 | BPF_MOV32_IMM(R0, 2), | ||
2624 | BPF_EXIT_INSN(), | ||
2625 | BPF_MOV32_IMM(R0, 1), | ||
2626 | BPF_EXIT_INSN(), | ||
2627 | }, | ||
2628 | INTERNAL, | ||
2629 | { }, | ||
2630 | { { 0, 0x1 } }, | ||
2631 | }, | ||
2632 | { | ||
2521 | "ALU64_ADD_K: 1 + 2 = 3", | 2633 | "ALU64_ADD_K: 1 + 2 = 3", |
2522 | .u.insns_int = { | 2634 | .u.insns_int = { |
2523 | BPF_LD_IMM64(R0, 1), | 2635 | BPF_LD_IMM64(R0, 1), |
@@ -2551,6 +2663,22 @@ static struct bpf_test tests[] = { | |||
2551 | { { 0, 2147483647 } }, | 2663 | { { 0, 2147483647 } }, |
2552 | }, | 2664 | }, |
2553 | { | 2665 | { |
2666 | "ALU64_ADD_K: 4294967294 + 2 = 4294967296", | ||
2667 | .u.insns_int = { | ||
2668 | BPF_LD_IMM64(R0, 4294967294U), | ||
2669 | BPF_LD_IMM64(R1, 4294967296ULL), | ||
2670 | BPF_ALU64_IMM(BPF_ADD, R0, 2), | ||
2671 | BPF_JMP_REG(BPF_JEQ, R0, R1, 2), | ||
2672 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2673 | BPF_EXIT_INSN(), | ||
2674 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2675 | BPF_EXIT_INSN(), | ||
2676 | }, | ||
2677 | INTERNAL, | ||
2678 | { }, | ||
2679 | { { 0, 1 } }, | ||
2680 | }, | ||
2681 | { | ||
2554 | "ALU64_ADD_K: 2147483646 + -2147483647 = -1", | 2682 | "ALU64_ADD_K: 2147483646 + -2147483647 = -1", |
2555 | .u.insns_int = { | 2683 | .u.insns_int = { |
2556 | BPF_LD_IMM64(R0, 2147483646), | 2684 | BPF_LD_IMM64(R0, 2147483646), |
@@ -2593,6 +2721,70 @@ static struct bpf_test tests[] = { | |||
2593 | { }, | 2721 | { }, |
2594 | { { 0, 0x1 } }, | 2722 | { { 0, 0x1 } }, |
2595 | }, | 2723 | }, |
2724 | { | ||
2725 | "ALU64_ADD_K: 0 + 0xffff = 0xffff", | ||
2726 | .u.insns_int = { | ||
2727 | BPF_LD_IMM64(R2, 0x0), | ||
2728 | BPF_LD_IMM64(R3, 0xffff), | ||
2729 | BPF_ALU64_IMM(BPF_ADD, R2, 0xffff), | ||
2730 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2731 | BPF_MOV32_IMM(R0, 2), | ||
2732 | BPF_EXIT_INSN(), | ||
2733 | BPF_MOV32_IMM(R0, 1), | ||
2734 | BPF_EXIT_INSN(), | ||
2735 | }, | ||
2736 | INTERNAL, | ||
2737 | { }, | ||
2738 | { { 0, 0x1 } }, | ||
2739 | }, | ||
2740 | { | ||
2741 | "ALU64_ADD_K: 0 + 0x7fffffff = 0x7fffffff", | ||
2742 | .u.insns_int = { | ||
2743 | BPF_LD_IMM64(R2, 0x0), | ||
2744 | BPF_LD_IMM64(R3, 0x7fffffff), | ||
2745 | BPF_ALU64_IMM(BPF_ADD, R2, 0x7fffffff), | ||
2746 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2747 | BPF_MOV32_IMM(R0, 2), | ||
2748 | BPF_EXIT_INSN(), | ||
2749 | BPF_MOV32_IMM(R0, 1), | ||
2750 | BPF_EXIT_INSN(), | ||
2751 | }, | ||
2752 | INTERNAL, | ||
2753 | { }, | ||
2754 | { { 0, 0x1 } }, | ||
2755 | }, | ||
2756 | { | ||
2757 | "ALU64_ADD_K: 0 + 0x80000000 = 0xffffffff80000000", | ||
2758 | .u.insns_int = { | ||
2759 | BPF_LD_IMM64(R2, 0x0), | ||
2760 | BPF_LD_IMM64(R3, 0xffffffff80000000LL), | ||
2761 | BPF_ALU64_IMM(BPF_ADD, R2, 0x80000000), | ||
2762 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2763 | BPF_MOV32_IMM(R0, 2), | ||
2764 | BPF_EXIT_INSN(), | ||
2765 | BPF_MOV32_IMM(R0, 1), | ||
2766 | BPF_EXIT_INSN(), | ||
2767 | }, | ||
2768 | INTERNAL, | ||
2769 | { }, | ||
2770 | { { 0, 0x1 } }, | ||
2771 | }, | ||
2772 | { | ||
2773 | "ALU_ADD_K: 0 + 0x80008000 = 0xffffffff80008000", | ||
2774 | .u.insns_int = { | ||
2775 | BPF_LD_IMM64(R2, 0x0), | ||
2776 | BPF_LD_IMM64(R3, 0xffffffff80008000LL), | ||
2777 | BPF_ALU64_IMM(BPF_ADD, R2, 0x80008000), | ||
2778 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2779 | BPF_MOV32_IMM(R0, 2), | ||
2780 | BPF_EXIT_INSN(), | ||
2781 | BPF_MOV32_IMM(R0, 1), | ||
2782 | BPF_EXIT_INSN(), | ||
2783 | }, | ||
2784 | INTERNAL, | ||
2785 | { }, | ||
2786 | { { 0, 0x1 } }, | ||
2787 | }, | ||
2596 | /* BPF_ALU | BPF_SUB | BPF_X */ | 2788 | /* BPF_ALU | BPF_SUB | BPF_X */ |
2597 | { | 2789 | { |
2598 | "ALU_SUB_X: 3 - 1 = 2", | 2790 | "ALU_SUB_X: 3 - 1 = 2", |
@@ -4222,6 +4414,20 @@ static struct bpf_test tests[] = { | |||
4222 | { }, | 4414 | { }, |
4223 | { { 0, 1 } }, | 4415 | { { 0, 1 } }, |
4224 | }, | 4416 | }, |
4417 | { | ||
4418 | "JMP_JGT_K: Unsigned jump: if (-1 > 1) return 1", | ||
4419 | .u.insns_int = { | ||
4420 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
4421 | BPF_LD_IMM64(R1, -1), | ||
4422 | BPF_JMP_IMM(BPF_JGT, R1, 1, 1), | ||
4423 | BPF_EXIT_INSN(), | ||
4424 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
4425 | BPF_EXIT_INSN(), | ||
4426 | }, | ||
4427 | INTERNAL, | ||
4428 | { }, | ||
4429 | { { 0, 1 } }, | ||
4430 | }, | ||
4225 | /* BPF_JMP | BPF_JGE | BPF_K */ | 4431 | /* BPF_JMP | BPF_JGE | BPF_K */ |
4226 | { | 4432 | { |
4227 | "JMP_JGE_K: if (3 >= 2) return 1", | 4433 | "JMP_JGE_K: if (3 >= 2) return 1", |
@@ -4303,7 +4509,7 @@ static struct bpf_test tests[] = { | |||
4303 | .u.insns_int = { | 4509 | .u.insns_int = { |
4304 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4510 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4305 | BPF_LD_IMM64(R1, 3), | 4511 | BPF_LD_IMM64(R1, 3), |
4306 | BPF_JMP_IMM(BPF_JNE, R1, 2, 1), | 4512 | BPF_JMP_IMM(BPF_JSET, R1, 2, 1), |
4307 | BPF_EXIT_INSN(), | 4513 | BPF_EXIT_INSN(), |
4308 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4514 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4309 | BPF_EXIT_INSN(), | 4515 | BPF_EXIT_INSN(), |
@@ -4317,7 +4523,7 @@ static struct bpf_test tests[] = { | |||
4317 | .u.insns_int = { | 4523 | .u.insns_int = { |
4318 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4524 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4319 | BPF_LD_IMM64(R1, 3), | 4525 | BPF_LD_IMM64(R1, 3), |
4320 | BPF_JMP_IMM(BPF_JNE, R1, 0xffffffff, 1), | 4526 | BPF_JMP_IMM(BPF_JSET, R1, 0xffffffff, 1), |
4321 | BPF_EXIT_INSN(), | 4527 | BPF_EXIT_INSN(), |
4322 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4528 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4323 | BPF_EXIT_INSN(), | 4529 | BPF_EXIT_INSN(), |
@@ -4404,6 +4610,21 @@ static struct bpf_test tests[] = { | |||
4404 | { }, | 4610 | { }, |
4405 | { { 0, 1 } }, | 4611 | { { 0, 1 } }, |
4406 | }, | 4612 | }, |
4613 | { | ||
4614 | "JMP_JGT_X: Unsigned jump: if (-1 > 1) return 1", | ||
4615 | .u.insns_int = { | ||
4616 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
4617 | BPF_LD_IMM64(R1, -1), | ||
4618 | BPF_LD_IMM64(R2, 1), | ||
4619 | BPF_JMP_REG(BPF_JGT, R1, R2, 1), | ||
4620 | BPF_EXIT_INSN(), | ||
4621 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
4622 | BPF_EXIT_INSN(), | ||
4623 | }, | ||
4624 | INTERNAL, | ||
4625 | { }, | ||
4626 | { { 0, 1 } }, | ||
4627 | }, | ||
4407 | /* BPF_JMP | BPF_JGE | BPF_X */ | 4628 | /* BPF_JMP | BPF_JGE | BPF_X */ |
4408 | { | 4629 | { |
4409 | "JMP_JGE_X: if (3 >= 2) return 1", | 4630 | "JMP_JGE_X: if (3 >= 2) return 1", |
@@ -4474,7 +4695,7 @@ static struct bpf_test tests[] = { | |||
4474 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4695 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4475 | BPF_LD_IMM64(R1, 3), | 4696 | BPF_LD_IMM64(R1, 3), |
4476 | BPF_LD_IMM64(R2, 2), | 4697 | BPF_LD_IMM64(R2, 2), |
4477 | BPF_JMP_REG(BPF_JNE, R1, R2, 1), | 4698 | BPF_JMP_REG(BPF_JSET, R1, R2, 1), |
4478 | BPF_EXIT_INSN(), | 4699 | BPF_EXIT_INSN(), |
4479 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4700 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4480 | BPF_EXIT_INSN(), | 4701 | BPF_EXIT_INSN(), |
@@ -4489,7 +4710,7 @@ static struct bpf_test tests[] = { | |||
4489 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4710 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4490 | BPF_LD_IMM64(R1, 3), | 4711 | BPF_LD_IMM64(R1, 3), |
4491 | BPF_LD_IMM64(R2, 0xffffffff), | 4712 | BPF_LD_IMM64(R2, 0xffffffff), |
4492 | BPF_JMP_REG(BPF_JNE, R1, R2, 1), | 4713 | BPF_JMP_REG(BPF_JSET, R1, R2, 1), |
4493 | BPF_EXIT_INSN(), | 4714 | BPF_EXIT_INSN(), |
4494 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4715 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4495 | BPF_EXIT_INSN(), | 4716 | BPF_EXIT_INSN(), |