public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
* [PATCH 0/3] Minimal fixes for issues reported by static checkers
@ 2023-11-07 12:28 Stefano Brivio
  2023-11-07 12:28 ` [PATCH 1/3] netlink: Sequence numbers are actually 32 bits wide Stefano Brivio
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Stefano Brivio @ 2023-11-07 12:28 UTC (permalink / raw)
  To: passt-dev; +Cc: David Gibson

These are reported by clang-tidy and Coverity after David's series,
I'm applying minimal fixes for them to go ahead and apply those
series, as we should really make a new release at this point.

They are all trivial, I'm posting them to ease reviews but I already
applied these.

Stefano Brivio (3):
  netlink: Sequence numbers are actually 32 bits wide
  port_fwd: Don't try to read bound ports from invalid file handles
  log: Match implicit va_start() with va_end() in vlogmsg()

 log.c      |  2 ++
 netlink.c  | 20 ++++++++++----------
 port_fwd.c |  3 +++
 3 files changed, 15 insertions(+), 10 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] netlink: Sequence numbers are actually 32 bits wide
  2023-11-07 12:28 [PATCH 0/3] Minimal fixes for issues reported by static checkers Stefano Brivio
@ 2023-11-07 12:28 ` Stefano Brivio
  2023-11-07 23:32   ` David Gibson
  2023-11-07 12:28 ` [PATCH 2/3] port_fwd: Don't try to read bound ports from invalid file handles Stefano Brivio
  2023-11-07 12:28 ` [PATCH 3/3] log: Match implicit va_start() with va_end() in vlogmsg() Stefano Brivio
  2 siblings, 1 reply; 6+ messages in thread
From: Stefano Brivio @ 2023-11-07 12:28 UTC (permalink / raw)
  To: passt-dev; +Cc: David Gibson

Harmless, as we use sequence numbers monotonically anyway, but now
clang-tidy reports:

/home/sbrivio/passt/netlink.c:155:7: error: format specifies type 'unsigned short' but the argument has type '__u32' (aka 'unsigned int') [clang-diagnostic-format,-warnings-as-errors]
                    nh->nlmsg_seq, seq);
                    ^
/home/sbrivio/passt/log.h:26:7: note: expanded from macro 'die'
                err(__VA_ARGS__);                                       \
                    ^~~~~~~~~~~
/home/sbrivio/passt/log.h:19:34: note: expanded from macro 'err'
                                        ^~~~~~~~~~~
Suppressed 222820 warnings (222816 in non-user code, 4 NOLINT).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning treated as error
make: *** [Makefile:255: clang-tidy] Error 1

Fixes: 9d4ab98d538f ("netlink: Add nl_do() helper for simple operations with error checking")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
 netlink.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/netlink.c b/netlink.c
index 768c6fd..6cc04a0 100644
--- a/netlink.c
+++ b/netlink.c
@@ -113,7 +113,7 @@ fail:
  *
  * Return: sequence number of request on success, terminates on error
  */
-static uint16_t nl_send(int s, void *req, uint16_t type,
+static uint32_t nl_send(int s, void *req, uint16_t type,
 		       uint16_t flags, ssize_t len)
 {
 	struct nlmsghdr *nh;
@@ -146,12 +146,12 @@ static uint16_t nl_send(int s, void *req, uint16_t type,
  *         > 0 @n if there are more responses to request @seq
  *     terminates if sequence numbers are out of sync
  */
-static int nl_status(const struct nlmsghdr *nh, ssize_t n, uint16_t seq)
+static int nl_status(const struct nlmsghdr *nh, ssize_t n, uint32_t seq)
 {
 	ASSERT(NLMSG_OK(nh, n));
 
 	if (nh->nlmsg_seq != seq)
-		die("netlink: Unexpected sequence number (%hu != %hu)",
+		die("netlink: Unexpected sequence number (%u != %u)",
 		    nh->nlmsg_seq, seq);
 
 	if (nh->nlmsg_type == NLMSG_DONE) {
@@ -229,7 +229,7 @@ static int nl_do(int s, void *req, uint16_t type, uint16_t flags, ssize_t len)
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, req, type, flags, len);
 	nl_foreach(nh, status, s, buf, seq)
@@ -259,7 +259,7 @@ unsigned int nl_get_ext_if(int s, sa_family_t af)
 	struct rtattr *rta;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 	size_t na;
 
 	seq = nl_send(s, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
@@ -313,7 +313,7 @@ int nl_route_get_def(int s, unsigned int ifi, sa_family_t af, void *gw)
 	bool found = false;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
 	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWROUTE) {
@@ -438,7 +438,7 @@ int nl_route_dup(int s_src, unsigned int ifi_src,
 	unsigned dup_routes = 0;
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
-	uint16_t seq;
+	uint32_t seq;
 	unsigned i;
 
 	seq = nl_send(s_src, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
@@ -550,7 +550,7 @@ int nl_addr_get(int s, unsigned int ifi, sa_family_t af,
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, &req, RTM_GETADDR, NLM_F_DUMP, sizeof(req));
 	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWADDR) {
@@ -674,7 +674,7 @@ int nl_addr_dup(int s_src, unsigned int ifi_src,
 	char buf[NLBUFSIZ];
 	struct nlmsghdr *nh;
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 	int rc = 0;
 
 	seq = nl_send(s_src, &req, RTM_GETADDR, NLM_F_DUMP, sizeof(req));
@@ -729,7 +729,7 @@ int nl_link_get_mac(int s, unsigned int ifi, void *mac)
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, &req, RTM_GETLINK, 0, sizeof(req));
 	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWLINK) {
-- 
@@ -113,7 +113,7 @@ fail:
  *
  * Return: sequence number of request on success, terminates on error
  */
-static uint16_t nl_send(int s, void *req, uint16_t type,
+static uint32_t nl_send(int s, void *req, uint16_t type,
 		       uint16_t flags, ssize_t len)
 {
 	struct nlmsghdr *nh;
@@ -146,12 +146,12 @@ static uint16_t nl_send(int s, void *req, uint16_t type,
  *         > 0 @n if there are more responses to request @seq
  *     terminates if sequence numbers are out of sync
  */
-static int nl_status(const struct nlmsghdr *nh, ssize_t n, uint16_t seq)
+static int nl_status(const struct nlmsghdr *nh, ssize_t n, uint32_t seq)
 {
 	ASSERT(NLMSG_OK(nh, n));
 
 	if (nh->nlmsg_seq != seq)
-		die("netlink: Unexpected sequence number (%hu != %hu)",
+		die("netlink: Unexpected sequence number (%u != %u)",
 		    nh->nlmsg_seq, seq);
 
 	if (nh->nlmsg_type == NLMSG_DONE) {
@@ -229,7 +229,7 @@ static int nl_do(int s, void *req, uint16_t type, uint16_t flags, ssize_t len)
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, req, type, flags, len);
 	nl_foreach(nh, status, s, buf, seq)
@@ -259,7 +259,7 @@ unsigned int nl_get_ext_if(int s, sa_family_t af)
 	struct rtattr *rta;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 	size_t na;
 
 	seq = nl_send(s, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
@@ -313,7 +313,7 @@ int nl_route_get_def(int s, unsigned int ifi, sa_family_t af, void *gw)
 	bool found = false;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
 	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWROUTE) {
@@ -438,7 +438,7 @@ int nl_route_dup(int s_src, unsigned int ifi_src,
 	unsigned dup_routes = 0;
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
-	uint16_t seq;
+	uint32_t seq;
 	unsigned i;
 
 	seq = nl_send(s_src, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
@@ -550,7 +550,7 @@ int nl_addr_get(int s, unsigned int ifi, sa_family_t af,
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, &req, RTM_GETADDR, NLM_F_DUMP, sizeof(req));
 	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWADDR) {
@@ -674,7 +674,7 @@ int nl_addr_dup(int s_src, unsigned int ifi_src,
 	char buf[NLBUFSIZ];
 	struct nlmsghdr *nh;
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 	int rc = 0;
 
 	seq = nl_send(s_src, &req, RTM_GETADDR, NLM_F_DUMP, sizeof(req));
@@ -729,7 +729,7 @@ int nl_link_get_mac(int s, unsigned int ifi, void *mac)
 	struct nlmsghdr *nh;
 	char buf[NLBUFSIZ];
 	ssize_t status;
-	uint16_t seq;
+	uint32_t seq;
 
 	seq = nl_send(s, &req, RTM_GETLINK, 0, sizeof(req));
 	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWLINK) {
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] port_fwd: Don't try to read bound ports from invalid file handles
  2023-11-07 12:28 [PATCH 0/3] Minimal fixes for issues reported by static checkers Stefano Brivio
  2023-11-07 12:28 ` [PATCH 1/3] netlink: Sequence numbers are actually 32 bits wide Stefano Brivio
