summaryrefslogtreecommitdiffstats
path: root/lib/libc/gen
Commit message (Collapse)AuthorAgeFilesLines
* Discard first 3072 bytes of RC4 keystream, this is a bandaiddelphij2017-03-251-1/+1
| | | | | | | | | | | that allows us to work on switching to a more modern PRNG. Submitted by: Steven Chamberlain <steven pyro eu org> Approved by: so (cherry picked from commit 9395fdf886ead36d35ae506d9e6076ea68d0ab13) pfSense: Merge pull request #7 from jmutkawoa/devel
* MFC r303687:bdrewery2016-08-081-0/+1
| | | | | | Add link for getnetgrent_r(3). Approved by: re (kib)
* MFC r303486:ed2016-08-052-7/+16
| | | | | | | | | | Mention that basename(3) and dirname(3) will change in the future. Update the existing manual pages for basename(3) and dirname(3) to mention that in future versions of FreeBSD, these functions will no longer use internal buffers for storing the results. Approved by: re@
* utimes(2),utime(3): Add deprecation in favour of utimensat(2) and futimens(2).jilles2016-06-091-2/+4
| | | | | | | Setting time by seconds or microseconds may cause unexpected effects especially if sysctl vfs.timestamp_precision=3 (not default). Calling the obsolete functions with NULL timestamps is acceptable.
* Implement an NSS backend for netgroups and add getnetgrent_r(3).markj2016-06-093-115/+470
| | | | | | | | | | | | | | | | | | This support appears to have been documented in nsswitch.conf(5) for some time. The implementation adds two NSS netgroup providers to libc. The default, compat, provides the behaviour documented in netgroup(5), so this change does not make any user-visible behaviour changes. A files provider is also implemented. innetgr(3) is implemented as an optional NSS method so that providers such as NIS which are able to implement efficient reverse lookup can do so. A fallback implementation is used otherwise. getnetgrent_r(3) is added for convenience and to provide compatibility with glibc and Solaris. With a small patch to net/nss_ldap, it's possible to specify an ldap netgroup provider, allowing one to query nisNetgroupTriple entries. Sponsored by: EMC / Isilon Storage Division
* Fix an infinite loop in setnetgrent(3) with NIS netgroups.markj2016-06-091-0/+4
| | | | | | | | | | Handle an empty result from yp_match() by returning NULL, which is consistent with the handling of an empty netgroup in /etc/netgroup. setnetgrent(3) has no return value, so there is no particular need to distinguish this case from an error. PR: 26486 MFC after: 2 weeks
* Use a more common spelling for "(char *)0" in the getnetgrent man page.markj2016-06-091-2/+2
| | | | MFC after: 3 days
* Update to a June 8th snapshot of (un)vis form NetBSD.brooks2016-06-081-0/+1
| | | | | | | | | | This adds stravis() and some new encoding flags VIS_SHELL, VIS_META, and VIS_NOLOCALE. Assorted cleanups and fixes includeing a manpage typo[0]. PR: 210013 [0] Submitted by: pi [0]
* Don't leak olinep if malloc() fails.truckman2016-06-081-0/+2
| | | | | | | | | | | If malloc() fails to allocate linep, then free olinep (if it exists) before returning to avoid a memory leak. Reported by: Coverity CID: 1016716 Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D6755
* libc/locale: Fix type breakage in __collate_range_cmp().pfg2016-06-052-4/+4
| | | | | | | | | | | | | | | | When collation support was brought in, the second and third arguments in __collate_range_cmp() were changed from int to wchar_t, breaking the ABI. Change them to a "char" type which makes more sense and keeps the ABI compatible. Also introduce __wcollate_range_cmp() which does work with wide characters. This function is used only internally in libc so we don't export it. Use the new function in glob(3), fnmatch(3), and regexec(3). PR: 179721 Suggested by: ache. jilles MFC after: 3 weeks (perhaps partial only)
* Fix the signature of the psignal() function.ed2016-05-302-4/+4
| | | | | | | | POSIX 2008 added the psignal() function which has already been part of the BSDs for a long time. The only difference is, the POSIX version uses an 'int' for the signal number, unlike our version which uses an 'unsigned int'. Fix up the function to use an 'int'. This should not affect the ABI.
* Fix Coverity CID 1016714 Resource leak in process_file_actions_entry()truckman2016-05-251-3/+6
| | | | | | | | Don't leak a file descriptor of _dup2() fails (shouldn't happen). Reported by: Coverity CID: 1016714 MFC after: 1 week
* Fix 1016718 Resource leak.truckman2016-05-251-1/+3
| | | | | | | | Don't leak a file descriptor if fchdir() fails. Reported by: Coverity CID: 1016718 MFC after: 1 week
* FTS: Remove stale reference to nfs4 fs which was removed in r192578.bdrewery2016-05-212-2/+0
| | | | MFC after: 2 weeks
* Add implementation of robust mutexes, hopefully close enough to thekib2016-05-172-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | intention of the POSIX IEEE Std 1003.1TM-2008/Cor 1-2013. A robust mutex is guaranteed to be cleared by the system upon either thread or process owner termination while the mutex is held. The next mutex locker is then notified about inconsistent mutex state and can execute (or abandon) corrective actions. The patch mostly consists of small changes here and there, adding neccessary checks for the inconsistent and abandoned conditions into existing paths. Additionally, the thread exit handler was extended to iterate over the userspace-maintained list of owned robust mutexes, unlocking and marking as terminated each of them. The list of owned robust mutexes cannot be maintained atomically synchronous with the mutex lock state (it is possible in kernel, but is too expensive). Instead, for the duration of lock or unlock operation, the current mutex is remembered in a special slot that is also checked by the kernel at thread termination. Kernel must be aware about the per-thread location of the heads of robust mutex lists and the current active mutex slot. When a thread touches a robust mutex for the first time, a new umtx op syscall is issued which informs about location of lists heads. The umtx sleep queues for PP and PI mutexes are split between non-robust and robust. Somewhat unrelated changes in the patch: 1. Style. 2. The fix for proper tdfind() call use in umtxq_sleep_pi() for shared pi mutexes. 3. Removal of the userspace struct pthread_mutex m_owner field. 4. The sysctl kern.ipc.umtx_vnode_persistent is added, which controls the lifetime of the shared mutex associated with a vnode' page. Reviewed by: jilles (previous version, supposedly the objection was fixed) Discussed with: brooks, Martin Simmons <martin@lispworks.com> (some aspects) Tested by: pho Sponsored by: The FreeBSD Foundation
* Remove trailing whitespace and use `nitems(mib)` instead of `2` whenngie2016-04-191-2/+2
| | | | | | | calling sysctl(3) MFC after: 3 days Sponsored by: EMC / Isilon Storage Division
* libc: do not include <sys/types.h> where <sys/param.h> was already includedavos2016-04-185-7/+2
| | | | | | According to style(9): > normally, include <sys/types.h> OR <sys/param.h>, but not both. (<sys/param.h> already includes <sys/types.h> when LOCORE is not defined).
* Re-use our roundup2() macro instead of reinventing the wheel.pfg2016-04-181-6/+4
| | | | Obtained from: DragonflyBSD
* libc: make some more use of the nitems() macro.pfg2016-04-162-2/+2
| | | | | | | | We have an nitems() macro in the <sys/param.h> header that is convenient to re-use as it makes things easier to read. Given that it is available already without adding additional headers and other parts of libc already use it, extend a bit more its use.
* Remove PS_STRINGS fallback from setproctitleemaste2016-04-121-1/+1
| | | | | | | | In r103767 the kern.ps_strings sysctl was added as the preferred way to locate the ps_strings struct and is available in any FreeBSD release supported within the last decade. Reviewed by: kib
* libc: replace 0 with NULL for pointers.pfg2016-04-104-8/+8
| | | | | | | | | While here also cleanup some surrounding code; particularly drop some malloc() casts. Found with devel/coccinelle. Reviewed by: bde (previous version - all new bugs are mine)
* Disable support for compat syscalls on arm64. These symbols were neverandrew2016-04-061-0/+6
| | | | | | | shipped since arm64 exists only on 11+. Submitted by: brooks Reviewed by: emaste, imp
* libc: don't build compat functions if building WITHOUT_SYMVERemaste2016-03-151-2/+4
| | | | | | | WITHOUT_SYMVER necessarily implies building a system without symver backwards compatability. Sponsored by: The FreeBSD Foundation
* Remove sys/types.hkevlo2016-02-191-2/+1
|
* If libthr.so is dlopened without RTLD_GLOBAL flag, the libthr symbolskib2016-02-081-2/+9
| | | | | | | | | | | | | | | | | | | | | | do not participate in the global symbols namespace, but rtld locks are still replaced and functions are interposed. In particular, __pthread_map_stacks_exec is resolved to the libc version. If a library is loaded later, which requires adjustment of the stack protection mode, rtld calls into libc __pthread_map_stacks_exec due to the symbols scope. The libc version might recurse into binder and recursively acquire rtld bind lock, causing the hang. Make libc __pthread_map_stacks_exec() interposed, which synchronizes rtld locks and version of the stack exec hook when libthr loaded, regardless of the symbol scope control or symbol resolution order. The __pthread_map_stacks_exec() symbol is removed from the private version in libthr since libc symbol now operates correctly in presence of libthr. Reported and tested by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
* Add implementations of sendmmsg(3) and recvmmsg(3) functions whichkib2016-01-293-0/+164
| | | | | | | | | | | | | | | | | | wraps sendmsg(2) and recvmsg(2) into batch send and receive operation. The goal of this implementation is only to provide API compatibility with Linux. The cancellation behaviour of the functions is not quite right, but due to relative rare use of cancellation it is considered acceptable comparing with the complexity of the correct implementation. If functions are reimplemented as syscalls, the fix would come almost trivial. The direct use of the syscall trampolines instead of libc wrappers for sendmsg(2) and recvmsg(2) is to avoid data loss on cancellation. Submitted by: Boris Astardzhiev <boris.astardzhiev@gmail.com> Discussed with: jilles (cancellation behaviour) MFC after: 1 month
* Fix bug in the readpassphrase(3) function, which can be exposedsobomax2016-01-241-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | by application closing its stdin (i.e. STDIN_FILENO) prior to calling readpassphrase WITHOUT setting RPP_STDIN. What happens then is that the readpassphrase would open /dev/tty, and since file descriptors are reused, the call would return first unused fd, which is 0 which is also STDIN_FILENO. Then due to the usage of "input != STDIN_FILENO" in the code to do its logic, that would result in noecho flags not set on that file descriptor, which was original issue I've been trying to fix. In addition to that, the readpassphrase() would leak file descriptor on its way out, so fix that one as well. This problem can be tested with: $ ssh-add - < /tmp/myprivate.key The password will not be hidden as it should and ktrace will show: 53326 ssh-add CALL open(0x80142443c,0x100002<O_RDWR|O_CLOEXEC>,<unused>0x165f030) 53326 ssh-add NAMI "/dev/tty" 53326 ssh-add RET open 0 53326 ssh-add CALL sigprocmask(SIG_SETMASK,0x802eb1324,0x7fffffffd5e0) 53326 ssh-add RET sigprocmask 0 53326 ssh-add CALL sigaction(SIGALRM,0x7fffffffd630,0x7fffffffd610) Instead of: 57690 ssh-add CALL open(0x80142443c,0x100002<O_RDWR|O_CLOEXEC>,<unused>0x165f030) 57690 ssh-add NAMI "/dev/tty" 57690 ssh-add RET open 4 57690 ssh-add CALL ioctl(0x4,TIOCGETA,0x7fffffffd860) 57690 ssh-add RET ioctl 0 57690 ssh-add CALL ioctl(0x4,TIOCSETAF,0x7fffffffd680) 57690 ssh-add RET ioctl 0 57690 ssh-add CALL sigprocmask(SIG_SETMASK,0x802eb1324,0x7fffffffd620) 57690 ssh-add RET sigprocmask 0 57690 ssh-add CALL sigaction(SIGALRM,0x7fffffffd670,0x7fffffffd650) For the case when the key is read from the file. Technically this can also be workaround'ed at the application side by not closing the STDIN_FILENO in the first place, but readpassphrase(3) doesn't need to make any assumptions about that. Plus the file descriptor leak confirms that this is an oversight, rather than a deliberate behaviour. MFC after: 1 week
* sem: Don't free nameinfo that is still in list when open() fails.jilles2016-01-221-1/+3
| | | | | | | | | | This bug could be reproduced easily by calling sem_open() with O_CREAT | O_EXCL on a semaphore that is already open in the process. The struct sem_nameinfo would be freed while still in sem_list and later calls to sem_open() or sem_close() could access freed memory. PR: 206396 MFC after: 5 days
* Bring in initial libc and libstand support for RISC-V.br2016-01-171-4/+5
| | | | | | | Reviewed by: andrew, emaste, kib Sponsored by: DARPA, AFRL Sponsored by: HEIF5 Differential Revision: https://reviews.freebsd.org/D4943
* Add sbin and /usr/local directories to _PATH_DEFPATH.jilles2016-01-052-4/+4
| | | | | | | | | | | | | | | | | Set _PATH_DEFPATH to /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin. This is the path in the default class in the default /etc/login.conf, excluding ~/bin which would not be expanded properly in a string constant. For normal logins, _PATH_DEFPATH is overridden by /etc/login.conf, ~/.login_conf or shell startup files. _PATH_DEFPATH is still used as a default by execlp(), execvp(), posix_spawnp() and sh if PATH is not set, and by cron. Especially the latter is a common trap (most recently in PR 204813). PR: 204813 Reviewed by: secteam (delphij), alfred
* Support a.out format in nlist only on i386emaste2015-12-221-2/+2
| | | | | | | | | i386 is the only current FreeBSD architecture that ever used a.out format. Reviewed by: kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D4687
* libc: Use namespace.h in a few more files.jilles2015-12-202-3/+7
| | | | | libc now no longer calls fstat(), socketpair() and wait(), only the underscore-prefixed versions (_waitpid() instead of wait()).
* Fix lockf(3) cancellation behaviour.kib2015-12-201-3/+8
| | | | | Sponsored by: The FreeBSD Foundation MFC after: 1 week
* exec(3): Fix COMPATIBILITY section: default path does not contain cwd.jilles2015-12-121-2/+2
| | | | MFC after: 1 week
* Unbreak compiling getnetgrent.c with -DDEBUG after r236402 by adding angie2015-12-081-0/+1
| | | | | | | missing "}" MFC after: 3 days Sponsored by: EMC / Isilon Storage Division
* META MODE: Don't create .meta files when symlinking sources into the obj ↵bdrewery2015-11-251-2/+2
| | | | | | | | | | | directory. Tracking these leads to situations where meta mode will consider the file to be out of date if /bin/sh or /bin/ln are newer than the source file. There's no reason for meta mode to do this as make is already handling the rebuild dependency fine. Sponsored by: EMC / Isilon Storage Division
* popen() requires check for fdopen() failurerpokala2015-11-201-10/+24
| | | | | | | | | | | | | | Move fdopen() up near other resource allocation like malloc(); do proper deallocation on failure later on in the function. Submitted by: Ramachandra Topannavar <rtopannavar@panasas.com> Reviewed by: jilles Approved by: jhb (mentor) MFC after: 2 weeks Sponsored by: Panasas, Inc. Differential Revision: https://reviews.freebsd.org/D4126 M lib/libc/gen/popen.c
* Remove a set but unused variable in __getgroupmembership to fix a gcc 4.9+ ↵ngie2015-10-301-2/+1
| | | | | | | warning MFC after: 1 week Sponsored by: EMC / Isilon Storage Division
* Fix compiling with gcc [4.2.1] after r287797 when MK_HESOID == no andngie2015-10-252-13/+9
| | | | | | | | | | | | | | | | | | | | MK_NIS == no by converting `i` back to an int, and instead cast the loop comparison to `int` The loop comparison is iterating the len(ns_dtab)-1, because the last element is the sentinel tuple { NULL, NULL, NULL, }, so when both HESOID and NIS are off, len(ns_dtab)-1 == 1 - 1 == 0, and the loop is skipped because the expression is tautologically false While here, convert `(sizeof(x) / sizeof(x[0]))` to `nitems(x)` Tested with: clang 3.7.0, gcc 4.2.1, and gcc 4.9.4 [*] with MK_NIS={no,yes} and by running bash -lc 'id -u && id -g && id' * gcc 4.9.4 needs another patch in order for the compile to succeed with -Werror with lib/libc/gen/getgrent.c Reported by: jhibbits
* Revert lib/libc/gen/dirname.3@r289695ngie2015-10-211-2/+0
| | | | This is why I use branches usually, not commit directly to head
* Revert r289694ngie2015-10-211-0/+2
| | | | I committed some other undesirable local changes by accident
* wordexp: Rewrite to make WRDE_NOCMD reliable.jilles2015-09-302-94/+148
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Shell syntax is too complicated to detect command substitution and unquoted operators reliably without implementing much of sh's parser. Therefore, have sh do this detection. While changing sh's support anyway, also read input from a pipe instead of arguments to avoid {ARG_MAX} limits and improve privacy, and output count and length using 16 instead of 8 digits. The basic concept is: execl("/bin/sh", "sh", "-c", "freebsd_wordexp ${1:+\"$1\"} -f "$2", "", flags & WRDE_NOCMD ? "-p" : "", <pipe with words>); The WRDE_BADCHAR error is still implemented in libc. POSIX requires us to fail strings containing unquoted braces with code WRDE_BADCHAR. Since this is normally not a syntax error in sh, there is still a need for checking code in libc, we_check(). The new we_check() is an optimistic check that all the characters <newline> | & ; < > ( ) { } are quoted. To avoid duplicating too much sh logic, such characters are permitted when quoting characters are seen, even if the quoting characters may themselves be quoted. This code reports all WRDE_BADCHAR errors; bad characters that get past it and are a syntax error in sh return WRDE_SYNTAX. Although many implementations of WRDE_NOCMD erroneously allow some command substitutions (and ours even documented this), there appears to be code that relies on its security (codesearch.debian.net shows quite a few uses). Passing untrusted data to wordexp() still exposes a denial of service possibility and a fairly large attack surface. Reviewed by: wblock (man page only) MFC after: 2 weeks Relnotes: yes Security: fixes command execution with wordexp(untrusted, WRDE_NOCMD)
* Use calloc() instead of malloc + memset.delphij2015-09-291-2/+1
| | | | MFC after: 2 weeks
* fnmatch(): Remove exponential behaviour as in sh r229201.jilles2015-09-271-28/+49
| | | | | | The old code was exponential in the number of asterisks in the pattern. However, once a match has been found upto the next asterisk, the previous asterisks are no longer relevant.
* Use proper function prototype for readdir().rodrigc2015-09-221-10/+6
| | | | | | | Eliminates -Wstrict-prototypes warning Submitted by: Joerg Sonnenberger <joerg@dragonflybsd.org> Obtained from: DragonFlyBSD (commit 2a6aec8dab58c89961cabcfdb92e0d0ae256dea4)
* Use ANSI C prototypes. Eliminates -Wold-style-definition warnings.rodrigc2015-09-221-1/+1
|
* Use ANSI C prototypes. Eliminates -Wold-style-definition warnings.rodrigc2015-09-2032-142/+56
|
* Remove names from some prototypesrodrigc2015-09-2012-14/+14
|
* Add declarations to eliminate -Wmissing-prototypes warningsrodrigc2015-09-2018-0/+35
|
* Adding missing include to eliminate -Wmissing-prototypes warningrodrigc2015-09-201-0/+1
|
OpenPOWER on IntegriCloud