Page MenuHomeFreeBSD

lib{c,openbsd}: use ckd_mul() for overflow checking in re(c)allocarray
ClosedPublic

Authored by fuz on Oct 2 2025, 1:30 PM.
Tags
None
Referenced Files
F174459620: D52854.id163472.diff
Sat, Oct 3, 10:28 AM
Unknown Object (File)
Fri, Oct 2, 8:36 PM
Unknown Object (File)
Fri, Oct 2, 4:25 PM
Unknown Object (File)
Fri, Oct 2, 3:52 PM
Unknown Object (File)
Fri, Oct 2, 2:54 PM
Unknown Object (File)
Wed, Sep 30, 6:56 PM
Unknown Object (File)
Tue, Sep 29, 12:31 AM
Unknown Object (File)
Sat, Sep 19, 10:35 PM
Subscribers
None

Details

Summary

This makes the code easier to understand and slightly faster,
but requires C23. calloc() would benefit, too, but I didn't
want to touch the imported jemalloc code base.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

fuz requested review of this revision.Oct 2 2025, 1:30 PM
fuz created this revision.
kib added inline comments.
lib/libopenbsd/recallocarray.c
36

I would wrote

if (ckd_mul(&newsize, newnmemb, size) ||
    ckd_mul(&oldsize, oldnmemb, size)) {
             errno = EINVAL;
             return NULL;
}

since there are much simpler conditions now.

This revision is now accepted and ready to land.Oct 2 2025, 11:00 PM
lib/libopenbsd/recallocarray.c
36

This cannot be done as one needs to fail with ENOMEM while the other fails with EINVAL.

lib/libopenbsd/recallocarray.c
36

Indeed, missed that.