@ 2023-11-07 12:28 ` Stefano Brivio
  2023-11-07 12:28 ` [PATCH 3/3] log: Match implicit va_start() with va_end() in vlogmsg() Stefano Brivio
  2 siblings, 0 replies; 6+ messages in thread
From: Stefano Brivio @ 2023-11-07 12:28 UTC (permalink / raw)
  To: passt-dev; +Cc: David Gibson

This is a minimal fix for what would be reported by Coverity as
"Improper use of negative value" (CWE-394): port_fwd_init() doesn't
guarantee that all the pre-opened file handles are actually valid.

We should probably warn on failing open() and open_in_ns() in
port_fwd_init(), too, but that's outside the scope of this minimal
fix.

Before commit 5a0485425bc9 ("port_fwd: Pre-open /proc/net/* files
rather than on-demand"), we used to have a single open() call and
a check after it.

Fixes: 5a0485425bc9 ("port_fwd: Pre-open /proc/net/* files rather than on-demand")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
 port_fwd.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/port_fwd.c b/port_fwd.c
index fc4d5cb..eac8d2f 100644
--- a/port_fwd.c
+++ b/port_fwd.c
@@ -45,6 +45,9 @@ static void procfs_scan_listen(int fd, unsigned int lstate,
 	unsigned int state;
 	char *line;
 
+	if (fd < 0)
+		return;
+
 	if (lseek(fd, 0, SEEK_SET)) {
 		warn("lseek() failed on /proc/net file: %s", strerror(errno));
 		return;
-- 
@@ -45,6 +45,9 @@ static void procfs_scan_listen(int fd, unsigned int lstate,
 	unsigned int state;
 	char *line;
 
+	if (fd < 0)
+		return;
+
 	if (lseek(fd, 0, SEEK_SET)) {
 		warn("lseek() failed on /proc/net file: %s", strerror(errno));
 		return;
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] log: Match implicit va_start() with va_end() in vlogmsg()
  2023-11-07 12:28 [PATCH 0/3] Minimal fixes for issues reported by static checkers Stefano Brivio
  2023-11-07 12:28 ` [PATCH 1/3] netlink: Sequence numbers are actually 32 bits wide Stefano Brivio
  2023-11-07 12:28 ` [PATCH 2/3] port_fwd: Don't try to read bound ports from invalid file handles Stefano Brivio
@ 2023-11-07 12:28 ` Stefano Brivio
  2023-11-07 23:31   ` David Gibson
  2 siblings, 1 reply; 6+ messages in thread
From: Stefano Brivio @ 2023-11-07 12:28 UTC (permalink / raw)
  To: passt-dev; +Cc: David Gibson

According to C99, 7.15.1:

  Each invocation of the va_start and va_copy macros shall be matched
  by a corresponding invocation of the va_end macro in the same
  function

and the same applies to C11. I still have to come across a platform
where va_end() actually does something, but thus spake the standard.
This would be reported by Coverity as "Missing varargs init or
cleanup" (CWE-573).

Fixes: c0426ff10bc9 ("log: Add vlogmsg()")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
 log.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/log.c b/log.c
index 95c4fa4..b206f72 100644
--- a/log.c
+++ b/log.c
@@ -67,6 +67,8 @@ void vlogmsg(int pri, const char *format, va_list ap)
 			logfile_write(pri, format, ap2);
 		else if (!(setlogmask(0) & LOG_MASK(LOG_DEBUG)))
 			passt_vsyslog(pri, format, ap2);
+
+		va_end(ap2);
 	}
 
 	if ((setlogmask(0) & LOG_MASK(LOG_DEBUG) && log_file == -1) ||
-- 
@@ -67,6 +67,8 @@ void vlogmsg(int pri, const char *format, va_list ap)
 			logfile_write(pri, format, ap2);
 		else if (!(setlogmask(0) & LOG_MASK(LOG_DEBUG)))
 			passt_vsyslog(pri, format, ap2);
+
+		va_end(ap2);
 	}
 
 	if ((setlogmask(0) & LOG_MASK(LOG_DEBUG) && log_file == -1) ||
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] log: Match implicit va_start() with va_end() in vlogmsg()
  2023-11-07 12:28 ` [PATCH 3/3] log: Match implicit va_start() with va_end() in vlogmsg() Stefano Brivio
@ 2023-11-07 23:31   ` David Gibson
  0 siblings, 0 replies; 6+ messages in thread
From: David Gibson @ 2023-11-07 23:31 UTC (permalink / raw)
  To: Stefano Brivio; +Cc: passt-dev

[-- Attachment #1: Type: text/plain, Size: 1351 bytes --]

On Tue, Nov 07, 2023 at 01:28:33PM +0100, Stefano Brivio wrote:
> According to C99, 7.15.1:
> 
>   Each invocation of the va_start and va_copy macros shall be matched
>   by a corresponding invocation of the va_end macro in the same
>   function
> 
> and the same applies to C11. I still have to come across a platform
> where va_end() actually does something, but thus spake the standard.
> This would be reported by Coverity as "Missing varargs init or
> cleanup" (CWE-573).

Oops.  I'm pretty sure this one will cause real problems on some
platforms.  Well caught.

> Fixes: c0426ff10bc9 ("log: Add vlogmsg()")
> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
> ---
>  log.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/log.c b/log.c
> index 95c4fa4..b206f72 100644
> --- a/log.c
> +++ b/log.c
> @@ -67,6 +67,8 @@ void vlogmsg(int pri, const char *format, va_list ap)
>  			logfile_write(pri, format, ap2);
>  		else if (!(setlogmask(0) & LOG_MASK(LOG_DEBUG)))
>  			passt_vsyslog(pri, format, ap2);
> +
> +		va_end(ap2);
>  	}
>  
>  	if ((setlogmask(0) & LOG_MASK(LOG_DEBUG) && log_file == -1) ||

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] netlink: Sequence numbers are actually 32 bits wide
  2023-11-07 12:28 ` [PATCH 1/3] netlink: Sequence numbers are actually 32 bits wide Stefano Brivio
@ 2023-11-07 23:32   ` David Gibson
  0 siblings, 0 replies; 6+ messages in thread
From: David Gibson @ 2023-11-07 23:32 UTC (permalink / raw)
  To: Stefano Brivio; +Cc: passt-dev

[-- Attachment #1: Type: text/plain, Size: 4701 bytes --]

On Tue, Nov 07, 2023 at 01:28:31PM +0100, Stefano Brivio wrote:
> Harmless, as we use sequence numbers monotonically anyway, but now
> clang-tidy reports:
> 
> /home/sbrivio/passt/netlink.c:155:7: error: format specifies type 'unsigned short' but the argument has type '__u32' (aka 'unsigned int') [clang-diagnostic-format,-warnings-as-errors]
>                     nh->nlmsg_seq, seq);
>                     ^
> /home/sbrivio/passt/log.h:26:7: note: expanded from macro 'die'
>                 err(__VA_ARGS__);                                       \
>                     ^~~~~~~~~~~
> /home/sbrivio/passt/log.h:19:34: note: expanded from macro 'err'
>                                         ^~~~~~~~~~~
> Suppressed 222820 warnings (222816 in non-user code, 4 NOLINT).
> Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
> 1 warning treated as error
> make: *** [Makefile:255: clang-tidy] Error 1

Hrm.  I wonder why clang-tidy didn't find this one for me :/

> Fixes: 9d4ab98d538f ("netlink: Add nl_do() helper for simple operations with error checking")
> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
> ---
>  netlink.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/netlink.c b/netlink.c
> index 768c6fd..6cc04a0 100644
> --- a/netlink.c
> +++ b/netlink.c
> @@ -113,7 +113,7 @@ fail:
>   *
>   * Return: sequence number of request on success, terminates on error
>   */
> -static uint16_t nl_send(int s, void *req, uint16_t type,
> +static uint32_t nl_send(int s, void *req, uint16_t type,
>  		       uint16_t flags, ssize_t len)
>  {
>  	struct nlmsghdr *nh;
> @@ -146,12 +146,12 @@ static uint16_t nl_send(int s, void *req, uint16_t type,
>   *         > 0 @n if there are more responses to request @seq
>   *     terminates if sequence numbers are out of sync
>   */
> -static int nl_status(const struct nlmsghdr *nh, ssize_t n, uint16_t seq)
> +static int nl_status(const struct nlmsghdr *nh, ssize_t n, uint32_t seq)
>  {
>  	ASSERT(NLMSG_OK(nh, n));
>  
>  	if (nh->nlmsg_seq != seq)
> -		die("netlink: Unexpected sequence number (%hu != %hu)",
> +		die("netlink: Unexpected sequence number (%u != %u)",
>  		    nh->nlmsg_seq, seq);
>  
>  	if (nh->nlmsg_type == NLMSG_DONE) {
> @@ -229,7 +229,7 @@ static int nl_do(int s, void *req, uint16_t type, uint16_t flags, ssize_t len)
>  	struct nlmsghdr *nh;
>  	char buf[NLBUFSIZ];
>  	ssize_t status;
> -	uint16_t seq;
> +	uint32_t seq;
>  
>  	seq = nl_send(s, req, type, flags, len);
>  	nl_foreach(nh, status, s, buf, seq)
> @@ -259,7 +259,7 @@ unsigned int nl_get_ext_if(int s, sa_family_t af)
>  	struct rtattr *rta;
>  	char buf[NLBUFSIZ];
>  	ssize_t status;
> -	uint16_t seq;
> +	uint32_t seq;
>  	size_t na;
>  
>  	seq = nl_send(s, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
> @@ -313,7 +313,7 @@ int nl_route_get_def(int s, unsigned int ifi, sa_family_t af, void *gw)
>  	bool found = false;
>  	char buf[NLBUFSIZ];
>  	ssize_t status;
> -	uint16_t seq;
> +	uint32_t seq;
>  
>  	seq = nl_send(s, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
>  	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWROUTE) {
> @@ -438,7 +438,7 @@ int nl_route_dup(int s_src, unsigned int ifi_src,
>  	unsigned dup_routes = 0;
>  	struct nlmsghdr *nh;
>  	char buf[NLBUFSIZ];
> -	uint16_t seq;
> +	uint32_t seq;
>  	unsigned i;
>  
>  	seq = nl_send(s_src, &req, RTM_GETROUTE, NLM_F_DUMP, sizeof(req));
> @@ -550,7 +550,7 @@ int nl_addr_get(int s, unsigned int ifi, sa_family_t af,
>  	struct nlmsghdr *nh;
>  	char buf[NLBUFSIZ];
>  	ssize_t status;
> -	uint16_t seq;
> +	uint32_t seq;
>  
>  	seq = nl_send(s, &req, RTM_GETADDR, NLM_F_DUMP, sizeof(req));
>  	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWADDR) {
> @@ -674,7 +674,7 @@ int nl_addr_dup(int s_src, unsigned int ifi_src,
>  	char buf[NLBUFSIZ];
>  	struct nlmsghdr *nh;
>  	ssize_t status;
> -	uint16_t seq;
> +	uint32_t seq;
>  	int rc = 0;
>  
>  	seq = nl_send(s_src, &req, RTM_GETADDR, NLM_F_DUMP, sizeof(req));
> @@ -729,7 +729,7 @@ int nl_link_get_mac(int s, unsigned int ifi, void *mac)
>  	struct nlmsghdr *nh;
>  	char buf[NLBUFSIZ];
>  	ssize_t status;
> -	uint16_t seq;
> +	uint32_t seq;
>  
>  	seq = nl_send(s, &req, RTM_GETLINK, 0, sizeof(req));
>  	nl_foreach_oftype(nh, status, s, buf, seq, RTM_NEWLINK) {

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-11-08  1:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-07 12:28 [PATCH 0/3] Minimal fixes for issues reported by static checkers Stefano Brivio
2023-11-07 12:28 ` [PATCH 1/3] netlink: Sequence numbers are actually 32 bits wide Stefano Brivio
2023-11-07 23:32   ` David Gibson
2023-11-07 12:28 ` [PATCH 2/3] port_fwd: Don't try to read bound ports from invalid file handles Stefano Brivio
2023-11-07 12:28 ` [PATCH 3/3] log: Match implicit va_start() with va_end() in vlogmsg() Stefano Brivio
2023-11-07 23:31   ` David Gibson

Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).