gh_len = geneve_hlen(gh);
 
        hlen = off_gnv + gh_len;
-       if (skb_gro_header_hard(skb, hlen)) {
+       if (!skb_gro_may_pull(skb, hlen)) {
                gh = skb_gro_header_slow(skb, hlen, off_gnv);
                if (unlikely(!gh))
                        goto out;
 
        return NAPI_GRO_CB(skb)->frag0 + offset;
 }
 
-static inline int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen)
+static inline bool skb_gro_may_pull(const struct sk_buff *skb,
+                                   unsigned int hlen)
 {
-       return NAPI_GRO_CB(skb)->frag0_len < hlen;
+       return hlen <= NAPI_GRO_CB(skb)->frag0_len;
 }
 
 static inline void skb_gro_frag0_invalidate(struct sk_buff *skb)
        void *ptr;
 
        ptr = skb_gro_header_fast(skb, offset);
-       if (skb_gro_header_hard(skb, hlen))
+       if (!skb_gro_may_pull(skb, hlen))
                ptr = skb_gro_header_slow(skb, hlen, offset);
        return ptr;
 }
 
        skb_reset_mac_header(skb);
        skb_gro_reset_offset(skb, hlen);
 
-       if (unlikely(skb_gro_header_hard(skb, hlen))) {
+       if (unlikely(!skb_gro_may_pull(skb, hlen))) {
                eth = skb_gro_header_slow(skb, hlen, 0);
                if (unlikely(!eth)) {
                        net_warn_ratelimited("%s: dropping impossible skb from %s\n",
 
        optlen = guehdr->hlen << 2;
        len += optlen;
 
-       if (skb_gro_header_hard(skb, len)) {
+       if (!skb_gro_may_pull(skb, len)) {
                guehdr = skb_gro_header_slow(skb, len, off);
                if (unlikely(!guehdr))
                        goto out;
 
                grehlen += GRE_HEADER_SECTION;
 
        hlen = off + grehlen;
-       if (skb_gro_header_hard(skb, hlen)) {
+       if (!skb_gro_may_pull(skb, hlen)) {
                greh = skb_gro_header_slow(skb, hlen, off);
                if (unlikely(!greh))
                        goto out;
 
                goto out;
 
        hlen = off + thlen;
-       if (skb_gro_header_hard(skb, hlen)) {
+       if (!skb_gro_may_pull(skb, hlen)) {
                th = skb_gro_header_slow(skb, hlen, off);
                if (unlikely(!th))
                        goto out;