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
Unknown Object (File)
Sat, Nov 8, 11:07 PM
Unknown Object (File)
Thu, Nov 6, 4:59 AM
Unknown Object (File)
Thu, Oct 30, 10:40 PM
Unknown Object (File)
Thu, Oct 30, 11:17 AM
Unknown Object (File)
Mon, Oct 27, 7:52 PM
Unknown Object (File)
Wed, Oct 22, 6:53 PM
Unknown Object (File)
Mon, Oct 20, 1:05 AM
Unknown Object (File)
Sat, Oct 11, 3:28 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 Passed
Unit
No Test Coverage
Build Status
Buildable 67487
Build 64370: arc lint + arc unit

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.