All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.