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)
Wed, Jan 14, 1:08 AM
Unknown Object (File)
Thu, Jan 8, 10:27 AM
Unknown Object (File)
Sat, Dec 27, 10:39 PM
Unknown Object (File)
Thu, Dec 25, 12:42 AM
Unknown Object (File)
Nov 25 2025, 6:33 PM
Unknown Object (File)
Nov 17 2025, 4:23 AM
Unknown Object (File)
Nov 11 2025, 5:28 PM
Unknown Object (File)
Nov 8 2025, 11:07 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.