Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acdaf28d authored by Sven Eckelmann's avatar Sven Eckelmann Committed by Greg Kroah-Hartman
Browse files

batman-adv: Fix segfault when writing to throughput_override



[ Upstream commit b9fd14c2 ]

The per hardif sysfs file "batman_adv/throughput_override" prints the
resulting change as info text when the users writes to this file. It uses
the helper function batadv_info to add it at the same time to the kernel
ring buffer and to the batman-adv debug log (when CONFIG_BATMAN_ADV_DEBUG
is enabled).

The function batadv_info requires as first parameter the batman-adv softif
net_device. This parameter is then used to find the private buffer which
contains the debug log for this batman-adv interface. But
batadv_store_throughput_override used as first argument the slave
net_device. This slave device doesn't have the batadv_priv private data
which is access by batadv_info.

Writing to this file with CONFIG_BATMAN_ADV_DEBUG enabled can either lead
to a segfault or to memory corruption.

Fixes: 0b5ecc68 ("batman-adv: add throughput override attribute to hard_ifaces")
Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
Acked-by: default avatarMarek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: default avatarSimon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent fa04cc5e
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1078,8 +1078,9 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj,
	if (old_tp_override == tp_override)
		goto out;

	batadv_info(net_dev, "%s: Changing from: %u.%u MBit to: %u.%u MBit\n",
		    "throughput_override",
	batadv_info(hard_iface->soft_iface,
		    "%s: %s: Changing from: %u.%u MBit to: %u.%u MBit\n",
		    "throughput_override", net_dev->name,
		    old_tp_override / 10, old_tp_override % 10,
		    tp_override / 10, tp_override % 10);