2010-06-04 18:30:16

by John W. Linville

[permalink] [raw]
Subject: [PATCH] mac80211: make ARP filtering depend on CONFIG_INET

Signed-off-by: John W. Linville <[email protected]>
---
net/mac80211/main.c | 6 ++++++
net/mac80211/mlme.c | 2 ++
2 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 045ead9..5706156 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -329,6 +329,7 @@ static void ieee80211_recalc_smps_work(struct work_struct *work)
mutex_unlock(&local->iflist_mtx);
}

+#ifdef CONFIG_INET
int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata)
{
struct in_device *idev;
@@ -380,6 +381,7 @@ static int ieee80211_ifa_changed(struct notifier_block *nb,

return NOTIFY_DONE;
}
+#endif

struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
const struct ieee80211_ops *ops)
@@ -669,10 +671,12 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
goto fail_pm_qos;
}

+#ifdef CONFIG_INET
local->ifa_notifier.notifier_call = ieee80211_ifa_changed;
result = register_inetaddr_notifier(&local->ifa_notifier);
if (result)
goto fail_ifa;
+#endif

return 0;

@@ -707,7 +711,9 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw)

pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY,
&local->network_latency_notifier);
+#ifdef CONFIG_INET
unregister_inetaddr_notifier(&local->ifa_notifier);
+#endif

rtnl_lock();

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 7e72013..3623bb7 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2078,6 +2078,7 @@ static enum work_done_result ieee80211_assoc_done(struct ieee80211_work *wk,
cfg80211_send_assoc_timeout(wk->sdata->dev,
wk->filter_ta);
return WORK_DONE_DESTROY;
+#ifdef CONFIG_INET
} else {
mutex_unlock(&wk->sdata->u.mgd.mtx);

@@ -2088,6 +2089,7 @@ static enum work_done_result ieee80211_assoc_done(struct ieee80211_work *wk,
rtnl_lock();
ieee80211_set_arp_filter(wk->sdata);
rtnl_unlock();
+#endif
}
}

--
1.6.6.1



2010-06-07 08:02:16

by Juuso Oikarinen

[permalink] [raw]
Subject: Re: [PATCH] mac80211: make ARP filtering depend on CONFIG_INET

Hi,

On Fri, 2010-06-04 at 20:28 +0200, ext John W. Linville wrote:
> Signed-off-by: John W. Linville <[email protected]>
> ---
> net/mac80211/main.c | 6 ++++++
> net/mac80211/mlme.c | 2 ++
> 2 files changed, 8 insertions(+), 0 deletions(-)



> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index 7e72013..3623bb7 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -2078,6 +2078,7 @@ static enum work_done_result ieee80211_assoc_done(struct ieee80211_work *wk,
> cfg80211_send_assoc_timeout(wk->sdata->dev,
> wk->filter_ta);
> return WORK_DONE_DESTROY;
> +#ifdef CONFIG_INET
> } else {
> mutex_unlock(&wk->sdata->u.mgd.mtx);
>
> @@ -2088,6 +2089,7 @@ static enum work_done_result ieee80211_assoc_done(struct ieee80211_work *wk,
> rtnl_lock();
> ieee80211_set_arp_filter(wk->sdata);
> rtnl_unlock();
> +#endif
> }

Here, if CONFIG_INET is not set, and the previous condition is not true,
the mutex will not be unlocked.

The arp-filter code here is causing some locking issues, so I'll need to
move it elsewhere anyway. I can also fix the unlocking while at it.

-Juuso

> }
>