• R/O
  • HTTP
  • SSH
  • HTTPS

List of commits

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

RSS
修訂. 時間 作者
fbe2593 2020-01-28 22:15:20 Ata, John (US)

fix getenv bug

The getenv() library call can trap under certain conditions. It compares the
passed in environment variable name (var) with the name=variables (*ep) in the
environment area and returns a pointer to the value in the environment if it
exists. To accomplish this, it does a memcmp() using the length of the passed
in name (len) for each environment variable (*ep) against the passed in name (
var). So memcmp will attempt to scan both strings for len bytes. However, if
for some reason, len is equal to or greater than 16 and longer than the length
of the *ep in the environment and the *ep resides near the end of a page
boundary while the next page is not present or mapped, the memcmp could trap
with a sigsegv error while continuing the scan with the optimization
read-ahead. However, if strncmp is used instead, there is no problem since both
source and destination scanning will stop when either reaches a terminating
NULL

4bae997 2019-11-18 04:09:35 Waldemar Brodkorb

riscv64: fix DB_THREAD_SELF, fixes 4 testsuite failures

b6a2df5 2019-11-18 01:35:28 Yann Sionneau

riscv64: fix comments borrowed from or1k port

Signed-off-by: Yann Sionneau <ysionneau@kalray.eu>

f115e68 2019-11-18 01:32:25 Eugene Yudin

Makefile.in: build utils without stack smashing protector

a80286d 2019-11-18 01:21:59 Joris Vink

fix PTRAVE_EVENT_SECCOMP typo in ptrace.h

Hi,

This diff fixes a typo in the PTRACE_EVENT_SECCOMP event code.

The typo itself was introduced in 2012 when syncing with glibc header
files and was itself fixed in 2013 in the glibc headers.

d0bc0d2 2019-11-08 11:03:43 Waldemar Brodkorb

riscv64: implement NPTL/TLS

basically from or1k port of uClibc-ng, with fixes for structures in
pthreadtypes.h from 64 bit architectures.

18 testsuite failures counted.

cb9d1f5 2019-11-06 12:33:56 Waldemar Brodkorb

riscv64: lazy relocations do not work like sparc/m68k

858ffad 2019-11-06 01:29:01 Waldemar Brodkorb

implement fexecve from glibc

60eae0d 2019-11-01 08:39:10 Waldemar Brodkorb

riscv64: add shared library support

01e863c 2019-10-30 18:27:52 Carlos Santos

Make __syscall_error return long, as expected by syscall() callers

The return type of syscall() is long so __syscall_error, which is jumped
to by syscall handlers to stash an error number into errno, must return
long too otherwhise it returs 4294967295L instead of -1L. For example,
syscall for x86_64 is defined in libc/sysdeps/linux/x86_64/syscall.S as

syscall:
movq %rdi, %rax /* Syscall number -> rax. */
movq %rsi, %rdi /* shift arg1 - arg5. */
movq %rdx, %rsi
movq %rcx, %rdx
movq %r8, %r10
movq %r9, %r8
movq 8(%rsp),%r9 /* arg6 is on the stack. */
syscall /* Do the system call. */
cmpq $-4095, %rax /* Check %rax for error. */
jae __syscall_error /* Branch forward if it failed. */
ret /* Return to caller. */

In libc/sysdeps/linux/x86_64/__syscall_error.c, __syscall_error is
defined as

int __syscall_error(void) attribute_hidden;
int __syscall_error(void)
{
register int err_no __asm__ ("%rcx");
__asm__ ("mov %rax, %rcx\n\t"
"neg %rcx");
__set_errno(err_no);
return -1;
}

So __syscall_error returns -1 as a 32-bit int in a 64-bit register, %rax
(0x00000000ffffffff, whose decimal value is decimal 4294967295) and a
test like this always returns false:

if (syscall(number, ...) == -1)
foo();

Fix the error by making __syscall_error return a long, like syscall().

The problem can be circumvented by the caller by coercing the returned
value to int before comparing it to -1:

if ((int) syscall(number, ...) == -1)
foo();

