Files
mirror_zfs/include/sys
Rob Norris 30ea442961 zfs_log: add flex array fields to log record structs
ZIL log record structs (lr_XX_t) are frequently allocated with extra
space after the struct to carry variable-sized "payload" items.

Linux 6.10+ compiled with CONFIG_FORTIFY_SOURCE has been doing runtime
bounds checking on memcpy() calls. Because these types had no indicator
that they might use more space than their simple definition,
__fortify_memcpy_chk will frequently complain about overruns eg:

    memcpy: detected field-spanning write (size 7) of single field
        "lr + 1" at zfs_log.c:425 (size 0)
    memcpy: detected field-spanning write (size 9) of single field
        "(char *)(lr + 1)" at zfs_log.c:593 (size 0)
    memcpy: detected field-spanning write (size 4) of single field
        "(char *)(lr + 1) + snamesize" at zfs_log.c:594 (size 0)
    memcpy: detected field-spanning write (size 7) of single field
        "lr + 1" at zfs_log.c:425 (size 0)
    memcpy: detected field-spanning write (size 9) of single field
        "(char *)(lr + 1)" at zfs_log.c:593 (size 0)
    memcpy: detected field-spanning write (size 4) of single field
        "(char *)(lr + 1) + snamesize" at zfs_log.c:594 (size 0)
    memcpy: detected field-spanning write (size 7) of single field
        "lr + 1" at zfs_log.c:425 (size 0)
    memcpy: detected field-spanning write (size 9) of single field
        "(char *)(lr + 1)" at zfs_log.c:593 (size 0)
    memcpy: detected field-spanning write (size 4) of single field
        "(char *)(lr + 1) + snamesize" at zfs_log.c:594 (size 0)

To fix this, this commit adds flex array fields to all lr_XX_t structs
that require them, and then uses those fields to access that
end-of-struct area rather than more complicated casts and pointer
addition.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <robn@despairlabs.com>
Closes #16501
Closes #16539
2024-11-04 10:34:48 -08:00
..
2024-04-29 13:50:05 -07:00
2024-04-30 10:01:15 -07:00
2022-05-10 10:18:51 -07:00
2022-05-25 09:18:49 -07:00
2024-03-28 13:29:46 -07:00
2021-06-07 09:02:47 -07:00
2023-11-08 12:15:41 -08:00
2023-11-08 12:15:41 -08:00
2023-01-10 13:39:22 -08:00
2024-02-20 15:53:02 -08:00
2023-03-10 11:59:53 -08:00
2024-04-30 10:01:15 -07:00
2023-03-14 15:25:50 -07:00
2023-05-09 09:03:10 -07:00
2017-10-11 16:54:48 -04:00
2023-08-25 11:58:44 -07:00
2024-04-19 10:13:38 -07:00
2019-06-19 09:48:12 -07:00
2022-07-11 14:16:13 -07:00
2018-02-08 15:28:18 -08:00
2022-06-29 14:08:54 -07:00
2020-07-03 11:05:50 -07:00
2023-08-25 11:58:44 -07:00
2023-01-05 09:31:55 -08:00