thanks for looking at this.

> In function 'be16enc',
>     inlined from 'uuid_enc_be' at 
> /home/palle/netbsd/git/src/sys/kern/kern_uuid.c:178:2:
>     /home/palle/netbsd/git/src/sys/sys/endian.h:204:9: error: 
> '__builtin_memcpy' offset [0, 1] is out of the bounds [0, 0] 
> [-Werror=array-bounds]
>       204 |         __builtin_memcpy(dst, &u, sizeof(u)); \
>           |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>           /home/palle/netbsd/git/src/sys/sys/endian.h:207:1: note: in 
> expansion of macro '__GEN_ENDIAN_ENC'
>             207 | __GEN_ENDIAN_ENC(16, be)
>                   | ^~~~~~~~~~~~~~~~
>                   In function 'be16dec',

this seems to be a valid complaint, in at least one sense.

uuid_enc_be(void *buf, const struct uuid *uuid)
{
        uint8_t *p = buf;
...

        be32enc(p, uuid->time_low);
        be16enc(p + 4, uuid->time_mid);
        be16enc(p + 6, uuid->time_hi_and_version);

in these cases, "p" technically only points to one byte, so all
of them in some sense trigger the failure.

can you see if adding (uint32 *) for 32 bit, and (uint16 *) for
16 bit calls here, if that avoids the warning?

> evbppc:
>
> In file included from /home/palle/netbsd/git/src/sys/dev/rasops/rasops2.c:49:
> /home/palle/netbsd/git/src/sys/dev/rasops/rasops_bitops.h: In function 
> 'rasops2_copycols':
> /home/palle/netbsd/git/src/sys/dev/rasops/rasops_masks.h:85:50: error: array 
> subscript 2147483616 is above array bounds of 'const uint32_t[33]' {aka 
> 'const u
> nsigned int[33]'} [-Werror=array-bounds]
>    85 |                 (dp)[1] = ((dp)[1] & rasops_rmask[n]) |               
>   \
>        |                                      ~~~~~~~~~~~~^~~
>        /home/palle/netbsd/git/src/sys/dev/rasops/rasops_bitops.h:279:25: 
> note: in expansion of macro 'PUTBITS'
>          279 |                         PUTBITS(tmp, db, num, drp);
>                |                         ^~~~~~~
>                
> /home/palle/netbsd/git/src/sys/dev/rasops/rasops_masks.h:92:25: note: while 
> referencing 'rasops_rmask'
>                   92 | extern const uint32_t   rasops_rmask[32 + 1];
>                         |                         ^~~~~~~~~~~~
>                         
> /home/palle/netbsd/git/src/sys/dev/rasops/rasops_masks.h:86:56: error: array 
> subscript 2147483616 is above array bounds of 'const uin
> t32_t[33]' {aka 'const unsigned int[33]'} [-Werror=array-bounds]
>                            86 |                         (MBL(sw, 32-(x)) & 
> rasops_lmask[n]);            \
>                                  |                                            
> ~~~~~~~~~~~~^~~
>                                  
> /home/palle/netbsd/git/src/sys/dev/rasops/rasops_bitops.h:279:25: note: in 
> expansion of macro 'PUTBITS'
>                                    279 |                         PUTBITS(tmp, 
> db, num, drp);
>                                          |                         ^~~~~~~
>                                          
> /home/palle/netbsd/git/src/sys/dev/rasops/rasops_masks.h:91:25: note: while 
> referencing 'rasops_lmask'
>                                             91 | extern const uint32_t   
> rasops_lmask[32 + 1];
>                                                   |                         
> ^~~~~~~~~~~~

for this one, can you try making "unsigned num" here?

sys/dev/rasops/rasops_bitops.h:NAME(copycols)(void *cookie, int row, int src, 
int dst, int num)

and fixing anything that complains?  "num" here is the input triggering
2147483616 here..

> evbmips64-el:
>
> -- kern-MALTA32 ---
> --- aes_bear.o ---
> In function 'le32dec',
>     inlined from 'aesbear_cbc_dec.part.0' at 
> /home/palle/netbsd/git/src/sys/crypto/aes/aes_bear.c:236:8:
>     /home/palle/netbsd/git/src/sys/sys/endian.h:220:9: error: 
> '__builtin_memcpy' offset [0, 3] is out of the bounds [0, 0] 
> [-Werror=array-bounds]
>       220 |         __builtin_memcpy(&u, buf, sizeof(u)); \
>           |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>           /home/palle/netbsd/git/src/sys/sys/endian.h:228:1: note: in 
> expansion of macro '__GEN_ENDIAN_DEC'
>             228 | __GEN_ENDIAN_DEC(32, le)
>                   | ^~~~~~~~~~~~~~~~
>                   --

this one is like the kern_uuid.c one, except harder to fix:

aesbear_cbc_dec(const struct aesdec *dec, const uint8_t in[static 16],
    uint8_t out[static 16], size_t nbytes, uint8_t iv[static 16],
...
        iv1 = le32dec(iv + 4*1);

this one seems worse than the prior one because it's obviously
valid because the input can't read-overflow.

probably fixable with similar annoying cast.

> evbmips64-eb:
>
> --- kern-MALTA32 ---
> In function 'be16dec',
>     inlined from 'uuid_dec_be' at 
> /home/palle/netbsd/git/src/sys/kern/kern_uuid.c:193:19:

same as sparc64?

> riscv32:
> riscv64:
>
> bmake[2]: stopped making "all" in 
> /home/palle/netbsd/build/riscv32/objdir/sys/arch/riscv/compile/GENERIC
> --- chacha_ref.o ---
> In function 'le32dec',
>     inlined from 'chacha_stream_ref' at 
> /home/palle/netbsd/git/src/sys/crypto/chacha/chacha_ref.c:138:7:
>     /home/palle/netbsd/git/src/sys/sys/endian.h:220:9: error: 
> '__builtin_memcpy' offset [0, 3] is out of the bounds [0, 0] 
> [-Werror=array-bounds]
>       220 |         __builtin_memcpy(&u, buf, sizeof(u)); \
>           |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>           /home/palle/netbsd/git/src/sys/sys/endian.h:228:1: note: in 
> expansion of macro '__GEN_ENDIAN_DEC'
>             228 | __GEN_ENDIAN_DEC(32, le)
>                   | ^~~~~~~~~~~~~~~~

same again as kern_uuid.c / aes_bear.c.

> It would be nice to have KUBSAN enabled when the daily CI build jobs are 
> running.

yes.

> Would it make sense to create a GENERIC.KUBSAN config for all ports so build 
> issues as shown above are caught?

at least, it doesn't seem an awful idea.

> And what about running the daily test runs with the supported kernel 
> sanitizers enabled as well?

we do have syzkaller doing this (at least, we usually do.)

> It's a shame that such useful functionality is not enabled by default at 
> least when the daily test runs are executed.

have a look at syzkaller pages.  we have a lot to fix :-)



.mrg.

Reply via email to