return (struct seg6_local_lwt *)lwt->data;
 }
 
-static struct ipv6_sr_hdr *get_srh(struct sk_buff *skb)
+static struct ipv6_sr_hdr *get_srh(struct sk_buff *skb, int flags)
 {
        struct ipv6_sr_hdr *srh;
        int len, srhoff = 0;
 
-       if (ipv6_find_hdr(skb, &srhoff, IPPROTO_ROUTING, NULL, NULL) < 0)
+       if (ipv6_find_hdr(skb, &srhoff, IPPROTO_ROUTING, NULL, &flags) < 0)
                return NULL;
 
        if (!pskb_may_pull(skb, srhoff + sizeof(*srh)))
 {
        struct ipv6_sr_hdr *srh;
 
-       srh = get_srh(skb);
+       srh = get_srh(skb, IP6_FH_F_SKIP_RH);
        if (!srh)
                return NULL;
 
-       if (srh->segments_left == 0)
-               return NULL;
-
 #ifdef CONFIG_IPV6_SEG6_HMAC
        if (!seg6_hmac_validate_skb(skb))
                return NULL;
        struct ipv6_sr_hdr *srh;
        unsigned int off = 0;
 
-       srh = get_srh(skb);
+       srh = get_srh(skb, 0);
        if (srh && srh->segments_left > 0)
                return false;