qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v4 6/6] net/eth: Return earlier in _eth_get_rss_ex_dst_addr()


From: Stefano Garzarella
Subject: Re: [PATCH v4 6/6] net/eth: Return earlier in _eth_get_rss_ex_dst_addr()
Date: Wed, 10 Mar 2021 10:32:16 +0100

On Tue, Mar 09, 2021 at 07:27:09PM +0100, Philippe Mathieu-Daudé wrote:
Slightly simplify _eth_get_rss_ex_dst_addr() by returning earlier.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
net/eth.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/net/eth.c b/net/eth.c
index e984edcfb0b..b44439d31c5 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -407,23 +407,21 @@ _eth_get_rss_ex_dst_addr(const struct iovec *pkt, int 
pkt_frags,
{
    size_t input_size = iov_size(pkt, pkt_frags);
    struct ip6_ext_hdr_routing *rthdr;
+    size_t bytes_read;

    if (input_size < ext_hdr_offset + sizeof(*rthdr)) {
        return false;
    }
    rthdr = (struct ip6_ext_hdr_routing *) ext_hdr;

-    if ((rthdr->rtype == 2) && (rthdr->segleft == 1)) {
-        size_t bytes_read;
-
-        bytes_read = iov_to_buf(pkt, pkt_frags,
-                                ext_hdr_offset + sizeof(*ext_hdr),
-                                dst_addr, sizeof(*dst_addr));
-
-        return bytes_read == sizeof(*dst_addr);
+    if ((rthdr->rtype != 2) || (rthdr->segleft != 1)) {
+        return false;
    }

-    return false;
+    bytes_read = iov_to_buf(pkt, pkt_frags, ext_hdr_offset + sizeof(*ext_hdr),
+                            dst_addr, sizeof(*dst_addr));

Pre-existing issue, but looking at the Routing extension header format [1], I think the offset we're using here is wrong.

I had a doubt if the address started at ext_hdr_offset + 4 or ext_hdr_offset + 8 but looking in the linux code I think the offset we should use is ext_hdr_offset + sizeof(*rthdr).

This is the structure that I found in include/uapi/linux/ipv6.h:

    /*
     *  routing header type 2
     */

    struct rt2_hdr {
        struct ipv6_rt_hdr      rt_hdr;
        __u32                   reserved;
        struct in6_addr         addr;

    #define rt2_type            rt_hdr.type
    };

Thanks,
Stefano

[1] https://en.wikipedia.org/wiki/IPv6_packet#Routing




reply via email to

[Prev in Thread] Current Thread [Next in Thread]