The same problem probably occurs on other 64-bit systems but so far only
x86_64 was tested, so this change must be considered experimental.

Signed-off-by: Carlos Santos <unixmania@gmail.com>

3f1c2ff 2019-10-16 01:36:40 Waldemar Brodkorb

bump to 1.0.32 for release

9684c27 2019-10-16 01:18:11 mirabilos

Fix value for O_mask_was_saved based on gdb observation

(gdb) print offsetof(struct __jmp_buf_tag, __mask_was_saved)
$12 = (int *) 0x1f0

using https://stackoverflow.com/a/39663128/2171120

81ebf8b 2019-10-16 01:18:11 mirabilos

sparc64: Make structure match kernel uapi

Update from linux/arch/sparc/include/uapi/asm/uctx.h

1a0a6bd 2019-10-16 01:18:11 mirabilos

sparc64: Use the jmpbuf-offsets.h header instead of duplicating it

d05b08c 2019-10-11 01:35:26 Waldemar Brodkorb

aarch64: sync with glibc code to see any differences in a better way

0fcfaee 2019-10-06 01:13:23 Stafford Horne

or1k: Fix compiling with PIC and latest binutils use PLT for __syscall_error

This symbol was causing a build failure with the new toolchain. It
looks like it has always been wrong.

The main issue was checking for PIC rather than __PIC__.

Remove all PSEUDO_* macros and ther SYSCALL_ERROR_NAME macro as they are
not needed by uclibc-ng, they are used in glibc for building up syscalls
there, but not here.

Fixes error:
/opt/shorne/software/or1k-linux/bin/../lib/gcc/or1k-linux/9.0.1/../../../../or1k-linux/bin/ld: libc/libc_so.a(or1k_clone.os): pc-relative relocation against dynamic symbol __syscall_error
/opt/shorne/software/or1k-linux/bin/../lib/gcc/or1k-linux/9.0.1/../../../../or1k-linux/bin/ld: final link failed: bad value

Signed-off-by: Stafford Horne <shorne@gmail.com>

3538ba3 2019-10-01 02:29:07 Kjetil Oftedal

malloc: Add missing locks for some paths (valloc/memalign/posix_memalign)

The internal heap structures were not protected properly in
memalign(). If multiple threads were concurrently allocating memory and
one of them were requesting aligned memory via valloc,memalign or
posix_memalign the internal heap data structures could be corrupted.

Signed-off-by: Kjetil Oftedal <oftedal@gmail.com>

7ed8c42 2019-10-01 02:25:00 Adhemerval Zanella

PowerPC: Fix termios definitions

This patch fixes the incorrect guard by __USE_MISC of struct winsize and
struct termio in powerpc termios header. Current states leads to build
failures if the program defines _XOPEN_SOURCE, but not _DEFAULT_SOURCE
or either _BSD_SOURCE or _SVID_SOURCE. Without any definition,
__USE_MISC will not be defined and neither the struct definitions.

This patch copies the default Linux ioctl-types.h by adjusting only the
character control field (c_cc) size in struct termio.

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[Vadim: adopted for uclibc ]

8bcbb7f 2019-09-09 21:16:55 Waldemar Brodkorb

Revert "package/uclibc: fix termios redefinition issue for PowerPC"

This reverts commit 14c36638c1a125b1c2d06857c7e7c44f266d0e8e.

14c3663 2019-09-06 19:07:32 Vadim Kochan

package/uclibc: fix termios redefinition issue for PowerPC

Fix redefinition of 'struct termios' by syncing termios powerpc headers
from glibc, the commit which fixed the same issue in glibc:

d4795e4a43e6f0c221bc5dc64c612206a21a177b PowerPC: Fix termios definitions

https://sourceware.org/git/?p=glibc.git;a=commit;h=d4795e4a43e6f0c221bc5dc64c612206a21a177b

it fixed the following bug request:

https://bugzilla.redhat.com/show_bug.cgi?id=1122714

In case of Buildroot it fixes flashrom build for PowerPC.

Fixes:
http://autobuild.buildroot.net/results/797dde5cbf0e94162c7cc7b557841605c78ac2f3/

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>

