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

Commit 7b9b04fb authored by David S. Miller's avatar David S. Miller
Browse files


John W. Linville says:

====================
These fixes are intended for the 3.6 stream.

Hauke Mehrtens provides a pair of bcma fixes, one to fix a build
regression on mips and another to correct a pair of missing iounmap
calls.

Thomas Huehn offers a mac80211_hwsim fix to avoid a possible
use-after-free bug.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 59ea33a6 28ea499a
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -131,7 +131,7 @@ static void bcma_core_mips_set_irq(struct bcma_device *dev, unsigned int irq)
			/* backplane irq line is in use, find out who uses
			/* backplane irq line is in use, find out who uses
			 * it and set user to irq 0
			 * it and set user to irq 0
			 */
			 */
			list_for_each_entry_reverse(core, &bus->cores, list) {
			list_for_each_entry(core, &bus->cores, list) {
				if ((1 << bcma_core_mips_irqflag(core)) ==
				if ((1 << bcma_core_mips_irqflag(core)) ==
				    oldirqflag) {
				    oldirqflag) {
					bcma_core_mips_set_irq(core, 0);
					bcma_core_mips_set_irq(core, 0);
@@ -161,7 +161,7 @@ static void bcma_core_mips_dump_irq(struct bcma_bus *bus)
{
{
	struct bcma_device *core;
	struct bcma_device *core;


	list_for_each_entry_reverse(core, &bus->cores, list) {
	list_for_each_entry(core, &bus->cores, list) {
		bcma_core_mips_print_irq(core, bcma_core_mips_irq(core));
		bcma_core_mips_print_irq(core, bcma_core_mips_irq(core));
	}
	}
}
}
@@ -224,7 +224,7 @@ void bcma_core_mips_init(struct bcma_drv_mips *mcore)
		mcore->assigned_irqs = 1;
		mcore->assigned_irqs = 1;


	/* Assign IRQs to all cores on the bus */
	/* Assign IRQs to all cores on the bus */
	list_for_each_entry_reverse(core, &bus->cores, list) {
	list_for_each_entry(core, &bus->cores, list) {
		int mips_irq;
		int mips_irq;
		if (core->irq)
		if (core->irq)
			continue;
			continue;
+10 −5
Original line number Original line Diff line number Diff line
@@ -462,8 +462,10 @@ int bcma_bus_scan(struct bcma_bus *bus)
	while (eromptr < eromend) {
	while (eromptr < eromend) {
		struct bcma_device *other_core;
		struct bcma_device *other_core;
		struct bcma_device *core = kzalloc(sizeof(*core), GFP_KERNEL);
		struct bcma_device *core = kzalloc(sizeof(*core), GFP_KERNEL);
		if (!core)
		if (!core) {
			return -ENOMEM;
			err = -ENOMEM;
			goto out;
		}
		INIT_LIST_HEAD(&core->list);
		INIT_LIST_HEAD(&core->list);
		core->bus = bus;
		core->bus = bus;


@@ -478,7 +480,7 @@ int bcma_bus_scan(struct bcma_bus *bus)
			} else if (err == -ESPIPE) {
			} else if (err == -ESPIPE) {
				break;
				break;
			}
			}
			return err;
			goto out;
		}
		}


		core->core_index = core_num++;
		core->core_index = core_num++;
@@ -494,10 +496,12 @@ int bcma_bus_scan(struct bcma_bus *bus)
		list_add_tail(&core->list, &bus->cores);
		list_add_tail(&core->list, &bus->cores);
	}
	}


	err = 0;
out:
	if (bus->hosttype == BCMA_HOSTTYPE_SOC)
	if (bus->hosttype == BCMA_HOSTTYPE_SOC)
		iounmap(eromptr);
		iounmap(eromptr);


	return 0;
	return err;
}
}


int __init bcma_bus_scan_early(struct bcma_bus *bus,
int __init bcma_bus_scan_early(struct bcma_bus *bus,
@@ -537,7 +541,7 @@ int __init bcma_bus_scan_early(struct bcma_bus *bus,
		else if (err == -ESPIPE)
		else if (err == -ESPIPE)
			break;
			break;
		else if (err < 0)
		else if (err < 0)
			return err;
			goto out;


		core->core_index = core_num++;
		core->core_index = core_num++;
		bus->nr_cores++;
		bus->nr_cores++;
@@ -551,6 +555,7 @@ int __init bcma_bus_scan_early(struct bcma_bus *bus,
		break;
		break;
	}
	}


out:
	if (bus->hosttype == BCMA_HOSTTYPE_SOC)
	if (bus->hosttype == BCMA_HOSTTYPE_SOC)
		iounmap(eromptr);
		iounmap(eromptr);


+0 −5
Original line number Original line Diff line number Diff line
@@ -739,11 +739,6 @@ static void mac80211_hwsim_tx(struct ieee80211_hw *hw, struct sk_buff *skb)


	txi = IEEE80211_SKB_CB(skb);
	txi = IEEE80211_SKB_CB(skb);


	if (txi->control.vif)
		hwsim_check_magic(txi->control.vif);
	if (txi->control.sta)
		hwsim_check_sta_magic(txi->control.sta);

	ieee80211_tx_info_clear_status(txi);
	ieee80211_tx_info_clear_status(txi);


	/* frame was transmitted at most favorable rate at first attempt */
	/* frame was transmitted at most favorable rate at first attempt */