struct sock *sk = NULL;
        struct inet_sock *isk;
        struct hlist_nulls_node *hnode;
-       int dif = skb->dev->ifindex;
+       int dif, sdif;
 
        if (skb->protocol == htons(ETH_P_IP)) {
+               dif = inet_iif(skb);
+               sdif = inet_sdif(skb);
                pr_debug("try to find: num = %d, daddr = %pI4, dif = %d\n",
                         (int)ident, &ip_hdr(skb)->daddr, dif);
 #if IS_ENABLED(CONFIG_IPV6)
        } else if (skb->protocol == htons(ETH_P_IPV6)) {
+               dif = inet6_iif(skb);
+               sdif = inet6_sdif(skb);
                pr_debug("try to find: num = %d, daddr = %pI6c, dif = %d\n",
                         (int)ident, &ipv6_hdr(skb)->daddr, dif);
 #endif
+       } else {
+               pr_err("ping: protocol(%x) is not supported\n", ntohs(skb->protocol));
+               return NULL;
        }
 
        read_lock_bh(&ping_table.lock);
                }
 
                if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif &&
-                   sk->sk_bound_dev_if != inet_sdif(skb))
+                   sk->sk_bound_dev_if != sdif)
                        continue;
 
                sock_hold(sk);