Re: [PATCH 1/3] leds: trigger: netdev: add additional specific link speed mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> +	if (trigger_data->net_dev != NULL) {
> +		struct ethtool_link_ksettings cmd;
> +

cmd is a stack variable, so contains random junk:

>  		trigger_data->carrier_link_up = netif_carrier_ok(trigger_data->net_dev);
>  
> +		if (trigger_data->carrier_link_up) {
> +			rtnl_lock();
> +			__ethtool_get_link_ksettings(trigger_data->net_dev, &cmd);

/* Internal kernel helper to query a device ethtool_link_settings. */
int __ethtool_get_link_ksettings(struct net_device *dev,
				 struct ethtool_link_ksettings *link_ksettings)
{
	ASSERT_RTNL();

	if (!dev->ethtool_ops->get_link_ksettings)
		return -EOPNOTSUPP;

If the op is not implemented, it just returns.


> +			rtnl_unlock();
> +
> +			trigger_data->link_speed = cmd.base.speed;

and now you are accessing the random junk.

> +			__ethtool_get_link_ksettings(trigger_data->net_dev, &cmd);
> +
> +			trigger_data->link_speed = cmd.base.speed;

You have this code three times. I suggest you pull it out into a
little helper, and within the helper, deal with the return code, and
set speed to 0 if it is unknown.

    Andrew



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux