From: kernel test robot <lkp@intel.com>
To: Uros Bizjak <ubizjak@gmail.com>, linux-kernel@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev, Uros Bizjak <ubizjak@gmail.com>,
Theodore Ts'o <tytso@mit.edu>,
"Jason A. Donenfeld" <Jason@zx2c4.com>
Subject: Re: [PATCH 17/18] random: Do not include <linux/prandom.h>
Date: Fri, 6 Sep 2024 21:30:10 +0800 [thread overview]
Message-ID: <202409062005.ue7L87dN-lkp@intel.com> (raw)
In-Reply-To: <20240905122020.872466-18-ubizjak@gmail.com>
Hi Uros,
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-nonmm-unstable]
[also build test ERROR on mtd/mtd/next mtd/mtd/fixes linus/master v6.11-rc6 next-20240906]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Uros-Bizjak/x86-kaslr-Include-linux-prandom-h-instead-of-linux-random-h/20240905-202710
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-nonmm-unstable
patch link: https://lore.kernel.org/r/20240905122020.872466-18-ubizjak%40gmail.com
patch subject: [PATCH 17/18] random: Do not include <linux/prandom.h>
config: arm-randconfig-002-20240906 (https://download.01.org/0day-ci/archive/20240906/202409062005.ue7L87dN-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240906/202409062005.ue7L87dN-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409062005.ue7L87dN-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
>> crypto/testmgr.c:881:42: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
881 | static inline void init_rnd_state(struct rnd_state *rng)
| ^~~~~~~~~
crypto/testmgr.c: In function 'init_rnd_state':
>> crypto/testmgr.c:883:9: error: implicit declaration of function 'prandom_seed_state' [-Wimplicit-function-declaration]
883 | prandom_seed_state(rng, get_random_u64());
| ^~~~~~~~~~~~~~~~~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:886:36: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
886 | static inline u8 prandom_u8(struct rnd_state *rng)
| ^~~~~~~~~
crypto/testmgr.c: In function 'prandom_u8':
>> crypto/testmgr.c:888:16: error: implicit declaration of function 'prandom_u32_state' [-Wimplicit-function-declaration]
888 | return prandom_u32_state(rng);
| ^~~~~~~~~~~~~~~~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:891:44: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ^~~~~~~~~
crypto/testmgr.c:900:40: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ^~~~~~~~~
crypto/testmgr.c: In function 'prandom_bool':
>> crypto/testmgr.c:902:34: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
902 | return prandom_u32_below(rng, 2);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:905:48: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
905 | static inline u32 prandom_u32_inclusive(struct rnd_state *rng,
| ^~~~~~~~~
crypto/testmgr.c: In function 'prandom_u32_inclusive':
crypto/testmgr.c:908:42: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
908 | return floor + prandom_u32_below(rng, ceil - floor + 1);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:912:51: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
912 | static unsigned int generate_random_length(struct rnd_state *rng,
| ^~~~~~~~~
crypto/testmgr.c: In function 'generate_random_length':
crypto/testmgr.c:915:46: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
915 | unsigned int len = prandom_u32_below(rng, max_len + 1);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:917:35: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
917 | switch (prandom_u32_below(rng, 4)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:930:38: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
930 | if (len && prandom_u32_below(rng, 4) == 0)
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:936:36: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
936 | static void flip_random_bit(struct rnd_state *rng, u8 *buf, size_t size)
| ^~~~~~~~~
crypto/testmgr.c: In function 'flip_random_bit':
crypto/testmgr.c:940:36: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
940 | bitpos = prandom_u32_below(rng, size * 8);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:945:37: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
945 | static void flip_random_byte(struct rnd_state *rng, u8 *buf, size_t size)
| ^~~~~~~~~
crypto/testmgr.c: In function 'flip_random_byte':
crypto/testmgr.c:947:31: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
947 | buf[prandom_u32_below(rng, size)] ^= 0xff;
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:951:34: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
951 | static void mutate_buffer(struct rnd_state *rng, u8 *buf, size_t size)
| ^~~~~~~~~
crypto/testmgr.c: In function 'mutate_buffer':
crypto/testmgr.c:957:31: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
957 | if (prandom_u32_below(rng, 4) == 0) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
In file included from include/linux/kernel.h:28,
from include/linux/cpumask.h:11,
from include/linux/smp.h:13,
from include/linux/lockdep.h:14,
from include/linux/spinlock.h:63,
from include/linux/swait.h:7,
from include/linux/completion.h:12,
from include/linux/crypto.h:15,
from include/crypto/aead.h:13,
from crypto/testmgr.c:19:
crypto/testmgr.c:958:66: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
958 | num_flips = min_t(size_t, 1 << prandom_u32_below(rng, 8),
| ^~~
| |
| struct rnd_state *
include/linux/minmax.h:93:23: note: in definition of macro '__cmp_once_unique'
93 | ({ type ux = (x); type uy = (y); __cmp(op, ux, uy); })
| ^
include/linux/minmax.h:213:27: note: in expansion of macro '__cmp_once'
213 | #define min_t(type, x, y) __cmp_once(min, type, x, y)
| ^~~~~~~~~~
crypto/testmgr.c:958:29: note: in expansion of macro 'min_t'
958 | num_flips = min_t(size_t, 1 << prandom_u32_below(rng, 8),
| ^~~~~
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:961:41: error: passing argument 1 of 'flip_random_bit' from incompatible pointer type [-Wincompatible-pointer-types]
961 | flip_random_bit(rng, buf, size);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:936:47: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
936 | static void flip_random_bit(struct rnd_state *rng, u8 *buf, size_t size)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:965:31: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
965 | if (prandom_u32_below(rng, 4) == 0) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:966:66: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
966 | num_flips = min_t(size_t, 1 << prandom_u32_below(rng, 8), size);
| ^~~
| |
| struct rnd_state *
include/linux/minmax.h:93:23: note: in definition of macro '__cmp_once_unique'
93 | ({ type ux = (x); type uy = (y); __cmp(op, ux, uy); })
| ^
include/linux/minmax.h:213:27: note: in expansion of macro '__cmp_once'
213 | #define min_t(type, x, y) __cmp_once(min, type, x, y)
| ^~~~~~~~~~
crypto/testmgr.c:966:29: note: in expansion of macro 'min_t'
966 | num_flips = min_t(size_t, 1 << prandom_u32_below(rng, 8), size);
| ^~~~~
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:968:42: error: passing argument 1 of 'flip_random_byte' from incompatible pointer type [-Wincompatible-pointer-types]
968 | flip_random_byte(rng, buf, size);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:945:48: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
945 | static void flip_random_byte(struct rnd_state *rng, u8 *buf, size_t size)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:973:42: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
973 | static void generate_random_bytes(struct rnd_state *rng, u8 *buf, size_t count)
| ^~~~~~~~~
crypto/testmgr.c: In function 'generate_random_bytes':
crypto/testmgr.c:982:35: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
982 | switch (prandom_u32_below(rng, 8)) { /* Choose a generation strategy */
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:986:43: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
986 | switch (prandom_u32_below(rng, 4)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:994:40: error: passing argument 1 of 'prandom_u8' from incompatible pointer type [-Wincompatible-pointer-types]
994 | b = prandom_u8(rng);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:886:47: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
886 | static inline u8 prandom_u8(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:998:31: error: passing argument 1 of 'mutate_buffer' from incompatible pointer type [-Wincompatible-pointer-types]
998 | mutate_buffer(rng, buf, count);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:951:45: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
951 | static void mutate_buffer(struct rnd_state *rng, u8 *buf, size_t size)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1002:40: error: passing argument 1 of 'prandom_u8' from incompatible pointer type [-Wincompatible-pointer-types]
1002 | increment = prandom_u8(rng);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:886:47: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
886 | static inline u8 prandom_u8(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1003:32: error: passing argument 1 of 'prandom_u8' from incompatible pointer type [-Wincompatible-pointer-types]
1003 | b = prandom_u8(rng);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:886:47: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
886 | static inline u8 prandom_u8(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1006:31: error: passing argument 1 of 'mutate_buffer' from incompatible pointer type [-Wincompatible-pointer-types]
1006 | mutate_buffer(rng, buf, count);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:951:45: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
951 | static void mutate_buffer(struct rnd_state *rng, u8 *buf, size_t size)
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:1010:17: error: implicit declaration of function 'prandom_bytes_state' [-Wimplicit-function-declaration]
1010 | prandom_bytes_state(rng, buf, count);
| ^~~~~~~~~~~~~~~~~~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:1014:51: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
1014 | static char *generate_random_sgl_divisions(struct rnd_state *rng,
| ^~~~~~~~~
crypto/testmgr.c: In function 'generate_random_sgl_divisions':
>> crypto/testmgr.c:1026:64: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1026 | if (div == &divs[max_divs - 1] || prandom_bool(rng))
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1028:44: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1028 | else if (prandom_u32_below(rng, 4) == 0)
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:1031:58: error: passing argument 1 of 'prandom_u32_inclusive' from incompatible pointer type [-Wincompatible-pointer-types]
1031 | this_len = prandom_u32_inclusive(rng, 1, remaining);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:905:59: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
905 | static inline u32 prandom_u32_inclusive(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1034:39: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1034 | if (prandom_u32_below(rng, 4) == 0)
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1035:61: error: passing argument 1 of 'prandom_u32_inclusive' from incompatible pointer type [-Wincompatible-pointer-types]
1035 | div->offset = prandom_u32_inclusive(rng,
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:905:59: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
905 | static inline u32 prandom_u32_inclusive(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1038:39: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1038 | else if (prandom_bool(rng))
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1039:57: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1039 | div->offset = prandom_u32_below(rng, 32);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1041:57: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1041 | div->offset = prandom_u32_below(rng, PAGE_SIZE);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1042:39: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1042 | if (prandom_u32_below(rng, 8) == 0)
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1047:51: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1047 | switch (prandom_u32_below(rng, 4)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1059:34: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1059 | prandom_bool(rng))
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: At top level:
crypto/testmgr.c:1094:51: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
1094 | static void generate_random_testvec_config(struct rnd_state *rng,
| ^~~~~~~~~
crypto/testmgr.c: In function 'generate_random_testvec_config':
crypto/testmgr.c:1107:35: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1107 | switch (prandom_u32_below(rng, 4)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1122:26: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1122 | if (prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1127:35: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1127 | switch (prandom_u32_below(rng, 4)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1143:34: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1143 | if (prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1147:34: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1147 | if (prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:1154:43: error: passing argument 1 of 'generate_random_sgl_divisions' from incompatible pointer type [-Wincompatible-pointer-types]
1154 | p = generate_random_sgl_divisions(rng, cfg->src_divs,
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:1014:62: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
1014 | static char *generate_random_sgl_divisions(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1161:63: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1161 | if (cfg->inplace_mode == OUT_OF_PLACE && prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1163:51: error: passing argument 1 of 'generate_random_sgl_divisions' from incompatible pointer type [-Wincompatible-pointer-types]
1163 | p = generate_random_sgl_divisions(rng, cfg->dst_divs,
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:1014:62: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
1014 | static char *generate_random_sgl_divisions(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1170:26: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1170 | if (prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1171:56: error: passing argument 1 of 'prandom_u32_inclusive' from incompatible pointer type [-Wincompatible-pointer-types]
1171 | cfg->iv_offset = prandom_u32_inclusive(rng, 1,
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:905:59: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
905 | static inline u32 prandom_u32_inclusive(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1176:26: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
1176 | if (prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1177:57: error: passing argument 1 of 'prandom_u32_inclusive' from incompatible pointer type [-Wincompatible-pointer-types]
1177 | cfg->key_offset = prandom_u32_inclusive(rng, 1,
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:905:59: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
905 | static inline u32 prandom_u32_inclusive(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: In function 'test_hash_vec':
>> crypto/testmgr.c:1689:34: error: storage size of 'rng' isn't known
1689 | struct rnd_state rng;
| ^~~
>> crypto/testmgr.c:1689:34: warning: unused variable 'rng' [-Wunused-variable]
crypto/testmgr.c: At top level:
crypto/testmgr.c:1714:49: warning: 'struct rnd_state' declared inside parameter list will not be visible outside of this definition or declaration
1714 | static void generate_random_hash_testvec(struct rnd_state *rng,
| ^~~~~~~~~
crypto/testmgr.c: In function 'generate_random_hash_testvec':
>> crypto/testmgr.c:1722:45: error: passing argument 1 of 'generate_random_length' from incompatible pointer type [-Wincompatible-pointer-types]
1722 | vec->psize = generate_random_length(rng, maxdatasize);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:912:62: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
912 | static unsigned int generate_random_length(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
>> crypto/testmgr.c:1723:31: error: passing argument 1 of 'generate_random_bytes' from incompatible pointer type [-Wincompatible-pointer-types]
1723 | generate_random_bytes(rng, (u8 *)vec->plaintext, vec->psize);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:973:53: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
973 | static void generate_random_bytes(struct rnd_state *rng, u8 *buf, size_t count)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1733:39: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
1733 | if (prandom_u32_below(rng, 4) == 0)
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1734:60: error: passing argument 1 of 'prandom_u32_inclusive' from incompatible pointer type [-Wincompatible-pointer-types]
1734 | vec->ksize = prandom_u32_inclusive(rng, 1, maxkeysize);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:905:59: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
905 | static inline u32 prandom_u32_inclusive(struct rnd_state *rng,
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:1735:39: error: passing argument 1 of 'generate_random_bytes' from incompatible pointer type [-Wincompatible-pointer-types]
1735 | generate_random_bytes(rng, (u8 *)vec->key, vec->ksize);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:973:53: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
973 | static void generate_random_bytes(struct rnd_state *rng, u8 *buf, size_t count)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: In function 'test_hash_vs_generic_impl':
crypto/testmgr.c:1769:26: error: storage size of 'rng' isn't known
1769 | struct rnd_state rng;
| ^~~
crypto/testmgr.c:1769:26: warning: unused variable 'rng' [-Wunused-variable]
crypto/testmgr.c: In function 'test_aead_vec':
crypto/testmgr.c:2259:34: error: storage size of 'rng' isn't known
2259 | struct rnd_state rng;
| ^~~
crypto/testmgr.c:2259:34: warning: unused variable 'rng' [-Wunused-variable]
crypto/testmgr.c: At top level:
>> crypto/testmgr.c:2282:26: error: field 'rng' has incomplete type
2282 | struct rnd_state rng;
| ^~~
crypto/testmgr.c: In function 'mutate_aead_message':
crypto/testmgr.c:2308:26: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
2308 | if (prandom_bool(rng) && vec->alen > aad_tail_size) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2310:33: error: passing argument 1 of 'flip_random_bit' from incompatible pointer type [-Wincompatible-pointer-types]
2310 | flip_random_bit(rng, (u8 *)vec->assoc,
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:936:47: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
936 | static void flip_random_bit(struct rnd_state *rng, u8 *buf, size_t size)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2312:34: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
2312 | if (prandom_bool(rng))
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2315:26: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
2315 | if (prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2317:33: error: passing argument 1 of 'flip_random_bit' from incompatible pointer type [-Wincompatible-pointer-types]
2317 | flip_random_bit(rng, (u8 *)vec->ctext + vec->plen, authsize);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:936:47: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
936 | static void flip_random_bit(struct rnd_state *rng, u8 *buf, size_t size)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2320:33: error: passing argument 1 of 'flip_random_bit' from incompatible pointer type [-Wincompatible-pointer-types]
2320 | flip_random_bit(rng, (u8 *)vec->ctext, vec->clen);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:936:47: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
936 | static void flip_random_bit(struct rnd_state *rng, u8 *buf, size_t size)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: In function 'generate_aead_message':
crypto/testmgr.c:2342:53: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
2342 | prandom_u32_below(rng, 4) == 0);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2345:31: error: passing argument 1 of 'generate_random_bytes' from incompatible pointer type [-Wincompatible-pointer-types]
2345 | generate_random_bytes(rng, (u8 *)vec->assoc, vec->alen);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:973:53: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
973 | static void generate_random_bytes(struct rnd_state *rng, u8 *buf, size_t count)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2350:41: error: passing argument 1 of 'prandom_bool' from incompatible pointer type [-Wincompatible-pointer-types]
2350 | if (inauthentic && prandom_bool(rng)) {
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:900:51: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
900 | static inline bool prandom_bool(struct rnd_state *rng)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2352:39: error: passing argument 1 of 'generate_random_bytes' from incompatible pointer type [-Wincompatible-pointer-types]
2352 | generate_random_bytes(rng, (u8 *)vec->ctext, vec->clen);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:973:53: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
973 | static void generate_random_bytes(struct rnd_state *rng, u8 *buf, size_t count)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c:2364:47: error: passing argument 1 of 'generate_random_bytes' from incompatible pointer type [-Wincompatible-pointer-types]
2364 | generate_random_bytes(rng, (u8 *)vec->ptext, vec->plen);
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:973:53: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
973 | static void generate_random_bytes(struct rnd_state *rng, u8 *buf, size_t count)
| ~~~~~~~~~~~~~~~~~~^~~
crypto/testmgr.c: In function 'generate_random_aead_testvec':
crypto/testmgr.c:2415:31: error: passing argument 1 of 'prandom_u32_below' from incompatible pointer type [-Wincompatible-pointer-types]
2415 | if (prandom_u32_below(rng, 4) == 0)
| ^~~
| |
| struct rnd_state *
crypto/testmgr.c:891:55: note: expected 'struct rnd_state *' but argument is of type 'struct rnd_state *'
891 | static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
vim +/prandom_seed_state +883 crypto/testmgr.c
f2bb770ae89641 Eric Biggers 2019-04-11 873
f900fde2888360 Eric Biggers 2023-02-27 874 /*
f900fde2888360 Eric Biggers 2023-02-27 875 * The fuzz tests use prandom instead of the normal Linux RNG since they don't
f900fde2888360 Eric Biggers 2023-02-27 876 * need cryptographically secure random numbers. This greatly improves the
f900fde2888360 Eric Biggers 2023-02-27 877 * performance of these tests, especially if they are run before the Linux RNG
f900fde2888360 Eric Biggers 2023-02-27 878 * has been initialized or if they are run on a lockdep-enabled kernel.
f900fde2888360 Eric Biggers 2023-02-27 879 */
f900fde2888360 Eric Biggers 2023-02-27 880
f900fde2888360 Eric Biggers 2023-02-27 @881 static inline void init_rnd_state(struct rnd_state *rng)
f900fde2888360 Eric Biggers 2023-02-27 882 {
f900fde2888360 Eric Biggers 2023-02-27 @883 prandom_seed_state(rng, get_random_u64());
f900fde2888360 Eric Biggers 2023-02-27 884 }
f900fde2888360 Eric Biggers 2023-02-27 885
f900fde2888360 Eric Biggers 2023-02-27 886 static inline u8 prandom_u8(struct rnd_state *rng)
f900fde2888360 Eric Biggers 2023-02-27 887 {
f900fde2888360 Eric Biggers 2023-02-27 @888 return prandom_u32_state(rng);
f900fde2888360 Eric Biggers 2023-02-27 889 }
f900fde2888360 Eric Biggers 2023-02-27 890
f900fde2888360 Eric Biggers 2023-02-27 @891 static inline u32 prandom_u32_below(struct rnd_state *rng, u32 ceil)
f900fde2888360 Eric Biggers 2023-02-27 892 {
f900fde2888360 Eric Biggers 2023-02-27 893 /*
f900fde2888360 Eric Biggers 2023-02-27 894 * This is slightly biased for non-power-of-2 values of 'ceil', but this
f900fde2888360 Eric Biggers 2023-02-27 895 * isn't important here.
f900fde2888360 Eric Biggers 2023-02-27 896 */
f900fde2888360 Eric Biggers 2023-02-27 897 return prandom_u32_state(rng) % ceil;
f900fde2888360 Eric Biggers 2023-02-27 898 }
f900fde2888360 Eric Biggers 2023-02-27 899
f900fde2888360 Eric Biggers 2023-02-27 900 static inline bool prandom_bool(struct rnd_state *rng)
f900fde2888360 Eric Biggers 2023-02-27 901 {
f900fde2888360 Eric Biggers 2023-02-27 @902 return prandom_u32_below(rng, 2);
f900fde2888360 Eric Biggers 2023-02-27 903 }
f900fde2888360 Eric Biggers 2023-02-27 904
f900fde2888360 Eric Biggers 2023-02-27 @905 static inline u32 prandom_u32_inclusive(struct rnd_state *rng,
f900fde2888360 Eric Biggers 2023-02-27 906 u32 floor, u32 ceil)
f900fde2888360 Eric Biggers 2023-02-27 907 {
f900fde2888360 Eric Biggers 2023-02-27 908 return floor + prandom_u32_below(rng, ceil - floor + 1);
f900fde2888360 Eric Biggers 2023-02-27 909 }
f900fde2888360 Eric Biggers 2023-02-27 910
f2bb770ae89641 Eric Biggers 2019-04-11 911 /* Generate a random length in range [0, max_len], but prefer smaller values */
f900fde2888360 Eric Biggers 2023-02-27 912 static unsigned int generate_random_length(struct rnd_state *rng,
f900fde2888360 Eric Biggers 2023-02-27 913 unsigned int max_len)
f2bb770ae89641 Eric Biggers 2019-04-11 914 {
f900fde2888360 Eric Biggers 2023-02-27 915 unsigned int len = prandom_u32_below(rng, max_len + 1);
f2bb770ae89641 Eric Biggers 2019-04-11 916
f900fde2888360 Eric Biggers 2023-02-27 917 switch (prandom_u32_below(rng, 4)) {
f2bb770ae89641 Eric Biggers 2019-04-11 918 case 0:
101e99c23af946 Eric Biggers 2024-07-03 919 len %= 64;
101e99c23af946 Eric Biggers 2024-07-03 920 break;
f2bb770ae89641 Eric Biggers 2019-04-11 921 case 1:
101e99c23af946 Eric Biggers 2024-07-03 922 len %= 256;
101e99c23af946 Eric Biggers 2024-07-03 923 break;
f2bb770ae89641 Eric Biggers 2019-04-11 924 case 2:
101e99c23af946 Eric Biggers 2024-07-03 925 len %= 1024;
101e99c23af946 Eric Biggers 2024-07-03 926 break;
f2bb770ae89641 Eric Biggers 2019-04-11 927 default:
101e99c23af946 Eric Biggers 2024-07-03 928 break;
f2bb770ae89641 Eric Biggers 2019-04-11 929 }
101e99c23af946 Eric Biggers 2024-07-03 930 if (len && prandom_u32_below(rng, 4) == 0)
101e99c23af946 Eric Biggers 2024-07-03 931 len = rounddown_pow_of_two(len);
101e99c23af946 Eric Biggers 2024-07-03 932 return len;
f2bb770ae89641 Eric Biggers 2019-04-11 933 }
f2bb770ae89641 Eric Biggers 2019-04-11 934
49763fc6b1af42 Eric Biggers 2019-12-01 935 /* Flip a random bit in the given nonempty data buffer */
f900fde2888360 Eric Biggers 2023-02-27 936 static void flip_random_bit(struct rnd_state *rng, u8 *buf, size_t size)
49763fc6b1af42 Eric Biggers 2019-12-01 937 {
49763fc6b1af42 Eric Biggers 2019-12-01 938 size_t bitpos;
49763fc6b1af42 Eric Biggers 2019-12-01 939
f900fde2888360 Eric Biggers 2023-02-27 940 bitpos = prandom_u32_below(rng, size * 8);
49763fc6b1af42 Eric Biggers 2019-12-01 941 buf[bitpos / 8] ^= 1 << (bitpos % 8);
49763fc6b1af42 Eric Biggers 2019-12-01 942 }
49763fc6b1af42 Eric Biggers 2019-12-01 943
49763fc6b1af42 Eric Biggers 2019-12-01 944 /* Flip a random byte in the given nonempty data buffer */
f900fde2888360 Eric Biggers 2023-02-27 945 static void flip_random_byte(struct rnd_state *rng, u8 *buf, size_t size)
49763fc6b1af42 Eric Biggers 2019-12-01 946 {
f900fde2888360 Eric Biggers 2023-02-27 947 buf[prandom_u32_below(rng, size)] ^= 0xff;
49763fc6b1af42 Eric Biggers 2019-12-01 948 }
49763fc6b1af42 Eric Biggers 2019-12-01 949
49763fc6b1af42 Eric Biggers 2019-12-01 950 /* Sometimes make some random changes to the given nonempty data buffer */
f900fde2888360 Eric Biggers 2023-02-27 951 static void mutate_buffer(struct rnd_state *rng, u8 *buf, size_t size)
f2bb770ae89641 Eric Biggers 2019-04-11 952 {
f2bb770ae89641 Eric Biggers 2019-04-11 953 size_t num_flips;
f2bb770ae89641 Eric Biggers 2019-04-11 954 size_t i;
f2bb770ae89641 Eric Biggers 2019-04-11 955
f2bb770ae89641 Eric Biggers 2019-04-11 956 /* Sometimes flip some bits */
f900fde2888360 Eric Biggers 2023-02-27 957 if (prandom_u32_below(rng, 4) == 0) {
f900fde2888360 Eric Biggers 2023-02-27 @958 num_flips = min_t(size_t, 1 << prandom_u32_below(rng, 8),
f900fde2888360 Eric Biggers 2023-02-27 959 size * 8);
49763fc6b1af42 Eric Biggers 2019-12-01 960 for (i = 0; i < num_flips; i++)
f900fde2888360 Eric Biggers 2023-02-27 @961 flip_random_bit(rng, buf, size);
f2bb770ae89641 Eric Biggers 2019-04-11 962 }
f2bb770ae89641 Eric Biggers 2019-04-11 963
f2bb770ae89641 Eric Biggers 2019-04-11 964 /* Sometimes flip some bytes */
f900fde2888360 Eric Biggers 2023-02-27 965 if (prandom_u32_below(rng, 4) == 0) {
f900fde2888360 Eric Biggers 2023-02-27 @966 num_flips = min_t(size_t, 1 << prandom_u32_below(rng, 8), size);
f2bb770ae89641 Eric Biggers 2019-04-11 967 for (i = 0; i < num_flips; i++)
f900fde2888360 Eric Biggers 2023-02-27 @968 flip_random_byte(rng, buf, size);
f2bb770ae89641 Eric Biggers 2019-04-11 969 }
f2bb770ae89641 Eric Biggers 2019-04-11 970 }
f2bb770ae89641 Eric Biggers 2019-04-11 971
f2bb770ae89641 Eric Biggers 2019-04-11 972 /* Randomly generate 'count' bytes, but sometimes make them "interesting" */
f900fde2888360 Eric Biggers 2023-02-27 973 static void generate_random_bytes(struct rnd_state *rng, u8 *buf, size_t count)
f2bb770ae89641 Eric Biggers 2019-04-11 974 {
f2bb770ae89641 Eric Biggers 2019-04-11 975 u8 b;
f2bb770ae89641 Eric Biggers 2019-04-11 976 u8 increment;
f2bb770ae89641 Eric Biggers 2019-04-11 977 size_t i;
f2bb770ae89641 Eric Biggers 2019-04-11 978
f2bb770ae89641 Eric Biggers 2019-04-11 979 if (count == 0)
f2bb770ae89641 Eric Biggers 2019-04-11 980 return;
f2bb770ae89641 Eric Biggers 2019-04-11 981
f900fde2888360 Eric Biggers 2023-02-27 982 switch (prandom_u32_below(rng, 8)) { /* Choose a generation strategy */
f2bb770ae89641 Eric Biggers 2019-04-11 983 case 0:
f2bb770ae89641 Eric Biggers 2019-04-11 984 case 1:
f2bb770ae89641 Eric Biggers 2019-04-11 985 /* All the same byte, plus optional mutations */
f900fde2888360 Eric Biggers 2023-02-27 @986 switch (prandom_u32_below(rng, 4)) {
f2bb770ae89641 Eric Biggers 2019-04-11 987 case 0:
f2bb770ae89641 Eric Biggers 2019-04-11 988 b = 0x00;
f2bb770ae89641 Eric Biggers 2019-04-11 989 break;
f2bb770ae89641 Eric Biggers 2019-04-11 990 case 1:
f2bb770ae89641 Eric Biggers 2019-04-11 991 b = 0xff;
f2bb770ae89641 Eric Biggers 2019-04-11 992 break;
f2bb770ae89641 Eric Biggers 2019-04-11 993 default:
f900fde2888360 Eric Biggers 2023-02-27 @994 b = prandom_u8(rng);
f2bb770ae89641 Eric Biggers 2019-04-11 995 break;
f2bb770ae89641 Eric Biggers 2019-04-11 996 }
f2bb770ae89641 Eric Biggers 2019-04-11 997 memset(buf, b, count);
f900fde2888360 Eric Biggers 2023-02-27 @998 mutate_buffer(rng, buf, count);
f2bb770ae89641 Eric Biggers 2019-04-11 999 break;
f2bb770ae89641 Eric Biggers 2019-04-11 1000 case 2:
f2bb770ae89641 Eric Biggers 2019-04-11 1001 /* Ascending or descending bytes, plus optional mutations */
f900fde2888360 Eric Biggers 2023-02-27 1002 increment = prandom_u8(rng);
f900fde2888360 Eric Biggers 2023-02-27 1003 b = prandom_u8(rng);
f2bb770ae89641 Eric Biggers 2019-04-11 1004 for (i = 0; i < count; i++, b += increment)
f2bb770ae89641 Eric Biggers 2019-04-11 1005 buf[i] = b;
f900fde2888360 Eric Biggers 2023-02-27 @1006 mutate_buffer(rng, buf, count);
f2bb770ae89641 Eric Biggers 2019-04-11 1007 break;
f2bb770ae89641 Eric Biggers 2019-04-11 1008 default:
f2bb770ae89641 Eric Biggers 2019-04-11 1009 /* Fully random bytes */
f900fde2888360 Eric Biggers 2023-02-27 @1010 prandom_bytes_state(rng, buf, count);
f2bb770ae89641 Eric Biggers 2019-04-11 1011 }
f2bb770ae89641 Eric Biggers 2019-04-11 1012 }
f2bb770ae89641 Eric Biggers 2019-04-11 1013
f900fde2888360 Eric Biggers 2023-02-27 1014 static char *generate_random_sgl_divisions(struct rnd_state *rng,
f900fde2888360 Eric Biggers 2023-02-27 1015 struct test_sg_division *divs,
25f9dddb928aee Eric Biggers 2019-01-31 1016 size_t max_divs, char *p, char *end,
6570737c7fa047 Eric Biggers 2019-03-12 1017 bool gen_flushes, u32 req_flags)
25f9dddb928aee Eric Biggers 2019-01-31 1018 {
25f9dddb928aee Eric Biggers 2019-01-31 1019 struct test_sg_division *div = divs;
25f9dddb928aee Eric Biggers 2019-01-31 1020 unsigned int remaining = TEST_SG_TOTAL;
25f9dddb928aee Eric Biggers 2019-01-31 1021
25f9dddb928aee Eric Biggers 2019-01-31 1022 do {
25f9dddb928aee Eric Biggers 2019-01-31 1023 unsigned int this_len;
6570737c7fa047 Eric Biggers 2019-03-12 1024 const char *flushtype_str;
25f9dddb928aee Eric Biggers 2019-01-31 1025
f900fde2888360 Eric Biggers 2023-02-27 @1026 if (div == &divs[max_divs - 1] || prandom_bool(rng))
25f9dddb928aee Eric Biggers 2019-01-31 1027 this_len = remaining;
101e99c23af946 Eric Biggers 2024-07-03 @1028 else if (prandom_u32_below(rng, 4) == 0)
101e99c23af946 Eric Biggers 2024-07-03 1029 this_len = (remaining + 1) / 2;
25f9dddb928aee Eric Biggers 2019-01-31 1030 else
f900fde2888360 Eric Biggers 2023-02-27 @1031 this_len = prandom_u32_inclusive(rng, 1, remaining);
25f9dddb928aee Eric Biggers 2019-01-31 1032 div->proportion_of_total = this_len;
25f9dddb928aee Eric Biggers 2019-01-31 1033
f900fde2888360 Eric Biggers 2023-02-27 1034 if (prandom_u32_below(rng, 4) == 0)
f900fde2888360 Eric Biggers 2023-02-27 1035 div->offset = prandom_u32_inclusive(rng,
f900fde2888360 Eric Biggers 2023-02-27 1036 PAGE_SIZE - 128,
f900fde2888360 Eric Biggers 2023-02-27 1037 PAGE_SIZE - 1);
f900fde2888360 Eric Biggers 2023-02-27 1038 else if (prandom_bool(rng))
f900fde2888360 Eric Biggers 2023-02-27 1039 div->offset = prandom_u32_below(rng, 32);
25f9dddb928aee Eric Biggers 2019-01-31 1040 else
f900fde2888360 Eric Biggers 2023-02-27 1041 div->offset = prandom_u32_below(rng, PAGE_SIZE);
f900fde2888360 Eric Biggers 2023-02-27 1042 if (prandom_u32_below(rng, 8) == 0)
25f9dddb928aee Eric Biggers 2019-01-31 1043 div->offset_relative_to_alignmask = true;
25f9dddb928aee Eric Biggers 2019-01-31 1044
25f9dddb928aee Eric Biggers 2019-01-31 1045 div->flush_type = FLUSH_TYPE_NONE;
25f9dddb928aee Eric Biggers 2019-01-31 1046 if (gen_flushes) {
f900fde2888360 Eric Biggers 2023-02-27 1047 switch (prandom_u32_below(rng, 4)) {
25f9dddb928aee Eric Biggers 2019-01-31 1048 case 0:
25f9dddb928aee Eric Biggers 2019-01-31 1049 div->flush_type = FLUSH_TYPE_REIMPORT;
25f9dddb928aee Eric Biggers 2019-01-31 1050 break;
25f9dddb928aee Eric Biggers 2019-01-31 1051 case 1:
25f9dddb928aee Eric Biggers 2019-01-31 1052 div->flush_type = FLUSH_TYPE_FLUSH;
25f9dddb928aee Eric Biggers 2019-01-31 1053 break;
25f9dddb928aee Eric Biggers 2019-01-31 1054 }
25f9dddb928aee Eric Biggers 2019-01-31 1055 }
25f9dddb928aee Eric Biggers 2019-01-31 1056
6570737c7fa047 Eric Biggers 2019-03-12 1057 if (div->flush_type != FLUSH_TYPE_NONE &&
6570737c7fa047 Eric Biggers 2019-03-12 1058 !(req_flags & CRYPTO_TFM_REQ_MAY_SLEEP) &&
f900fde2888360 Eric Biggers 2023-02-27 1059 prandom_bool(rng))
6570737c7fa047 Eric Biggers 2019-03-12 1060 div->nosimd = true;
6570737c7fa047 Eric Biggers 2019-03-12 1061
6570737c7fa047 Eric Biggers 2019-03-12 1062 switch (div->flush_type) {
6570737c7fa047 Eric Biggers 2019-03-12 1063 case FLUSH_TYPE_FLUSH:
6570737c7fa047 Eric Biggers 2019-03-12 1064 if (div->nosimd)
6570737c7fa047 Eric Biggers 2019-03-12 1065 flushtype_str = "<flush,nosimd>";
6570737c7fa047 Eric Biggers 2019-03-12 1066 else
6570737c7fa047 Eric Biggers 2019-03-12 1067 flushtype_str = "<flush>";
6570737c7fa047 Eric Biggers 2019-03-12 1068 break;
6570737c7fa047 Eric Biggers 2019-03-12 1069 case FLUSH_TYPE_REIMPORT:
6570737c7fa047 Eric Biggers 2019-03-12 1070 if (div->nosimd)
6570737c7fa047 Eric Biggers 2019-03-12 1071 flushtype_str = "<reimport,nosimd>";
6570737c7fa047 Eric Biggers 2019-03-12 1072 else
6570737c7fa047 Eric Biggers 2019-03-12 1073 flushtype_str = "<reimport>";
6570737c7fa047 Eric Biggers 2019-03-12 1074 break;
6570737c7fa047 Eric Biggers 2019-03-12 1075 default:
6570737c7fa047 Eric Biggers 2019-03-12 1076 flushtype_str = "";
6570737c7fa047 Eric Biggers 2019-03-12 1077 break;
6570737c7fa047 Eric Biggers 2019-03-12 1078 }
6570737c7fa047 Eric Biggers 2019-03-12 1079
25f9dddb928aee Eric Biggers 2019-01-31 1080 BUILD_BUG_ON(TEST_SG_TOTAL != 10000); /* for "%u.%u%%" */
6570737c7fa047 Eric Biggers 2019-03-12 1081 p += scnprintf(p, end - p, "%s%u.%u%%@%s+%u%s", flushtype_str,
25f9dddb928aee Eric Biggers 2019-01-31 1082 this_len / 100, this_len % 100,
25f9dddb928aee Eric Biggers 2019-01-31 1083 div->offset_relative_to_alignmask ?
25f9dddb928aee Eric Biggers 2019-01-31 1084 "alignmask" : "",
25f9dddb928aee Eric Biggers 2019-01-31 1085 div->offset, this_len == remaining ? "" : ", ");
25f9dddb928aee Eric Biggers 2019-01-31 1086 remaining -= this_len;
25f9dddb928aee Eric Biggers 2019-01-31 1087 div++;
25f9dddb928aee Eric Biggers 2019-01-31 1088 } while (remaining);
25f9dddb928aee Eric Biggers 2019-01-31 1089
25f9dddb928aee Eric Biggers 2019-01-31 1090 return p;
25f9dddb928aee Eric Biggers 2019-01-31 1091 }
25f9dddb928aee Eric Biggers 2019-01-31 1092
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2024-09-06 13:30 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-05 12:17 [PATCH 00/18] random: Include <linux/percpu.h> and resolve circular include dependency Uros Bizjak
2024-09-05 12:17 ` Uros Bizjak
2024-09-05 12:17 ` [PATCH 01/18] x86/kaslr: Include <linux/prandom.h> instead of <linux/random.h> Uros Bizjak
2024-09-05 12:17 ` [PATCH 02/18] drm/i915/selftests: " Uros Bizjak
2024-09-05 13:06 ` Jani Nikula
2024-09-05 12:17 ` [PATCH 03/18] drm/lib: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 04/18] media: vivid: Include <linux/prandom.h> in vivid-vid-cap.c Uros Bizjak
2024-09-05 12:17 ` [PATCH 05/18] mtd: tests: Include <linux/prandom.h> instead of <linux/random.h> Uros Bizjak
2024-09-05 12:17 ` Uros Bizjak
2024-09-06 15:10 ` Miquel Raynal
2024-09-06 15:10 ` Miquel Raynal
2024-09-06 15:58 ` Uros Bizjak
2024-09-06 15:58 ` Uros Bizjak
2024-09-09 9:49 ` Miquel Raynal
2024-09-09 9:49 ` Miquel Raynal
2024-09-05 12:17 ` [PATCH 06/18] fscrypt: " Uros Bizjak
2024-09-05 23:02 ` Eric Biggers
2024-09-06 8:09 ` Uros Bizjak
2024-09-05 12:17 ` [PATCH 07/18] scsi: libfcoe: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 08/18] bpf: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 09/18] lib/interval_tree_test.c: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 10/18] kunit: string-stream-test: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 11/18] random32: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 12/18] lib/rbtree-test: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 13/18] bpf/tests: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 14/18] lib/test_parman: " Uros Bizjak
2024-09-05 12:17 ` [PATCH 15/18] lib/test_scanf: " Uros Bizjak
2024-09-09 12:54 ` Petr Mladek
2024-09-05 12:17 ` [PATCH 16/18] netem: Include <linux/prandom.h> in sch_netem.c Uros Bizjak
2024-09-05 12:17 ` [PATCH 17/18] random: Do not include <linux/prandom.h> Uros Bizjak
2024-09-06 13:30 ` kernel test robot [this message]
2024-09-06 14:21 ` kernel test robot
2024-09-06 15:46 ` Uros Bizjak
2024-09-05 12:17 ` [PATCH 18/18] prandom: Include <linux/percpu.h> Uros Bizjak
2024-09-05 12:40 ` [PATCH 00/18] random: Include <linux/percpu.h> and resolve circular include dependency Andy Shevchenko
2024-09-05 12:40 ` Andy Shevchenko
2024-09-05 13:03 ` Uros Bizjak
2024-09-05 13:03 ` Uros Bizjak
2024-09-05 15:36 ` Andy Shevchenko
2024-09-05 15:36 ` Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202409062005.ue7L87dN-lkp@intel.com \
--to=lkp@intel.com \
--cc=Jason@zx2c4.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=tytso@mit.edu \
--cc=ubizjak@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.