path: root/libc/misc
AgeCommit message (Collapse)Author
2016-09-26use a single libc and deduplicate threading codeWaldemar Brodkorb
Similar to musl libc a single libc has many benefits and solves some open issues with uClibc-ng. - no pthread_mutex_* weak symbols exported anymore - applications no longer failing to link when either -lrt or -lpthread are missing for dynamic and static linking mode - smaller C library - slightly better runtime performance
2016-06-07ssp: remove SSP legacy codeWaldemar Brodkorb
Nobody should use gcc 3.3 nowadays.
2016-06-01remove MJN only debug messagesWaldemar Brodkorb
2016-04-03Provide an alias to _obstack_freeAlexey Neyman
GDB 7.11 does not build if compiled against uclibc-ng (1.0.12 was used, but the problematic code exists in 1.0.13 as well). The reason is that GDB release includes its own obstack implementation, but elides the code if <gnu-versions.h> declares a compatible obstack implementation in libc. uclibc-ng does claim compatible obstack interface (GDB expects version 2, but accepts version 1 if sizeof(int) == sizeof(size_t)), however, uclibc-ng does not provide the _obstack_free symbol that is a part of the interface (glibc does provide this symbol). This later causes a link failure. The attached patch makes uclibc-ng enables an alias _obstack_free -> obstack_free. Signed-off-by: Alexey Neyman <>
2016-02-07frv: resurrect port somehow, totally untestedWaldemar Brodkorb
The FR-V port is really broken, and I have no emulator or hardware for this platform. I tried to get some hardware from RedHat, who made the FR-V port initially. Unfortunately Fujitsi didn't agreed to sent me some of their unused spare hardware lying @RedHat. As I invested some time to get stuff compiled, I decided to add the code and may be anytime later I can gain access to some emulator or hardware. GDB simulator for FR-V doesn't support booting Linux AFAIK.
2016-01-03libc: getpass,getutent: allocate buffer dynamicallyWaldemar Brodkorb
Saves 0.6k bss with default buffer size(256). text data bss dec hex filename - 1172 8 408 1588 634 libc/misc/utmp/utent.os - 429 0 256 685 2ad libc/unistd/getpass.os + 1208 8 28 1244 4dc libc/misc/utmp/utent.os + 471 0 4 475 1db libc/unistd/getpass.os ================================================================ +78 -632 Signed-off-by: Leonid Lisovskiy <>
2015-12-17Fix syslog messages lost if syslogd is temporary busyVladislav Grishenko
Commit 4139fe5aec935ba3f462dcaf6aafb6e5eadf1ab9 fixes SIGSTOPed syslogd issue. but introduced new one - messages will be lost when socket buffer gets full, not only if syslogd is stalled, but even if it accepts message slower than someone sends and possibly leads to security hole, when important messages get lost as result of attacker flooding. Patch adds 1 second waiting for socket buffer can accept the message, helps when syslogd is working hard. If it's stalled/SIGSTOPed, message will be sent to errout as before. After that, further non-blocking /dev/log connect attempts will fail immediately with EAGAIN error until syslogd reads some from it. function old new delta openlog_intern 259 355 +96 - 8 +8 .rodata 151 159 +8 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 112/0) Total: 112 bytes Signed-off-by: Vladislav Grishenko <>
2015-12-17Fix syslog messages lost after syslogd restartsVladislav Grishenko
If syslogd is stopped and restarted while a process has the log open, the next message that process produces will be logged to the console and not to the new instance of syslogd. Further messages will be routed correctly, but not the first one. Based on original patch Bug 3889 - syslog loses messages when syslogd restarted function old new delta openlog 33 68 +35 __vsyslog 851 848 -3 openlog_intern 318 259 -59 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/2 up/down: 35/-62) Total: -27 bytes Signed-off-by: Vladislav Grishenko <>
2015-12-17fix readdir_r returns success code while it in fact failedWaldemar Brodkorb
Taken from Signed-off-by: Leonid Lisovskiy <> Signed-off-by: Waldemar Brodkorb <>
2015-10-12fix static binaries linked with pthread and compiled with sspWaldemar Brodkorb
Move TLS initialization for static builds up to the calling function as suggested by Daniel Fahlgren. Reported-By: Daniel Fahlgren <>
2015-08-14add mkstemps, mkstemps64 and mkostemps, mkostemps64 functionsRomain Naour
Change __gen_tempname() prototype in order to pass the additional suffix lenght. In __gen_tempname() add a new check for suffixlen. Update some comments in the code. Signed-off-by: Romain Naour <> Signed-off-by: Waldemar Brodkorb <>
2015-06-10strftime: comment on %0xY %+nY %-nYBernhard Reutner-Fischer
Would fix: date -u +%4Y%2m%2d%2H%2M%2S Signed-off-by: Bernhard Reutner-Fischer <>
2015-04-25merge uClibc changesWaldemar Brodkorb
2015-04-22NPTL: Rename a variableBernhard Reutner-Fischer
There seems to be a bug in gold with static TLS at least on x86_64 (?) Signed-off-by: Bernhard Reutner-Fischer <>
2015-03-29merge uClibc git masterWaldemar Brodkorb
2015-03-25utmp: favour POSIX utmpx over SVID utmpBernhard Reutner-Fischer
Note: _PATH_UTMPX == _PATH_UTMP and the utmp struct is identical to the utmpx struct so this only changes the external API entrypoints and NOT the underlying data source. This saves about 500b (~1300b from previously ~1950) while at it. Signed-off-by: Bernhard Reutner-Fischer <>
2015-03-25utmp: Remove unneeded aliasBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2015-03-23utmp: indentBernhard Reutner-Fischer
indent only, no code changes Signed-off-by: Bernhard Reutner-Fischer <>
2015-03-23utmp: Remove unneeded aliasesBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2015-03-23utmp: add _unlocked suffix to internal helpersBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2015-03-23buildsys: HAS_UTMP (XPG2, SVr4 compat) knobBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2015-03-23Revert "utent.c, wtent.c: move functions from utxent.c"Bernhard Reutner-Fischer
This reverts commit 84135275cfeebc0b233c1c96eeada4d4178a0b18. This change is said to make systemd deadlock (cannot reproduce this) Signed-off-by: Bernhard Reutner-Fischer <> Conflicts: include/utmp.h
2015-01-26merge upstream changesWaldemar Brodkorb
2015-01-22libc: Avoid redundant setting of ENOMEMBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2015-01-01remove apparently unused code, this time for realThorsten Glaser
Signed-off-by: Thorsten Glaser <>
2014-12-15mkostemp: fix implementationAnthony G. Basile
mkostemp(char *template, int flags) generates a unique temporary filename from a template. The flags parameter accepts three of the same flags as open(2): O_APPEND, O_CLOEXEC, and O_SYNC. The current implementation of mkostemp(3) does not respect the flags and in fact confuses the flags with the file mode which should always be S_IRUSR | S_IWUSR. This patch corrects this issue. Signed-off-by: Anthony G. Basile <> Signed-off-by: Bernhard Reutner-Fischer <>
2014-12-10mkostemp: fix implementationAnthony G. Basile
mkostemp(char *template, int flags) generates a unique temporary filename from a template. The flags parameter accepts three of the same flags as open(2): O_APPEND, O_CLOEXEC, and O_SYNC. The current implementation of mkostemp(3) does not respect the flags and in fact confuses the flags with the file mode which should always be S_IRUSR | S_IWUSR. This patch corrects this issue. Signed-off-by: Anthony G. Basile <>
2014-11-19locale: Add wcsftime()Bernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2014-08-18libc: add issetugid()Anthony G. Basile
issetugid() returns 1 if the process environment or memory address space is considered tainted, and returns 0 otherwise. This happens, for example, when a process's privileges are elevated by the setuid or setgid flags on an executable belonging to root. This function first appeard in OpenBSD 2.0 and is needed for the LibreSSL. This patch follows the same logic as the equivalent musl commit. For more information see the commit message at Signed-off-by: Anthony G. Basile <> Signed-off-by: Bernhard Reutner-Fischer <>
2014-04-23weak symbols need to be "defined" weak but "declared" strongVineet Gupta
Patch "LT.old: Make __errno_location/__h_errno_location thread safe" uncovered yet another bug with static linking and errno (hopefully this is last of them all). Currently, __errno_location is declared weak but is defined strong. While this provides with the desired weak semantics in dso, it is subtly broken in static links. Quoting Joern Rennecke (ARC gcc expert): | I think the issue is that you declare the function as weak in the | header file. That is a rare instance where you want the reference | use declaration that differs a bit from the definition. | If the reference uses a weakly declared function, that creates a | weakref, i.e. the linker won't bother to look for this symbol at | all - if it gets linked in for some other reason, fine, | otherwise, it stays zero. So the solution to declare strong, define weak. Supporting data ----------------- orig code: ARM mmap wrapper (LT.old build + my prev patch for errno) _mmap: @ args = 8, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r5, r7, lr} ldr r5, [sp, #20] movs ip, r5, asl #20 beq .L2 bl __errno_location(PLT) mov r3, #22 str r3, [r0, #0] mvn r0, #0 ... ... .weak __errno_location A statically linked hello world program which uses mmap too. As we can see__errno_location is completely gone - which is semantically wrong - we need functional errno. 00008274 <__GI_mmap>: 8274: e92d40b0 push {r4, r5, r7, lr} 8278: e59d5014 ldr r5, [sp, #20] 827c: e1b0ca05 lsls ip, r5, #20 8280: 0a000004 beq 8298 8284: e320f000 nop {0} ^^^^^^^^^^ 8288: e3a03016 mov r3, #22 828c: e5803000 str r3, [r0] 8290: e3e00000 mvn r0, #0 This in turn is due to a fixup in ARM ld which transforms branch-to-null into a nop. It is better than crashing but still wrong since errno handling is removed. With the patch, errno_location is restored back in test program. 00008274 <__GI_mmap>: 8274: e92d40b0 push {r4, r5, r7, lr} 8278: e59d5014 ldr r5, [sp, #20] 827c: e1b0ca05 lsls ip, r5, #20 8280: 0a000004 beq 8298 <__GI_mmap+0x24> 8284: eb000010 bl 82cc <__errno_location> 8288: e3a03016 mov r3, #22 828c: e5803000 str r3, [r0] Cc: Christian Ruppert <> CC: Francois Bedard <> Cc: Anton Kolesov <> Cc: Joern Rennecke <> Cc: Jeremy Bennett <> Cc: Thomas Petazzoni <> Cc: Peter Korsgaard <> Cc: Khem Raj <> Signed-off-by: Vineet Gupta <> Signed-off-by: Bernhard Reutner-Fischer <>
2014-04-23LT.old: Make __errno_location/__h_errno_location thread safeVineet Gupta
WHY: errno in uClibc is not thread safe HOW: __errno_location and it's sibling __h_errno_location need to be called via PLT - even from within libc. That way when linked with pthread, intra-uClibc callers will also use the thread safe version. This is achieved by removing the GI alias for these functions, ensuring that they get called normally (via PLT) Verified with ARC LT.old and ARM cubieboard2 buildroot (LT.old) NPTL is unaffected by this bug. ------------ History behind this patch --------------------- This is a long standing bug ( Others have tried to fix it in past (alteast Peter Korsgaard's patch in 2010), but somehow failed to be merged (or were backed out afterwards). One of the causes could be side effect of atleast one more bug related to pthreads and static link which has now been fixed. I have solved this w/o looking at other pacthes but would like to give credit to Peter and others for confirming that it makes sense. Cc: Christian Ruppert <> CC: Francois Bedard <> Cc: Joern Rennecke <> Cc: Jeremy Bennett <> Cc: Thomas Petazzoni <> Cc: Peter Korsgaard <> Cc: Khem Raj <> Cc: Signed-off-by: Vineet Gupta <> Signed-off-by: Bernhard Reutner-Fischer <>
2014-02-15libc: silence warning in ftsBernhard Reutner-Fischer
cderrno is dead code, comment it out. Signed-off-by: Bernhard Reutner-Fischer <>
2013-11-06time.c: make ll_tzname* static againBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2013-11-06misc: fix nm 'No such file' errorBaruch Siach
Reset CSRC-y to prevent pollution from libc/misc/glob/, and fix the following error messages when UCLIBC_HAS_OBSTACK is disabled: nm: 'libc/misc/gnu/glob-susv3.os': No such file nm: 'libc/misc/gnu/glob64-susv3.os': No such file Signed-off-by: Baruch Siach <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-11-06Fix weak/strong attribute of __errno_location and it's __GI aliasVineet Gupta
A simple statically linked hello world program was segfaulting for ARC in linuxthreads.old configuration (although the root casue applies cross-arch for NPTL as well as linuxthreads.old as described) The crash was due to branch to NULL in _stdio_init 0001026c <_stdio_init>: 1026c: push_s blink 1026e: st.a r13,[sp,-8] 10272: bl.d 0 --> supposed call to __errno_location The call was NOT getting patched to libc internal only alias __GI___errno_location, because it was weak while it's exported cousin, __errno_location was strong/normal. arc-linux-uclibc-nm libc/misc/internals/__errno_location.os 00000000 W __GI___errno_location 00000000 T __errno_location This is exactly opposite to what is expected. Quoting Peter S. Mazinger, commit 87936cd013041 "errno and *_init cleanup" | The rule adopted: | for enabled threads we make in libc the __GI_x() variants strong, x() weak | and (should) provide another strong x() in libpthread. | If threads are disabled, even the __GI_x() variants are weak. With the fix, we see the right settings as below 00000000 T __GI___errno_location 00000000 W __errno_location Note that problem won't show up in a static busybox build as it references errno and that seems to elide the issue. I can confirm the same/more issues with latest ARM buildroot builds w/o my fix. (1). linuxthreads.old (broken just like ARC) arm-linux-nm uclibc-snapshot/libc/misc/internals/__errno_location.os 00000000 W __GI___errno_location 00000000 T __errno_location But presumably the issue there is NOT catestrophic because ARM linker is likely smarter and patches a NOP instead of NULL branch. 00008388 <_stdio_init>: 8388: e92d4038 push {r3, r4, r5, lr} 838c: e320f000 nop {0} (2) NPTL build (exported version is not weak) 00000000 T __GI___errno_location 00000000 T __errno_location This causes a static link with libpthread and test program referencing errno to fail to link. #include <errno.h> int main(void) { printf("%d\n", errno); } arm-linux-gcc -static -pthread -o tst tst.o arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libc.a(__errno_location.os): In function `__errno_location': __errno_location.c:(.text+0x0): multiple definition of `__errno_location' arm-buildroot-linux-uclibcgnueabi/sysroot/usr/lib/libpthread.a (errno_location.os):errno_location.c:(.text+0x0): first defined here Signed-off-by: Vineet Gupta <> Cc: Baruch Siach <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-08-02libc: add isfdtype()Anthony G. Basile
isfdtype(int fd, int fdtype) check whether a file descriptor fd is of type fdtype, where the types are defined in stat(2). It is supported in glibc and BSD, and used by utilities such as acpid. Signed-off-by: Anthony G. Basile <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-07-04insque: fix segfault on (prev == NULL)Bartosz Golaszewski
Since version 2.5 glibc allows prev to be a NULL pointer in insque, whereas uClibc segfaults in this case. This fixes the issue and makes insque initialize q_forw and q_back with NULLs if prev == NULL. Signed-off-by: Bartosz Golaszewski <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-06-28libc: Fix _obstack_newchunk public symbol visBernhard Reutner-Fischer
975bca165c3e10e74c05c0384fd58f45a7025a3c avoided relocations to _obstack_newchunk used by obstack_vprintf but missed to enable the corresponding public symbol which is used by the obstack macros. Signed-off-by: Bernhard Reutner-Fischer <>
2013-06-14libc: hide obstack relocationsBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2013-06-14libc/misc/gnu/obprintf.c: implement obstack_printf and obstack_vprintfAnthony G. Basile
This adds a straight forward implementation for obstack_printf and obstack_vprintf on uClibc's already existing obstack_grow and vasprintf. It does not attempt to port over glibc's implementation in terms of _IO_* structs and functions. Signed-off-by: Anthony G. Basile <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-06-14config: UCLIBC_HAS_OBSTACK to optionally enable obstack supportAnthony G. Basile
Signed-off-by: Anthony G. Basile <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-05-28libc: elf: explicitly include uClibc_page.h to make PAGE_SIZE visibleCarmelo Amoroso
Signed-off-by: Filippo Arcidiacono <> Signed-off-by: Carmelo Amoroso <>
2013-05-13libc: deal with aux vect inside __uClibc_main only if !SHAREDFilippo ARCIDIACONO
It's not safe to use the aux vect inside __uClibc_main if we are running with shared libraries, because it could have been already modified. For example, if some constructor plays with environment variables by using unsetenv, the modifications done into the stack to unset an environment variable, have impacts on the aux vect due to the extra NULL entries added. Due to this, __uClibc_main is not able to detect where the aux vect starts, so all the entries that are used by __uClibc_main (AT_UID, AT_EUID, AT_GID, AT_EGID, AT_PAGESZ and possibly other arch specific) are impacted. Same side effect on the aux vect is caused by the when running a SUID program with some of the unsecure environment variables set, that will be unset by the itself. In order to fix this issue, it needs to handle aux vect entries into __uClibc_main only if SHARED is not defined. In SHARED case, libc refers to __dl_secure and _dl_pagesize as initialised by the where the aux vext is still untouched. Signed-off-by: Filippo Arcidiacono <> Reviewed-by: Carmelo Amoroso <> Signed-off-by: Carmelo Amoroso <>
2013-03-14libc/ipc: Make IPC_64 0 for common-generic ABIVineet Gupta
This avoids having to define __IPC_64 to 0 in each arch using the ABI Signed-off-by: Vineet Gupta <> Cc: Markos Chandras <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-02-20libc/ipc: Allow architectures to define their own __IPC_64 macroMarkos Chandras
New architectures don't define ARCH_WANT_IPC_PARSE_VERSION in their kernel. This means that every cmd passed to semctl,msgctl and shmctl is IPC_64 by default. For these architectures we need to define __IPC_64 as 0. Existing architectures are not affected by this change. Signed-off-by: Markos Chandras <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-02-20fstatfs64: Prefer fstatfs64 system call instead of __libc_fstatfsMarkos Chandras
Using __libc_fstatfs for fstatfs64 adds a small delay as it needs to use a 32-bit data structure to get the file info and them pass them to the 64-bit data structure which was given as a fstatfs64 argument. Using the system call directly should make the entire process much faster. Also fix the arguments for fstatfs64. It takes three arguments (see fs/fstatfs.c in Linux kernel sources) so despite what the manpage says, the size of the buffer needs to be passed as the second argument Signed-off-by: Markos Chandras <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-02-20libc/statfs64: Skip conversion code for new architecturesMarkos Chandras
Fixes the following tests in LTP statfs02_64 ( test case #5 ) The purpose of this test is to pass an invalid pointer to the statfs64 syscall and check if the kernel returns EFAULT or not. However, uClibc creates a new statfs struct which is then passed to the kernel. As a result of which, the kernel returns 0 because the newly created statfs structure is valid. But, when copying the contens of the new pointer to the old userspace one, the uClibc segfauls because the old pointer is invalid. Old architectures are doomed to suffer by this problem but new architectures can use the statfs64 syscall directly so that the userspace pointer is passed directly to the kernel and get the correct errno at the end. Signed-off-by: Markos Chandras <> Signed-off-by: Bernhard Reutner-Fischer <>
2013-02-07buildsys: switch warning into a TODOBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2013-02-05buildsys: switch libc to kbuild-styleBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>
2013-01-21libc: fix typo in statvfsBernhard Reutner-Fischer
Signed-off-by: Bernhard Reutner-Fischer <>