Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package passt for openSUSE:Factory checked 
in at 2025-06-18 22:28:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/passt (Old)
 and      /work/SRC/openSUSE:Factory/.passt.new.19631 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "passt"

Wed Jun 18 22:28:43 2025 rev:28 rq:1286646 version:20250611.0293c6f

Changes:
--------
--- /work/SRC/openSUSE:Factory/passt/passt.changes      2025-05-20 
09:31:22.000392131 +0200
+++ /work/SRC/openSUSE:Factory/.passt.new.19631/passt.changes   2025-06-18 
22:28:52.015974460 +0200
@@ -1,0 +2,25 @@
+Mon Jun 16 13:44:00 UTC 2025 - [email protected]
+
+- Update to version 20250611.0293c6f:
+  * fedora: Hide restorecon(8) errors in post-transaction scriptlet
+  * fedora: Add container-selinux as dependency for passt-selinux
+  * flow, repair: Proper error handling for missing passt-repair helper on 
target
+  * fedora: Depend on SELinux tools and policy version, drop circular 
dependency
+  * fedora: Call %selinux_modules_* macros only once
+  * conf: flush stdout before early exit
+  * passt-repair: Fix missing newlines in error messages
+  * Correct various function comment headers
+  * tap: Avoid bogus missingReturn cppcheck warning in tap_l2_max_len()
+  * fedora: Separately restore context for /run/user in %posttrans selinux
+  * selinux: Transition to pasta_t in containers
+  * iov: Standardize function comment headers
+  * virtio: Correct and align comment headers
+  * vhost_user: Correct and align function comment headers
+  * codespell: Correct typos in comments and error message
+  * test: Display count of skipped tests in status and summary
+  * flow: Fix clang error (clang-analyzer-security.PointerSub)
+  * ndp: Fix Clang analyzer warning (clang-analyzer-security.PointerSub)
+  * virtio: Fix Clang warning (bugprone-sizeof-expression, cert-arr39-c)
+  * dhcpv6: fix GCC error (unterminated-string-initialization)
+
+-------------------------------------------------------------------

Old:
----
  passt-20250512.8ec1341.tar.zst

New:
----
  passt-20250611.0293c6f.tar.zst

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ passt.spec ++++++
--- /var/tmp/diff_new_pack.rszGVM/_old  2025-06-18 22:28:52.511994968 +0200
+++ /var/tmp/diff_new_pack.rszGVM/_new  2025-06-18 22:28:52.511994968 +0200
@@ -45,7 +45,7 @@
 
 %global selinuxtype targeted
 Name:           passt
-Version:        20250512.8ec1341
+Version:        20250611.0293c6f
 Release:        0
 Summary:        User-mode networking daemons for virtual machines and 
namespaces
 License:        GPL-2.0-or-later AND BSD-3-Clause

++++++ _service ++++++
--- /var/tmp/diff_new_pack.rszGVM/_old  2025-06-18 22:28:52.551996622 +0200
+++ /var/tmp/diff_new_pack.rszGVM/_new  2025-06-18 22:28:52.555996787 +0200
@@ -4,7 +4,7 @@
     <param name="scm">git</param>
     <param name="changesgenerate">enable</param>
     <param name="versionformat">%cs.%h</param>
-    <param name="revision">2025_05_12.8ec1341</param>
+    <param name="revision">2025_06_11.0293c6f</param>
   </service>
   <service mode="manual" name="recompress">
     <param name="file">*.tar</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.rszGVM/_old  2025-06-18 22:28:52.575997614 +0200
+++ /var/tmp/diff_new_pack.rszGVM/_new  2025-06-18 22:28:52.579997780 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://passt.top/passt</param>
-              <param 
name="changesrevision">8ec134109eb136432a29bdf5a14f8b1fd4e46208</param></service></servicedata>
+              <param 
name="changesrevision">0293c6f4a316baa561a9b43388906707f8cf7e81</param></service></servicedata>
 (No newline at EOF)
 

++++++ passt-20250512.8ec1341.tar.zst -> passt-20250611.0293c6f.tar.zst ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/conf.c 
new/passt-20250611.0293c6f/conf.c
--- old/passt-20250512.8ec1341/conf.c   2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/conf.c   2025-06-11 16:24:50.000000000 +0200
@@ -975,6 +975,7 @@
                "    SPEC is as described for TCP above\n"
                "    default: none\n");
 
+       (void)fflush(f);
        _exit(status);
 
 pasta_opts:
@@ -1029,6 +1030,7 @@
                "  --ns-mac-addr ADDR   Set MAC address on tap interface\n"
                "  --no-splice          Disable inbound socket splicing\n");
 
+       (void)fflush(f);
        _exit(status);
 }
 
