From patchwork Fri Feb 14 07:54:00 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz.Dziedzic@tieto.com X-Patchwork-Id: 3650521 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 4B8C19F1EE for ; Fri, 14 Feb 2014 07:54:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6C47B2020E for ; Fri, 14 Feb 2014 07:54:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 98E5D20203 for ; Fri, 14 Feb 2014 07:54:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751832AbaBNHyV (ORCPT ); Fri, 14 Feb 2014 02:54:21 -0500 Received: from mail-ea0-f172.google.com ([209.85.215.172]:36252 "EHLO mail-ea0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751740AbaBNHyU (ORCPT ); Fri, 14 Feb 2014 02:54:20 -0500 Received: by mail-ea0-f172.google.com with SMTP id l9so4936583eaj.17 for ; Thu, 13 Feb 2014 23:54:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tieto.com; s=google; h=from:to:cc:subject:date:message-id; bh=r581eu4xW4PvKEa8AiyPsvGZF4Les+jMisaJC7Z2ADg=; b=HMD7TZCijl6eVCmiWRv4e8aIqHDSbXws2UjMItHGQ163f0U79T73lgrhHKF9a5XxsF n9cX+VU2SXdUoKSbl07aH9DWbarXVB0b58ZOklxapfhTJpQlvMRkeDhruzDZPjBuJaoJ eaEEk730+w30EHqmMap4HMY4S3qQqlfjJncbs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=r581eu4xW4PvKEa8AiyPsvGZF4Les+jMisaJC7Z2ADg=; b=MsvIASY6o62SVClqbJQQlMq+8vkGSszP/YlOj17FNCbzdYUa6miKofGQHU8rsf4cHb o6cj8308XL4gPj6UIRgxP3IhYyP2wqZaEfmtWmORIFbnJKT7vWfeB/mYPuYVTLu7fW3V IG8iGlJGmoVJgLfoaRjFtFgsn3nZQkVgs3rWwfbJBp6vDBh7a+iwTuM94HM0A9ADjnWr WGxIYrJRj3Pg4pgSTQx+n74tAi959IRaizbBesM1K6FBL6n5Q4E2pV7BvvMdC5NciQfC aPeEMlpgR8obGkrtv02YbbRmRs52hEpHC/mIyIkEMQyN6OSU+4pPY/ZmTtjio1Ic3hlz 3XfA== X-Gm-Message-State: ALoCoQlV+TVItjRWk5VppWkGjvI4geVg8243QzR5LS4Oy0rqMubA6moENW4lNi0wzHrH03Pqp1asLDRDgVt9PNI8DkXVUtT3PtiuLZoF32YGQcSLbYFnA3s= X-Received: by 10.14.88.131 with SMTP id a3mr896622eef.64.1392364459575; Thu, 13 Feb 2014 23:54:19 -0800 (PST) Received: from localhost.localdomain ([91.198.246.8]) by mx.google.com with ESMTPSA id m1sm16629048een.7.2014.02.13.23.54.18 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 13 Feb 2014 23:54:19 -0800 (PST) From: Janusz Dziedzic To: linux-wireless@vger.kernel.org Cc: johannes@sipsolutions.net, mcgrof@do-not-panic.com, linville@tuxdriver.com, Janusz Dziedzic Subject: [PATCH 1/2] cfg80211: regulatory, reset regdomain in case of error Date: Fri, 14 Feb 2014 08:54:00 +0100 Message-Id: <1392364441-4640-1-git-send-email-janusz.dziedzic@tieto.com> X-Mailer: git-send-email 1.7.9.5 X-DomainID: tieto.com Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Reset regdomain to world regdomain in case of errors in set_regdom() function. This will fix a problem with such scenario: - iw reg set US - iw reg set 00 - iw reg set US The last step always fail and we get deadlock in kernel regulatory code. Next setting new regulatory wasn't possible due to: Pending regulatory request, waiting for it to be processed... Signed-off-by: Janusz Dziedzic Acked-by: Luis R. Rodriguez --- net/wireless/reg.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/net/wireless/reg.c b/net/wireless/reg.c index c80f20e..c4c3af1 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -2504,6 +2504,7 @@ static int reg_set_rd_country_ie(const struct ieee80211_regdomain *rd, int set_regdom(const struct ieee80211_regdomain *rd) { struct regulatory_request *lr; + bool user_reset = false; int r; if (!reg_is_valid_request(rd->alpha2)) { @@ -2520,6 +2521,7 @@ int set_regdom(const struct ieee80211_regdomain *rd) break; case NL80211_REGDOM_SET_BY_USER: r = reg_set_rd_user(rd, lr); + user_reset = true; break; case NL80211_REGDOM_SET_BY_DRIVER: r = reg_set_rd_driver(rd, lr); @@ -2533,8 +2535,14 @@ int set_regdom(const struct ieee80211_regdomain *rd) } if (r) { - if (r == -EALREADY) + switch (r) { + case -EALREADY: reg_set_request_processed(); + break; + default: + /* Back to world regulatory in case of errors */ + restore_regulatory_settings(user_reset); + } kfree(rd); return r;