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)
Mon, Sep 7, 11:25 PM
Unknown Object (File)
Sun, Sep 6, 4:44 AM
Unknown Object (File)
Sun, Sep 6, 4:37 AM
Unknown Object (File)
Sat, Sep 5, 9:06 PM
Unknown Object (File)
Fri, Sep 4, 8:18 PM
Unknown Object (File)
Fri, Sep 4, 10:05 AM
Unknown Object (File)
Fri, Sep 4, 2:57 AM
Unknown Object (File)
Wed, Sep 2, 1: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 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.