[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/2] Wrap calls to Parse Pullup callback


  • To: Owen Smith <owen.smith@xxxxxxxxxx>, win-pv-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
  • Date: Fri, 3 Jul 2026 21:48:41 +0200
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
  • Delivery-date: Fri, 03 Jul 2026 19:48:47 +0000
  • Feedback-id: default:8631fc262581453bbf619ec5b2062170:Sweego
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>

On 03/07/2026 14:22, Owen Smith wrote:
> This will allow additional checks to be added to the buffers
> 
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>

Reviewed-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>

> ---
>   src/xenvif/parse.c | 163 +++++++++++++++++++++++++++++----------------
>   1 file changed, 106 insertions(+), 57 deletions(-)
> 
> diff --git a/src/xenvif/parse.c b/src/xenvif/parse.c
> index 62bc223..2e5000d 100644
> --- a/src/xenvif/parse.c
> +++ b/src/xenvif/parse.c
> @@ -44,6 +44,22 @@
>   #include "assert.h"
>   #include "util.h"
>   
> +static FORCEINLINE BOOLEAN
> +__ParsePullup(
> +    IN      XENVIF_PARSE_PULLUP         Pullup,
> +    IN      PVOID                       Argument,
> +    IN      PUCHAR                      StartVa,
> +    IN      ULONG                       Offset,
> +    IN      PXENVIF_PACKET_PAYLOAD      Payload,
> +    IN      ULONG                       Length
> +    )
> +{
> +    return Pullup(Argument,
> +                  StartVa + Offset,
> +                  Payload,
> +                  Length);
> +}
> +
>   static FORCEINLINE NTSTATUS
>   __ParseTcpHeader(
>       IN      PUCHAR                      StartVa,
> @@ -58,10 +74,12 @@ __ParseTcpHeader(
>   
>       Info->TcpHeader.Offset = Offset;
>   
> -    if (!Pullup(Argument,
> -                StartVa + Offset,
> -                Payload,
> -                sizeof (TCP_HEADER)))
> +    if (!__ParsePullup(Pullup,
> +                       Argument,
> +                       StartVa,
> +                       Offset,
> +                       Payload,
> +                       sizeof (TCP_HEADER)))
>           goto fail1;
>   
>       Header = (PTCP_HEADER)(StartVa + Offset);
> @@ -80,10 +98,12 @@ __ParseTcpHeader(
>   
>           Extra = TCP_HEADER_LENGTH(Header) - Info->TcpHeader.Length;
>   
> -        if (!Pullup(Argument,
> -                    StartVa + Offset,
> -                    Payload,
> -                    Extra))
> +        if (!__ParsePullup(Pullup,
> +                           Argument,
> +                           StartVa,
> +                           Offset,
> +                           Payload,
> +                           Extra))
>               goto fail3;
>   
>           Offset += Extra;
> @@ -119,10 +139,12 @@ __ParseUdpHeader(
>   {
>       Info->UdpHeader.Offset = Offset;
>   
> -    if (!Pullup(Argument,
> -                StartVa + Offset,
> -                Payload,
> -                sizeof (UDP_HEADER)))
> +    if (!__ParsePullup(Pullup,
> +                       Argument,
> +                       StartVa,
> +                       Offset,
> +                       Payload,
> +                       sizeof (UDP_HEADER)))
>           goto fail1;
>   
>       Offset += sizeof (UDP_HEADER);
> @@ -156,7 +178,12 @@ __ParseIpVersion4Header(
>   
>       Info->IpHeader.Offset = Offset;
>   
> -    if (!Pullup(Argument, StartVa + Offset, Payload, sizeof (IPV4_HEADER)))
> +    if (!__ParsePullup(Pullup,
> +                       Argument,
> +                       StartVa,
> +                       Offset,
> +                       Payload,
> +                       sizeof (IPV4_HEADER)))
>           goto fail1;
>   
>       Header = (PIPV4_HEADER)(StartVa + Offset);
> @@ -181,10 +208,12 @@ __ParseIpVersion4Header(
>   
>           Extra = IPV4_HEADER_LENGTH(Header) - Info->IpHeader.Length;
>   
> -        if (!Pullup(Argument,
> -                    StartVa + Offset,
> -                    Payload,
> -                    Extra))
> +        if (!__ParsePullup(Pullup,
> +                           Argument,
> +                           StartVa,
> +                           Offset,
> +                           Payload,
> +                           Extra))
>               goto fail5;
>   
>           Offset += Extra;
> @@ -261,10 +290,12 @@ __ParseIpVersion6Header(
>   
>       Info->IpHeader.Offset = Offset;
>   
> -    if (!Pullup(Argument,
> -                StartVa + Offset,
> -                Payload,
> -                sizeof (IPV6_HEADER)))
> +    if (!__ParsePullup(Pullup,
> +                       Argument,
> +                       StartVa,
> +                       Offset,
> +                       Payload,
> +                       sizeof (IPV6_HEADER)))
>           goto fail1;
>   
>       Header = (PIPV6_HEADER)(StartVa + Offset);
> @@ -291,10 +322,12 @@ __ParseIpVersion6Header(
>               PIPV6_FRAGMENT_HEADER   Fragment;
>               USHORT                  FragmentOffsetAndFlags;
>   
> -            if (!Pullup(Argument,
> -                        StartVa + Offset,
> -                        Payload,
> -                        sizeof (IPV6_FRAGMENT_HEADER)))
> +            if (!__ParsePullup(Pullup,
> +                               Argument,
> +                               StartVa,
> +                               Offset,
> +                               Payload,
> +                               sizeof (IPV6_FRAGMENT_HEADER)))
>                   goto fail4;
>   
>               Fragment = (PIPV6_FRAGMENT_HEADER)(StartVa + Offset);
> @@ -310,10 +343,12 @@ __ParseIpVersion6Header(
>               PIP_AUTHENTICATION_HEADER   Authentication;
>               ULONG                       Extra;
>   
> -            if (!Pullup(Argument,
> -                        StartVa + Offset,
> -                        Payload,
> -                        sizeof (IP_AUTHENTICATION_HEADER)))
> +            if (!__ParsePullup(Pullup,
> +                               Argument,
> +                               StartVa,
> +                               Offset,
> +                               Payload,
> +                               sizeof (IP_AUTHENTICATION_HEADER)))
>                   goto fail4;
>   
>               Authentication = (PIP_AUTHENTICATION_HEADER)(StartVa + Offset);
> @@ -322,10 +357,12 @@ __ParseIpVersion6Header(
>               Extra = ((ULONG)(Authentication->Length + 2) << 2) -
>                       ((ULONG)sizeof (IP_AUTHENTICATION_HEADER));
>   
> -            if (!Pullup(Argument,
> -                        StartVa + Offset,
> -                        Payload,
> -                        Extra))
> +            if (!__ParsePullup(Pullup,
> +                               Argument,
> +                               StartVa,
> +                               Offset,
> +                               Payload,
> +                               Extra))
>                   goto fail5;
>   
>               Offset += Extra;
> @@ -339,10 +376,12 @@ __ParseIpVersion6Header(
>               PIPV6_OPTION_HEADER Option;
>               ULONG               Extra;
>   
> -            if (!Pullup(Argument,
> -                        StartVa + Offset,
> -                        Payload,
> -                        sizeof (IPV6_OPTION_HEADER)))
> +            if (!__ParsePullup(Pullup,
> +                               Argument,
> +                               StartVa,
> +                               Offset,
> +                               Payload,
> +                               sizeof (IPV6_OPTION_HEADER)))
>                   goto fail4;
>   
>               Option = (PIPV6_OPTION_HEADER)(StartVa + Offset);
> @@ -351,10 +390,12 @@ __ParseIpVersion6Header(
>               Extra = ((ULONG)(Option->Length + 1) << 3) -
>                       ((ULONG)sizeof (IPV6_OPTION_HEADER));
>   
> -            if (!Pullup(Argument,
> -                        StartVa + Offset,
> -                        Payload,
> -                        Extra))
> +            if (!__ParsePullup(Pullup,
> +                               Argument,
> +                               StartVa,
> +                               Offset,
> +                               Payload,
> +                               Extra))
>                   goto fail5;
>   
>               Offset += Extra;
> @@ -439,10 +480,12 @@ __ParseLLCSnapHeader(
>   
>       Info->LLCSnapHeader.Offset = Offset;
>   
> -    if (!Pullup(Argument,
> -                StartVa + Offset,
> -                Payload,
> -                sizeof (LLC_U_HEADER)))
> +    if (!__ParsePullup(Pullup,
> +                       Argument,
> +                       StartVa,
> +                       Offset,
> +                       Payload,
> +                       sizeof (LLC_U_HEADER)))
>           goto fail1;
>   
>       Header = (PLLC_SNAP_HEADER)(StartVa + Offset);
> @@ -455,10 +498,12 @@ __ParseLLCSnapHeader(
>   
>           Extra = sizeof (LLC_SNAP_HEADER) - sizeof (LLC_U_HEADER);
>   
> -        if (!Pullup(Argument,
> -                    StartVa + Offset,
> -                    Payload,
> -                    Extra))
> +        if (!__ParsePullup(Pullup,
> +                           Argument,
> +                           StartVa,
> +                           Offset,
> +                           Payload,
> +                           Extra))
>               goto fail2;
>   
>           Offset += Extra;
> @@ -494,10 +539,12 @@ __ParseEthernetHeader(
>   
>       Info->EthernetHeader.Offset = Offset;
>   
> -    if (!Pullup(Argument,
> -                StartVa + Offset,
> -                Payload,
> -                sizeof (ETHERNET_UNTAGGED_HEADER)))
> +    if (!__ParsePullup(Pullup,
> +                       Argument,
> +                       StartVa,
> +                       Offset,
> +                       Payload,
> +                       sizeof (ETHERNET_UNTAGGED_HEADER)))
>           goto fail1;
>   
>       Header = (PETHERNET_HEADER)(StartVa + Offset);
> @@ -512,10 +559,12 @@ __ParseEthernetHeader(
>           Extra = sizeof (ETHERNET_TAGGED_HEADER) -
>                   sizeof (ETHERNET_UNTAGGED_HEADER);
>   
> -        if (!Pullup(Argument,
> -                    StartVa + Offset,
> -                    Payload,
> -                    Extra))
> +        if (!__ParsePullup(Pullup,
> +                           Argument,
> +                           StartVa,
> +                           Offset,
> +                           Payload,
> +                           Extra))
>               goto fail2;
>   
>           Offset += Extra;



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.