@@ -1358,7 +1360,7 @@
 }
 
 /**
- * parse_mac - Parse a MAC address from a string
+ * parse_mac() - Parse a MAC address from a string
  * @mac:       Binary MAC address, initialised on success
  * @str:       String to parse
  *
@@ -1594,6 +1596,7 @@
                        FPRINTF(stdout,
                                c->mode == MODE_PASTA ? "pasta " : "passt ");
                        FPRINTF(stdout, VERSION_BLOB);
+                       (void)fflush(stdout);
                        _exit(EXIT_SUCCESS);
                case 15:
                        ret = snprintf(c->ip4.ifname_out,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/contrib/fedora/passt.spec 
new/passt-20250611.0293c6f/contrib/fedora/passt.spec
--- old/passt-20250512.8ec1341/contrib/fedora/passt.spec        2025-05-12 
21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/contrib/fedora/passt.spec        2025-06-11 
16:24:50.000000000 +0200
@@ -9,6 +9,7 @@
 
 %global git_hash {{{ git_head }}}
 %global selinuxtype targeted
+%global selinux_policy_version 41.41
 
 Name:          passt
 Version:       {{{ git_version }}}
@@ -33,15 +34,19 @@
 namespace, without the need to create further interfaces on the host, hence not
 requiring any capabilities or privileges.
 
-%package    selinux
-BuildArch:  noarch
-Summary:    SELinux support for passt and pasta
-Requires:   %{name} = %{version}-%{release}
-Requires:   selinux-policy
-Requires(post): %{name}
-Requires(post): policycoreutils
-Requires(preun): %{name}
-Requires(preun): policycoreutils
+%package               selinux
+BuildArch:             noarch
+Summary:               SELinux support for passt and pasta
+Requires:              selinux-policy-%{selinuxtype}
+Requires:              container-selinux
+Requires(post):                selinux-policy-%{selinuxtype}
+Requires(post):                container-selinux
+Requires(post):                policycoreutils
+Requires(post):                libselinux-utils
+Requires(preun):       policycoreutils
+BuildRequires:         selinux-policy-devel
+BuildRequires:         pkgconfig(systemd)
+Recommends:            selinux-policy-%{selinuxtype} >= 
%{selinux_policy_version}
 
 %description selinux
 This package adds SELinux enforcement to passt(1), pasta(1), passt-repair(1).
@@ -89,19 +94,26 @@
 %selinux_relabel_pre -s %{selinuxtype}
 
 %post selinux
-%selinux_modules_install -s %{selinuxtype} 
%{_datadir}/selinux/packages/%{selinuxtype}/passt.pp
-%selinux_modules_install -s %{selinuxtype} 
%{_datadir}/selinux/packages/%{selinuxtype}/pasta.pp
-%selinux_modules_install -s %{selinuxtype} 
%{_datadir}/selinux/packages/%{selinuxtype}/passt-repair.pp
+%selinux_modules_install -s %{selinuxtype} 
%{_datadir}/selinux/packages/%{selinuxtype}/passt.pp 
%{_datadir}/selinux/packages/%{selinuxtype}/pasta.pp 
%{_datadir}/selinux/packages/%{selinuxtype}/passt-repair.pp
 
 %postun selinux
 if [ $1 -eq 0 ]; then
-       %selinux_modules_uninstall -s %{selinuxtype} passt
-       %selinux_modules_uninstall -s %{selinuxtype} pasta
-       %selinux_modules_uninstall -s %{selinuxtype} passt-repair
+       %selinux_modules_uninstall -s %{selinuxtype} passt pasta passt-repair
 fi
 
 %posttrans selinux
 %selinux_relabel_post -s %{selinuxtype}
+# %selinux_relabel_post calls fixfiles(8) with the previous file_contexts file
+# (see selabel_file(5)) in order to restore only the file contexts which
+# actually changed. However, as file_contexts doesn't support %{USERID}
+# substitutions, this will not work for specific file contexts that pasta needs
+# to have under /run/user.
+#
+# Restore those explicitly, hiding errors from restorecon(8): we can't pass a
+# path that's more specific than this, but at the same time /run/user often
+# contains FUSE mountpoints that can't be accessed as root, leading to
+# "Permission denied" messages, but not failures.
+restorecon -R /run/user 2>/dev/null
 
 %files
 %license LICENSES/{GPL-2.0-or-later.txt,BSD-3-Clause.txt}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/contrib/selinux/pasta.fc 
new/passt-20250611.0293c6f/contrib/selinux/pasta.fc
--- old/passt-20250512.8ec1341/contrib/selinux/pasta.fc 2025-05-12 
21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/contrib/selinux/pasta.fc 2025-06-11 
16:24:50.000000000 +0200
@@ -8,7 +8,9 @@
 # Copyright (c) 2022 Red Hat GmbH
 # Author: Stefano Brivio <[email protected]>
 
-/usr/bin/pasta                 system_u:object_r:pasta_exec_t:s0
-/usr/bin/pasta.avx2            system_u:object_r:pasta_exec_t:s0
-/tmp/pasta\.pcap               system_u:object_r:pasta_log_t:s0
-/var/run/pasta\.pid            system_u:object_r:pasta_pid_t:s0
+/usr/bin/pasta                                         
system_u:object_r:pasta_exec_t:s0
+/usr/bin/pasta.avx2                                    
system_u:object_r:pasta_exec_t:s0
+/tmp/pasta\.pcap                                       
system_u:object_r:pasta_log_t:s0
+/var/run/pasta\.pid                                    
system_u:object_r:pasta_pid_t:s0
+/run/user/%{USERID}/netns                              
system_u:object_r:ifconfig_var_run_t:s0
+/run/user/%{USERID}/containers/networks/rootless-netns 
system_u:object_r:ifconfig_var_run_t:s0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/contrib/selinux/pasta.te 
new/passt-20250611.0293c6f/contrib/selinux/pasta.te
--- old/passt-20250512.8ec1341/contrib/selinux/pasta.te 2025-05-12 
21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/contrib/selinux/pasta.te 2025-06-11 
16:24:50.000000000 +0200
@@ -89,6 +89,15 @@
        class capability { sys_tty_config setuid setgid };
        class cap_userns { setpcap sys_admin sys_ptrace net_bind_service 
net_admin };
        class user_namespace create;
+
+       # Container requires
+       attribute_role usernetctl_roles;
+       role container_user_r;
+       role staff_r;
+       role user_r;
+       type container_runtime_t;
+       type container_t;
+       type systemd_user_runtimedir_t;
 }
 
 type pasta_t;
@@ -113,6 +122,9 @@
 
 allow pasta_t self:capability { setpcap net_bind_service sys_tty_config 
dac_read_search net_admin sys_resource setuid setgid };
 allow pasta_t self:cap_userns { setpcap sys_admin sys_ptrace net_admin 
net_bind_service };
+# pasta only calls setuid and setgid with the current UID and GID, so this
+# denial is harmless. See 
https://bugzilla.redhat.com/show_bug.cgi?id=2330512#c10
+dontaudit pasta_t self:cap_userns { setgid setuid };
 allow pasta_t self:user_namespace create;
 
 auth_read_passwd(pasta_t)
@@ -130,7 +142,7 @@
 allow pasta_t user_home_dir_t:dir { search getattr open add_name read write };
 allow pasta_t user_home_dir_t:file { create open read write };
 allow pasta_t tmp_t:dir { add_name mounton remove_name write };
-allow pasta_t tmpfs_t:filesystem mount;
+allow pasta_t tmpfs_t:filesystem { getattr mount };
 allow pasta_t fs_t:filesystem unmount;
 allow pasta_t root_t:dir mounton;
 manage_files_pattern(pasta_t, pasta_pid_t, pasta_pid_t)
@@ -156,6 +168,11 @@
 allow pasta_t self:tcp_socket create_stream_socket_perms;
 corenet_tcp_sendrecv_generic_node(pasta_t)
 corenet_tcp_bind_generic_node(pasta_t)
+allow pasta_t container_runtime_t:dir { open read search };
+allow pasta_t container_runtime_t:fifo_file { getattr write };
+allow pasta_t container_runtime_t:file read;
+allow pasta_t container_runtime_t:lnk_file read;
+allow pasta_t container_t:lnk_file read;
 allow pasta_t pasta_port_t:tcp_socket { name_bind name_connect };
 allow pasta_t pasta_port_t:udp_socket { name_bind };
 allow pasta_t http_port_t:tcp_socket { name_bind name_connect };
@@ -213,3 +230,28 @@
 allow pasta_t ping_t:process { noatsecure rlimitinh siginh };
 allow pasta_t user_tty_device_t:chr_file { append read write };
 allow pasta_t user_devpts_t:chr_file { append read write };
+
+# Allow network administration commands for non-privileged users
+roleattribute container_user_r usernetctl_roles;
+roleattribute staff_r usernetctl_roles;
+roleattribute user_r usernetctl_roles;
+role usernetctl_roles types pasta_t;
+
+# Make pasta in a container run under the pasta_t context
+type_transition container_runtime_t pasta_exec_t : process pasta_t;
+allow container_runtime_t pasta_t:process transition;
+
+# Label the user network namespace files
+type_transition container_runtime_t user_tmp_t : dir ifconfig_var_run_t 
"netns";
+type_transition container_runtime_t user_tmp_t : dir ifconfig_var_run_t 
"rootless-netns";
+allow pasta_t ifconfig_var_run_t:dir { add_name open rmdir write };
+allow pasta_t ifconfig_var_run_t:file { create open write };
+allow systemd_user_runtimedir_t ifconfig_var_run_t:dir rmdir;
+
+# Allow pasta to bind to any port
+bool pasta_bind_all_ports true;
+if (pasta_bind_all_ports) {
+       allow pasta_t port_type:icmp_socket { accept getopt name_bind };
+       allow pasta_t port_type:tcp_socket { accept getopt name_bind 
name_connect };
+       allow pasta_t port_type:udp_socket { accept getopt name_bind };
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/dhcpv6.c 
new/passt-20250611.0293c6f/dhcpv6.c
--- old/passt-20250512.8ec1341/dhcpv6.c 2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/dhcpv6.c 2025-06-11 16:24:50.000000000 +0200
@@ -144,7 +144,9 @@
 struct opt_status_code {
        struct opt_hdr hdr;
        uint16_t code;
-       char status_msg[sizeof(STR_NOTONLINK) - 1];
+       /* "nonstring" is only supported since clang 23 */
+       /* NOLINTNEXTLINE(clang-diagnostic-unknown-attributes) */
+       __attribute__((nonstring)) char status_msg[sizeof(STR_NOTONLINK) - 1];
 } __attribute__((packed));
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/flow.c 
new/passt-20250611.0293c6f/flow.c
--- old/passt-20250512.8ec1341/flow.c   2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/flow.c   2025-06-11 16:24:50.000000000 +0200
@@ -480,7 +480,9 @@
 /**
  * flow_set_type() - Set type and move to TYPED
  * @flow:      Flow to change state
- * @pif:       pif of the initiating side
+ * @type:      New flow type to assign
+ *
+ * Return: pointer to the modified flow structure.
  */
 union flow *flow_set_type(union flow *flow, enum flow_type type)
 {
@@ -1128,7 +1130,8 @@
        if (!count)
                return 0;
 
-       repair_wait(c);
+       if ((rc = repair_wait(c)))
+               return -rc;
 
        if ((rc = flow_migrate_repair_all(c, true)))
                return -rc;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/flow_table.h 
new/passt-20250611.0293c6f/flow_table.h
--- old/passt-20250512.8ec1341/flow_table.h     2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/flow_table.h     2025-06-11 16:24:50.000000000 
+0200
@@ -93,6 +93,7 @@
  */
 static inline unsigned flow_idx(const struct flow_common *f)
 {
+       /* NOLINTNEXTLINE(clang-analyzer-security.PointerSub) */
        return (union flow *)f - flowtab;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/fwd.c 
new/passt-20250611.0293c6f/fwd.c
--- old/passt-20250512.8ec1341/fwd.c    2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/fwd.c    2025-06-11 16:24:50.000000000 +0200
@@ -418,7 +418,7 @@
        else
                tgt->eaddr = inany_loopback6;
 
-       /* Preserve the specific loopback adddress used, but let the kernel pick
+       /* Preserve the specific loopback address used, but let the kernel pick
         * a source port on the target side
         */
        tgt->oaddr = ini->eaddr;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/iov.c 
new/passt-20250611.0293c6f/iov.c
--- old/passt-20250512.8ec1341/iov.c    2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/iov.c    2025-06-11 16:24:50.000000000 +0200
@@ -26,7 +26,8 @@
 #include "iov.h"
 
 
-/* iov_skip_bytes() - Skip leading bytes of an IO vector
+/**
+ * iov_skip_bytes() - Skip leading bytes of an IO vector
  * @iov:       IO vector
  * @n:         Number of entries in @iov
  * @skip:      Number of leading bytes of @iov to skip
@@ -56,8 +57,8 @@
 }
 
 /**
- * iov_from_buf - Copy data from a buffer to an I/O vector (struct iovec)
- *                efficiently.
+ * iov_from_buf() - Copy data from a buffer to an I/O vector (struct iovec)
+ *                  efficiently.
  *
  * @iov:       Pointer to the array of struct iovec describing the
  *             scatter/gather I/O vector.
@@ -96,8 +97,8 @@
 }
 
 /**
- * iov_to_buf - Copy data from a scatter/gather I/O vector (struct iovec) to
- *             a buffer efficiently.
+ * iov_to_buf() - Copy data from a scatter/gather I/O vector (struct iovec) to
+ *               a buffer efficiently.
  *
  * @iov:       Pointer to the array of struct iovec describing the 
scatter/gather
  *             I/O vector.
@@ -136,8 +137,8 @@
 }
 
 /**
- * iov_size - Calculate the total size of a scatter/gather I/O vector
- *            (struct iovec).
+ * iov_size() - Calculate the total size of a scatter/gather I/O vector
+ *              (struct iovec).
  *
  * @iov:       Pointer to the array of struct iovec describing the
  *             scatter/gather I/O vector.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/ip.h 
new/passt-20250611.0293c6f/ip.h
--- old/passt-20250512.8ec1341/ip.h     2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/ip.h     2025-06-11 16:24:50.000000000 +0200
@@ -118,7 +118,7 @@
 char *ipv6_l4hdr(const struct pool *p, int idx, size_t offset, uint8_t *proto,
                 size_t *dlen);
 
-/* IPv6 link-local all-nodes multicast adddress, ff02::1 */
+/* IPv6 link-local all-nodes multicast address, ff02::1 */
 static const struct in6_addr in6addr_ll_all_nodes = {
        .s6_addr = {
                0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/isolation.c 
new/passt-20250611.0293c6f/isolation.c
--- old/passt-20250512.8ec1341/isolation.c      2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/isolation.c      2025-06-11 16:24:50.000000000 
+0200
@@ -129,7 +129,7 @@
  * additional layer of protection.  Executing this requires
  * CAP_SETPCAP, which we will have within our userns.
  *
- * Note that dropping capabilites from the bounding set limits
+ * Note that dropping capabilities from the bounding set limits
  * exec()ed processes, but does not remove them from the effective or
  * permitted sets, so it doesn't reduce our own capabilities.
  */
@@ -174,8 +174,8 @@
  * Should:
  *  - drop unneeded capabilities
  *  - close all open files except for standard streams and the one from --fd
- * Musn't:
- *  - remove filesytem access (we need to access files during setup)
+ * Mustn't:
+ *  - remove filesystem access (we need to access files during setup)
  */
 void isolate_initial(int argc, char **argv)
 {
@@ -194,7 +194,7 @@
         *
         * It's debatable whether it's useful to drop caps when we
         * retain SETUID and SYS_ADMIN, but we might as well.  We drop
-        * further capabilites in isolate_user() and
+        * further capabilities in isolate_user() and
         * isolate_prefork().
         */
        keep = BIT(CAP_NET_BIND_SERVICE) | BIT(CAP_SETUID) | BIT(CAP_SETGID) |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/log.c 
new/passt-20250611.0293c6f/log.c
--- old/passt-20250512.8ec1341/log.c    2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/log.c    2025-06-11 16:24:50.000000000 +0200
@@ -54,7 +54,8 @@
  * logtime() - Get the current time for logging purposes
  * @ts:                Buffer into which to store the timestamp
  *
- * Return: pointer to @now, or NULL if there was an error retrieving the time
+ * Return: pointer to @ts on success, or NULL if there was
+ *         an error retrieving the time
  */
 static const struct timespec *logtime(struct timespec *ts)
 {
@@ -402,7 +403,7 @@
  * logfile_init() - Open log file and write header with PID, version, path
  * @name:      Identifier for header: passt or pasta
  * @path:      Path to log file
- * @size:      Maximum size of log file: log_cut_size is calculatd here
+ * @size:      Maximum size of log file: log_cut_size is calculated here
  */
 void logfile_init(const char *name, const char *path, size_t size)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/ndp.c 
new/passt-20250611.0293c6f/ndp.c
--- old/passt-20250512.8ec1341/ndp.c    2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/ndp.c    2025-06-11 16:24:50.000000000 +0200
@@ -328,13 +328,13 @@
 
        memcpy(&ra.source_ll.mac, c->our_tap_mac, ETH_ALEN);
 
+       /* NOLINTNEXTLINE(clang-analyzer-security.PointerSub) */
        ndp_send(c, dst, &ra, ptr - (unsigned char *)&ra);
 }
 
 /**
  * ndp() - Check for NDP solicitations, reply as needed
  * @c:         Execution context
- * @ih:                ICMPv6 header
  * @saddr:     Source IPv6 address
  * @p:         Packet pool
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/netlink.c 
new/passt-20250611.0293c6f/netlink.c
--- old/passt-20250512.8ec1341/netlink.c        2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/netlink.c        2025-06-11 16:24:50.000000000 
+0200
@@ -1024,7 +1024,6 @@
 /**
  * nl_link_set_mac() - Set link MAC address
  * @s:         Netlink socket
- * @ns:                Use netlink socket in namespace
  * @ifi:       Interface index
  * @mac:       MAC address to set
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/passt-repair.c 
new/passt-20250611.0293c6f/passt-repair.c
--- old/passt-20250512.8ec1341/passt-repair.c   2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/passt-repair.c   2025-06-11 16:24:50.000000000 
+0200
@@ -83,7 +83,7 @@
        prog.filter = filter_repair;
        if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) ||
            prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog)) {
-               fprintf(stderr, "Failed to apply seccomp filter");
+               fprintf(stderr, "Failed to apply seccomp filter\n");
                _exit(1);
        }
 
@@ -134,13 +134,13 @@
 
                        n = read(fd, buf, sizeof(buf));
                        if (n < 0) {
-                               fprintf(stderr, "inotify read: %i", errno);
+                               fprintf(stderr, "inotify read: %i\n", errno);
                                _exit(1);
                        }
                        buf[n - 1] = '\0';
 
                        if (n < (ssize_t)sizeof(*ev)) {
-                               fprintf(stderr, "Short inotify read: %zi", n);
+                               fprintf(stderr, "Short inotify read: %zi\n", n);
                                continue;
                        }
 
@@ -176,7 +176,7 @@
        }
 
        if (ret <= 0 || ret >= (int)sizeof(a.sun_path)) {
-               fprintf(stderr, "Invalid socket path");
+               fprintf(stderr, "Invalid socket path\n");
                _exit(2);
        }
 
@@ -245,8 +245,8 @@
        for (i = 0; i < n; i++) {
                if (setsockopt(fds[i], SOL_TCP, TCP_REPAIR, &op, sizeof(op))) {
                        fprintf(stderr,
-                               "Setting TCP_REPAIR to %i on socket %i: %s", op,
-                               fds[i], strerror(errno));
+                               "Setting TCP_REPAIR to %i on socket %i: %s\n",
+                               op, fds[i], strerror(errno));
                        _exit(1);
                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/pasta.c 
new/passt-20250611.0293c6f/pasta.c
--- old/passt-20250512.8ec1341/pasta.c  2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/pasta.c  2025-06-11 16:24:50.000000000 +0200
@@ -57,15 +57,13 @@
 
 /**
  * pasta_child_handler() - Exit once shell exits (if we started it), reap 
clones
- * @signal:    Unused, handler deals with SIGCHLD only
+ * @signal:     Signal number; this handler deals with SIGCHLD only
  */
 void pasta_child_handler(int signal)
 {
        int errno_save = errno;
        siginfo_t infop;
 
-       (void)signal;
-
        if (signal != SIGCHLD)
                return;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/pcap.c 
new/passt-20250611.0293c6f/pcap.c
--- old/passt-20250512.8ec1341/pcap.c   2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/pcap.c   2025-06-11 16:24:50.000000000 +0200
@@ -52,8 +52,6 @@
  * @iovcnt:    Number of buffers (@iov entries) in frame
  * @offset:    Byte offset of the L2 headers within @iov
  * @now:       Timestamp
- *
- * Returns: 0 on success, -errno on error writing to the file
  */
 static void pcap_frame(const struct iovec *iov, size_t iovcnt,
                       size_t offset, const struct timespec *now)
@@ -113,10 +111,9 @@
                pcap_frame(iov + i * frame_parts, frame_parts, offset, &now);
 }
 
-/*
- * pcap_iov - Write packet data described by an I/O vector
+/**
+ * pcap_iov() - Write packet data described by an I/O vector
  *             to a pcap file descriptor.
- *
  * @iov:       Pointer to the array of struct iovec describing the I/O vector
  *             containing packet data to write, including L2 header
  * @iovcnt:    Number of buffers (@iov entries)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/repair.c 
new/passt-20250611.0293c6f/repair.c
--- old/passt-20250512.8ec1341/repair.c 2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/repair.c 2025-06-11 16:24:50.000000000 +0200
@@ -68,18 +68,21 @@
  * repair_listen_handler() - Handle events on TCP_REPAIR helper listening 
socket
  * @c:         Execution context
  * @events:    epoll events
+ *
+ * Return: 0 on valid event with new connected socket, error code on failure
  */
-void repair_listen_handler(struct ctx *c, uint32_t events)
+int repair_listen_handler(struct ctx *c, uint32_t events)
 {
        union epoll_ref ref = { .type = EPOLL_TYPE_REPAIR };
        struct epoll_event ev = { 0 };
        struct ucred ucred;
        socklen_t len;
+       int rc;
 
        if (events != EPOLLIN) {
                debug("Spurious event 0x%04x on TCP_REPAIR helper socket",
                      events);
-               return;
+               return EINVAL;
        }
 
        len = sizeof(ucred);
@@ -90,18 +93,19 @@
                                      SOCK_NONBLOCK);
 
                if (discard == -1)
-                       return;
+                       return errno;
 
                if (!getsockopt(discard, SOL_SOCKET, SO_PEERCRED, &ucred, &len))
                        info("Discarding TCP_REPAIR helper, PID %i", ucred.pid);
 
                close(discard);
-               return;
+               return EEXIST;
        }
 
        if ((c->fd_repair = accept4(c->fd_repair_listen, NULL, NULL, 0)) < 0) {
+               rc = errno;
                debug_perror("accept4() on TCP_REPAIR helper listening socket");
-               return;
+               return rc;
        }
 
        if (!getsockopt(c->fd_repair, SOL_SOCKET, SO_PEERCRED, &ucred, &len))
@@ -111,10 +115,14 @@
        ev.events = EPOLLHUP | EPOLLET;
        ev.data.u64 = ref.u64;
        if (epoll_ctl(c->epollfd, EPOLL_CTL_ADD, c->fd_repair, &ev)) {
+               rc = errno;
                debug_perror("epoll_ctl() on TCP_REPAIR helper socket");
                close(c->fd_repair);
                c->fd_repair = -1;
+               return rc;
        }
+
+       return 0;
 }
 
 /**
@@ -145,29 +153,39 @@
 /**
  * repair_wait() - Wait (with timeout) for TCP_REPAIR helper to connect
  * @c:         Execution context
+ *
+ * Return: 0 on success or if already connected, error code on failure
  */
-void repair_wait(struct ctx *c)
+int repair_wait(struct ctx *c)
 {
        struct timeval tv = { .tv_sec = 0,
                              .tv_usec = (long)(REPAIR_ACCEPT_TIMEOUT_US) };
+       int rc;
+
        static_assert(REPAIR_ACCEPT_TIMEOUT_US < 1000 * 1000,
                      ".tv_usec is greater than 1000 * 1000");
 
-       if (c->fd_repair >= 0 || c->fd_repair_listen == -1)
-               return;
+       if (c->fd_repair >= 0)
+               return 0;
+
+       if (c->fd_repair_listen == -1)
+               return ENOENT;
 
        if (setsockopt(c->fd_repair_listen, SOL_SOCKET, SO_RCVTIMEO,
                       &tv, sizeof(tv))) {
+               rc = errno;
                err_perror("Set timeout on TCP_REPAIR listening socket");
-               return;
+               return rc;
        }
 
-       repair_listen_handler(c, EPOLLIN);
+       rc = repair_listen_handler(c, EPOLLIN);
 
        tv.tv_usec = 0;
        if (setsockopt(c->fd_repair_listen, SOL_SOCKET, SO_RCVTIMEO,
                       &tv, sizeof(tv)))
                err_perror("Clear timeout on TCP_REPAIR listening socket");
+
+       return rc;
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/repair.h 
new/passt-20250611.0293c6f/repair.h
--- old/passt-20250512.8ec1341/repair.h 2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/repair.h 2025-06-11 16:24:50.000000000 +0200
@@ -7,10 +7,10 @@
 #define REPAIR_H
 
 void repair_sock_init(const struct ctx *c);
-void repair_listen_handler(struct ctx *c, uint32_t events);
+int repair_listen_handler(struct ctx *c, uint32_t events);
 void repair_handler(struct ctx *c, uint32_t events);
 void repair_close(struct ctx *c);
-void repair_wait(struct ctx *c);
+int repair_wait(struct ctx *c);
 int repair_flush(struct ctx *c);
 int repair_set(struct ctx *c, int s, int cmd);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/tap.c 
new/passt-20250611.0293c6f/tap.c
--- old/passt-20250512.8ec1341/tap.c    2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/tap.c    2025-06-11 16:24:50.000000000 +0200
@@ -118,6 +118,8 @@
        }
        /* NOLINTEND(bugprone-branch-clone) */
        ASSERT(0);
+
+       return 0; /* Unreachable, for cppcheck's sake */
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/tcp.c 
new/passt-20250611.0293c6f/tcp.c
--- old/passt-20250512.8ec1341/tcp.c    2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/tcp.c    2025-06-11 16:24:50.000000000 +0200
@@ -456,7 +456,7 @@
 /**
  * tcp_conn_epoll_events() - epoll events mask for given connection state
  * @events:    Current connection events
- * @conn_flags Connection flags
+ * @conn_flags:        Connection flags
  *
  * Return: epoll events mask corresponding to implied connection state
  */
@@ -1079,7 +1079,7 @@
  * tcp_update_seqack_from_tap() - ACK number from tap and related 
flags/counters
  * @c:         Execution context
  * @conn:      Connection pointer
- * @seq                Current ACK sequence, host order
+ * @seq:       Current ACK sequence, host order
  */
 static void tcp_update_seqack_from_tap(const struct ctx *c,
                                       struct tcp_tap_conn *conn, uint32_t seq)
@@ -1103,7 +1103,7 @@
  * @conn:      Connection pointer
  * @flags:     TCP flags: if not set, send segment only if ACK is due
  * @th:                TCP header to update
- * @data:      buffer to store TCP option
+ * @opts:      TCP option buffer (output parameter)
  * @optlen:    size of the TCP option buffer (output parameter)
  *
  * Return: < 0 error code on connection reset,
@@ -1238,7 +1238,7 @@
 /**
  * tcp_tap_window_update() - Process an updated window from tap side
  * @conn:      Connection pointer
- * @window:    Window value, host order, unscaled
+ * @wnd:       Window value, host order, unscaled
  */
 static void tcp_tap_window_update(struct tcp_tap_conn *conn, unsigned wnd)
 {
@@ -1261,6 +1261,8 @@
  * tcp_init_seq() - Calculate initial sequence number according to RFC 6528
  * @hash:      Hash of connection details
  * @now:       Current timestamp
+ *
+ * Return: the calculated 32-bit initial sequence number.
  */
 static uint32_t tcp_init_seq(uint64_t hash, const struct timespec *now)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/tcp_buf.c 
new/passt-20250611.0293c6f/tcp_buf.c
--- old/passt-20250512.8ec1341/tcp_buf.c        2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/tcp_buf.c        2025-06-11 16:24:50.000000000 
+0200
@@ -104,7 +104,7 @@
 
 /**
  * tcp_revert_seq() - Revert affected conn->seq_to_tap after failed 
transmission
- * @ctx:       Execution context
+ * @c:         Execution context
  * @conns:     Array of connection pointers corresponding to queued frames
  * @frames:    Two-dimensional array containing queued frames with sub-iovs
  * @num_frames:        Number of entries in the two arrays to be compared
@@ -148,7 +148,7 @@
 }
 
 /**
- * tcp_buf_fill_headers() - Fill 802.3, IP, TCP headers in pre-cooked buffers
+ * tcp_l2_buf_fill_headers() - Fill 802.3, IP, TCP headers in pre-cooked 
buffers
  * @conn:      Connection pointer
  * @iov:       Pointer to an array of iovec of TCP pre-cooked buffers
  * @check:     Checksum, if already known
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/tcp_vu.c 
new/passt-20250611.0293c6f/tcp_vu.c
--- old/passt-20250512.8ec1341/tcp_vu.c 2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/tcp_vu.c 2025-06-11 16:24:50.000000000 +0200
@@ -176,8 +176,10 @@
  * @already_sent:      Number of bytes already sent
  * @fillsize:          Maximum bytes to fill in guest-side receiving window
  * @iov_cnt:           number of iov (output)
+ * @head_cnt:          Pointer to store the count of head iov entries (output)
  *
- * Return: Number of iov entries used to store the data or negative error code
+ * Return: number of bytes received from the socket, or a negative error code
+ * on failure.
  */
 static ssize_t tcp_vu_sock_recv(const struct ctx *c,
                                const struct tcp_tap_conn *conn, bool v6,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/test/lib/term 
new/passt-20250611.0293c6f/test/lib/term
--- old/passt-20250512.8ec1341/test/lib/term    2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/test/lib/term    2025-06-11 16:24:50.000000000 
+0200
@@ -19,6 +19,7 @@
 STATUS_COLS=
 STATUS_PASS=0
 STATUS_FAIL=0
+STATUS_SKIPPED=0
 
 PR_RED='\033[1;31m'
 PR_GREEN='\033[1;32m'
@@ -439,19 +440,21 @@
 # status_test_ok() - Update counter of passed tests, log and display message
 status_test_ok() {
        STATUS_PASS=$((STATUS_PASS + 1))
-       tmux set status-right "PASS: ${STATUS_PASS} | FAIL: ${STATUS_FAIL} | 
#(TZ="UTC" date -Iseconds)"
+       tmux set status-right "PASS: ${STATUS_PASS} | FAIL: ${STATUS_FAIL} | 
SKIPPED: ${STATUS_SKIPPED} | #(TZ="UTC" date -Iseconds)"
        info_passed
 }
 
 # status_test_fail() - Update counter of failed tests, log and display message
 status_test_fail() {
        STATUS_FAIL=$((STATUS_FAIL + 1))
-       tmux set status-right "PASS: ${STATUS_PASS} | FAIL: ${STATUS_FAIL} | 
#(TZ="UTC" date -Iseconds)"
+       tmux set status-right "PASS: ${STATUS_PASS} | FAIL: ${STATUS_FAIL} | 
SKIPPED: ${STATUS_SKIPPED} | #(TZ="UTC" date -Iseconds)"
        info_failed
 }
 
 # status_test_fail() - Update counter of failed tests, log and display message
 status_test_skip() {
+       STATUS_SKIPPED=$((STATUS_SKIPPED + 1))
+       tmux set status-right "PASS: ${STATUS_PASS} | FAIL: ${STATUS_FAIL} | 
SKIPPED: ${STATUS_SKIPPED} | #(TZ="UTC" date -Iseconds)"
        info_skipped
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/test/run 
new/passt-20250611.0293c6f/test/run
--- old/passt-20250512.8ec1341/test/run 2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/test/run 2025-06-11 16:24:50.000000000 +0200
@@ -202,7 +202,7 @@
        perf_finish
        [ ${CI} -eq 1 ] && video_stop
 
-       log "PASS: ${STATUS_PASS}, FAIL: ${STATUS_FAIL}"
+       log "PASS: ${STATUS_PASS}, FAIL: ${STATUS_FAIL}, SKIPPED: 
${STATUS_SKIPPED}"
 
        pause_continue \
                "Press any key to keep test session open"       \
@@ -236,7 +236,7 @@
        done
        teardown "${__setup}"
 
-       log "PASS: ${STATUS_PASS}, FAIL: ${STATUS_FAIL}"
+       log "PASS: ${STATUS_PASS}, FAIL: ${STATUS_FAIL}, SKIPPED: 
${STATUS_SKIPPED}"
 
        pause_continue \
                "Press any key to keep test session open"       \
@@ -307,4 +307,4 @@
 
 tail -n1 ${LOGFILE}
 echo "Log at ${LOGFILE}"
-exit $(tail -n1 ${LOGFILE} | sed -n 's/.*FAIL: \(.*\)$/\1/p')
+exit $(tail -n1 ${LOGFILE} | sed -n 's/.*FAIL: \(.*\),.*$/\1/p')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/udp.c 
new/passt-20250611.0293c6f/udp.c
--- old/passt-20250512.8ec1341/udp.c    2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/udp.c    2025-06-11 16:24:50.000000000 +0200
@@ -473,7 +473,7 @@
 /**
  * udp_pktinfo() - Retrieve packet destination address from cmsg
  * @msg:       msghdr into which message has been received
- * @dst:       (Local) destination address of message in @mh (output)
+ * @dst:       (Local) destination address of message in @msg (output)
  *
  * Return: 0 on success, -1 if the information was missing (@dst is set to
  *         inany_any6).
@@ -736,7 +736,7 @@
  * udp_sock_recv() - Receive datagrams from a socket
  * @c:         Execution context
  * @s:         Socket to receive from
- * @mmh                mmsghdr array to receive into
+ * @mmh:       mmsghdr array to receive into
  * @n:         Maximum number of datagrams to receive
  *
  * Return: Number of datagrams received
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/udp_flow.c 
new/passt-20250611.0293c6f/udp_flow.c
--- old/passt-20250512.8ec1341/udp_flow.c       2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/udp_flow.c       2025-06-11 16:24:50.000000000 
+0200
@@ -36,7 +36,7 @@
        return &flow->udp;
 }
 
-/*
+/**
  * udp_flow_close() - Close and clean up UDP flow
  * @c:         Execution context
  * @uflow:     UDP flow
@@ -126,7 +126,8 @@
  * @flow:      Initiated flow
  * @now:       Timestamp
  *
- * Return: UDP specific flow, if successful, NULL on failure
+ * Return: sidx for the target side of the new UDP flow, or FLOW_SIDX_NONE
+ *         on failure.
  *
  * #syscalls getsockname
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/util.c 
new/passt-20250611.0293c6f/util.c
--- old/passt-20250512.8ec1341/util.c   2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/util.c   2025-06-11 16:24:50.000000000 +0200
@@ -364,7 +364,7 @@
                dst[i] = a[i] | b[i];
 }
 
-/*
+/**
  * ns_enter() - Enter configured user (unless already joined) and network ns
  * @c:         Execution context
  *
@@ -499,7 +499,8 @@
  * @pidfile_fd:        Open PID file descriptor
  * @devnull_fd:        Open file descriptor for /dev/null
  *
- * Return: child PID on success, won't return on failure
+ * Return: 0 in the child process on success. The parent process exits.
+ *        Does not return in either process on failure (calls _exit).
  */
 int __daemon(int pidfile_fd, int devnull_fd)
 {
@@ -607,7 +608,8 @@
 #endif
 }
 
-/* write_all_buf() - write all of a buffer to an fd
+/**
+ * write_all_buf() - write all of a buffer to an fd
  * @fd:                File descriptor
  * @buf:       Pointer to base of buffer
  * @len:       Length of buffer
@@ -637,7 +639,8 @@
        return 0;
 }
 
-/* write_remainder() - write the tail of an IO vector to an fd
+/**
+ * write_remainder() - write the tail of an IO vector to an fd
  * @fd:                File descriptor
  * @iov:       IO vector
  * @iovcnt:    Number of entries in @iov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/vhost_user.c 
new/passt-20250611.0293c6f/vhost_user.c
--- old/passt-20250512.8ec1341/vhost_user.c     2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/vhost_user.c     2025-06-11 16:24:50.000000000 
+0200
@@ -302,13 +302,13 @@
  * @conn_fd:   vhost-user command socket
  * @vmsg:      vhost-user message
  */
-static void vu_send_reply(int conn_fd, struct vhost_user_msg *msg)
+static void vu_send_reply(int conn_fd, struct vhost_user_msg *vmsg)
 {
-       msg->hdr.flags &= ~VHOST_USER_VERSION_MASK;
-       msg->hdr.flags |= VHOST_USER_VERSION;
-       msg->hdr.flags |= VHOST_USER_REPLY_MASK;
+       vmsg->hdr.flags &= ~VHOST_USER_VERSION_MASK;
+       vmsg->hdr.flags |= VHOST_USER_VERSION;
+       vmsg->hdr.flags |= VHOST_USER_REPLY_MASK;
 
-       vu_message_write(conn_fd, msg);
+       vu_message_write(conn_fd, vmsg);
 }
 
 /**
@@ -319,7 +319,7 @@
  * Return: True as a reply is requested
  */
 static bool vu_get_features_exec(struct vu_dev *vdev,
-                                struct vhost_user_msg *msg)
+                                struct vhost_user_msg *vmsg)
 {
        uint64_t features =
                1ULL << VIRTIO_F_VERSION_1 |
@@ -329,9 +329,9 @@
 
        (void)vdev;
 
-       vmsg_set_reply_u64(msg, features);
+       vmsg_set_reply_u64(vmsg, features);
 
-       debug("Sending back to guest u64: 0x%016"PRIx64, msg->payload.u64);
+       debug("Sending back to guest u64: 0x%016"PRIx64, vmsg->payload.u64);
 
        return true;
 }
@@ -357,11 +357,11 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_features_exec(struct vu_dev *vdev,
-                                struct vhost_user_msg *msg)
+                                struct vhost_user_msg *vmsg)
 {
-       debug("u64: 0x%016"PRIx64, msg->payload.u64);
+       debug("u64: 0x%016"PRIx64, vmsg->payload.u64);
 
-       vdev->features = msg->payload.u64;
+       vdev->features = vmsg->payload.u64;
        /* We only support devices conforming to VIRTIO 1.0 or
         * later
         */
@@ -382,10 +382,10 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_owner_exec(struct vu_dev *vdev,
-                             struct vhost_user_msg *msg)
+                             struct vhost_user_msg *vmsg)
 {
        (void)vdev;
-       (void)msg;
+       (void)vmsg;
 
        return false;
 }
@@ -423,9 +423,9 @@
  * #syscalls:vu mmap|mmap2 munmap
  */
 static bool vu_set_mem_table_exec(struct vu_dev *vdev,
-                                 struct vhost_user_msg *msg)
+                                 struct vhost_user_msg *vmsg)
 {
-       struct vhost_user_memory m = msg->payload.memory, *memory = &m;
+       struct vhost_user_memory m = vmsg->payload.memory, *memory = &m;
        unsigned int i;
 
        for (i = 0; i < vdev->nregions; i++) {
@@ -465,7 +465,7 @@
                 */
                mmap_addr = mmap(0, dev_region->size + dev_region->mmap_offset,
                                 PROT_READ | PROT_WRITE, MAP_SHARED |
-                                MAP_NORESERVE, msg->fds[i], 0);
+                                MAP_NORESERVE, vmsg->fds[i], 0);
 
                if (mmap_addr == MAP_FAILED)
                        die_perror("vhost-user region mmap error");
@@ -474,7 +474,7 @@
                debug("    mmap_addr:       0x%016"PRIx64,
                      dev_region->mmap_addr);
 
-               close(msg->fds[i]);
+               close(vmsg->fds[i]);
        }
 
        for (i = 0; i < VHOST_USER_MAX_QUEUES; i++) {
@@ -541,7 +541,7 @@
 
 /**
  * vu_log_write() - Log memory write
- * @dev:       vhost-user device
+ * @vdev:      vhost-user device
  * @address:   Memory address
  * @length:    Memory size
  */
@@ -566,23 +566,23 @@
  * @vdev:      vhost-user device
  * @vmsg:      vhost-user message
  *
- * Return: False as no reply is requested
+ * Return: True as a reply is requested
  *
  * #syscalls:vu mmap|mmap2 munmap
  */
 static bool vu_set_log_base_exec(struct vu_dev *vdev,
-                                struct vhost_user_msg *msg)
+                                struct vhost_user_msg *vmsg)
 {
        uint64_t log_mmap_size, log_mmap_offset;
        void *base;
        int fd;
 
-       if (msg->fd_num != 1 || msg->hdr.size != sizeof(msg->payload.log))
+       if (vmsg->fd_num != 1 || vmsg->hdr.size != sizeof(vmsg->payload.log))
                die("vhost-user: Invalid log_base message");
 
-       fd = msg->fds[0];
-       log_mmap_offset = msg->payload.log.mmap_offset;
-       log_mmap_size = msg->payload.log.mmap_size;
+       fd = vmsg->fds[0];
+       log_mmap_offset = vmsg->payload.log.mmap_offset;
+       log_mmap_size = vmsg->payload.log.mmap_size;
 
        debug("vhost-user log mmap_offset: %"PRId64, log_mmap_offset);
        debug("vhost-user log mmap_size:   %"PRId64, log_mmap_size);
@@ -599,8 +599,8 @@
        vdev->log_table = base;
        vdev->log_size = log_mmap_size;
 
-       msg->hdr.size = sizeof(msg->payload.u64);
-       msg->fd_num = 0;
+       vmsg->hdr.size = sizeof(vmsg->payload.u64);
+       vmsg->fd_num = 0;
 
        return true;
 }
@@ -613,15 +613,15 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_log_fd_exec(struct vu_dev *vdev,
-                              struct vhost_user_msg *msg)
+                              struct vhost_user_msg *vmsg)
 {
-       if (msg->fd_num != 1)
+       if (vmsg->fd_num != 1)
                die("Invalid log_fd message");
 
        if (vdev->log_call_fd != -1)
                close(vdev->log_call_fd);
 
-       vdev->log_call_fd = msg->fds[0];
+       vdev->log_call_fd = vmsg->fds[0];
 
        debug("Got log_call_fd: %d", vdev->log_call_fd);
 
@@ -636,10 +636,10 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_vring_num_exec(struct vu_dev *vdev,
-                                 struct vhost_user_msg *msg)
+                                 struct vhost_user_msg *vmsg)
 {
-       unsigned int idx = msg->payload.state.index;
-       unsigned int num = msg->payload.state.num;
+       unsigned int idx = vmsg->payload.state.index;
+       unsigned int num = vmsg->payload.state.num;
 
        trace("State.index: %u", idx);
        trace("State.num:   %u", num);
@@ -656,13 +656,13 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_vring_addr_exec(struct vu_dev *vdev,
-                                  struct vhost_user_msg *msg)
+                                  struct vhost_user_msg *vmsg)
 {
        /* We need to copy the payload to vhost_vring_addr structure
-         * to access index because address of msg->payload.addr
+         * to access index because address of vmsg->payload.addr
          * can be unaligned as it is packed.
          */
-       struct vhost_vring_addr addr = msg->payload.addr;
+       struct vhost_vring_addr addr = vmsg->payload.addr;
        struct vu_virtq *vq = &vdev->vq[addr.index];
 
        debug("vhost_vring_addr:");
@@ -677,7 +677,7 @@
        debug("    log_guest_addr:   0x%016" PRIx64,
              (uint64_t)addr.log_guest_addr);
 
-       vq->vra = msg->payload.addr;
+       vq->vra = vmsg->payload.addr;
        vq->vring.flags = addr.flags;
        vq->vring.log_guest_addr = addr.log_guest_addr;
 
@@ -702,10 +702,10 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_vring_base_exec(struct vu_dev *vdev,
-                                  struct vhost_user_msg *msg)
+                                  struct vhost_user_msg *vmsg)
 {
-       unsigned int idx = msg->payload.state.index;
-       unsigned int num = msg->payload.state.num;
+       unsigned int idx = vmsg->payload.state.index;
+       unsigned int num = vmsg->payload.state.num;
 
        debug("State.index: %u", idx);
        debug("State.num:   %u", num);
@@ -723,13 +723,13 @@
  * Return: True as a reply is requested
  */
 static bool vu_get_vring_base_exec(struct vu_dev *vdev,
-                                  struct vhost_user_msg *msg)
+                                  struct vhost_user_msg *vmsg)
 {
-       unsigned int idx = msg->payload.state.index;
+       unsigned int idx = vmsg->payload.state.index;
 
        debug("State.index: %u", idx);
-       msg->payload.state.num = vdev->vq[idx].last_avail_idx;
-       msg->hdr.size = sizeof(msg->payload.state);
+       vmsg->payload.state.num = vdev->vq[idx].last_avail_idx;
+       vmsg->hdr.size = sizeof(vmsg->payload.state);
 
        vdev->vq[idx].started = false;
        vdev->vq[idx].vring.avail = 0;
@@ -771,21 +771,21 @@
  *                            close fds if NOFD bit is set
  * @vmsg:      vhost-user message
  */
-static void vu_check_queue_msg_file(struct vhost_user_msg *msg)
+static void vu_check_queue_msg_file(struct vhost_user_msg *vmsg)
 {
-       bool nofd = msg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
-       int idx = msg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
+       bool nofd = vmsg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
+       int idx = vmsg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
 
        if (idx >= VHOST_USER_MAX_QUEUES)
                die("Invalid vhost-user queue index: %u", idx);
 
        if (nofd) {
-               vmsg_close_fds(msg);
+               vmsg_close_fds(vmsg);
                return;
        }
 
-       if (msg->fd_num != 1)
-               die("Invalid fds in vhost-user request: %d", msg->hdr.request);
+       if (vmsg->fd_num != 1)
+               die("Invalid fds in vhost-user request: %d", vmsg->hdr.request);
 }
 
 /**
@@ -797,14 +797,14 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_vring_kick_exec(struct vu_dev *vdev,
-                                  struct vhost_user_msg *msg)
+                                  struct vhost_user_msg *vmsg)
 {
-       bool nofd = msg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
-       int idx = msg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
+       bool nofd = vmsg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
+       int idx = vmsg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
 
-       debug("u64: 0x%016"PRIx64, msg->payload.u64);
+       debug("u64: 0x%016"PRIx64, vmsg->payload.u64);
 
-       vu_check_queue_msg_file(msg);
+       vu_check_queue_msg_file(vmsg);
 
        if (vdev->vq[idx].kick_fd != -1) {
                epoll_del(vdev->context, vdev->vq[idx].kick_fd);
@@ -813,7 +813,7 @@
        }
 
        if (!nofd)
-               vdev->vq[idx].kick_fd = msg->fds[0];
+               vdev->vq[idx].kick_fd = vmsg->fds[0];
 
        debug("Got kick_fd: %d for vq: %d", vdev->vq[idx].kick_fd, idx);
 
@@ -837,14 +837,14 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_vring_call_exec(struct vu_dev *vdev,
-                                  struct vhost_user_msg *msg)
+                                  struct vhost_user_msg *vmsg)
 {
-       bool nofd = msg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
-       int idx = msg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
+       bool nofd = vmsg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
+       int idx = vmsg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
 
-       debug("u64: 0x%016"PRIx64, msg->payload.u64);
+       debug("u64: 0x%016"PRIx64, vmsg->payload.u64);
 
-       vu_check_queue_msg_file(msg);
+       vu_check_queue_msg_file(vmsg);
 
        if (vdev->vq[idx].call_fd != -1) {
                close(vdev->vq[idx].call_fd);
@@ -852,11 +852,11 @@
        }
 
        if (!nofd)
-               vdev->vq[idx].call_fd = msg->fds[0];
+               vdev->vq[idx].call_fd = vmsg->fds[0];
 
        /* in case of I/O hang after reconnecting */
        if (vdev->vq[idx].call_fd != -1)
-               eventfd_write(msg->fds[0], 1);
+               eventfd_write(vmsg->fds[0], 1);
 
        debug("Got call_fd: %d for vq: %d", vdev->vq[idx].call_fd, idx);
 
@@ -872,14 +872,14 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_vring_err_exec(struct vu_dev *vdev,
-                                 struct vhost_user_msg *msg)
+                                 struct vhost_user_msg *vmsg)
 {
-       bool nofd = msg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
-       int idx = msg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
+       bool nofd = vmsg->payload.u64 & VHOST_USER_VRING_NOFD_MASK;
+       int idx = vmsg->payload.u64 & VHOST_USER_VRING_IDX_MASK;
 
-       debug("u64: 0x%016"PRIx64, msg->payload.u64);
+       debug("u64: 0x%016"PRIx64, vmsg->payload.u64);
 
-       vu_check_queue_msg_file(msg);
+       vu_check_queue_msg_file(vmsg);
 
        if (vdev->vq[idx].err_fd != -1) {
                close(vdev->vq[idx].err_fd);
@@ -887,7 +887,7 @@
        }
 
        if (!nofd)
-               vdev->vq[idx].err_fd = msg->fds[0];
+               vdev->vq[idx].err_fd = vmsg->fds[0];
 
        return false;
 }
@@ -901,7 +901,7 @@
  * Return: True as a reply is requested
  */
 static bool vu_get_protocol_features_exec(struct vu_dev *vdev,
-                                         struct vhost_user_msg *msg)
+                                         struct vhost_user_msg *vmsg)
 {
        uint64_t features = 1ULL << VHOST_USER_PROTOCOL_F_REPLY_ACK |
                            1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD |
@@ -909,7 +909,7 @@
                            1ULL << VHOST_USER_PROTOCOL_F_RARP;
 
        (void)vdev;
-       vmsg_set_reply_u64(msg, features);
+       vmsg_set_reply_u64(vmsg, features);
 
        return true;
 }
@@ -922,13 +922,13 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_protocol_features_exec(struct vu_dev *vdev,
-                                         struct vhost_user_msg *msg)
+                                         struct vhost_user_msg *vmsg)
 {
-       uint64_t features = msg->payload.u64;
+       uint64_t features = vmsg->payload.u64;
 
        debug("u64: 0x%016"PRIx64, features);
 
-       vdev->protocol_features = msg->payload.u64;
+       vdev->protocol_features = vmsg->payload.u64;
 
        return false;
 }
