opnsense-src/lib/libc
Konstantin Belousov f81e5b2d9b Fix several buffer overflows in realpath(3).
- The statement "left_len -= s - left;" does not take the slash into
  account if one was found. This results in the invariant
  "left[left_len] == '\0'" being violated (and possible buffer
  overflows). The patch replaces the variable "s" with a size_t
  "next_token_len" for more clarity.
- "slen" from readlink(2) can be 0 when encountering empty
  symlinks. Then, further down, "symlink[slen - 1]" underflows the
  buffer. When slen == 0, realpath(3) should probably return ENOENT
  (http://austingroupbugs.net/view.php?id=825,
  https://lwn.net/Articles/551224/).

Some other minor issues:
- The condition "resolved_len >= PATH_MAX" cannot be true.
- Similarly, "s - left >= sizeof(next_token)" cannot be true, as long
  as "sizeof(next_token) >= sizeof(left)".
- Return ENAMETOOLONG when a resolved symlink from readlink(2) is too
  long for the symlink buffer (instead of just truncating it).
- "resolved_len > 1" below the call to readlink(2) is always true as
  "strlcat(resolved, next_token, PATH_MAX);" always results in a
  string of length > 1. Also, "resolved[resolved_len - 1] = '\0';" is
  not needed; there can never be a trailing slash here.
- The truncation check for "strlcat(symlink, left, sizeof(symlink));"
  should be against "sizeof(symlink)" (the third argument to strlcat)
  instead of "sizeof(left)".

Submitted by:	Jan Kokemц╪ller <jan.kokemueller@gmail.com>
PR:	219154
MFC after:	2 weeks
2017-05-15 17:14:53 +00:00
..
aarch64 Do not use b.cs instruction to jump to cerror. 2017-04-07 22:58:20 +00:00
amd64 Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
arm Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
capability Replace dot-dot relative pathing with SRCTOP-relative paths where possible 2017-01-20 03:23:24 +00:00
compat-43 Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
db Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
gdtoa For now, compile all of contrib/gdtoa without requiring strict aliasing, 2017-02-13 20:13:29 +00:00
gen glob: Fix comment about collapsing asterisks after r317749. 2017-05-07 19:52:56 +00:00
gmon Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
i386 Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
iconv libc: provide some bounds-checking through reallocarray(3). 2017-03-12 16:03:34 +00:00
include Implement the memset_s(3) function as specified by the C11 ISO/IEC 2017-03-30 04:57:26 +00:00
inet libc: remove use of archaic __P() macro 2017-03-30 01:03:07 +00:00
isc libc: do not include <sys/types.h> where <sys/param.h> was already included 2016-04-18 21:05:15 +00:00
locale Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
md Replace dot-dot relative pathing with SRCTOP-relative paths where possible 2017-01-20 03:23:24 +00:00
mips Replace SOFTFLOAT with __mips_soft_float, which gcc/clang define for us. 2017-03-16 21:05:21 +00:00
nameser libc: spelling fixes. 2016-04-30 01:24:24 +00:00
net Remove the NATM framework including the en(4), fatm(4), hatm(4), and 2017-04-24 21:21:49 +00:00
nls Use current locale (f.e. set by thread). It was global locale always 2016-08-24 16:44:27 +00:00
posix1e Replace dot-dot relative pathing with SRCTOP-relative paths where possible 2017-01-20 03:23:24 +00:00
powerpc Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
powerpc64 Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
powerpcspe Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
quad Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
regex Correct an out-of-bounds read in regcomp when the RE is bad. 2017-05-02 21:20:27 +00:00
resolv Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
riscv Use unconditional jr (jump register) so cerror relocation offset fits. 2017-04-27 22:40:39 +00:00
rpc Support clnt_raw's use of FD_SETSIZE as a fake file descriptor. 2017-05-01 20:04:07 +00:00
secure libc: do not include <sys/types.h> where <sys/param.h> was already included 2016-04-18 21:05:15 +00:00
softfloat Add full softfloat and hardfloat support for RISC-V. 2016-11-16 15:21:32 +00:00
sparc64 Correct an misunderstanding of MDSRCS. 2017-03-02 17:07:28 +00:00
stdio libc: provide some bounds-checking through reallocarray(3). 2017-03-12 16:03:34 +00:00
stdlib Fix several buffer overflows in realpath(3). 2017-05-15 17:14:53 +00:00
stdtime Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
string Fix strcoll_l disagreeing with strxfrm by reworking the forward order case in 2017-04-16 19:12:07 +00:00
sys Provide a freebsd32 implementation of sigqueue() 2017-05-05 18:49:39 +00:00
tests libc glob: Avoid pathological exponential behavior 2017-05-03 15:55:29 +00:00
uuid libc: replace 0 with NULL for pointers. 2016-04-10 19:33:58 +00:00
x86/sys Remove unneeded variable initialization from r314319. 2017-02-26 22:15:39 +00:00
xdr libc/xdr: unsign some loop indexes. 2016-05-06 16:03:40 +00:00
yp Use on crypto.x and rpc.x from the source tree. 2016-06-28 19:53:16 +00:00
libc.ldscript
libc_nossp.ldscript Add different libc ldscript: the one without libssp -- 2016-10-12 13:19:21 +00:00
Makefile Replace dot-dot relative pathing with SRCTOP-relative paths where possible 2017-01-20 03:23:24 +00:00
Makefile.depend DIRDEPS_BUILD: Regenerate without local dependencies. 2016-02-24 17:20:11 +00:00
Versions.def Create namespace for the symbols added during 12-CURRENT cycle. 2016-08-06 13:28:58 +00:00