On Tue, Oct 14, 2025 at 08:31:47 +0200, Michal Privoznik via Devel wrote:
> From: Michal Privoznik <[email protected]>
> 
> The main difference is that wmem_packet_scope() is gone [1] but
> the packet_info struct has 'pool` member which points to the
> allocator used for given packet.
> 
> Unfortunately, while we were given pointer to packet_info at the
> entry level to our dissector (dissect_libvirt() ->
> tcp_dissect_pdus() -> dissect_libvirt_message()) it was never
> propagated to generated/primitive dissectors.
> 
> But not all dissectors need to allocate memory, so mark the new
> argument as unused. And while our generator could be rewritten so
> that the argument is annotated as unused iff it's really unused,
> I couldn't bother rewriting it. It's generated code after all.
> Too much work for little gain.
> 
> Another significant change is that val_to_str() now requires new
> argument: pointer to allocator to use because it always allocates
> new memory [2][3].

IMO the change to propagate the struct needed to replace
wmem_packet_scope could be separated from the change to the val_to_str
convertor as it would make the patch a bit more digestable.

Regardless no need to change it now.


> 
> 1: 
> https://gitlab.com/wireshark/wireshark/-/commit/5ca5c9ca372e06881b23ba9f4fdcb6b479886444
> 2: 
> https://gitlab.com/wireshark/wireshark/-/commit/b63599762468e4cf1783419a5556377604d344bb
> 3: 
> https://gitlab.com/wireshark/wireshark/-/commit/84799be215313e61b83a3eaf074f89d6ee349b8c
> Resolves: https://gitlab.com/libvirt/libvirt/-/issues/823
> Signed-off-by: Michal Privoznik <[email protected]>
> ---
>  tools/wireshark/src/packet-libvirt.c | 157 +++++++++++++++++++--------
>  tools/wireshark/util/genxdrstub.pl   |  18 +--
>  2 files changed, 119 insertions(+), 56 deletions(-)


>  static char *
> -G_GNUC_PRINTF(3, 0)
> -vir_val_to_str(const uint32_t val,
> +G_GNUC_PRINTF(4, 0)
> +vir_val_to_str(packet_info *pinfo,
> +               const uint32_t val,
>                 const value_string *vs,
>                 const char *fmt)
>  {
> -    return val_to_str_wmem(wmem_packet_scope(), val, vs, fmt);
> +#if WIRESHARK_VERSION < 4006000
> +    return val_to_str_wmem(pinfo->pool, val, vs, fmt);
> +#else
> +    return val_to_str(pinfo->pool, val, vs, fmt);
> +#endif
>  }

The above hunk might need some update based on my query in previous
patch.

Once that is solved:

Reviewed-by: Peter Krempa <[email protected]>

Reply via email to