Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-12-18CMakeLists.txt: bump minimum cmake versionHEADmasterFelix Fietkau
Removes warnings and fixes rpath issues on macOS Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-12-04udebug: fix file descriptor initialization for __udebug_buf_mapFelix Fietkau
Pass the fd to __udebug_buf_map, set buf->fd only if mapping worked Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-12-04udebug: add mips specific quirkFelix Fietkau
On some MIPS systems, mmap addresses need to be aligned to multiple pages, in order to avoid issues with data cache aliases. Add an arch specific quirk to allocate memory in 32 KiB chunks and align addresses returned by mmap. Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-12-04udebug: add more checks for uninitialized buffersFelix Fietkau
Simplifies and fixes error handling Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-30udebug: wait for response after buffer add/removeFelix Fietkau
Fixes a race condition where freeing a buffer and immediately re-allocating and adding it would fail to pass the file descriptor to udebugd Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-30udebug: add inline helper function to test if a buffer is allocatedFelix Fietkau
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-29udebug: add functions for manipulating entry lengthFelix Fietkau
Can be used to reserve worst case length using udebug_entry_append, then setting the final length using udebug_entry_set_length Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-29link librt if needed for shm_openFelix Fietkau
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-28udebug: add ulog supportJohn Crispin
Make ulog able to also log via udebug. Signed-off-by: John Crispin <john@phrozen.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-28uloop: fix build using C++ compilersFelix Fietkau
Rename the 'private' field to 'priv' in order to avoid using a C++ keyword Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-27udebug: add udebug library codeFelix Fietkau
Copied and adapted from udebug.git Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-27uloop: reset flags after __uloop_fd_delete callFelix Fietkau
Fixes fd delete with kqueue, which relies on the previous flags value Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-27uloop: fix typo in signal handling reworkFelix Fietkau
Fixes procd issues Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-11-04uloop: properly initialize signal handler maskJo-Philipp Wich
The structure passed to `sigaction()` left it's `sa_mask` member uninitialized. Fixes: beb356b ("uloop: add support for user defined signal handlers") Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2023-11-02uloop: add support for user defined signal handlersJo-Philipp Wich
Reuse and extend the existing signal waker pipe mechanism to add user defined signal handling functionality to uloop. This commit introduces two new api functions `uloop_signal_add()` and `uloop_signal_remove()` along with a new structure type `uloop_signal` to allow adding and removing arbitrary signal handlers. Registered signal handlers are maintained in a linked list and matched by their signo member value which allows registering multiple handlers for the same signal numbers. Upon registering a new signal handler, the existing handler is saved in the `uloop_signal` structure. When removing the user defined signal handler, the original behavior is restored. The Lua binding has been updated as well to support the new signal handler mechanism. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2023-11-02uloop: add support for interval timersJo-Philipp Wich
So far, the only way to implement periodic interval timers was to use one-shot uloop_timeout timers which are rearmed within their completion callback immediately on expiration. While simple, this approach is not very precise and interval lengths will slowly drift over time, due to callback execution overhead, scheduling granularity etc. In order to make uloop provide stable and precise interval timer capabilities, this commit introduces a new `uloop_interval` structure along with the new related `uloop_interval_set()`, `uloop_interval_cancel()` and `uloop_interval_remaining()` api functions. Periodic timers are implemented using the timerfd facility an Linux and kqueue EVFILT_TIMER events on macOS/BSD. The Lua binding has been updated to include support for the new timer type as well. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
2023-05-23uloop: add support for integrating with a different event loopFelix Fietkau
- support reading the next timeout in order to determine the poll timeout - add a callback for fd add/delete/update Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-05-23uloop: fix uloop_run_timeoutFelix Fietkau
Avoid running infinite poll loop, fix timeout value Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-04-16blobmsg: Don't do at run-time what can be done at compile-timePhilip Prindeville
Repeatedly calling a run-time function like strlen() on an invariant value is inefficient, especially if that value can be computed once (at initialization) or better yet, computed at compile-time. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
2023-04-15jshn.sh: Add pretty-printing to json_dumpPhilip Prindeville
If a JSON file might be read by a human, say for debugging, it could be useful to pretty-print it. We do this in places by calling "json_dump -i" but it shouldn't be necessary to know the arguments to "jshn" (and indeed, that's not portable if we retool the underlying implementation). Conversely output that's ephemeral doesn't need to be pretty (say being piped as input to another command). Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
2023-03-08usock: fix poll return code checkFelix Fietkau
errno needs to be compared against EINTR/EAGAIN instead of the return code, and only if the return code is < 0. Signed-off-by: Felix Fietkau <nbd@nbd.name>
2023-01-03blobmsg: add blobmsg_parse_array_attrFelix Fietkau
Wrapper around blobmsg_parse_array, similar to blobmsg_parse_attr Signed-off-by: Felix Fietkau <nbd@nbd.name>
2022-11-23blobmsg: add blobmsg_parse_attr functionFelix Fietkau
This allows turning the common pattern of: blobmsg_parse(policy, ARRAY_SIZE(policy), tb, blobmsg_data(data), blobmsg_len(data)); into: blobmsg_parse_attr(policy, ARRAY_SIZE(policy), tb, data); Signed-off-by: Felix Fietkau <nbd@nbd.name>
2022-09-27jshn.sh: add json_add_fields function for adding multiple fields at onceFelix Fietkau
This simplifies passing extra object data as a function parameter Signed-off-by: Felix Fietkau <nbd@nbd.name>
2022-05-15blobmsg: work around false positive gcc -Warray-bounds warningsFelix Fietkau
Using the return value of blobmsg_name as input argument to strcpy can lead to warnings like these: error: 'strcpy' offset 6 from the object at 'cur' is out of the bounds of referenced subobject 'name' with type 'uint8_t[]' {aka 'unsigned char[]'} at offset 6 [-Werror=array-bounds] Fix this by replacing hdr->name with the equivalent hdr + 1 Signed-off-by: Felix Fietkau <nbd@nbd.name>
2022-05-12blobmsg: implicitly reserve space for 0-terminator in string buf allocFelix Fietkau
It may not be clear to all users of this API if the provided maxlen argument refers to the maximum string length or the maximum buffer size. In order to improve safety and convenience of this API, make it refer to the maximum string length. Signed-off-by: Felix Fietkau <nbd@nbd.name>
2022-04-29list.h: add container_of_safe macroFelix Fietkau
It works like container_of, except that it also deals with NULL pointers Signed-off-by: Felix Fietkau <nbd@nbd.name>
2022-02-10blob: clear buf->head when freeing a bufferFelix Fietkau
Prevents accidental silent use-after-free bugs Signed-off-by: Felix Fietkau <nbd@nbd.name>
2021-11-20vlist: define vlist_for_each_element_safeDaniel Golle
Yet another macro wrapper around the corresponding avl_* macro. This new macro makes it possible to iterate over vlists in ways which may have destructive consequences without being punished by segfault. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2021-11-04uloop: deprecate uloop_timeout_remainingStijn Tintel
We have uloop_timeout_remaining64 now. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> Acked-by: Jo-Philipp Wich <jo@mein.io> Acked-by: John Crispin <john@phrozen.org>
2021-11-04lua/uloop: use uloop_timeout_remaining64Stijn Tintel
We will deprecate uloop_timeout_remaining soon. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> Acked-by: Jo-Philipp Wich <jo@mein.io> Acked-by: John Crispin <john@phrozen.org>
2021-11-04uloop: add uloop_timeout_remaining64Stijn Tintel
This uses the same return type as tv_diff so we don't need to check for integer overflow. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> Acked-by: Jo-Philipp Wich <jo@mein.io> Acked-by: John Crispin <john@phrozen.org>
2021-11-04uloop: restore return type of uloop_timeout_remainingStijn Tintel
The uloop_timeout_remaining function is public and changing its return type breaks ABI. Change the return type back to int, and return INT_MIN or INT_MAX if the value returned by tv_diff would overflow integer. Fixes: be3dc7223a6d ("uloop: avoid integer overflow in tv_diff") Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> Acked-by: Jo-Philipp Wich <jo@mein.io> Acked-by: John Crispin <john@phrozen.org>
2021-11-04uloop: avoid integer overflow in tv_diffStijn Tintel
The tv_diff function can potentially overflow as soon as t2->tv_sec is larger than 2147483. This is very easily hit in ujail, after only 2147484 seconds of uptime, or 24.85 days. Improve the behaviour by changing the return type to int64_t. Fixes: FS#3943 Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
2021-08-19list.h: add a few missing iterator macrosFelix Fietkau
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2021-05-16json_script: fix unannotated fall-through warningFelix Fietkau
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2021-05-16utils.h: add fallthrough macroFelix Fietkau
This can be used to silence clang warnings about unannotated fall-through Signed-off-by: Felix Fietkau <nbd@nbd.name>
2021-04-29blob: fix exceeding maximum buffer lengthZefir Kurtisi
Currently there is no measure in place to prevent the blob buffer to exceed its maximum allowed length of 16MB. Continuously calling blob_add() will expand the buffer until it exceeds BLOB_ATTR_LEN_MASK and after that will return valid blob_attr pointer without increasing the buflen. A test program was added in the previous commit, this one fixes the issue by asserting that the new bufflen after grow does not exceed BLOB_ATTR_LEN_MASK. Signed-off-by: Zefir Kurtisi <zefir.kurtisi@gmail.com>
2021-04-29tests: add blob-buffer overflow testZefir Kurtisi
The blob buffer has no limitation in place to prevent buflen to exceed maximum size. This commit adds a test to demonstrate how a blob increases past the maximum allowd size of 16MB. It continuously adds chunks of 64KB and with the 255th one blob_add() returns a valid attribute pointer but the blob's buflen does not increase. The test is used to demonstrate the failure, which is fixed with a follow-up commit. Signed-off-by: Zefir Kurtisi <zefir.kurtisi@gmail.com> [adjusted test case for cram usage] Signed-off-by: Petr Štetiar <ynezz@true.cz>
2021-03-09libubox: tests: add more blobmsg/json test casesPeter Seiderer
* add mixed int/double tests * add blobmsg_cast_u64/blobmsg_cast_s64 tests Signed-off-by: Peter Seiderer <ps.report@gmx.net>
2021-03-03tests: cram: test_base64: really fix failing testsPetr Štetiar
Remove the checks for 'Aborted (core dumped)' message altogether as it's not reliable and not portable. References: https://gitlab.com/openwrt/project/libubox/-/jobs/1070226897 Signed-off-by: Petr Štetiar <ynezz@true.cz>
2021-03-03tests: cram: test_base64: fix failing testsPetr Štetiar
Seems like latest version of llvm compiler/sanitizer has changed behaviour during crash so `Aborted (core dumped)` is now printed to stdout. Fixes following issue: --- /builds/openwrt/project/libubox/tests/cram/test_base64.t +++ /builds/openwrt/project/libubox/tests/cram/test_base64.t.err @@ -49,9 +49,7 @@ b64_encode: Assertion `dest && targsize > 0' failed. $ test-b64_decode-san 2> output.log; check - Aborted (core dumped) b64_decode: Assertion `dest && targsize > 0' failed. $ test-b64_encode-san 2> output.log; check - Aborted (core dumped) b64_encode: Assertion `dest && targsize > 0' failed. References: https://gitlab.com/openwrt/project/libubox/-/jobs/1069840314 Signed-off-by: Petr Štetiar <ynezz@true.cz>
2021-03-02libubox: fix BLOBMSG_CAST_INT64 (do not override BLOBMSG_TYPE_DOUBLE)Peter Seiderer
Commit 9e52171 ('blobmsg: introduce BLOBMSG_CAST_INT64') broke blobmsg_parse() for BLOBMSG_TYPE_DOUBLE. This is because the enum definition leads to the following double define for BLOBMSG_CAST_INT64/BLOBMSG_TYPE_DOUBLE as value 8. Tested with: $ cat test-enum-001.c #include <stdio.h> enum blobmsg_type { BLOBMSG_TYPE_UNSPEC, BLOBMSG_TYPE_ARRAY, BLOBMSG_TYPE_TABLE, BLOBMSG_TYPE_STRING, BLOBMSG_TYPE_INT64, BLOBMSG_TYPE_INT32, BLOBMSG_TYPE_INT16, BLOBMSG_TYPE_INT8, BLOBMSG_TYPE_DOUBLE, __BLOBMSG_TYPE_LAST, BLOBMSG_TYPE_LAST = __BLOBMSG_TYPE_LAST - 1, BLOBMSG_TYPE_BOOL = BLOBMSG_TYPE_INT8, BLOBMSG_CAST_INT64, }; int main(int artc, char* argv[]) { printf("BLOBMSG_TYPE_UNSPEC: %d\n", BLOBMSG_TYPE_UNSPEC); printf("BLOBMSG_TYPE_ARRAY: %d\n", BLOBMSG_TYPE_ARRAY); printf("BLOBMSG_TYPE_TABLE: %d\n", BLOBMSG_TYPE_TABLE); printf("BLOBMSG_TYPE_STRING: %d\n", BLOBMSG_TYPE_STRING); printf("BLOBMSG_TYPE_INT64: %d\n", BLOBMSG_TYPE_INT64); printf("BLOBMSG_TYPE_INT32: %d\n", BLOBMSG_TYPE_INT32); printf("BLOBMSG_TYPE_INT16: %d\n", BLOBMSG_TYPE_INT16); printf("BLOBMSG_TYPE_INT8: %d\n", BLOBMSG_TYPE_INT8); printf("BLOBMSG_TYPE_DOUBLE: %d\n", BLOBMSG_TYPE_DOUBLE); printf("__BLOBMSG_TYPE_LAST: %d\n", __BLOBMSG_TYPE_LAST); printf("BLOBMSG_TYPE_LAST: %d\n", BLOBMSG_TYPE_LAST); printf("BLOBMSG_TYPE_BOOL: %d\n", BLOBMSG_TYPE_BOOL); printf("BLOBMSG_CAST_INT64: %d\n", BLOBMSG_CAST_INT64); return 0; } $ gcc test-enum-001.c $ ./a.out BLOBMSG_TYPE_UNSPEC: 0 BLOBMSG_TYPE_ARRAY: 1 BLOBMSG_TYPE_TABLE: 2 BLOBMSG_TYPE_STRING: 3 BLOBMSG_TYPE_INT64: 4 BLOBMSG_TYPE_INT32: 5 BLOBMSG_TYPE_INT16: 6 BLOBMSG_TYPE_INT8: 7 BLOBMSG_TYPE_DOUBLE: 8 __BLOBMSG_TYPE_LAST: 9 BLOBMSG_TYPE_LAST: 8 BLOBMSG_TYPE_BOOL: 7 BLOBMSG_CAST_INT64: 8 Fix this by changing the enum defintion to assign BLOBMSG_CAST_INT64 to the unique value 9. Signed-off-by: Peter Seiderer <ps.report@gmx.net>
2020-12-13utils: simplify mkdir_p boolean conditionsRui Salvaterra
Just a trivial simplification. Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
2020-12-13utils: introduce mkdir_pDaniel Golle
Add new utility function mkdir_p(char *path, mode_t mode) to replace the partially buggy implementations found accross fstools and procd. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2020-08-06blobmsg: introduce BLOBMSG_CAST_INT64Daniel Golle
When dealing with 64-bit integers in JSON documents, blobmsg_parse becomes useless as blobmsg-json only uses BLOBMSG_TYPE_INT64 if the value exceeds the range of a 32-bit integer, otherwise BLOBMSG_TYPE_INT32 is used. This is because blobmsg-json parses the JSON document ad-hoc without knowing the schema in advance and hence a result of the design of blobmsg-json (and the absence of JSON schema definitions). In practise, this made code less readable as instead of using blobmsg_parse() one had to to deal with *all* attributes manually just to catch fields which can be both, BLOBMSG_TYPE_INT32 or BLOBMSG_TYPE_INT64, but are always dealt with as uint64_t in code as they potentially could exceed the 32-bit range. To resolve this issue, introduce as special wildcard attribute type BLOBMSG_CAST_INT64 which should only be used in policies used by blobmsg_parse(). If used for an attribute in the policy, blobmsg_parse shall accept all integer types and allow the user to retrieve the value using the uint64_t blobmsg_cast_u64() and int64_t blobmsg_cast_s64() functions which is also introduced by this commit. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2020-07-11examples/lua: attempt to highlight some trapsKarl Palsson
Ran into some issues with my fd event being garbage collected. As I never wanted to call :delete, I had seen no reason to keep the returned object, as my callback and upvalues were still valid. Signed-off-by: Karl Palsson <karlp@etactica.com>
2020-07-11lua/uloop: fd_add: use absolute indices for argumentsKarl Palsson
Instead of having to adjust the index repeatedly as the stack is manipulated, use absolute addressing for the function arguments, so they stay the same throughout the call. Zero functional change, just subjectively easier to follow variables. Signed-off-by: Karl Palsson <karlp@etactica.com>
2020-07-11lua/uloop: make get_sock_fd capable of absolute addressesKarl Palsson
The original code required the use of relative addresses into the lua stack. It should accept either. Signed-off-by: Karl Palsson <karlp@etactica.com>
2020-07-11lua/uloop: fd_add() better args checkingKarl Palsson
Actually check for flags being valid, instead of simply ignoring the call if flags was zero. Use standard lua checks for the function argument, so you can get a normal "argument #2 was invalid, expected function, got xxx" instead of the vague, "invalid arg list" Signed-off-by: Karl Palsson <karlp@etactica.com>