@@ -941,11 +941,11 @@
  * Return: True as a reply is requested
  */
 static bool vu_get_queue_num_exec(struct vu_dev *vdev,
-                                 struct vhost_user_msg *msg)
+                                 struct vhost_user_msg *vmsg)
 {
        (void)vdev;
 
-       vmsg_set_reply_u64(msg, VHOST_USER_MAX_QUEUES);
+       vmsg_set_reply_u64(vmsg, VHOST_USER_MAX_QUEUES);
 
        return true;
 }
@@ -958,10 +958,10 @@
  * Return: False as no reply is requested
  */
 static bool vu_set_vring_enable_exec(struct vu_dev *vdev,
-                                    struct vhost_user_msg *msg)
+                                    struct vhost_user_msg *vmsg)
 {
-       unsigned int enable = msg->payload.state.num;
-       unsigned int idx = msg->payload.state.index;
+       unsigned int enable = vmsg->payload.state.num;
+       unsigned int idx = vmsg->payload.state.index;
 
        debug("State.index:  %u", idx);
        debug("State.enable: %u", enable);
@@ -974,17 +974,17 @@
 }
 
 /**
- * vu_set_send_rarp_exec() - vhost-user specification says: "Broadcast a fake
- *                          RARP to notify the migration is terminated",
- *                          but passt doesn't need to update any ARP table,
- *                          so do nothing to silence QEMU bogus error message
+ * vu_send_rarp_exec() - vhost-user specification says: "Broadcast a fake
+ *                      RARP to notify the migration is terminated",
+ *                      but passt doesn't need to update any ARP table,
+ *                      so do nothing to silence QEMU bogus error message
  * @vdev:      vhost-user device
  * @vmsg:      vhost-user message
  *
  * Return: False as no reply is requested
  */
 static bool vu_send_rarp_exec(struct vu_dev *vdev,
-                             struct vhost_user_msg *msg)
+                             struct vhost_user_msg *vmsg)
 {
        char macstr[ETH_ADDRSTRLEN];
 
@@ -993,7 +993,7 @@
        /* ignore the command */
 
        debug("Ignore command VHOST_USER_SEND_RARP for %s",
-             eth_ntop((unsigned char *)&msg->payload.u64, macstr,
+             eth_ntop((unsigned char *)&vmsg->payload.u64, macstr,
                       sizeof(macstr)));
 
        return false;
@@ -1008,12 +1008,12 @@
  *         and set bit 8 as we don't provide our own fd.
  */
 static bool vu_set_device_state_fd_exec(struct vu_dev *vdev,
-                                       struct vhost_user_msg *msg)
+                                       struct vhost_user_msg *vmsg)
 {
-       unsigned int direction = msg->payload.transfer_state.direction;
-       unsigned int phase = msg->payload.transfer_state.phase;
+       unsigned int direction = vmsg->payload.transfer_state.direction;
+       unsigned int phase = vmsg->payload.transfer_state.phase;
 
-       if (msg->fd_num != 1)
+       if (vmsg->fd_num != 1)
                die("Invalid device_state_fd message");
 
        if (phase != VHOST_USER_TRANSFER_STATE_PHASE_STOPPED)
@@ -1021,13 +1021,13 @@
 
        if (direction != VHOST_USER_TRANSFER_STATE_DIRECTION_SAVE &&
            direction != VHOST_USER_TRANSFER_STATE_DIRECTION_LOAD)
-               die("Invalide device_state_fd direction: %d", direction);
+               die("Invalid device_state_fd direction: %d", direction);
 
-       migrate_request(vdev->context, msg->fds[0],
+       migrate_request(vdev->context, vmsg->fds[0],
                        direction == VHOST_USER_TRANSFER_STATE_DIRECTION_LOAD);
 
        /* We don't provide a new fd for the data transfer */
-       vmsg_set_reply_u64(msg, VHOST_USER_VRING_NOFD_MASK);
+       vmsg_set_reply_u64(vmsg, VHOST_USER_VRING_NOFD_MASK);
 
        return true;
 }
@@ -1041,9 +1041,9 @@
  */
 /* cppcheck-suppress constParameterCallback */
 static bool vu_check_device_state_exec(struct vu_dev *vdev,
-                                      struct vhost_user_msg *msg)
+                                      struct vhost_user_msg *vmsg)
 {
-       vmsg_set_reply_u64(msg, vdev->context->device_state_result);
+       vmsg_set_reply_u64(vmsg, vdev->context->device_state_result);
 
        return true;
 }
@@ -1051,7 +1051,6 @@
 /**
  * vu_init() - Initialize vhost-user device structure
  * @c:         execution context
- * @vdev:      vhost-user device
  */
 void vu_init(struct ctx *c)
 {
@@ -1134,7 +1133,7 @@
 }
 
 static bool (*vu_handle[VHOST_USER_MAX])(struct vu_dev *vdev,
-                                       struct vhost_user_msg *msg) = {
+                                       struct vhost_user_msg *vmsg) = {
        [VHOST_USER_GET_FEATURES]          = vu_get_features_exec,
        [VHOST_USER_SET_FEATURES]          = vu_set_features_exec,
        [VHOST_USER_GET_PROTOCOL_FEATURES] = vu_get_protocol_features_exec,
@@ -1165,7 +1164,7 @@
  */
 void vu_control_handler(struct vu_dev *vdev, int fd, uint32_t events)
 {
-       struct vhost_user_msg msg = { 0 };
+       struct vhost_user_msg vmsg = { 0 };
        bool need_reply, reply_requested;
        int ret;
 
@@ -1174,38 +1173,38 @@
                return;
        }
 
-       ret = vu_message_read_default(fd, &msg);
+       ret = vu_message_read_default(fd, &vmsg);
        if (ret == 0) {
                vu_sock_reset(vdev);
                return;
        }
        debug("================ Vhost user message ================");
-       debug("Request: %s (%d)", vu_request_to_string(msg.hdr.request),
-               msg.hdr.request);
-       debug("Flags:   0x%x", msg.hdr.flags);
-       debug("Size:    %u", msg.hdr.size);
-
-       need_reply = msg.hdr.flags & VHOST_USER_NEED_REPLY_MASK;
-
-       if (msg.hdr.request >= 0 && msg.hdr.request < VHOST_USER_MAX &&
-           vu_handle[msg.hdr.request])
-               reply_requested = vu_handle[msg.hdr.request](vdev, &msg);
+       debug("Request: %s (%d)", vu_request_to_string(vmsg.hdr.request),
+               vmsg.hdr.request);
+       debug("Flags:   0x%x", vmsg.hdr.flags);
+       debug("Size:    %u", vmsg.hdr.size);
+
+       need_reply = vmsg.hdr.flags & VHOST_USER_NEED_REPLY_MASK;
+
+       if (vmsg.hdr.request >= 0 && vmsg.hdr.request < VHOST_USER_MAX &&
+           vu_handle[vmsg.hdr.request])
+               reply_requested = vu_handle[vmsg.hdr.request](vdev, &vmsg);
        else
-               die("Unhandled request: %d", msg.hdr.request);
+               die("Unhandled request: %d", vmsg.hdr.request);
 
        /* cppcheck-suppress legacyUninitvar */
        if (!reply_requested && need_reply) {
-               msg.payload.u64 = 0;
-               msg.hdr.flags = 0;
-               msg.hdr.size = sizeof(msg.payload.u64);
-               msg.fd_num = 0;
+               vmsg.payload.u64 = 0;
+               vmsg.hdr.flags = 0;
+               vmsg.hdr.size = sizeof(vmsg.payload.u64);
+               vmsg.fd_num = 0;
                reply_requested = true;
        }
 
        if (reply_requested)
-               vu_send_reply(fd, &msg);
+               vu_send_reply(fd, &vmsg);
 
-       if (msg.hdr.request == VHOST_USER_CHECK_DEVICE_STATE &&
+       if (vmsg.hdr.request == VHOST_USER_CHECK_DEVICE_STATE &&
            vdev->context->device_state_result == 0 &&
            !vdev->context->migrate_target) {
                info("Migration complete, exiting");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/vhost_user.h 
new/passt-20250611.0293c6f/vhost_user.h
--- old/passt-20250512.8ec1341/vhost_user.h     2025-05-12 21:04:57.000000000 
+0200
+++ new/passt-20250611.0293c6f/vhost_user.h     2025-06-11 16:24:50.000000000 
+0200
@@ -184,7 +184,7 @@
 };
 
 /**
- * struct vhost_user_msg - vhost-use message
+ * struct vhost_user_msg - vhost-user message
  * @hdr:               Message header
  * @payload:           Message payload
  * @fds:               File descriptors associated with the message
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/virtio.c 
new/passt-20250611.0293c6f/virtio.c
--- old/passt-20250512.8ec1341/virtio.c 2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/virtio.c 2025-06-11 16:24:50.000000000 +0200
@@ -156,9 +156,9 @@
 }
 
 /**
- * virtq_used_event - Get location of used event indices
+ * virtq_used_event() - Get location of used event indices
  *                   (only with VIRTIO_F_EVENT_IDX)
- * @vq         Virtqueue
+ * @vq:                Virtqueue
  *
  * Return: return the location of the used event index
  */
@@ -170,7 +170,7 @@
 
 /**
  * vring_get_used_event() - Get the used event from the available ring
- * @vq         Virtqueue
+ * @vq:                Virtqueue
  *
  * Return: the used event (available only if VIRTIO_RING_F_EVENT_IDX is set)
  *         used_event is a performant alternative where the driver
@@ -235,6 +235,7 @@
                memcpy(desc, orig_desc, read_len);
                len -= read_len;
                addr += read_len;
+               /* NOLINTNEXTLINE(bugprone-sizeof-expression,cert-arr39-c) */
                desc += read_len / sizeof(struct vring_desc);
        }
 
@@ -243,9 +244,9 @@
 
 /**
  * enum virtqueue_read_desc_state - State in the descriptor chain
- * @VIRTQUEUE_READ_DESC_ERROR  Found an invalid descriptor
- * @VIRTQUEUE_READ_DESC_DONE   No more descriptors in the chain
- * @VIRTQUEUE_READ_DESC_MORE   there are more descriptors in the chain
+ * @VIRTQUEUE_READ_DESC_ERROR: Found an invalid descriptor
+ * @VIRTQUEUE_READ_DESC_DONE:  No more descriptors in the chain
+ * @VIRTQUEUE_READ_DESC_MORE:  there are more descriptors in the chain
  */
 enum virtqueue_read_desc_state {
        VIRTQUEUE_READ_DESC_ERROR = -1,
@@ -346,8 +347,9 @@
                die_perror("Error writing vhost-user queue eventfd");
 }
 
-/* virtq_avail_event() -  Get location of available event indices
- *                           (only with VIRTIO_F_EVENT_IDX)
+/**
+ * virtq_avail_event() -  Get location of available event indices
+ *                       (only with VIRTIO_F_EVENT_IDX)
  * @vq:                Virtqueue
  *
  * Return: return the location of the available event index
@@ -420,8 +422,8 @@
 }
 
 /**
- * vu_queue_map_desc - Map the virtqueue descriptor ring into our virtual
- *                    address space
+ * vu_queue_map_desc() - Map the virtqueue descriptor ring into our virtual
+ *                      address space
  * @dev:       Vhost-user device
  * @vq:                Virtqueue
  * @idx:       First descriptor ring entry to map
@@ -504,7 +506,7 @@
  * vu_queue_pop() - Pop an entry from the virtqueue
  * @dev:       Vhost-user device
  * @vq:                Virtqueue
- * @elem:      Virtqueue element to file with the entry information
+ * @elem:      Virtqueue element to fill with the entry information
  *
  * Return: -1 if there is an error, 0 otherwise
  */
@@ -544,7 +546,7 @@
 }
 
 /**
- * vu_queue_detach_element() - Detach an element from the virqueue
+ * vu_queue_detach_element() - Detach an element from the virtqueue
  * @vq:                Virtqueue
  */
 void vu_queue_detach_element(struct vu_virtq *vq)
@@ -554,7 +556,7 @@
 }
 
 /**
- * vu_queue_unpop() - Push back the previously popped element from the virqueue
+ * vu_queue_unpop() - Push back the previously popped element from the 
virtqueue
  * @vq:                Virtqueue
  */
 /* cppcheck-suppress unusedFunction */
@@ -568,6 +570,8 @@
  * vu_queue_rewind() - Push back a given number of popped elements
  * @vq:                Virtqueue
  * @num:       Number of element to unpop
+ *
+ * Return: True on success, false if not
  */
 bool vu_queue_rewind(struct vu_virtq *vq, unsigned int num)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/passt-20250512.8ec1341/virtio.h 
new/passt-20250611.0293c6f/virtio.h
--- old/passt-20250512.8ec1341/virtio.h 2025-05-12 21:04:57.000000000 +0200
+++ new/passt-20250611.0293c6f/virtio.h 2025-06-11 16:24:50.000000000 +0200
@@ -150,7 +150,7 @@
 /**
  * vu_has_feature() - Check if a virtio-net feature is available
  * @vdev:      Vhost-user device
- * @bit:       Feature to check
+ * @fbit:      Feature to check
  *
  * Return:     True if the feature is available
  */
@@ -163,7 +163,7 @@
 /**
  * vu_has_protocol_feature() - Check if a vhost-user feature is available
  * @vdev:      Vhost-user device
- * @bit:       Feature to check
+ * @fbit:      Feature to check
  *
  * Return:     True if the feature is available
  */

Reply via email to