diff mbox series

[ethtool] Fix segfault with cable test and ./configure --disable-netlink

Message ID 20200716220509.1314265-1-andrew@lunn.ch
State Accepted
Delegated to: Michal Kubecek
Headers show
Series [ethtool] Fix segfault with cable test and ./configure --disable-netlink | expand

Commit Message

Andrew Lunn July 16, 2020, 10:05 p.m. UTC
When the netlink interface code is disabled, a stub version of
netlink_run_handler() is used. This stub version needs to handle the
case when there is no possibility for a command to fall back to the
IOCTL call. The two cable tests commands have no such fallback, and if
we don't handle this, ethtool tries to jump through a NULL pointer
resulting in a segfault.

Reported-by: Chris Healy <cphealy@gmail.com>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
 netlink/extapi.h | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Michal Kubecek July 20, 2020, 12:12 a.m. UTC | #1
On Fri, Jul 17, 2020 at 12:05:09AM +0200, Andrew Lunn wrote:
> When the netlink interface code is disabled, a stub version of
> netlink_run_handler() is used. This stub version needs to handle the
> case when there is no possibility for a command to fall back to the
> IOCTL call. The two cable tests commands have no such fallback, and if
> we don't handle this, ethtool tries to jump through a NULL pointer
> resulting in a segfault.
> 
> Reported-by: Chris Healy <cphealy@gmail.com>
> Signed-off-by: Andrew Lunn <andrew@lunn.ch>

Applied, thank you. I'll need to be more thorough with teseting the
--disable-netlink builds.

Michal

> ---
>  netlink/extapi.h | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/netlink/extapi.h b/netlink/extapi.h
> index c5bfde9..a35d5f2 100644
> --- a/netlink/extapi.h
> +++ b/netlink/extapi.h
> @@ -46,6 +46,12 @@ void nl_monitor_usage(void);
>  static inline void netlink_run_handler(struct cmd_context *ctx,
>  				       nl_func_t nlfunc, bool no_fallback)
>  {
> +	if (no_fallback) {
> +		fprintf(stderr,
> +			"Command requires kernel netlink support which is not "
> +			"enabled in this ethtool binary\n");
> +		exit(1);
> +	}
>  }
>  
>  static inline int nl_monitor(struct cmd_context *ctx)
> -- 
> 2.27.0
>
Andrew Lunn July 20, 2020, 12:31 a.m. UTC | #2
On Mon, Jul 20, 2020 at 02:12:51AM +0200, Michal Kubecek wrote:
> On Fri, Jul 17, 2020 at 12:05:09AM +0200, Andrew Lunn wrote:
> > When the netlink interface code is disabled, a stub version of
> > netlink_run_handler() is used. This stub version needs to handle the
> > case when there is no possibility for a command to fall back to the
> > IOCTL call. The two cable tests commands have no such fallback, and if
> > we don't handle this, ethtool tries to jump through a NULL pointer
> > resulting in a segfault.
> > 
> > Reported-by: Chris Healy <cphealy@gmail.com>
> > Signed-off-by: Andrew Lunn <andrew@lunn.ch>
> 
> Applied, thank you. I'll need to be more thorough with teseting the
> --disable-netlink builds.

Hi Michal

Yes. We are all focused on retlink, and missed the backwards
compatibility issues like this.

      Andrew
diff mbox series

Patch

diff --git a/netlink/extapi.h b/netlink/extapi.h
index c5bfde9..a35d5f2 100644
--- a/netlink/extapi.h
+++ b/netlink/extapi.h
@@ -46,6 +46,12 @@  void nl_monitor_usage(void);
 static inline void netlink_run_handler(struct cmd_context *ctx,
 				       nl_func_t nlfunc, bool no_fallback)
 {
+	if (no_fallback) {
+		fprintf(stderr,
+			"Command requires kernel netlink support which is not "
+			"enabled in this ethtool binary\n");
+		exit(1);
+	}
 }
 
 static inline int nl_monitor(struct cmd_context *ctx)