--- a/ecm_interface.c +++ b/ecm_interface.c @@ -339,9 +339,9 @@ static struct net_device *ecm_interface_ ECM_IP_ADDR_TO_NIN6_ADDR(addr6, addr); #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)) - dev = (struct net_device *)ipv6_dev_find(&init_net, &addr6, 1); + dev = (struct net_device *)ipv6_dev_find_and_hold(&init_net, &addr6, 1); #else - dev = (struct net_device *)ipv6_dev_find(&init_net, &addr6, NULL); + dev = (struct net_device *)ipv6_dev_find_and_hold(&init_net, &addr6, 1); #endif return dev; } @@ -802,9 +802,9 @@ static bool ecm_interface_mac_addr_get_i */ ECM_IP_ADDR_TO_NIN6_ADDR(daddr, addr); #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)) - local_dev = ipv6_dev_find(&init_net, &daddr, 1); + local_dev = ipv6_dev_find_and_hold(&init_net, &daddr, 1); #else - local_dev = ipv6_dev_find(&init_net, &daddr, NULL); + local_dev = ipv6_dev_find_and_hold(&init_net, &daddr, 1); #endif if (local_dev) { DEBUG_TRACE("%pi6 is a local address\n", &daddr); --- a/frontends/ecm_front_end_common.c +++ b/frontends/ecm_front_end_common.c @@ -103,6 +103,10 @@ #endif #endif +#ifdef ECM_IPV6_ENABLE +#include "ecm_front_end_ipv6.h" +#endif + #ifdef ECM_FRONT_END_FSE_ENABLE /* * Callback object for ECM frontend interaction with wlan driver to add/delete FSE rules. @@ -614,9 +618,9 @@ bool ecm_front_end_gre_proto_is_accel_al } else { #ifdef ECM_IPV6_ENABLE #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)) - dev = ipv6_dev_find(&init_net, &(orig_tuple->src.u3.in6), 1); + dev = ipv6_dev_find_and_hold(&init_net, &(orig_tuple->src.u3.in6), 1); #else - dev = ipv6_dev_find(&init_net, &(orig_tuple->src.u3.in6), NULL); + dev = ipv6_dev_find_and_hold(&init_net, &(orig_tuple->src.u3.in6), 1); #endif if (dev) { /* @@ -628,9 +632,9 @@ bool ecm_front_end_gre_proto_is_accel_al } #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)) - dev = ipv6_dev_find(&init_net, &(orig_tuple->dst.u3.in6), 1); + dev = ipv6_dev_find_and_hold(&init_net, &(orig_tuple->dst.u3.in6), 1); #else - dev = ipv6_dev_find(&init_net, &(orig_tuple->dst.u3.in6), NULL); + dev = ipv6_dev_find_and_hold(&init_net, &(orig_tuple->dst.u3.in6), 1); #endif if (dev) { /*