0001
0002
0003
0004
0005
0006 #ifdef DEBUG
0007 bool __init wg_packet_counter_selftest(void)
0008 {
0009 struct noise_replay_counter *counter;
0010 unsigned int test_num = 0, i;
0011 bool success = true;
0012
0013 counter = kmalloc(sizeof(*counter), GFP_KERNEL);
0014 if (unlikely(!counter)) {
0015 pr_err("nonce counter self-test malloc: FAIL\n");
0016 return false;
0017 }
0018
0019 #define T_INIT do { \
0020 memset(counter, 0, sizeof(*counter)); \
0021 spin_lock_init(&counter->lock); \
0022 } while (0)
0023 #define T_LIM (COUNTER_WINDOW_SIZE + 1)
0024 #define T(n, v) do { \
0025 ++test_num; \
0026 if (counter_validate(counter, n) != (v)) { \
0027 pr_err("nonce counter self-test %u: FAIL\n", \
0028 test_num); \
0029 success = false; \
0030 } \
0031 } while (0)
0032
0033 T_INIT;
0034 T(0, true);
0035 T(1, true);
0036 T(1, false);
0037 T(9, true);
0038 T(8, true);
0039 T(7, true);
0040 T(7, false);
0041 T(T_LIM, true);
0042 T(T_LIM - 1, true);
0043 T(T_LIM - 1, false);
0044 T(T_LIM - 2, true);
0045 T(2, true);
0046 T(2, false);
0047 T(T_LIM + 16, true);
0048 T(3, false);
0049 T(T_LIM + 16, false);
0050 T(T_LIM * 4, true);
0051 T(T_LIM * 4 - (T_LIM - 1), true);
0052 T(10, false);
0053 T(T_LIM * 4 - T_LIM, false);
0054 T(T_LIM * 4 - (T_LIM + 1), false);
0055 T(T_LIM * 4 - (T_LIM - 2), true);
0056 T(T_LIM * 4 + 1 - T_LIM, false);
0057 T(0, false);
0058 T(REJECT_AFTER_MESSAGES, false);
0059 T(REJECT_AFTER_MESSAGES - 1, true);
0060 T(REJECT_AFTER_MESSAGES, false);
0061 T(REJECT_AFTER_MESSAGES - 1, false);
0062 T(REJECT_AFTER_MESSAGES - 2, true);
0063 T(REJECT_AFTER_MESSAGES + 1, false);
0064 T(REJECT_AFTER_MESSAGES + 2, false);
0065 T(REJECT_AFTER_MESSAGES - 2, false);
0066 T(REJECT_AFTER_MESSAGES - 3, true);
0067 T(0, false);
0068
0069 T_INIT;
0070 for (i = 1; i <= COUNTER_WINDOW_SIZE; ++i)
0071 T(i, true);
0072 T(0, true);
0073 T(0, false);
0074
0075 T_INIT;
0076 for (i = 2; i <= COUNTER_WINDOW_SIZE + 1; ++i)
0077 T(i, true);
0078 T(1, true);
0079 T(0, false);
0080
0081 T_INIT;
0082 for (i = COUNTER_WINDOW_SIZE + 1; i-- > 0;)
0083 T(i, true);
0084
0085 T_INIT;
0086 for (i = COUNTER_WINDOW_SIZE + 2; i-- > 1;)
0087 T(i, true);
0088 T(0, false);
0089
0090 T_INIT;
0091 for (i = COUNTER_WINDOW_SIZE + 1; i-- > 1;)
0092 T(i, true);
0093 T(COUNTER_WINDOW_SIZE + 1, true);
0094 T(0, false);
0095
0096 T_INIT;
0097 for (i = COUNTER_WINDOW_SIZE + 1; i-- > 1;)
0098 T(i, true);
0099 T(0, true);
0100 T(COUNTER_WINDOW_SIZE + 1, true);
0101
0102 #undef T
0103 #undef T_LIM
0104 #undef T_INIT
0105
0106 if (success)
0107 pr_info("nonce counter self-tests: pass\n");
0108 kfree(counter);
0109 return success;
0110 }
0111 #endif