mac80211: properly validate/translate IW_AUTH_MFP values
authorJohannes Berg <johannes@sipsolutions.net>
Tue, 10 Feb 2009 20:25:40 +0000 (21:25 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 13 Feb 2009 18:45:24 +0000 (13:45 -0500)
Make sure nobody passes in bogus values, and translate the values
(although it isn't necessary).

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/wext.c

index bad1cfbfdf1859211ab114e815b86a991db7fda5..acd5808b87f45bf2535158e6d4917e3fbd96c8b0 100644 (file)
@@ -982,9 +982,21 @@ static int ieee80211_ioctl_siwauth(struct net_device *dev,
                        break;
                }
                if (sdata->vif.type == NL80211_IFTYPE_STATION ||
-                   sdata->vif.type == NL80211_IFTYPE_ADHOC)
-                       sdata->u.sta.mfp = data->value;
-               else
+                   sdata->vif.type == NL80211_IFTYPE_ADHOC) {
+                       switch (data->value) {
+                       case IW_AUTH_MFP_DISABLED:
+                               sdata->u.sta.mfp = IEEE80211_MFP_DISABLED;
+                               break;
+                       case IW_AUTH_MFP_OPTIONAL:
+                               sdata->u.sta.mfp = IEEE80211_MFP_OPTIONAL;
+                               break;
+                       case IW_AUTH_MFP_REQUIRED:
+                               sdata->u.sta.mfp = IEEE80211_MFP_REQUIRED;
+                               break;
+                       default:
+                               ret = -EINVAL;
+                       }
+               } else
                        ret = -EOPNOTSUPP;
                break;
        default: