Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp2464075imd; Fri, 2 Nov 2018 11:52:02 -0700 (PDT) X-Google-Smtp-Source: AJdET5dGLGy9B8Mxpnsu3uYtOuXpLc8jVCSeM0URkZ4/DpnFkKYdcvG6JNU2NSrwJ3zLTAgcvsnV X-Received: by 2002:a62:7e93:: with SMTP id z141-v6mr13145032pfc.241.1541184722161; Fri, 02 Nov 2018 11:52:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541184722; cv=none; d=google.com; s=arc-20160816; b=lcUI+Ay089gr3TKPVCvPhuJrzYheWxfpq1znU6Byt3NyCZghKSVCbXULC5r3SVayFB 8y4TRUkup0xr7Ag4qNcdGgMsH/Cfrts1FT/6GGqniy5+Oy5CmHM35rqivQEr6aA+3MY4 CKQGXuWDmgm/+yBkdOgV4IUcGDXNtD+hjksgJYxICiow5ZlqvVXWLq6H7s51sCxCEkks mG5+5ZvixCQOpvNqYFpNxV6/G+gN0ADekUoAfo7ONoNDw8iSVNcgoj0shnjCMXjmnE7X njIWD9dAD2/py41HDuVQlHYFJfk2sU9VCj9JHkgS6SPLw5KcijP1nlu27ETYJfGi6bLf 0D5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Ha/BYgerW0llZWlAgHcl9LwpCYZen0NNaobRvyl0Vzk=; b=Bpu8t32MetlbVwrIHGQyNFkZpGztnrYW/ob3Dnj4QyS8mcytsqMpfrZBTJRpJplv0u uHQJr6/5KV1l8dphFrlHQ3ftl/0zsO2U+xIpQfaOwJfBwVvbgKdEN6VYMO35I2QYEbM8 As9AX2rzx70OeT0sRRWPj166FHm2I3VLdSciLSYc9Ik9q4Z7B0Vvc+ibjy9T5F2SwdI0 Uu3i9L6c63n1Glo8zq0BEbVDqmQWIyBihO6xBzP5hmbZZAUZa6OSoIRoRBsDhC8H+5D5 wSxCHDhfBANHBumndi3KjMrSzy5P+B0T/eoif05fl5voNjT7YIh8ijDsNa/IvyykKpep mbVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=syjCoNUZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l16-v6si34719281pfb.69.2018.11.02.11.51.47; Fri, 02 Nov 2018 11:52:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=syjCoNUZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730938AbeKCD7l (ORCPT + 99 others); Fri, 2 Nov 2018 23:59:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:55392 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728743AbeKCD7l (ORCPT ); Fri, 2 Nov 2018 23:59:41 -0400 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7A48120847; Fri, 2 Nov 2018 18:51:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541184686; bh=AIf9Fx/8sMzOaWeUKZ5O1KZUHF336lznlUIMR0KLVtU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=syjCoNUZOh96WxNkubwcV1qFFBbnLGhBUZnglK5GRHGhX6lCgRGgOGl4WVwwHKQff XsB5HmImG+9ufu/EUQfhMTKTm6QGrIGBXIhEnZNFEpqUNzNpt5JU0Pxwv3WoaGFUSQ cO04LyKBKxhOgpF0UltnQAr212RrpNrxbQz9zcvQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yu Zhao , Johannes Berg , Sasha Levin Subject: [PATCH 4.14 037/143] cfg80211: fix use-after-free in reg_process_hint() Date: Fri, 2 Nov 2018 19:33:42 +0100 Message-Id: <20181102182900.026032800@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181102182857.064326086@linuxfoundation.org> References: <20181102182857.064326086@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 1db58529454742f67ebd96e3588315e880b72837 ] reg_process_hint_country_ie() can free regulatory_request and return REG_REQ_ALREADY_SET. We shouldn't use regulatory_request after it's called. KASAN error was observed when this happens. BUG: KASAN: use-after-free in reg_process_hint+0x839/0x8aa [cfg80211] Read of size 4 at addr ffff8800c430d434 by task kworker/1:3/89 Workqueue: events reg_todo [cfg80211] Call Trace: dump_stack+0xc1/0x10c ? _atomic_dec_and_lock+0x1ad/0x1ad ? _raw_spin_lock_irqsave+0xa0/0xd2 print_address_description+0x86/0x26f ? reg_process_hint+0x839/0x8aa [cfg80211] kasan_report+0x241/0x29b reg_process_hint+0x839/0x8aa [cfg80211] reg_todo+0x204/0x5b9 [cfg80211] process_one_work+0x55f/0x8d0 ? worker_detach_from_pool+0x1b5/0x1b5 ? _raw_spin_unlock_irq+0x65/0xdd ? _raw_spin_unlock_irqrestore+0xf3/0xf3 worker_thread+0x5dd/0x841 ? kthread_parkme+0x1d/0x1d kthread+0x270/0x285 ? pr_cont_work+0xe3/0xe3 ? rcu_read_unlock_sched_notrace+0xca/0xca ret_from_fork+0x22/0x40 Allocated by task 2718: set_track+0x63/0xfa __kmalloc+0x119/0x1ac regulatory_hint_country_ie+0x38/0x329 [cfg80211] __cfg80211_connect_result+0x854/0xadd [cfg80211] cfg80211_rx_assoc_resp+0x3bc/0x4f0 [cfg80211] smsc95xx v1.0.6 ieee80211_sta_rx_queued_mgmt+0x1803/0x7ed5 [mac80211] ieee80211_iface_work+0x411/0x696 [mac80211] process_one_work+0x55f/0x8d0 worker_thread+0x5dd/0x841 kthread+0x270/0x285 ret_from_fork+0x22/0x40 Freed by task 89: set_track+0x63/0xfa kasan_slab_free+0x6a/0x87 kfree+0xdc/0x470 reg_process_hint+0x31e/0x8aa [cfg80211] reg_todo+0x204/0x5b9 [cfg80211] process_one_work+0x55f/0x8d0 worker_thread+0x5dd/0x841 kthread+0x270/0x285 ret_from_fork+0x22/0x40 Signed-off-by: Yu Zhao Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- net/wireless/reg.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 6f032c7b8732..bd91de416035 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -2170,11 +2170,12 @@ static void reg_process_hint(struct regulatory_request *reg_request) { struct wiphy *wiphy = NULL; enum reg_request_treatment treatment; + enum nl80211_reg_initiator initiator = reg_request->initiator; if (reg_request->wiphy_idx != WIPHY_IDX_INVALID) wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx); - switch (reg_request->initiator) { + switch (initiator) { case NL80211_REGDOM_SET_BY_CORE: treatment = reg_process_hint_core(reg_request); break; @@ -2192,7 +2193,7 @@ static void reg_process_hint(struct regulatory_request *reg_request) treatment = reg_process_hint_country_ie(wiphy, reg_request); break; default: - WARN(1, "invalid initiator %d\n", reg_request->initiator); + WARN(1, "invalid initiator %d\n", initiator); goto out_free; } @@ -2207,7 +2208,7 @@ static void reg_process_hint(struct regulatory_request *reg_request) */ if (treatment == REG_REQ_ALREADY_SET && wiphy && wiphy->regulatory_flags & REGULATORY_STRICT_REG) { - wiphy_update_regulatory(wiphy, reg_request->initiator); + wiphy_update_regulatory(wiphy, initiator); wiphy_all_share_dfs_chan_state(wiphy); reg_check_channels(); } -- 2.17.1