e94e6f4 2019-07-05 21:48:35 Petar Jovanovic

mips: avoid calling memcpy() from memmove() for MIPS arch

This is a follow up to an incorrect fix for memmove() problem in:

commit 785dee78552f9ad06819bf7eb1adc05b43110842
Author: Petar Jovanovic <petar.jovanovic@rt-rk.com>
Date: Mon May 6 13:29:02 2019 +0000

mips: fix memmove() call when __ARCH_HAS_BWD_MEMCPY__ is not defined

Calling memcpy from memmove should be skipped in two cases:

a) if arch's memcpy uses a backward copying (e.g. SH4)
b) if arch's memcpy is not fully safe for overlapping regions (MIPS)

Signed-off-by: Petar Jovanovic <petar.jovanovic@rt-rk.com>

028d28e 2019-07-05 21:47:21 Yann Sionneau

Fix header installation for recent 64-only arch

Summary:
Recent arch do not support Legacy.
Thus they don't define ARCH_HAS_DEPRECATED_SYSCALLS

But this led to per-arch headers not being installed and common-generic ones taking precedence.

So it was impossible to declare arch-specific statfs.h for instance, to force 64-bit mode only.

This was leading to the following situation to happen:
1/ an application compiles (say without -D_FILE_OFFSET_BITS set)
it therefore uses struct statfs from libc/sysdeps/linux/common-generic/bits/statfs.h
where f_type and f_bsize fields are U32: https://elixir.bootlin.com/uclibc-ng/latest/source/libc/sysdeps/linux/common-generic/bits/statfs.h#L18
2/ application calls "statfs"
3/ uClibc issues "statfs64" syscall (because __NR_statfs64 is defined and __NR_statfs is undefined):
https://elixir.bootlin.com/uclibc-ng/latest/source/libc/sysdeps/linux/common/statfs.c#L14
4/ if Linux kernel port is not defining CONFIG_COMPAT, it calls do_statfs_native
https://elixir.bootlin.com/linux/latest/source/fs/statfs.c#L195
5/ it does copy_to_user of the size of struct statfs defined in the kernel source tree:
https://elixir.bootlin.com/linux/latest/source/fs/statfs.c#L161
6/ Generic struct statfs in the kernel is defined like this:
https://elixir.bootlin.com/linux/latest/source/include/uapi/asm-generic/statfs.h#L23
f_type and f_bsize fields are long (64 bits) for 64-bit archs.
7/ memory corruption occurs because of this mismatch

Solution:
Allow to not define __ARCH_HAS_DEPRECATED_SYSCALLS__ *and* declare its own arch-specific statfs.h header, matching the kernel one.
(for instance with f_type and f_bsize defined as long)

