summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* utils: always define nl_debug_dpThomas Haller2024-04-222-9/+5
| | | | | | | | | | | Otherwise, whether libnl-3.so exports nl_debug_dp depends on NL_DEBUG. That is ugly. It also breaks the linker checking the symbol versioning file with the "--no-undefined-version" flag. Instead, always define it. It's small anyway. Reported-by: lch361 <lch361@skiff.com> See-also: https://github.com/thom311/libnl/pull/375
* core: always define statements for NL_DBG()Thomas Haller2024-04-223-14/+3
| | | | | | | | | | Conditionally defining to nothing, means that the compiler doesn't see the print statement without NL_DEBUG. In turn, we lack checking of the statement by the compiler. Instead, add an "if (NL_DEBUG)" around it. Since NL_DEBUG is a constant, the compiler will optimize out all the code of the statement, while still checking it.
* build: always define NL_DEBUGThomas Haller2024-04-226-10/+13
| | | | | | | | | | Checking conditional defines with #ifdef is error prone because we don't get a compiler warning when the define wrongly is missing. Instead, always define it to either 0 or 1. The benefit is also that now we can use NL_DEBUG in C (not only in the preprocessor).
* all: use defines for attributesThomas Haller2024-04-225-9/+9
| | | | We have those defines. Use them throughout.
* route/bison: include "nl-default.h" in lex/yacc filesThomas Haller2024-04-223-1/+6
| | | | | | | | | | | For building all of our source files, we should include first "config.h". This ensures that we have for example NL_DEBUG available. Actually, "config.h" is included by "nl-default.h". In turn this means, all our source files should first include "nl-default.h", which drags in a set of default headers. Fix the lex/yacc files for that.
* route: add support for layer 3 filtering on bridgesCordell O'Leary2024-04-033-0/+105
| | | | https://github.com/thom311/libnl/pull/373
* route: merge branch 'Cordell-O:main'Thomas Haller2024-02-297-8/+602
|\ | | | | | | https://github.com/thom311/libnl/pull/372
| * tests: add test for bridge vlan attributes.Cordell O'Leary2024-02-293-4/+135
| |
| * route: add support for vlan filtering on bridge ports.Cordell O'Leary2024-02-295-8/+402
| |
| * route: Add support to set ageing time for dynamic bridge table entriesCordell O'Leary2024-02-293-0/+69
|/
* tests: add unit test for `nl_addr_parse("default", AF_INET6, &addr6)`Thomas Haller2024-02-021-0/+8
|
* lib/xfrm: add missing #include <time.h>Aleksander Mazur2024-01-082-0/+2
| | | | | | https://github.com/thom311/libnl/issues/370 https://github.com/thom311/libnl/pull/371
* libnl-3.9.0 releaselibnl3_9_0Thomas Haller2023-12-044-3/+9
|
* include/linux-private: import 'seg6 local' headers from kernel treeKonstantin Kogdenko2023-12-045-0/+261
| | | | Add headers from 6995e2de6891c724bfeb2db33d7b87775f913ad1 (tag: v6.4).
* lib: remove unused assignment in nl_addr_parse()Thomas Haller2023-12-041-2/+0
| | | | | | | | | | | | Coverity warns about this. Avoid it. Error: CLANG_WARNING: [#def3] libnl-3.8.0/lib/addr.c:324:3: warning[deadcode.DeadStores]: Value stored to 'len' is never read # 322| !strcasecmp(str, "any")) { # 323| # 324|-> len = 0; # 325| # 326| switch (hint) {
* route/tc: avoid integer overflow in rtnl_tc_calc_cell_log()Thomas Haller2023-12-041-2/+2
| | | | | | | | | | | | Coverity doesn't like this. Workaround. Error: CPPCHECK_WARNING (CWE-190): [#def97] libnl-3.8.0/lib/route/tc.c:681: error[integerOverflow]: Signed integer overflow for expression '1<<i'. # 679| # 680| for (i = 0; i < 32; i++) # 681|-> if ((1 << i) == cell_size) # 682| return i; # 683|
* xfrm: return -NLE_MISSING_ATTR from xfrmnl_sa_get_auth_params()Thomas Haller2023-12-041-13/+10
| | | | | | Don't return -1, that is not an error code. Also, return early from function.
* xfrm: fix leaking usertemplate in xfrmnl_sp_parse()Thomas Haller2023-12-042-2/+9
| | | | Fixes: 49c20efaa783 ('xfrm: fix crashes in case of ENOMEM')
* socket: workaround coverity warning about time_t handlingThomas Haller2023-12-041-2/+20
| | | | | | | | | | | | | | | | | | | | | | | | Coverity really wants to warn if a time_t is cast to 32 bits. We use time() here to get (some very bad) randomness. The loss of the upper bits is the least of the problems. Work around the coverity warning by also the higher bits. Error: Y2K38_SAFETY (CWE-197): [#def12] libnl-3.8.0/lib/socket.c:76: store_truncates_time_t: A "time_t" value is stored in an integer with too few bits to accommodate it. The expression "time(NULL)" is cast to "uint32_t". # 74| # 75| if (idx_state == 0) { # 76|-> uint32_t t = (uint32_t) time(NULL); # 77| # 78| /* from time to time (on average each 2^15 calls), the idx_state will Error: Y2K38_SAFETY (CWE-197): [#def13] libnl-3.8.0/lib/socket.c:193: store_truncates_time_t: A "time_t" value is stored in an integer with too few bits to accommodate it. The expression "time(NULL)" is cast to "unsigned int". # 191| sk->s_local.nl_family = AF_NETLINK; # 192| sk->s_peer.nl_family = AF_NETLINK; # 193|-> sk->s_seq_next = (unsigned int) time(NULL); # 194| sk->s_seq_expect = sk->s_seq_next; # 195|
* github: update Fedora image and version for clang-formatThomas Haller2023-12-041-1/+1
| | | | | Update the Fedora container for github. In particular, this updates the used version of clang-format for formatting the C sources.
* clang-format: rework container scriptThomas Haller2023-12-022-31/+31
| | | | Build a container image for the code formatting, and run that.
* lib: fix signed overflow warning in nl_object_diff()Thomas Haller2023-12-011-1/+1
| | | | Coverity warns "Signed integer overflow for expression '1<<31'".
* socket: explicitly cast time() to uint32_tThomas Haller2023-12-011-2/+3
| | | | | | Coverity warns about this. Try to avoid the warning by casting. We only use time() to get some (very little) entropy. The cast is fine.
* src: fix leak in "nl-cls-add"Thomas Haller2023-12-011-1/+1
| | | | Not important, but coverity flags this. Avoid it.
* route/cls: add get/take wrappers for rtnl_act_append()Thomas Haller2023-12-016-24/+40
| | | | | | | | | | | | rtnl_act_append() either takes ownership of the argument, or does nothing (on error). This pattern is hard to get right. In the past, there were various bugs at this place. Add two wrappers _rtnl_act_append_get() and _rtnl_act_append_take() which consistently don't take ownership of the pointer or take it. Also, in functions like rtnl_flower_append_action() only set the mask after successfully modifying the data.
* route/cls: fix leak in error handling of rtnl_flower_append_action()Thomas Haller2023-12-011-1/+5
| | | | | | Using rtnl_act_append() correctly is hard. Fixes: ef46de143206 ('route/cls: add flower classifier')
* route: fix just introduced use-after-free in rtnl_act_parse()Thomas Haller2023-12-011-0/+2
| | | | Fixes: 105a6be10a5f ('route: use cleanup macro in rtnl_act_parse()')
* route: use cleanup macro in rtnl_act_parse()Thomas Haller2023-12-011-28/+19
|
* nl-aux-route: add cleanup macro for rtnl_act_put_all()Thomas Haller2023-12-011-0/+5
|
* base: add _NL_AUTO_DEFINE_FCN_INDIRECT0() macroThomas Haller2023-12-011-0/+8
| | | | | | | This is useful for a very special case. For a cleanup macro that calls rtnl_act_put_all(). In that case, we have a auto variable `struct rtnl_act *head`, but the cleanup function expects as argument `&head`.
* route: fix memleak in rtnl_act_parse()Thomas Haller2023-12-011-1/+1
| | | | | | | | | | | | | | | | | | | Coverity warns: Error: RESOURCE_LEAK (CWE-772): [#def2] libnl-3.8.0/lib/route/act.c:421: alloc_fn: Storage is returned from allocation function "rtnl_act_alloc". libnl-3.8.0/lib/route/act.c:421: var_assign: Assigning: "act" = storage returned from "rtnl_act_alloc()". libnl-3.8.0/lib/route/act.c:426: var_assign: Assigning: "tc" = "act". libnl-3.8.0/lib/route/act.c:438: noescape: Resource "tc" is not freed or pointed-to in "rtnl_tc_set_kind". libnl-3.8.0/lib/route/act.c:455: leaked_storage: Variable "tc" going out of scope leaks the storage it points to. libnl-3.8.0/lib/route/act.c:455: leaked_storage: Variable "act" going out of scope leaks the storage it points to. # 453| tc_act_stats_policy); # 454| if (err < 0) # 455|-> return err; # 456| # 457| if (tb3[TCA_STATS_BASIC]) { Fixes: 05bd6366387c ('add support for TC action statistics')
* base: don't use static array indices for buffer argument of _nl_inet_ntop()Thomas Haller2023-12-011-2/+1
| | | | | | | | | | | | Seems the static array indices can confuse coverity. I think coverity is wrong here, regardless, change it. libnl-3.8.0/include/base/nl-base-utils.h:683: overrun-buffer-arg: Overrunning buffer pointed to by "buf" of 16 bytes by passing it to a function which accesses it at byte offset 45 using argument "(addr_family == 2) ? 16 : 46" (which evaluates to 46). # 681| * and a suitably large buffer, it cannot. Assert for that. */ # 682| # 683|-> r = (char *)inet_ntop(addr_family, addr, buf, # 684| (addr_family == AF_INET) ? INET_ADDRSTRLEN : # 685| INET6_ADDRSTRLEN);
* route/can: implement can_device_statsJob Feikens2023-12-013-5/+58
| | | | | | | Adds the rtnl_link_can_get_device_stats function to get xstats of a CAN-bus link as a can_device_stats struct. https://github.com/thom311/libnl/pull/368
* github: build with "-fexceptions" CFLAGSThomas Haller2023-11-291-3/+3
| | | | | | | | | | | This seems good for our test builds. This can result in additional uninitialized variable warnings about autovariables with cleanup attribute. This flag is also enabled by default on Fedora package build ([1]). [1] https://src.fedoraproject.org/rpms/redhat-rpm-config//blob/rawhide/f/buildflags.md
* xfrm: erge branch 'th/xfrm-addr-cleanup'Thomas Haller2023-11-298-164/+155
|\ | | | | | | https://github.com/thom311/libnl/pull/367
| * xfrm: refactor error handling in XFRM parsingThomas Haller2023-11-293-140/+70
| | | | | | | | Use cleanup attribute and return-early.
| * include: add "nl-aux-xfrm" helpersThomas Haller2023-11-293-0/+45
| |
| * xfrm: fix crashes in case of ENOMEMThomas Haller2023-11-293-14/+51
| |
| * xfrm: refactor nl_addr_build() calls in XFRM codeThomas Haller2023-11-292-46/+12
| | | | | | | | Use _nl_addr_build() helper. No need for all this redundant code.
| * xfrm: use cleanup attribute for nl_addr in XFRM parsingThomas Haller2023-11-292-37/+31
| |
| * xfrm: fix error code for NLE_ENOMEM in xfrmnl_ae_parse()Thomas Haller2023-11-291-1/+1
| | | | | | | | | | | | | | These internal error codes are probably a bad idea. However, at least be consistent about it. Fixes: 77bbf2270ce7 ('xfrm: fix an unintialized return value on memory allocation error in xfrmnl_ae_parse()')
| * xfrm: fix parsing address in xfrmnl_ae_parse()Thomas Haller2023-11-291-2/+3
| | | | | | | | | | | | | | Passing a size of (sizeof (ae_id->saddr)) is wrong for IPv4. The size depends on the address family. Fixes: 917154470895 ('xfrm: add xfrm support')
| * nl-aux-core: add _nl_addr_build() helperThomas Haller2023-11-291-0/+7
| |
| * nl-base-utils: add _nl_addr_family_to_size() helperThomas Haller2023-11-291-0/+11
|/
* xfrm: merge branch 'spellingmistake:main'Thomas Haller2023-11-271-0/+10
|\ | | | | | | https://github.com/thom311/libnl/pull/366
| * xfrm: clear XFRM_SP_ATTR_TMPL when removing the last template from a policyThomas Egerer2023-11-271-0/+2
| | | | | | | | | | | | | | | | Leaving XFRM_SP_ATTR_TMPL active in the mask may not impose a problem but, when removing the last template from a policy, the value signifying attached templates should be cleared. Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com>
| * xfrm/sp: fix reference counters of sa selector/tmpl addressesThomas Egerer2023-11-271-0/+8
|/ | | | | | | | | | | | | | It's a similar issue as in commit 3f4f1dda, when calling xfrmnl_sp_parse, the refcount of the addresses for selectors and templates increases to two, as xfrmnl_sel_set_[s|d]addr and xfrmnl_user_tmpl_set_[s|d]addr add another reference to the address object. As only one of those refs is dropped in sel_destroy or xfrmnl_user_tmpl_free respectively the address objects' refcount will never drop to zero, causing a leak. Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com> Fixes: 917154470895 ('xfrm: add xfrm support')
* route/link: add bonding interface options set rtnl apisLokesh Dhoundiyal2023-10-303-0/+80
| | | | | | | [thaller@redhat.com: fixed wrong variable name in code and reworded commit message.] https://github.com/thom311/libnl/pull/363
* build: fix declaring special targets as ".PHONY"Thomas Haller2023-08-311-2/+6
|
* Makefile.am: avoid use of non-portable echo argumentsmainSam James2023-08-311-1/+1
| | | | | | | | | | | This fixes tests with a non-bash shell as /bin/sh (in this case, dash) which does not support `echo -e`. echo itself is portable, but not echo with any arguments. Use `printf` instead. Fixes: d9a1e0ce9c95 ('build: add "check-local-build-headers" test target to build public headers') https://github.com/thom311/libnl/pull/360