diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
index bad1cfbfdf1859211ab114e815b86a991db7fda5..acd5808b87f45bf2535158e6d4917e3fbd96c8b0 100644
--- a/net/mac80211/wext.c
+++ b/net/mac80211/wext.c
@@ -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: