ndo_hwtstamp_get and ndo_hwtstamp_set only make sense as a pair. A driver providing just one gets no complaint today, and the mismatch turns up in user space, where a set can succeed while the matching get fails. Catch it at registration instead. Suggested-by: Jakub Kicinski Signed-off-by: Nicolai Buchwitz --- net/core/dev.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/core/dev.c b/net/core/dev.c index f660fccfc0db..574fd0ba9080 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11447,6 +11447,13 @@ int register_netdevice(struct net_device *dev) goto err_uninit; } + if (!dev->netdev_ops->ndo_hwtstamp_get != + !dev->netdev_ops->ndo_hwtstamp_set) { + netdev_WARN(dev, "driver implements only one hwtstamp NDO\n"); + ret = -EINVAL; + goto err_uninit; + } + if (netdev_need_ops_lock(dev) && dev->netdev_ops->ndo_set_rx_mode && !dev->netdev_ops->ndo_set_rx_mode_async) base-commit: 014d795c73837ea2339a4ea8e8f82c6e959b845d -- 2.53.0