Does this change break other archs?
This change allows headers in libc/sysdeps/linux/<ARCH>/bits/ to override ones in libc/sysdeps/linux/common-generic/bits/
The only arch which does not define __ARCH_HAS_DEPRECATED_SYSCALLS__ *and* has a header in libc/sysdeps/linux/<ARCH>/bits/ which can conflict with one in libc/sysdeps/linux/common-generic/bits/
is c6x.
The file that can override is ../libc/sysdeps/linux/c6x/bits/kernel_stat.h
This, btw, means that, today, this file is there and is not used (during compilation, GNU Make overrides the rule):
Makefile.in:152: warning: overriding recipe for target `include/bits/kernel_stat.h'
Makefile.in:148: warning: ignoring old recipe for target `include/bits/kernel_stat.h'
I was not able to compile uClibc with the only binary toolchain I found for c6x arch (gcc-4.5.1 from code sourcery: https://sourcery.mentor.com/GNUToolchain/release1882)
However, I can tell that c6x's kernel_stat.h only defines two structs: kernel_stat and kernel_stat64: https://elixir.bootlin.com/uclibc-ng/latest/source/libc/sysdeps/linux/c6x/bits/kernel_stat.h
And I can also tell that those structs are only used when using xstat conversion functions (__xstat32_conv / xstat_conv) which are only used and present in the __ARCH_HAS_DEPRECATED_SYSCALLS__ == y case.
However, c6x does not define __ARCH_HAS_DEPRECATED_SYSCALLS__
So I think I can say that this change does not affect c6x nor other archs.

721f098 2019-07-05 21:47:21 Christoph Hellwig

riscv: clear a3/a4 in crt1

We don't support shared libraries and thus _init/_fini. But loading
nommu binaries blows they aren't cleared, so do that.

Signed-off-by: Christoph Hellwig <hch@lst.de>

ed495bf 2019-07-05 21:47:20 Christoph Hellwig

riscv: add the MAP_UNINITIALIZED definition

This avoids a nommu build failure.

Signed-off-by: Christoph Hellwig <hch@lst.de>

4f506bb 2019-06-21 19:09:36 Denys Vlasenko

fix opendir, fpathconf and ttyname_r to use fstat64(), not fstat()

There is no opendir64(), thus even programs built for 64-bit off_t
use opendir(). Before this change, internally opendir() uses fstat(),
with the following breakage if some of struct stat fields are too narrow:

$ strace ls -l
execve("/busybox/ls", ["ls", "-l"], 0x7ffcdc43ede8 /* 16 vars */) = 0
ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
getuid32() = 0
time([1551486393 /* 2019-03-02T00:26:33+0000 */]) = 1551486393 (2019-03-02T00:26:33+0000)
ioctl(0, TIOCGWINSZ, {ws_row=38, ws_col=120, ws_xpixel=0, ws_ypixel=0}) = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
brk(NULL) = 0x9768000
brk(0x9769000) = 0x9769000
lstat64(".", 0xffa6e374) = 0
open(".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, 0xffa6e378) = -1 EOVERFLOW (Value too large for defined data type)

See https://bugs.busybox.net/show_bug.cgi?id=11651

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>

f93b43e 2019-06-21 19:09:27 Yann Sionneau

Fix compilation issue when libuargp is compiled without __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__

This fixes the issue reported at https://github.com/wbx-github/uclibc-ng/issues/2

Signed-off-by: Yann Sionneau <yann@sionneau.net>

785dee7 2019-05-27 21:54:52 Petar Jovanovic

mips: fix memmove() call when __ARCH_HAS_BWD_MEMCPY__ is not defined

When arch (such as MIPS) does not define __ARCH_HAS_BWD_MEMCPY__, memmove()
calls memcpy() which is wrong for overlapping regions.

Signed-off-by: Petar Jovanovic <petar.jovanovic@rt-rk.com>

c2eaf6c 2019-05-27 21:54:42 Romain Naour

sparc: remove asm constraint

uClibc-ng don't build with gcc 9.1 [1] due to a new check that
"catch illegal asm constraint usage" [2].
gcc 9.1 print this error:
"invalid hard register usage between earlyclobber operand and input operand"
The asm constraint is present in uClibc since it support sparc (back in 2002)[3].
Note: There is no such constraint is Glibc counterpart code [4].
[1] https://gitlab.com/kubu93/toolchains-builder/-/jobs/205435757
[2] https://github.com/gcc-mirror/gcc/commit/b782636f28f5c378897c238081d28d7a4a6ca578
[3] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=3b6d086531102b6d09ce852feb1e370d5dca3ce9
[4]
+https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/sysdep.h;h=981b2a26b7a91093f821c97876
+e55bc4be2d9f8a;hb=HEAD

423e490 2019-05-13 16:11:02 Max Filippov

preadv/pwritev: fix offset argument type

preadv/pwritev don't provide separate version for 64-bit wide off_t,
and default to 32-bit wide off_t, which results in a mismatch between
declaration and definition for user programs built with
-D_FILE_OFFSET_BITS=64.
Make offset argument of both functions __off64_t.
This fixes test misc/tst-preadvwritev on xtensa.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>

b56bd48 2019-05-13 16:11:01 Max Filippov

xtensa: don't use l32r opcode explicitly

xtensa assembler is capable of representing register loads with either
movi + addmi, l32r or const16, depending on the core configuration.
Don't use '.literal' and 'l32r' directly in the code, use 'movi' and let
the assembler relax them.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>