This adds a check for the required add and delete functions up front at registration time to be sure both are defined.
Signed-off-by: Shannon Nelson <shannon.nel...@oracle.com> --- net/xfrm/xfrm_device.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c index 30e5746..5eb6b82 100644 --- a/net/xfrm/xfrm_device.c +++ b/net/xfrm/xfrm_device.c @@ -144,11 +144,19 @@ EXPORT_SYMBOL_GPL(xfrm_dev_offload_ok); static int xfrm_dev_register(struct net_device *dev) { - if ((dev->features & NETIF_F_HW_ESP) && !dev->xfrmdev_ops) - return NOTIFY_BAD; - if ((dev->features & NETIF_F_HW_ESP_TX_CSUM) && - !(dev->features & NETIF_F_HW_ESP)) + if (!(dev->features & NETIF_F_HW_ESP)) { + if (dev->features & NETIF_F_HW_ESP_TX_CSUM) + return NOTIFY_BAD; + else + return NOTIFY_DONE; + } + +#ifdef CONFIG_XFRM_OFFLOAD + if (!(dev->xfrmdev_ops && + dev->xfrmdev_ops->xdo_dev_state_add && + dev->xfrmdev_ops->xdo_dev_state_delete)) return NOTIFY_BAD; +#endif return NOTIFY_DONE; } -- 2.7.4