Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp519258pxa; Fri, 21 Aug 2020 13:18:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymISsZGS6J6I7rtc+iPgvp/JLcJlMvxsBfvhQNoI0G1fOcKNSyfgiqQUpWhaYWBKCACw7w X-Received: by 2002:a17:906:d18c:: with SMTP id c12mr4419284ejz.151.1598041117481; Fri, 21 Aug 2020 13:18:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598041117; cv=none; d=google.com; s=arc-20160816; b=chMgAkCn1AvMLdjMfZWEHVe5JlXgQmMdURWbNfcvF0IoeNwiNjVkxP+8xKeMQJPWDT ESWvhW3pajf/RNxKouyKV598MNTEc3FChnV5c+sAh44bE58IF9zZ1R9iJaU/r3Iw2jYQ hqmUss0uQSZJEhvtf7o6PrXJidg4YCA61wfAXk3N+duScW7bZKcqefShcVHnmYPA4Sic tarXTN5Z4bqmMKolgWC9Y7BYByFLaNleE6InbaCpZwLJDQ9p2kMbt2MYYWr7OeFd390F EThm3N0hxaIBVAMqfBE+MhnSOCi/N9WJzGwQU4Pfb2cyXfF2Vc9Ei75WFcWDM3wEVvfZ MYWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=d6+9BOhrR5CBMlphNNJg78sYIPRCwjEjB32dZ4UOiP8=; b=zMaBe131u8ISQIdkfZmr/u0x2wtLNePAhDB9SYn21c8RAj0i8BNy+18vn0Ot7IFhi8 pTiOSvpyYd1oCxopJfKOrYWrH3QIyT/fYiK53O5Fj2b+eSl22mNobW+oj+IfhaAMqUYA 9mV4ujQGSRryQk6qILhAs5IhuayCNaov4jRosAVwIjXwVgcxC2sidbKgCOwzPLbgOwRB ++pkmevicA3ETyDn4K66L1mNU7APQQeS101xf3UJmz05xgSToq2Qrrw9H/efkW14rqyc 1WK6FtVW9bX2983lBRIpsKDha7GGc6QCa36anOJ0P8Uokg2FHTfyr5siZ09nQ6T2mRh3 VkPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=sKP31evN; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id md1si1813601ejb.344.2020.08.21.13.18.12; Fri, 21 Aug 2020 13:18:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=sKP31evN; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726639AbgHUUSI (ORCPT + 99 others); Fri, 21 Aug 2020 16:18:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42098 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725831AbgHUUSH (ORCPT ); Fri, 21 Aug 2020 16:18:07 -0400 Received: from mail-oi1-x243.google.com (mail-oi1-x243.google.com [IPv6:2607:f8b0:4864:20::243]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 65E66C061573 for ; Fri, 21 Aug 2020 13:18:07 -0700 (PDT) Received: by mail-oi1-x243.google.com with SMTP id l204so2594131oib.3 for ; Fri, 21 Aug 2020 13:18:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=d6+9BOhrR5CBMlphNNJg78sYIPRCwjEjB32dZ4UOiP8=; b=sKP31evNtzPaZ5YQ7YoXYtGf+tqmE9Y8cYqFQEJgVhJj2crmM8mYDMZ5cmK53BMaz6 I2JphjG3ymla+TsHSGOq6YYjJdicJ+EH2dlotPFg0qidBKEt2NrpE5IKx2Na/dxoBx0E cqejfOYkzFljIDQO4ZjSmewT66fbDV94gh327LWBYW2TZxFlD8Wupjm6JZr2h7O6XEXr +QH3vAJyo9LpTqs6iKoYEVBcSlZSaoJLsVzXKNBe3yRaebzC5bTdn1Te3oJjx0iFwHut mWrdiJuYBRXrbOOx6crBi+8sotHYdxfuS7Mrm+rYsjoE/PMmsMRwArd5865NcNJSDDen C21Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=d6+9BOhrR5CBMlphNNJg78sYIPRCwjEjB32dZ4UOiP8=; b=od1xT0A4eOWj7vBfRG6q+vNEpwAzufbxKg1TQ23WIfw+HY1QfZ17EW9JVHkgaMsaI7 H4RNPCJ892qtLIt0uuBMxnkzgJ8h7DxwSumhj9nCLen9oWjnG5M/DTdVhfjSuO/Aoh0x +k64IcWzLUTbqxNgsDNXQle6HvUyHKwuUCIweyt+2rlEzwnPZ0Rgsk/dcrc6v+QPV4Kr oAkMPxSG51RD+WmqnkLkxbwJxZ2Y5rYLFaRkPF656FyJ7a0/KSslmghv9y/EFcRxdABx 14mHHR9eJ9BQW7Oma69bil8lF08NbK0jbwVbDiUP8GFakOPX7T0z1VE6pStJiLKYq2yT Si9A== X-Gm-Message-State: AOAM533uEqM8eUey0crJS77xkC4Cg/qn11C7r/G/3EfDHEAncN0Yawjq krxh+hbWSybxGcUu5CNq2NehaprDAcKwM5h+q4q6tBZd X-Received: by 2002:aca:cc50:: with SMTP id c77mr2767021oig.152.1598041086759; Fri, 21 Aug 2020 13:18:06 -0700 (PDT) MIME-Version: 1.0 References: <20200821175838.20761-1-sonnysasaka@chromium.org> In-Reply-To: <20200821175838.20761-1-sonnysasaka@chromium.org> From: Luiz Augusto von Dentz Date: Fri, 21 Aug 2020 13:17:56 -0700 Message-ID: Subject: Re: [PATCH BlueZ v2] adapter: Fix crash in discovery_disconnect To: Sonny Sasaka Cc: "linux-bluetooth@vger.kernel.org" , Miao-chen Chou Content-Type: text/plain; charset="UTF-8" Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Hi Sonny, On Fri, Aug 21, 2020 at 11:00 AM Sonny Sasaka wrote: > > discovery_disconnect crashed because the adapter pointer has been freed > before. This patch makes sure that discovery list is cleaned up before > adapter pointer is freed. > > Reviewed-by: Miao-chen Chou > > --- > src/adapter.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/src/adapter.c b/src/adapter.c > index 5e896a9f0..1435e2bd7 100644 > --- a/src/adapter.c > +++ b/src/adapter.c > @@ -5316,12 +5316,26 @@ static void free_service_auth(gpointer data, gpointer user_data) > g_free(auth); > } > > +static void remove_discovery_list(struct btd_adapter *adapter) > +{ > + g_slist_free_full(adapter->set_filter_list, discovery_free); > + adapter->set_filter_list = NULL; > + > + g_slist_free_full(adapter->discovery_list, discovery_free); > + adapter->discovery_list = NULL; > +} > + > static void adapter_free(gpointer user_data) > { > struct btd_adapter *adapter = user_data; > > DBG("%p", adapter); > > + /* Make sure the adapter's discovery list is cleaned up before freeing > + * the adapter. > + */ > + remove_discovery_list(adapter); > + > if (adapter->pairable_timeout_id > 0) { > g_source_remove(adapter->pairable_timeout_id); > adapter->pairable_timeout_id = 0; > @@ -6846,11 +6860,7 @@ static void adapter_stop(struct btd_adapter *adapter) > > cancel_passive_scanning(adapter); > > - g_slist_free_full(adapter->set_filter_list, discovery_free); > - adapter->set_filter_list = NULL; > - > - g_slist_free_full(adapter->discovery_list, discovery_free); > - adapter->discovery_list = NULL; > + remove_discovery_list(adapter); > > discovery_cleanup(adapter, 0); > > -- > 2.26.2 Applied, thanks. -- Luiz Augusto von Dentz