Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp421892pxa; Fri, 21 Aug 2020 10:39:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxDeFspfAEpsOf1A2BRgBZEB70y8PUBt7UGXm3O7CqKxJmDhEYFrk/62h0SwEk6VbLTRXnH X-Received: by 2002:a17:906:f143:: with SMTP id gw3mr4180979ejb.125.1598031546138; Fri, 21 Aug 2020 10:39:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598031546; cv=none; d=google.com; s=arc-20160816; b=JenakPICH/uFrPgu16cq3qwexqFKDWhq07KzQ02Iwpx4O33SawlgKE2pIruASqX0FQ RBYWp1Ffa99iRYs+n4PyJQS+k/s3jaPzaMw44IsWM729jL16g8TiFMxZlmOrIi7gwQiH C9Oft/WPl/Zez0dpDh6fsfyeWemamIf5l1wIvwHrgiSWBEAgRYG4lLmi3r27gmwwuTLl cjt1W63qgvbKgetrqjjzC1qqm3ywTcOszgoO8rCqmHsKGqNZK/yrGECK2ST1e8PnVfby y/KnKd6cobGx5MsKcngGIUaF9QTiVC7lDXz1KyLSi/ZtvGmZcPk2a7HuASTAgx4txBw7 USHQ== 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=YJmswrb/1hl1zCBlFoKUJMBSjl/y77PLsJckIS2x4MU=; b=KambJvZN776yhhjefZFK1demXq4NfNZzAiDxFG/ddYEX36BrJWjGcKlu0rve8RdQ6K YrQ6ySmprSIB5kVKyTNCUjUzN6N8ly3zvGJcevlor28fW171mAgtCAPgGvHANlsfU7AJ c96nB8y5q38PcKtxlTCAqeytKwkKNpJ2l2woX/YkMdCB3fKo/JPKwKqqchGW5KVv+afQ 6h6Skbekp33SpHs+mLYptasxE3VFvmzByKeMpT8PL9kW50200Ge5hEZfKmk0ZPwZTHGj 4kXnBkg2vmGJxySdGaJjFlI+1nzUWJd3KwdQz8QeuNpKq+6oPx9Qzo0nMMgCTdy3i9lp Uazg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="lAY3R/2R"; 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 k19si1594351ejz.79.2020.08.21.10.38.41; Fri, 21 Aug 2020 10:39:06 -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="lAY3R/2R"; 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 S1726300AbgHURig (ORCPT + 99 others); Fri, 21 Aug 2020 13:38:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725820AbgHURid (ORCPT ); Fri, 21 Aug 2020 13:38:33 -0400 Received: from mail-ot1-x341.google.com (mail-ot1-x341.google.com [IPv6:2607:f8b0:4864:20::341]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D482C061573 for ; Fri, 21 Aug 2020 10:38:33 -0700 (PDT) Received: by mail-ot1-x341.google.com with SMTP id x24so2201312otp.3 for ; Fri, 21 Aug 2020 10:38:33 -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=YJmswrb/1hl1zCBlFoKUJMBSjl/y77PLsJckIS2x4MU=; b=lAY3R/2R1JkSdonBYRdHszJGrQJwmY96kCd/JOejJkUKFnwFHxo+MvpcM2+KiL6D/h gXOmIjOsACBGEOqbYUCpexfJPn8CYxqvpyCZ/rGS1hqDeoMlTsNLjroZBTO71TmWhFzI PEOEf6qMeMGNFJYO260Ktu5wilQ3Gua0PLvr3GiKxbP6bHV5YjqU0MFPCB3cWhnzewY7 mbVLkt6w3+A6o1imNtRBJ1yhQnv/l8QUqOfIDLbBaQQwZDtJGDfF8yOBAFkMcsQBvErz jp/CrxRjd/BBB7zVfzLCgI8iH30f8dXw2daUI5l2nEdnaxFZo9T6TI/dtRfO6luYaCpF 6i5g== 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=YJmswrb/1hl1zCBlFoKUJMBSjl/y77PLsJckIS2x4MU=; b=som+qkkQaGddiikTxoxsRKlqSwA1yoFdncgEVm4G6bfjhnpGG/rtSBK5+UO2q1AX1w eJr0eb/FPsEiABqsVHRXpDg4UocM08cVoqPNSsYcagfPGYleWqCh+XlxuKrwvEsPyPXW hjkYATZzZ0IV+baEbI8SfWeyjFKIupDEzYl29PnVri1X0wpTd3w9Cug/3gLAH3sPlq7r lpVM9u7M3pDOC+UaEUqF6H8qOttB3cTD82OLv+fxrjm76SvQgL7UEALhzK/3cl6jzztk neA1rstlvneg5qbra7uLOupyqTyBH0qDsE84dNm77amWWiRAr1Zm3xaSkA/9pcmxXIvn SCug== X-Gm-Message-State: AOAM531iiZiBwwj9fJT3rjsBbS8ugR4HO6fPohexSiRsaTiawTLRLl/I fbhhtHk95NPea9nbbsp7Joiz8T0Cxt6RHc/wta7EmlM+ X-Received: by 2002:a9d:429:: with SMTP id 38mr2660925otc.88.1598031512441; Fri, 21 Aug 2020 10:38:32 -0700 (PDT) MIME-Version: 1.0 References: <20200821073714.19626-1-sonnysasaka@chromium.org> In-Reply-To: <20200821073714.19626-1-sonnysasaka@chromium.org> From: Luiz Augusto von Dentz Date: Fri, 21 Aug 2020 10:38:22 -0700 Message-ID: Subject: Re: [PATCH BlueZ] 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 12:42 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 | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/src/adapter.c b/src/adapter.c > index 5e896a9f0..c0b02bf3f 100644 > --- a/src/adapter.c > +++ b/src/adapter.c > @@ -5316,12 +5316,25 @@ 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. Please use C style comments. > + remove_discovery_list(adapter); > + > if (adapter->pairable_timeout_id > 0) { > g_source_remove(adapter->pairable_timeout_id); > adapter->pairable_timeout_id = 0; > @@ -6846,11 +6859,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 Otherwise it looks good. -- Luiz Augusto von Dentz