allowedips.c (002c6ca75289a4ac4f6738213dd2d258704886e4) allowedips.c (8032bf1233a74627ce69b803608e650f3f35971c)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
4 *
5 * This contains some basic static unit tests for the allowedips data structure.
6 * It also has two additional modes that are disabled and meant to be used by
7 * folks directly playing with this file. If you define the macro
8 * DEBUG_PRINT_TRIE_GRAPHVIZ to be 1, then every time there's a full tree in

--- 271 unchanged lines hidden (view full) ---

280 kref_init(&peers[i]->refcount);
281 INIT_LIST_HEAD(&peers[i]->allowedips_list);
282 }
283
284 mutex_lock(&mutex);
285
286 for (i = 0; i < NUM_RAND_ROUTES; ++i) {
287 get_random_bytes(ip, 4);
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
4 *
5 * This contains some basic static unit tests for the allowedips data structure.
6 * It also has two additional modes that are disabled and meant to be used by
7 * folks directly playing with this file. If you define the macro
8 * DEBUG_PRINT_TRIE_GRAPHVIZ to be 1, then every time there's a full tree in

--- 271 unchanged lines hidden (view full) ---

280 kref_init(&peers[i]->refcount);
281 INIT_LIST_HEAD(&peers[i]->allowedips_list);
282 }
283
284 mutex_lock(&mutex);
285
286 for (i = 0; i < NUM_RAND_ROUTES; ++i) {
287 get_random_bytes(ip, 4);
288 cidr = prandom_u32_max(32) + 1;
289 peer = peers[prandom_u32_max(NUM_PEERS)];
288 cidr = get_random_u32_below(32) + 1;
289 peer = peers[get_random_u32_below(NUM_PEERS)];
290 if (wg_allowedips_insert_v4(&t, (struct in_addr *)ip, cidr,
291 peer, &mutex) < 0) {
292 pr_err("allowedips random self-test malloc: FAIL\n");
293 goto free_locked;
294 }
295 if (horrible_allowedips_insert_v4(&h, (struct in_addr *)ip,
296 cidr, peer) < 0) {
297 pr_err("allowedips random self-test malloc: FAIL\n");
298 goto free_locked;
299 }
300 for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
301 memcpy(mutated, ip, 4);
302 get_random_bytes(mutate_mask, 4);
290 if (wg_allowedips_insert_v4(&t, (struct in_addr *)ip, cidr,
291 peer, &mutex) < 0) {
292 pr_err("allowedips random self-test malloc: FAIL\n");
293 goto free_locked;
294 }
295 if (horrible_allowedips_insert_v4(&h, (struct in_addr *)ip,
296 cidr, peer) < 0) {
297 pr_err("allowedips random self-test malloc: FAIL\n");
298 goto free_locked;
299 }
300 for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
301 memcpy(mutated, ip, 4);
302 get_random_bytes(mutate_mask, 4);
303 mutate_amount = prandom_u32_max(32);
303 mutate_amount = get_random_u32_below(32);
304 for (k = 0; k < mutate_amount / 8; ++k)
305 mutate_mask[k] = 0xff;
306 mutate_mask[k] = 0xff
307 << ((8 - (mutate_amount % 8)) % 8);
308 for (; k < 4; ++k)
309 mutate_mask[k] = 0;
310 for (k = 0; k < 4; ++k)
311 mutated[k] = (mutated[k] & mutate_mask[k]) |
312 (~mutate_mask[k] &
313 get_random_u8());
304 for (k = 0; k < mutate_amount / 8; ++k)
305 mutate_mask[k] = 0xff;
306 mutate_mask[k] = 0xff
307 << ((8 - (mutate_amount % 8)) % 8);
308 for (; k < 4; ++k)
309 mutate_mask[k] = 0;
310 for (k = 0; k < 4; ++k)
311 mutated[k] = (mutated[k] & mutate_mask[k]) |
312 (~mutate_mask[k] &
313 get_random_u8());
314 cidr = prandom_u32_max(32) + 1;
315 peer = peers[prandom_u32_max(NUM_PEERS)];
314 cidr = get_random_u32_below(32) + 1;
315 peer = peers[get_random_u32_below(NUM_PEERS)];
316 if (wg_allowedips_insert_v4(&t,
317 (struct in_addr *)mutated,
318 cidr, peer, &mutex) < 0) {
319 pr_err("allowedips random self-test malloc: FAIL\n");
320 goto free_locked;
321 }
322 if (horrible_allowedips_insert_v4(&h,
323 (struct in_addr *)mutated, cidr, peer)) {
324 pr_err("allowedips random self-test malloc: FAIL\n");
325 goto free_locked;
326 }
327 }
328 }
329
330 for (i = 0; i < NUM_RAND_ROUTES; ++i) {
331 get_random_bytes(ip, 16);
316 if (wg_allowedips_insert_v4(&t,
317 (struct in_addr *)mutated,
318 cidr, peer, &mutex) < 0) {
319 pr_err("allowedips random self-test malloc: FAIL\n");
320 goto free_locked;
321 }
322 if (horrible_allowedips_insert_v4(&h,
323 (struct in_addr *)mutated, cidr, peer)) {
324 pr_err("allowedips random self-test malloc: FAIL\n");
325 goto free_locked;
326 }
327 }
328 }
329
330 for (i = 0; i < NUM_RAND_ROUTES; ++i) {
331 get_random_bytes(ip, 16);
332 cidr = prandom_u32_max(128) + 1;
333 peer = peers[prandom_u32_max(NUM_PEERS)];
332 cidr = get_random_u32_below(128) + 1;
333 peer = peers[get_random_u32_below(NUM_PEERS)];
334 if (wg_allowedips_insert_v6(&t, (struct in6_addr *)ip, cidr,
335 peer, &mutex) < 0) {
336 pr_err("allowedips random self-test malloc: FAIL\n");
337 goto free_locked;
338 }
339 if (horrible_allowedips_insert_v6(&h, (struct in6_addr *)ip,
340 cidr, peer) < 0) {
341 pr_err("allowedips random self-test malloc: FAIL\n");
342 goto free_locked;
343 }
344 for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
345 memcpy(mutated, ip, 16);
346 get_random_bytes(mutate_mask, 16);
334 if (wg_allowedips_insert_v6(&t, (struct in6_addr *)ip, cidr,
335 peer, &mutex) < 0) {
336 pr_err("allowedips random self-test malloc: FAIL\n");
337 goto free_locked;
338 }
339 if (horrible_allowedips_insert_v6(&h, (struct in6_addr *)ip,
340 cidr, peer) < 0) {
341 pr_err("allowedips random self-test malloc: FAIL\n");
342 goto free_locked;
343 }
344 for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
345 memcpy(mutated, ip, 16);
346 get_random_bytes(mutate_mask, 16);
347 mutate_amount = prandom_u32_max(128);
347 mutate_amount = get_random_u32_below(128);
348 for (k = 0; k < mutate_amount / 8; ++k)
349 mutate_mask[k] = 0xff;
350 mutate_mask[k] = 0xff
351 << ((8 - (mutate_amount % 8)) % 8);
352 for (; k < 4; ++k)
353 mutate_mask[k] = 0;
354 for (k = 0; k < 4; ++k)
355 mutated[k] = (mutated[k] & mutate_mask[k]) |
356 (~mutate_mask[k] &
357 get_random_u8());
348 for (k = 0; k < mutate_amount / 8; ++k)
349 mutate_mask[k] = 0xff;
350 mutate_mask[k] = 0xff
351 << ((8 - (mutate_amount % 8)) % 8);
352 for (; k < 4; ++k)
353 mutate_mask[k] = 0;
354 for (k = 0; k < 4; ++k)
355 mutated[k] = (mutated[k] & mutate_mask[k]) |
356 (~mutate_mask[k] &
357 get_random_u8());
358 cidr = prandom_u32_max(128) + 1;
359 peer = peers[prandom_u32_max(NUM_PEERS)];
358 cidr = get_random_u32_below(128) + 1;
359 peer = peers[get_random_u32_below(NUM_PEERS)];
360 if (wg_allowedips_insert_v6(&t,
361 (struct in6_addr *)mutated,
362 cidr, peer, &mutex) < 0) {
363 pr_err("allowedips random self-test malloc: FAIL\n");
364 goto free_locked;
365 }
366 if (horrible_allowedips_insert_v6(
367 &h, (struct in6_addr *)mutated, cidr,

--- 309 unchanged lines hidden ---
360 if (wg_allowedips_insert_v6(&t,
361 (struct in6_addr *)mutated,
362 cidr, peer, &mutex) < 0) {
363 pr_err("allowedips random self-test malloc: FAIL\n");
364 goto free_locked;
365 }
366 if (horrible_allowedips_insert_v6(
367 &h, (struct in6_addr *)mutated, cidr,

--- 309 unchanged lines hidden ---