aboutsummaryrefslogtreecommitdiff
path: root/lib/libc
Commit message (Collapse)AuthorAgeFilesLines
* fts: Further improve the manual pageDag-Erling Smørgrav42 hours1-17/+129
| | | | | | | | | | | | * Add subsections for the three functions that didn't already have one. * Add a RETURN VALUES section. * Improve the grammar somewhat. * Clarify that fts_read() will not set errno to 0 if called again after having already returned NULL. Sponsored by: Klara, Inc. Reviewed by: bcr, markj Differential Revision: https://reviews.freebsd.org/D52925
* fts: Remove a few stray blank linesDag-Erling Smørgrav42 hours1-3/+0
| | | | | | Sponsored by: Klara, Inc. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D52924
* libc: Reimplement the *rand48 family of functionsMark Johnston3 days12-90/+95
| | | | | | | | | | | | | | | | | | | Rather than implementing the recurrence using 3 16-bit integers, as was done in _dorand48() before this patch, provide an equivalent implementation using 64-bit integers. For drand48() and erand48(), replace the use of ldexp() with bit-twiddling assuming IEEE 754 double-precision float layout. This implementation is significantly faster and requires less code, while producing identical outputs on supported platforms. While here, add a STANDARDS section to rand48.3. Obtained from: https://github.com/apple-oss-distributions/libc MFC after: 3 weeks Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D52429
* libc: Move NLS catalogues to the locales packagesLexi Winter4 days1-0/+5
| | | | | | | | | | | | | | | We don't want to put these in clibs (where libc is) since they are not critical to system operation. Move them to locales, since anyone who is interested in translated versions of strerror() is going to have that installed anyway. While here, add some more documentation to bsd.nls.mk, particularly the NLSPACKAGE option. MFC after: 3 seconds Reviewed by: manu, kib Sponsored by: https://www.patreon.com/bsdivy Differential Revision: https://reviews.freebsd.org/D52898
* fts: Document thread (un)safetyDag-Erling Smørgrav5 days1-7/+44
| | | | | | | MFC after: 3 days Sponsored by: Klara, Inc. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D52828
* libc/resolv: get rid of MD5Robert Clausecker5 days5-61/+6
| | | | | | | | | | | | | MD5 is used by libc/resolv to generate a random sequence id from a current time stamp. Replace this convoluted mechanism with a call to arc4random(). This permits us to entirely drop MD5 from libc, simplifying the MD5 rework proposed in D45670. Approved by: markj Reviewed by: kevans, markj See also: D45670 Event: EuroBSDcon 2025 Differential Revision: https://reviews.freebsd.org/D52784
* lib/libc: add recallocarray()Robert Clausecker6 days4-2/+115
| | | | | | | | | | | | This function from OpenBSD is a hybrid of reallocarray() and calloc(). It reallocates an array, clearing any newly allocated items. reallocarray() ultimately originates from OpenBSD. The source is taken from lib/libopenbsd, which now no longer has the function unless when bootstrapping (needed for mandoc). Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D52863
* lib/libc: add FBSD-1.9 to Versions.defRobert Clausecker6 days1-1/+5
| | | | | | | | In preparation of adding recallocarray() to libc. See also: D52863 Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D52878
* lib{c,openbsd}: use ckd_mul() for overflow checking in re(c)allocarrayRobert Clausecker6 days1-9/+5
| | | | | | | | | | 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. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D52854
* libc: Add missing MLINK for tzname(3)Dag-Erling Smørgrav9 days2-36/+24
| | | | | | While here, fix manlint warnings and a typo in tzset(3). MFC after: 3 days
* tzcode: Test escape from TZDIRDag-Erling Smørgrav10 days1-13/+26
| | | | | | | Test a value of TZ that temporarily escapes from TZDIR (which is not permitted when setugid) then reenters it. MFC after: 3 days
* rpc_generic.c: Fix a rpcbind core dump when rpcinfo is doneRick Macklem11 days1-0/+4
| | | | | | | | | | | | | | | | | | Commit c5d671b added netlink support to server side rpcbind. However it did not add a case for AF_NETLINK to __rpc_taddr2uaddr_af(). (Reported as PR#289625.) As such, without this patch the r_addr field of the netlink rbllist is NULL, which causes a crash in svc_sendreply() for a Dump query (what rpcinfo does). PR: 289625 Reviewed by: glebius MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D52651 Fixes: c5d671b711c3 ("libc/rpc: add userland side RPC server over netlink(4)")
* tzcode: Fix issues when TZ is an absolute pathDag-Erling Smørgrav12 days3-9/+84
| | | | | | | | | | | | | | | | | | | | | | * If TZ starts with TZDIR, strip any additional slashes so relname does not end up looking like an absolute path. For instance, TZ=/usr/share/zoneinfo//UTC should result in UTC, not /UTC. * In the setugid case, we were incorrectly passing name rather than relname to fstatat(). * Modify the tz_env and tz_env_setugid test cases to exercise both of these scenarios. * Also add test cases for invalid values of TZ, which I wrote earlier but forgot to include in a5f14e4f9069. Reported by: Paul Eggert <eggert@cs.ucla.edu> MFC after: 3 days Fixes: 967a49a21a27 ("Update tzcode to 2025b") Fixes: a5f14e4f9069 ("tzcode: Use -00 only for invalid time zones") Reviewed by: philip Differential Revision: https://reviews.freebsd.org/D52753
* libc/aarch64: fix ELF size of timingsafe_memcmpPaul Floyd13 days1-1/+1
| | | | | | | | | | | | | Looks like a copy and paste error. The ELF size of 0 prevents Valgrind from redirecting this function. PR: 289845 Reviewed by: fuz Fixes: 3f224333af163d5fcd7547a20993dcf18f19076c See also: https://bugs.kde.org/show_bug.cgi?id=509406 Pull Request: https://github.com/freebsd/freebsd-src/pull/1854 MFC after: 1 day Event: EuroBSDcon 2025
* libc: properly forward the compat syscall references to libsysKonstantin Belousov13 days1-11/+37
| | | | | | | | | | | same as it was done for setgroups@FBSD_1.0. Switch from weakref to symver, since GNU as cannot handle version spec with weakref. Reviewed by: olce Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D52687
* libc: un-namespace gen-compat.hKonstantin Belousov13 days2-2/+2
| | | | | | | | | | | There are no symbols that needs to be namespaced in the header, and it would not allow to use proper raw syscall names later, where they are needed. Reviewed by: olce Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D52687
* psignal(3): document return values of sig2str() and str2sigGleb Smirnoff2025-09-251-1/+8
| | | | | Reviewed by: bcr Differential Revision: https://reviews.freebsd.org/D52698
* tzcode: Expose and document offtime() and offtime_r()Dag-Erling Smørgrav2025-09-231-6/+33
| | | | | | | | | Includes diff reduction to upstream version of this patch. MFC after: 3 days Sponsored by: Klara, Inc. Reviewed by: philip Differential Revision: https://reviews.freebsd.org/D39715
* libc: properly reference setgroups@FBSD_1.0 in initgroups@FBSD_1.0Konstantin Belousov2025-09-221-1/+7
| | | | | | | | | | by forwarding the reference to libsys syscall symbol, for the libc.so case. Reviewed and tested by: kevans Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D52672
* packages: Remove the tests-dev packageLexi Winter2025-09-182-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We don't want a tests-dev package, because this means set-devel depends on tests-dev, which transitively depends on tests, which means you can't install set-devel without also getting tests. The only real "dev" files in tests-dev are from ATF (libprivateatf), so move that to its own package and add a dependency from tests. Also move Kyua to its own package, since this might be useful for running tests even when the user doesn't want the whole set of base tests installed. Add a dependency from -tests to both -atf and -kyua, and a dependency on -set-base, since the tests won't work without the full base system installed. The remaining "dev" files in tests are actually test artifacts, not real development libraries. Add a new NO_DEV_PACKAGE option to bsd.lib.mk, which causes dev files to be installed in the base package instead of creating a -dev package, and set this option for everything that installs test libraries. While here, add a slightly more informative description for the tests package. MFC after: 3 seconds Reviewed by: bapt, emaste Differential Revision: https://reviews.freebsd.org/D52597
* getgrouplist.3: Rework, use more appropriate terminologyOlivier Certner2025-09-171-10/+19
| | | | | | | | | | | | | | | Bring up to date with NSS by substituting "file" with "database". Describe more precisely which database is accessed, i.e., only the group database, which value should be used and where it lands in the result. Prefer a terminology referring to POSIX terms, i.e., use "effective group list" instead of "group access list". Reviewed by: gbe MFC after: 5 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52283
* initgroups(3): Add a pre-FreeBSD-15-compatible versionOlivier Certner2025-09-174-25/+124
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After commit 9da2fe96ff2e ("kern: fix setgroups(2) and getgroups(2) to match other platforms"), initgroups() does not set the effective GID anymore and uses all passed groups as the supplementary group list. This effectively breaks backwards compatibility with programs/libraries compiled on a FreeBSD 14 or earlier system. Restore compatibility by creating a new version of the 'initgroups' symbol that designates the current implementation and providing a pre-FreeBSD-15-compatible version under the symbol's previously exported version. The new version calls the new setgroups(2) system call, while the compatible one calls the original one (called freebsd14_setgroups()). Update the manual page with some history and comparison with other current open-source systems. Add a "SECURITY CONSIDERATIONS" section highlighting some security properties of this approach and the reasons we adopt it. While here, revamp the manual page, in particular to use the exact POSIX terminology where possible. Note for MFC to stable/14: Only the manual page update is to be MFCed, and the text changed to reflect the old behavior and inform readers of the new upcoming behavior in 15. Reviewed by: kib Fixes: 9da2fe96ff2e ("kern: fix setgroups(2) and getgroups(2) to match other platforms") MFC after: 5 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52282
* initgroups(3): Fix return value on allocation failureOlivier Certner2025-09-171-7/+4
| | | | | | | | | | | | | | | We must not return ENOMEM, but rather -1 with 'errno' set to ENOMEM, as described in the manual page and as other implementations are doing. A malloc() failure actually already sets ENOMEM for us. Add comments indicating which function set 'errno' each time we return. While here, improve style and remove useless headers. Reviewed by: kib, emaste Fixes: 54404cfb13d4 ("In preparation for raising NGROUPS and NGROUPS_MAX, ...") MFC after: 5 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52580
* libc: compat.h: Remove a superfluous blank line at endOlivier Certner2025-09-171-1/+0
| | | | | | | No functional change (intended). MFC after: 5 days Sponsored by: The FreeBSD Foundation
* Fix floaing point test. (again)Warner Losh2025-09-141-1/+1
| | | | Fixes: 9dd78db9c30a
* Fix floaing point test.Warner Losh2025-09-141-1/+1
| | | | | | | | | I botched a style fix to a pull request, and didn't catch it on amd64, but it broke almost everything else. It's a false positive to the style program and spaces cannot be inserted here. It's not math, but a funky notation. Fixes: 9dd78db9c30a
* libc: prevent incorrect %a/%La rounding at full precisionOsamu Sho2025-09-143-2/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In __hdtoa() and __hldtoa(), rounding is incorrectly applied when the requested precision exactly matches the number of significant hexadecimal digits. In this case, the redux adjustment can trigger an unintended exponent increment and shift the rounding position left by one bit. This causes the least significant digit to be rounded incorrectly. The fix adds a new condition based on MAX_HEX_DIGITS (derived from MANT_DIG) so that rounding is performed only when precision is strictly less than the number of significant digits. This avoids the unintended shift while preserving correct rounding for other cases. A new regression test (printfloat_test:hexadecimal_rounding_offset_eq_exp) covers both the binary64 (%.13a) and binary128 (%.28La on arm64) cases that previously fail, ensuring the bug does not regress. Note: MAX_HEX_DIGITS represents the maximum number of hexadecimal digits needed to express the mantissa. It is computed by subtracting the implicit integer bit from [L]DBL_MANT_DIG, dividing the remaining mantissa bits by 4 (with +3 to round up any remainder), and finally adding +1 for the leading integer digit. This makes its meaning explicit and distinct from SIGFIGS, which serves a different purpose. Fixes: 76303a9735ee ("Make several changes to the way printf handles hex floating point (%a):") Signed-off-by: Osamu Sho <osamusho@gmail.com> Reviewed by: imp,jlduran Pull Request: https://github.com/freebsd/freebsd-src/pull/1837
* libc: fix the _FORTIFY_SOURCE build of getgrouplist(3)Kyle Evans2025-09-131-0/+1
| | | | | | | | | | | | | | | | | | | | | We need <unistd.h> to get our prototype normally, but WARNS in libc is way too low to surface that. Additionally, _FORTIFY_SOURCE needs to include <ssp/unistd.h> by way of <unistd.h> to actually export an implementation of getgrouplist(3). The version defined in the .c gets named __ssp_real_getgrouplist() and the actual implementation comes from the redirect stub in <ssp/unistd.h>, which basically gets optimized away in the built object because our __builtin_object_size() check is trivially false when we cannot resolve any object sizes in this translation unit. This could be argued as a design flaw in _FORTIFY_SOURCE, but we should grab <unistd.h> for our prototype anyways so let's kick the can down the road instead of re-thinking it for 15.0. Reported by: Shawn Webb (HardenedBSD) Fixes: d3f8ed6066 ("getgrouplist(3): Remove superfluous [...]") MFC after: 3 days
* libc: Have memcmp test what the standard requiresEd Maste2025-09-131-6/+6
| | | | | | | | | | | | | | | | libc's C memcmp currently returns the difference in byte values rather than just -1/0/1 as the AArch64 assembly implementation, many non- FreeBSD implementations, and compiler built-in optimizations do. It is a bug for a user to expect memcmp to return the difference in the byte values as the compiler is free to inline memcmp() with an implementation that does not do this. Change the test to validate only what the standard requires. PR: 289084 Reviewed by: markj, fuz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52502
* getgrouplist(3): Remove superfluous headers, bogus comment and whitespaceOlivier Certner2025-09-121-7/+0
| | | | | | | | No functional change (intended). Fixes: a59d6a872459 ("Implementing 'fallback' nsswitch source.") MFC after: 3 days Sponsored by: The FreeBSD Foundation
* Revert "libc: Remove readdir_r(3)"Dag-Erling Smørgrav2025-09-117-10/+57
| | | | This reverts commit d549de769055ae6116601e54e4c86dfb3e17f4c4.
* libc: Remove readdir_r(3)Dag-Erling Smørgrav2025-09-107-57/+10
| | | | | | | | | | | This function was never safe to use. We marked it deprecated in the manual page in 2016, and it is marked obsolete in POSIX 2024. We previously added a linker warning and annotated the prototype; now that stable/15 has been branched, we can remove it from main. Relnotes: yes Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D52474
* tzcode: Add a test case for plain issetugid caseDag-Erling Smørgrav2025-09-011-17/+43
| | | | | | | | | | | | This catches a bug in tzcode which incorrectly considers TZDEFAULT as unsafe as if it came from the environment. Also deduplicate some repeated code, and fix a missing mode in an open(2) call with O_CREAT set. Event: Oslo Hackathon 202508 Reviewed by: philip Differential Revision: https://reviews.freebsd.org/D52241
* tzcode: Add a test case for thin jailsDag-Erling Smørgrav2025-08-271-7/+36
| | | | | | | Add a test case for a typical thin jail scenario where TZDIR does not exist and we get our information from /etc/localtime. This is technically already covered by the detect_tz_changes test case, but this new test case is independent of the DETECT_TZ_CHANGES option.
* tzcode: Add test case for setugid programsDag-Erling Smørgrav2025-08-252-12/+45
| | | | | Fixes: a6b19979bf13 ("tzcode: Fix TZ for non-setugid programs") Differential Revision: https://reviews.freebsd.org/D52124
* tzcode: Fix TZ for non-setugid programsDag-Erling Smørgrav2025-08-221-19/+42
| | | | | | | | | | | The previous commit had the desired effect for setugid programs, but broke TZ for everyone else. I didn't notice because my test cases swap out /etc/localtime instead of setting TZ, so add a test case that sets TZ. Fixes: b6ea2513f776 ("tzcode: Limit TZ for setugid programs") Reviewed by: cy Differential Revision: https://reviews.freebsd.org/D52108
* libc: preserve errno in gai_strerror()Konstantin Belousov2025-08-191-0/+4
| | | | | | | | PR: 288931 Reviewed by: emaste, glebius Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D52010
* libc: some style in gai_strerror.cKonstantin Belousov2025-08-191-4/+4
| | | | | | | Reviewed by: emaste, glebius Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D52010
* libc: mark ai_errlist as constKonstantin Belousov2025-08-191-1/+1
| | | | | | | Reviewed by: emaste, glebius Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D52010
* libc: convert ai_errlist array to designated initializers syntaxKonstantin Belousov2025-08-191-15/+15
| | | | | | | Reviewed by: emaste, glebius Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D52010
* jemalloc: don't error out on initializer warning in gccWarner Losh2025-08-171-0/+2
| | | | | | | | gcc doesn't like something about the initializer that comes with jemalloc. Since it's vendor code, make this warning not an error for -Werror purposes. Sponsored by: Netflix
* libc: Fix a typo in a source code commentGordon Bergling2025-08-171-1/+1
| | | | | | - s/aguments/arguments/ MFC after: 3 days
* jemalloc: Merge from jemalloc 5.3.0 vendor branchWarner Losh2025-08-158-128/+648
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This brings in a merge from jemalloc 5.3.0. It's almost fully scripted, except: Three conflicts resolved by hand: include/jemalloc/internal/test_hooks.h Use the new name src/extent.c Use the new code src/jemalloc.c Use the new code since je_realloc has moved The script is recorded in FREEBSD-upgrade. The old script did svn commands that were basically a rebase of our changes. This update has a series of diff reduction changes before this. Note: I'd planned on fixing the above three conflicts with commits, but ran out of time when I did this work in January. I got discouraged when jemalloc was EOL'd and didn't pick this back up. I did the above by hand to get this into FreeBSD 15.0 This work is a repeat of the work by Minsoo Choo who did all these changes and created a pull request. Given the importance of jemalloc, I audited these changes by redoing them in this series of commits (and with the script that was checked in). I did this to confince myself and anybody else in doubt that there was no supply chain attack. The diffs between this series of commits and Minsoo's work are minor (though the version skew makes adds some noise). Interested parties can independent audit each step, I hope. I've listed Minsoo as a co-author since without his pull request to test again, this wouldn't have been possible. Thanks to brooks@ for help with getting the jemalloc 3 ABI compat symbols right. Co-authored-by: Minsoo Choo <minsoochoo0122@proton.me> Pull Request: https://github.com/freebsd/freebsd-src/pull/1337 Sponsored by: Netflix
* Revert "Remove Secure RPC DES authentication"Lexi Winter2025-08-1510-76/+1595
| | | | | | This reverts commit 7ac276298b72982189ac1a5b17461936dc00163e. Requested by: kib
* libc: Drop incorrect qsort optimizationDag-Erling Smørgrav2025-08-153-13/+114
| | | | | | | | | | | | | | | | As pointed out in the PR and the article linked below, the switch to insertion sort in the BSD qsort code is based on a misunderstanding of Knuth's TAOCP and is actually a pessimization. As demonstrated by the added test, it is trivially easy to construct pathological input which results in quadratic runtime. Without that misguided optimization, the same input runs in nearly linearithmic time. https://www.raygard.net/2022/02/26/Re-engineering-a-qsort-part-3 PR: 287089 MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D51907
* kern: fix setgroups(2) and getgroups(2) to match other platformsKyle Evans2025-08-151-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | On most other platforms observed, including OpenBSD, NetBSD, and Linux, these system calls have long since been converted to only touching the supplementary groups of the process. This poses both portability and security concerns in porting software to and from FreeBSD, as this subtle difference is a landmine waiting to happen. Bugs have been discovered even in FreeBSD-local sources, since this behavior is somewhat unintuitive (see, e.g., fix 48fd05999b0f for chroot(8)). Now that the egid is tracked outside of cr_groups in our ucred, convert the syscalls to deal with only supplementary groups. Some remaining stragglers in base that had baked in assumptions about these syscalls are fixed in the process to avoid heartburn in conversion. For relnotes: application developers should audit their use of both setgroups(2) and getgroups(2) for signs that they had assumed the previous FreeBSD behavior of using the first element for the egid. Any calls to setgroups() to clear groups that used a single array of the now or soon-to-be egid can be converted to setgroups(0, NULL) calls to clear the supplementary groups entirely on all FreeBSD versions. Co-authored-by: olce (but bugs are likely mine) Relnotes: yes (see last paragraph) Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D51648
* Remove Secure RPC DES authenticationLexi Winter2025-08-1010-1595/+76
| | | | | | | | | | | | | | | | | | | Following the earlier removal of keyserv, none of this functionality works since it requires keyserv. Remove the relevant symbols from libc's Symbol.map. Leave compatibility symbols for existing applications, but since the functions don't work without keyserv, stub them out to return an error. Remove some private symbols that were only used by keyserv; these don't get compatibility symbols. Remove the documentation for the old functions. Remove rpc.ypupdated since it requires DES authentication. Reviewed by: manu, des, emaste Differential Revision: https://reviews.freebsd.org/D50442
* libc/amd64: rewrite memrchr() scalar impl. to read the string from the backRobert Clausecker2025-08-091-38/+34
| | | | | | | | | | | A very simple implementation as I don't have the patience right now to write a full SWAR kernel. Should still do the trick if you wish to opt out of SSE for some reason. Reported by: Mikael Simonsson <m@mikaelsimonsson.com> Reviewed by: strajabot PR: 288321 MFC after: 1 month
* libc/amd64: rewrite memrchr() baseline impl. to read the string from the backRobert Clausecker2025-08-091-78/+74
| | | | | | | | | | This ensures O(1) behaviour if the character is a constant offset from the end of the string, regardless of how long the string is. Reported by: Mikael Simonsson <m@mikaelsimonsson.com> Reviewed by: benni PR: 288321 MFC after: 1 month
* stdio: Fix bug in integer-parsing FSMDag-Erling Smørgrav2025-08-084-6/+54
| | | | | | | | | | | If we encounter a zero in the havezero state, we should assume octal, just like we would if we encountered any other digit below 8. MFC after: 1 week PR: 288440 Fixes: d9dc1603d6e4 ("libc: Implement N2630.") Reviewed by: mandree Differential Revision: https://reviews.freebsd.org/D51832