GCC: Fixes for gcc 14 on Fedora 40

- Workaround dangling pointer in uu_list.c (#16124)
- Fix calloc() transposed arguments in zpool_vdev_os.c
- Make some temp variables unsigned to prevent triggering a
  '-Werror=alloc-size-larger-than' error.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Closes #16124
Closes #16125
This commit is contained in:
Tony Hutter 2024-04-29 11:31:50 -07:00
parent 71216b91d2
commit ef3fea63eb
3 changed files with 14 additions and 7 deletions

View File

@ -438,7 +438,7 @@ static char *zpool_sysfs_gets(char *path)
return (NULL); return (NULL);
} }
buf = calloc(sizeof (*buf), statbuf.st_size + 1); buf = calloc(statbuf.st_size + 1, sizeof (*buf));
if (buf == NULL) { if (buf == NULL) {
close(fd); close(fd);
return (NULL); return (NULL);

View File

@ -505,14 +505,20 @@ uu_list_walk(uu_list_t *lp, uu_walk_fn_t *func, void *private, uint32_t flags)
} }
if (lp->ul_debug || robust) { if (lp->ul_debug || robust) {
uu_list_walk_t my_walk; uu_list_walk_t *my_walk;
void *e; void *e;
list_walk_init(&my_walk, lp, flags); my_walk = uu_zalloc(sizeof (*my_walk));
if (my_walk == NULL)
return (-1);
list_walk_init(my_walk, lp, flags);
while (status == UU_WALK_NEXT && while (status == UU_WALK_NEXT &&
(e = uu_list_walk_next(&my_walk)) != NULL) (e = uu_list_walk_next(my_walk)) != NULL)
status = (*func)(e, private); status = (*func)(e, private);
list_walk_fini(&my_walk); list_walk_fini(my_walk);
uu_free(my_walk);
} else { } else {
if (!reverse) { if (!reverse) {
for (np = lp->ul_null_node.uln_next; for (np = lp->ul_null_node.uln_next;

View File

@ -1283,8 +1283,9 @@ vdev_raidz_matrix_reconstruct(raidz_row_t *rr, int n, int nmissing,
static void static void
vdev_raidz_reconstruct_general(raidz_row_t *rr, int *tgts, int ntgts) vdev_raidz_reconstruct_general(raidz_row_t *rr, int *tgts, int ntgts)
{ {
int n, i, c, t, tt; int i, c, t, tt;
int nmissing_rows; unsigned int n;
unsigned int nmissing_rows;
int missing_rows[VDEV_RAIDZ_MAXPARITY]; int missing_rows[VDEV_RAIDZ_MAXPARITY];
int parity_map[VDEV_RAIDZ_MAXPARITY]; int parity_map[VDEV_RAIDZ_MAXPARITY];
uint8_t *p, *pp; uint8_t *p, *pp;