Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3688463ybz; Mon, 20 Apr 2020 07:42:03 -0700 (PDT) X-Google-Smtp-Source: APiQypLn/H0PLDXJn6KvAUrufoBVj8lIC+nm2hkySVi1tAEYT7bKRN1nUcMNyps7LlKMK7sojytG X-Received: by 2002:a17:906:4482:: with SMTP id y2mr16014822ejo.234.1587393722955; Mon, 20 Apr 2020 07:42:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587393722; cv=none; d=google.com; s=arc-20160816; b=TwwqzN/qF9zd9yyCtVL8NuACOoh+smRuXPoMkKd8GQXNrWeuYVCL8e8ycsVK7jgfpc L7hJD0IquXUD67mUlLUMjNcVcJTGaZcC8Rv+wWAaFLNPm+aLUxe3m5QnSyowI2JMLxZM eldIyG1tnKUB15xU/ZmiloqhPYg6IhF0jVRtCHdn0u5SV5smzu6MJjW16e3UbeZ6QZ0N gu3dhSPwYmkS9+em/hcm0dbMh+y4Th70VxzEHANP75FBXCOi1tTjzawS3wunXE3XFg4u QuqdPxsG8yXgsUQFntXqk80np/qZkLuFNMcZMWAKeBoKz6JNOjt2Cr5MRt/oHRSRBdBB nEYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=E83LCCR5OyAVEEQDzw3BZGT3kp3WGHgCveGTY6HYQls=; b=dPvt7PQsBqtMIeCFj1rcMRfNGlavS9B+ce/WV4JdHmhZ6Yczby4cWsHlAuwcqs4B/M BdFA9yDruBjbNw0pf1K/GGLLbqi77C0wYK2bLont4h8WzrrbdbAbohGdtedocV84CUdf 5zY9y8d3kKTEVU/GJkL/ieRXYubHanrprT/wLc2xs3VTQwgHAYAfoTseLddMQJa5TF17 GkI2TTROh1gG6d1OElko0/54XKva7idmS2chI9PeYd8T0uhZhV4vEW18/butsxZDPg/k 7IJSsz0lkYNnnOlpn0wT6gRNtLGBwfPf4CcRszO4QJ6g2VsM2PTwaHMf2Jjnn8gtWW/B uVgQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v11si662762ejw.31.2020.04.20.07.41.38; Mon, 20 Apr 2020 07:42:02 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726121AbgDTNPr (ORCPT + 99 others); Mon, 20 Apr 2020 09:15:47 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:49484 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725988AbgDTNPr (ORCPT ); Mon, 20 Apr 2020 09:15:47 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: scerveau) with ESMTPSA id 4773A2A0DCD From: =?UTF-8?q?St=C3=A9phane=20Cerveau?= To: linux-bluetooth@vger.kernel.org Cc: =?UTF-8?q?St=C3=A9phane=20Cerveau?= Subject: [PATCH] [PATCH BlueZ] add hog ref before adding to instances Date: Mon, 20 Apr 2020 15:14:48 +0200 Message-Id: <20200420131448.21796-2-scerveau@collabora.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200420131448.21796-1-scerveau@collabora.com> References: <20200420131448.21796-1-scerveau@collabora.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org To avoid a double hog free, need to add a ref when adding the hog to the slist. This bug has been reproduced with gamepad-8718 which was connecting/disconnecting frantically. Fix also a typo in the method hog_attach_instance --- profiles/input/hog-lib.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c index 9c5c814a7..b9b5d565c 100644 --- a/profiles/input/hog-lib.c +++ b/profiles/input/hog-lib.c @@ -1357,7 +1357,7 @@ static struct bt_hog *hog_new(int fd, const char *name, uint16_t vendor, return hog; } -static void hog_attach_instace(struct bt_hog *hog, +static void hog_attach_instance(struct bt_hog *hog, struct gatt_db_attribute *attr) { struct bt_hog *instance; @@ -1373,14 +1373,14 @@ static void hog_attach_instace(struct bt_hog *hog, if (!instance) return; - hog->instances = g_slist_append(hog->instances, instance); + hog->instances = g_slist_append(hog->instances, bt_hog_ref(instance)); } static void foreach_hog_service(struct gatt_db_attribute *attr, void *user_data) { struct bt_hog *hog = user_data; - hog_attach_instace(hog, attr); + hog_attach_instance(hog, attr); } static void dis_notify(uint8_t source, uint16_t vendor, uint16_t product, @@ -1528,7 +1528,7 @@ static void hog_attach_hog(struct bt_hog *hog, struct gatt_primary *primary) primary->range.end, find_included_cb, instance); bt_hog_attach(instance, hog->attrib); - hog->instances = g_slist_append(hog->instances, instance); + hog->instances = g_slist_append(hog->instances, bt_hog_ref(instance)); } static void primary_cb(uint8_t status, GSList *services, void *user_data) -- 2.17.1