| Age | Commit message (Collapse) | Author | Files | Lines |
|
Addresses: https://github.com/util-linux/util-linux/issues/3641
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Replace them with a "Written by" or "Authors:" label.
Signed-off-by: Benno Schulenberg <bensberg@telfort.nl>
|
|
ul_path_vreadf_buffer already provides zero-termination and newline
trimming, so make use of it.
We now could read more than a single line, but the files this is used on
contain only a single line anyways.
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
|
|
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
|
|
ul_path_read_buffer already provides zero-termination and newline
trimming, so make use of it.
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
|
|
* 'fix' of https://github.com/DaanDeMeyer/util-linux:
Fix ul_path_read_buffer()
|
|
The current implementation cuts off the last character of the buffer
if there is no trailing newline.
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
(cherry picked from commit 9b47899495e229ace482afca9e14b9b95ef6fde9)
|
|
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
|
|
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
|
|
The function ul_prefix_fopen does not properly check for paths which are
too long. Since the only caller of ul_prefix_fopen can be easily
converted to ul_path_fopen, remove the function.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
|
|
Some programs like lscpu expect errno to be set if ul_path_cpuparse
fails.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
|
|
If fgets reads from a file starting with a NUL byte in ul_path_cpuparse,
then the check for newline leads to an out of boundary access.
Proof of Concept (compile with --enable-asan):
1. Prepare /tmp/poc with required files
```
$ install -d /tmp/poc/sys/devices/system/cpu
$ dd if=/dev/zero of=/tmp/poc/sys/devices/system/cpu/possible bs=1 count=1
$ install -D /dev/null /tmp/poc/proc/cpuinfo
```
2. Run lscpu with sysroot option
```
$ lscpu --sysroot /tmp/poc
=================================================================
==78238==ERROR: AddressSanitizer: heap-buffer-overflow
```
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
|
|
Variable-length-arrays are susceptible to security issues, avoid them.
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
|
|
This patch does not change any license of the affected files. Changes:
* add missing SPDX-License-Identifier lines for LGPL
* copy missing license lines from code (lib/) to header files (include/)
* use the same comment formatting
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Kernel 5.15 returns empty content for topology/thread_siblings on
aarch64 platform, which in conjunction of uninitialized `buf` memory
buffer results in the garbage:
(gdb) p buf
$14 = " @\377\367\177\000\000\000\275\000\347j\032\236"
This garbage is then being later consumed by underlying helper functions
like for example cpumask_parse() and this leads to the following crash
later:
in __libc_free (p=0x7ff7f67c00) at src/malloc/mallocng/free.c:105
in free (p=<optimized out>) at src/malloc/free.c:5
in add_cpuset_to_array (setsize=<optimized out>, set=<optimized out>, items=<optimized out>, ary=<optimized out>) at ../sys-utils/lscpu-topology.c:29
in cputype_read_topology (cxt=cxt@entry=0x7ff7fffe70, ct=0x4298a0) at ../sys-utils/lscpu-topology.c:153
in lscpu_read_topology (cxt=cxt@entry=0x7ff7fffe70) at ../sys-utils/lscpu-topology.c:629
in main (argc=1, argv=0x7ffffffdb8) at ../sys-utils/lscpu.c:1341
It looks like the problem is that current logic expects fgets() to set
errno on failure, but fgets() is not documented to do so and and neither
glibc nor musl set errno. So if errno was set to 0 before fgets() call,
the failure from fgets() is ignored and then invalid buffer is being
parsed.
Fixes: #1810
Suggested-by: Thomas Weißschuh <thomas@t-8ch.de>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Make sure we never call buf[rc - 1] for rc=0.
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
*** CID 374365: Null pointer dereferences (FORWARD_NULL)
/lib/path.c: 364 in ul_path_stat()
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
|
|
According to POSIX, readlink() makes no effort to null-terminate buffer
with the result. It seems better to hide this disadvantage in the
ul_path_...() API rather than assume buf[sz] = '\0' everywhere.
Reported-by: Reported-by: Jan Pazdziora <jpazdziora@redhat.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
This function allow to check that path_cxt is usable. Note that
ul_new_path() does not open the path.
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
* add ul_path_stat()
* make sure all paths for ul_path_..() functions are always
interpreted relatively to the context directory and prefix. This is
difference between ul_path_ API and standard libc "at" functions. We
do not use any exception for absolute paths. The reason is that we
need to read from prefixed paths although application assume absolute
path (/dev/sda1 means /prefix/dev/sda1 if a /prefix is defined).
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
ul_path_get_dirfd() returns negative number on error...
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
* always use errno from ul_path_mkpath()
* keep code simple and short as possible
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Remove duplicate code and keep only one implementation in
include/fileutils.h.
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Reference: https://github.com/codespell-project/codespell
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
|
|
It's really bad idea to use uint64_t (ul_path_write_u64(()) when write
signed number.
Addresses: https://github.com/karelzak/util-linux/issues/723
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
error: expression result unused [-Werror,-Wunused-value]
prefix = optarg, "failed to parse range start";
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
The goal is to avoid duplicate code in path.c and sysfs.c and make it
possible to define prefix for paths for all sysfs and procfs based
utils. Now we have /proc snapshots (for tests) for lscpu only. It
would be nice to have the same (for sysfs) for lsblk and another tools.
* very simple API to read numbers, strings and symlinks
* based on openat()
pc = ul_new_path("/sys/block/sda");
ul_path_read_u64(pc, &size, "size");
ul_path_read_u64(pc, &lsz, "queue/logical_block_size");
* printf-like API to generate paths, for example:
ul_path_readf_u64(pc, &num, "sda%d/size", partno)
* allow to define prefix to redirect hardcoded paths to another
location, for example:
pc = ul_new_path("/sys/block/sda");
ul_path_set_prefix(pc, "/my/regression/dump");
ul_path_read_u64(pc, &num, "size");
to read /my/regression/dump/sys/block/sda/size
* allow to extend the API by "dialects", for example for sysfs:
pc = ul_new_path(NULL);
sysfs_blkdev_init_path(pc, devno, NULL);
and use ul_path_* functions to read from @pc initialized by
sysfs_blkdev_init_path()
* add test_path binary
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Simply avoiding strdup(). Error handling improved.
This was the Clang Analyzer warning:
Memory Error, Use-after-free
sys-utils/lsmem.c:259:3: warning: Use of memory after it is freed
err(EXIT_FAILURE, _("Failed to open %s"), path);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
|
|
Do not operate on truncated/random paths. Note, path_strdup()
can now really return NULL, to be handled in next commit.
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
|
|
Before:
$ lscpu -s "$(tr '\0' 'x' < /dev/zero | head -c 10000)"
Segmentation fault (core dumped)
After:
$ lscpu -s "$(tr '\0' 'x' < /dev/zero | head -c 10000)"
lscpu: invalid argument to --sysroot: File name too long
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
|
|
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
|
|
Also improve the grammar of the comments and some neighbours.
Signed-off-by: Benno Schulenberg <bensberg@justemail.net>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Benno Schulenberg <bensberg@justemail.net>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
... and to have names compatible with lib/sysfs.c
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
- make taskset depend on cpu_set_t
- make cpuset.c optional for libcommon and lib/path.c
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
|
|
Signed-off-by: Petr Uzel <petr.uzel@suse.cz>
|
|
The COPYING and Documentation/licenses/COPYING* files are being
replaced by files from GNU web site.
http://www.gnu.org/licenses/gpl-2.0.txt
http://www.gnu.org/licenses/lgpl-2.1.txt
Postal addresses to FSF in other files are updated to match with the
address in license files.
Reference: http://lists.gnu.org/archive/html/freefont-announce/2005-04/msg00001.html
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
|
|
From: Heiko Carstens <heiko.carstens@de.ibm.com>
Since write() doesn't necessarily write the complete buffer with
one call we better use write_all() which takes care of this.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
|
|
Use the common path access functions. In order to simplify chcpu also implement
and use path_writestr() which writes a string to the path specified.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
|
|
A couple of these functions already have been copied to chcpu.c,
so it makes sense to move these functions into an own file.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
|