Received: by 2002:a05:7412:3290:b0:fa:6e18:a558 with SMTP id ev16csp471911rdb; Fri, 26 Jan 2024 00:50:53 -0800 (PST) X-Google-Smtp-Source: AGHT+IGD0OeJzFpYsT6GryKBkmQT3fu2rWzhVb7/VHI3YsTrcu8T833UEDYfZQALIY3OPAJGAEtV X-Received: by 2002:a05:620a:1462:b0:783:daad:45c6 with SMTP id j2-20020a05620a146200b00783daad45c6mr62902qkl.124.1706259052672; Fri, 26 Jan 2024 00:50:52 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706259052; cv=pass; d=google.com; s=arc-20160816; b=Pdnsx5H58jj/rS83fHakxIjH8ck8YLsc/eJhhYfiIJXc8GV/o8X+wHvbXwvEuQcLrq QeOS+XSqafk2TrznZm/N4jm9hhhsH3zQ3IaagxDodlBwDvzpxDbI/nwsCLQrlia2bKAC 850YUh5lzJb71ryhLKoBHuVRdtA7fXwFjYgnSLZPlvfZGe28Fw/lFVitdv6oYOEQeQoV qy9/aBD5dAVRyPAlypcqTzBnxJVSkgmI2KY5jzG4qCykEQMsGyoawTjf7etRbSt4gzqN zogt/r3bnUXOHlGYXZwcXDrBsRQEIKUDoUIKgdYzl7PuV9UgUubtt61viSduWG7PmyRd RsJQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:message-id:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:dkim-signature; bh=p99EHBRZllVQ+I/UFUuFLhuTfAlCNeiDolSEaa7EKwk=; fh=MbjekJrYnhqxLILyj5UFh60946+uBeYXD9ZxLZLafrU=; b=otOglHcoSlVSYM0K1C69wsfiOp50Uon7Q4Dvwd2J+BnDpQG8UhHRwNHnA+XIZqI8vI yYlHijbxuSSa5QcYNTcqlgzNnXCvaB3WCdE/iLT7yI+Yd85zH/1MmrX8Jdntp3pOTwAR 4UwHTdOLDayn3GpHcnUBdo/NDUywor5flvhVxlhgBlTx65/h2XHlLjcMfA5QR9JC8DNT 364lvY5/bM9APHPB8kGq2lI8XCFsbRCVt+seOBoqf3eSbmV4NeJ+SQFtLnN2/GsjaBeu 6Z/NLzTaxBvn5LT/RK8GwRvcc8aoodjPlJPPxmUgVhOOlTAbOBTOyTLeg12PyEXT/Cj7 xN0A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b="U3r+7TT/"; arc=pass (i=1 spf=pass spfdomain=flex--apusaka.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-bluetooth+bounces-1400-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-bluetooth+bounces-1400-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id m21-20020a05620a24d500b007839bfb63ccsi948948qkn.172.2024.01.26.00.50.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 00:50:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-bluetooth+bounces-1400-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b="U3r+7TT/"; arc=pass (i=1 spf=pass spfdomain=flex--apusaka.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-bluetooth+bounces-1400-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-bluetooth+bounces-1400-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5C3211C21536 for ; Fri, 26 Jan 2024 08:50:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 854311EB5E; Fri, 26 Jan 2024 06:42:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="U3r+7TT/" X-Original-To: linux-bluetooth@vger.kernel.org Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6500917BAE for ; Fri, 26 Jan 2024 06:42:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706251360; cv=none; b=QipxH9g71uu7SqEgCcpRAVFdD5gTJH+qy6ryBCfLomfmk9SLiVrAwOZs0Vz8QYK3pplDQMoR03WKOEQT4/zwYemY5XrX/tNdZB07rcXJYPJ+Vl13LK395a54y9UnbBHksH84dtbLVK6B77LC5ht+UgdeH/Dn8MTFiaul0HaorWY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706251360; c=relaxed/simple; bh=lvVhfTreY0kg1t8ABLNmkd4izh/oGy3dNOuXjNBtD28=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=bI/ABi0+w3kC2VgZMyU5idPkCODlfncEGLbvAEsgxusVCtQwhrMZz8vkyb1I5lfAIp+zjqeeqNAN/ecK5OurFNuiL1xMbmoPCSfbNDz3kmt06MGJuj0uGA6BBSYuqot2YQCLEQQbvgt8/daxonTuCmHhsUjpM+rqb9Q7Q+khRA4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--apusaka.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=U3r+7TT/; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--apusaka.bounces.google.com Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc2629d180fso797991276.0 for ; Thu, 25 Jan 2024 22:42:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706251357; x=1706856157; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=p99EHBRZllVQ+I/UFUuFLhuTfAlCNeiDolSEaa7EKwk=; b=U3r+7TT/HS7SGV4zcCGDvGTK9rBeNODkJ0MmMYHp1trpVI8BlXA0c831FkQ6QZfMe7 CJsqbblZLrw9A9uacn82Y/XuVozP3YZN928gRIECoNSQ1J/awL8jnfDesMXcuO/NTc33 M/C38mVLzq+s/TQyKz8gJuEAGukolHBt4OMC7pieLdl7XzJS1a/Phch+0ejiHtd0SLiR FLARN3wOkhwDDKLxPpm5XqvVeKu9ew/+skjnu+tP8j8LMnSscqLmLc4IyWZ+oxldKLL8 +8feXjUty2RNaqc8/RaODd13lUGbsnVbf/N/R2cTwMtYUgp9UXIozITotiTjoqlBYCUm cI7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706251357; x=1706856157; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=p99EHBRZllVQ+I/UFUuFLhuTfAlCNeiDolSEaa7EKwk=; b=eOuSxZFMXcQGNKTukHyog/Rmpjy+TLYwEYxozS/289vEWae4XIU5bLHtQXzTiBZVay ORHK4KxfDbmW6hEJhT/aKGlRwLeOwwv+FhwFG3WQhuS0SAiH9Wd+wI9HWxVSC+8xUUgg X3tBKlulClPVlIkRlogYcOgYTxCfRUACHxXf7CwPP/2mvA8MmuAXihKgBcHjzWKK63y0 nFdsEcoAmRtKZbjGf1go9jexoYDGxgJvFq3y5yGj124wnesy6QH0K2Nougo1syTvgIFZ wQhfWP5V5D6jxR/8zuGQU6+Ll1dFQKWq5w65Z1wKq/f8k39Lee6bLSFd6pTyRUiQ1+by rTeQ== X-Gm-Message-State: AOJu0YyhSjXHj9IIFmRX/O7NrjUf5P4uucSHeZZyhZIQ7XOMKgcZJ7kO sX3jj8awGS02v5guPTXPoXXgVz9bZZFRb/lz/AaCvmWvHJOOT4HkF7OBb/I61oGz8H3yrOkjPsz GeCruULecY+/Kzgd/s4ct1c2iIbDvC7DDWSS7OLT9Ptaom62/Jq4mQgW3ATplHc20No6cNw1+e9 qKCQzYch7aYE6bI/AFlkyZAer9040aulzmLyXgsj0pzbf+vFHSYQ== X-Received: from apusaka-p920.tpe.corp.google.com ([2401:fa00:1:17:b27f:9766:7459:4899]) (user=apusaka job=sendgmr) by 2002:a05:6902:e09:b0:dc2:550b:a4f4 with SMTP id df9-20020a0569020e0900b00dc2550ba4f4mr520080ybb.1.1706251357244; Thu, 25 Jan 2024 22:42:37 -0800 (PST) Date: Fri, 26 Jan 2024 14:41:21 +0800 Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126144120.Bluez.1.If74ccbca4d541c5f576765a3a78cb8923b5f85b1@changeid> Subject: [Bluez PATCH] Monitor: Remove handle before assigning From: Archie Pusaka To: linux-bluetooth , Luiz Augusto von Dentz , Johan Hedberg , Marcel Holtmann Cc: CrosBT Upstreaming , Archie Pusaka , Zhengping Jiang Content-Type: text/plain; charset="UTF-8" From: Archie Pusaka It is possible to have some handles not removed, for example the host may decide not to wait for disconnection complete event when it is suspending. In this case, when the peer device reconnected, we might have two of the same handle assigned and create problem down the road. This patch solves the issue by always removing any previous handles when assigning a new handle if they are the same. Reviewed-by: Zhengping Jiang --- monitor/packet.c | 50 +++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/monitor/packet.c b/monitor/packet.c index 42e711cafa..b5dea6384a 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -189,11 +189,33 @@ static struct packet_conn_data *lookup_parent(uint16_t handle) return NULL; } +static void release_handle(uint16_t handle) +{ + int i; + + for (i = 0; i < MAX_CONN; i++) { + struct packet_conn_data *conn = &conn_list[i]; + + if (conn->handle == handle) { + if (conn->destroy) + conn->destroy(conn->data); + + queue_destroy(conn->tx_q, free); + queue_destroy(conn->chan_q, free); + memset(conn, 0, sizeof(*conn)); + conn->handle = 0xffff; + break; + } + } +} + static void assign_handle(uint16_t index, uint16_t handle, uint8_t type, uint8_t *dst, uint8_t dst_type) { int i; + release_handle(handle); + for (i = 0; i < MAX_CONN; i++) { if (conn_list[i].handle == 0xffff) { hci_devba(index, (bdaddr_t *)conn_list[i].src); @@ -225,26 +247,6 @@ static void assign_handle(uint16_t index, uint16_t handle, uint8_t type, } } -static void release_handle(uint16_t handle) -{ - int i; - - for (i = 0; i < MAX_CONN; i++) { - struct packet_conn_data *conn = &conn_list[i]; - - if (conn->handle == handle) { - if (conn->destroy) - conn->destroy(conn->data); - - queue_destroy(conn->tx_q, free); - queue_destroy(conn->chan_q, free); - memset(conn, 0, sizeof(*conn)); - conn->handle = 0xffff; - break; - } - } -} - struct packet_conn_data *packet_get_conn_data(uint16_t handle) { int i; @@ -10076,7 +10078,7 @@ static void conn_complete_evt(struct timeval *tv, uint16_t index, const struct bt_hci_evt_conn_complete *evt = data; print_status(evt->status); - print_handle(evt->handle); + print_field("Handle: %d", le16_to_cpu(evt->handle)); print_bdaddr(evt->bdaddr); print_link_type(evt->link_type); print_enable("Encryption", evt->encr_mode); @@ -10648,7 +10650,7 @@ static void sync_conn_complete_evt(struct timeval *tv, uint16_t index, const struct bt_hci_evt_sync_conn_complete *evt = data; print_status(evt->status); - print_handle(evt->handle); + print_field("Handle: %d", le16_to_cpu(evt->handle)); print_bdaddr(evt->bdaddr); print_link_type(evt->link_type); print_field("Transmission interval: 0x%2.2x", evt->tx_interval); @@ -11077,7 +11079,7 @@ static void le_conn_complete_evt(struct timeval *tv, uint16_t index, const struct bt_hci_evt_le_conn_complete *evt = data; print_status(evt->status); - print_handle(evt->handle); + print_field("Handle: %d", le16_to_cpu(evt->handle)); print_role(evt->role); print_peer_addr_type("Peer address type", evt->peer_addr_type); print_addr("Peer address", evt->peer_addr, evt->peer_addr_type); @@ -11206,7 +11208,7 @@ static void le_enhanced_conn_complete_evt(struct timeval *tv, uint16_t index, const struct bt_hci_evt_le_enhanced_conn_complete *evt = data; print_status(evt->status); - print_handle(evt->handle); + print_field("Handle: %d", le16_to_cpu(evt->handle)); print_role(evt->role); print_peer_addr_type("Peer address type", evt->peer_addr_type); print_addr("Peer address", evt->peer_addr, evt->peer_addr_type); -- 2.43.0.429.g432eaa2c6b-goog