From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B21E2C432BE for ; Thu, 29 Jul 2021 11:30:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 994AB60F45 for ; Thu, 29 Jul 2021 11:30:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233638AbhG2LaY convert rfc822-to-8bit (ORCPT ); Thu, 29 Jul 2021 07:30:24 -0400 Received: from coyote.holtmann.net ([212.227.132.17]:35408 "EHLO mail.holtmann.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231837AbhG2LaU (ORCPT ); Thu, 29 Jul 2021 07:30:20 -0400 Received: from smtpclient.apple (p5b3d23f8.dip0.t-ipconnect.de [91.61.35.248]) by mail.holtmann.org (Postfix) with ESMTPSA id 5FDB1CED14; Thu, 29 Jul 2021 13:30:15 +0200 (CEST) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.100.0.2.22\)) Subject: Re: [PATCH v4] Bluetooth: schedule SCO timeouts with delayed_work From: Marcel Holtmann In-Reply-To: <20210728071721.411669-1-desmondcheongzx@gmail.com> Date: Thu, 29 Jul 2021 13:30:14 +0200 Cc: Johan Hedberg , Luiz Augusto von Dentz , "David S. Miller" , Jakub Kicinski , linux-bluetooth , "open list:NETWORKING [GENERAL]" , open list , skhan@linuxfoundation.org, Greg Kroah-Hartman , linux-kernel-mentees@lists.linuxfoundation.org, syzbot+2f6d7c28bb4bf7e82060@syzkaller.appspotmail.com Content-Transfer-Encoding: 8BIT Message-Id: <565F72A4-F9B6-430F-A35D-8EAC7545C141@holtmann.org> References: <20210728071721.411669-1-desmondcheongzx@gmail.com> To: Desmond Cheong Zhi Xi X-Mailer: Apple Mail (2.3654.100.0.2.22) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Desmond, > struct sock.sk_timer should be used as a sock cleanup timer. However, > SCO uses it to implement sock timeouts. > > This causes issues because struct sock.sk_timer's callback is run in > an IRQ context, and the timer callback function sco_sock_timeout takes > a spin lock on the socket. However, other functions such as > sco_conn_del, sco_conn_ready, rfcomm_connect_ind, and > bt_accept_enqueue also take the spin lock with interrupts enabled. > > This inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} lock usage could > lead to deadlocks as reported by Syzbot [1]: > CPU0 > ---- > lock(slock-AF_BLUETOOTH-BTPROTO_SCO); > > lock(slock-AF_BLUETOOTH-BTPROTO_SCO); > > To fix this, we use delayed work to implement SCO sock timouts > instead. This allows us to avoid taking the spin lock on the socket in > an IRQ context, and corrects the misuse of struct sock.sk_timer. > > Link: https://syzkaller.appspot.com/bug?id=9089d89de0502e120f234ca0fc8a703f7368b31e [1] > Reported-by: syzbot+2f6d7c28bb4bf7e82060@syzkaller.appspotmail.com > Signed-off-by: Desmond Cheong Zhi Xi > --- > > Hi, > > As suggested, this patch addresses the inconsistent lock state while > avoiding having to deal with local_bh_disable. > > Now that sco_sock_timeout is no longer run in IRQ context, it might > be the case that bh_lock_sock is no longer needed to sync between > SOFTIRQ and user contexts, so we can switch to lock_sock. > > I'm not too certain about this, or if there's any benefit to using > lock_sock instead, so I've left that out of this patch. I don’t see a reason why we can’t switch to lock_sock, but lets do that in a separate patch in case I missed something it is easier to revert. > > v3 -> v4: > - Switch to using delayed_work to schedule SCO sock timeouts instead > of using local_bh_disable. As suggested by Luiz Augusto von Dentz. > > v2 -> v3: > - Split SCO and RFCOMM code changes, as suggested by Luiz Augusto von > Dentz. > - Simplify local bh disabling in SCO by using local_bh_disable/enable > inside sco_chan_del since local_bh_disable/enable pairs are reentrant. > > v1 -> v2: > - Instead of pulling out the clean-up code out from sco_chan_del and > using it directly in sco_conn_del, disable local softirqs for relevant > sections. > - Disable local softirqs more thoroughly for instances of > bh_lock_sock/bh_lock_sock_nested in the bluetooth subsystem. > Specifically, the calls in af_bluetooth.c and rfcomm/sock.c are now made > with local softirqs disabled as well. > > Best wishes, > Desmond > > net/bluetooth/sco.c | 39 ++++++++++++++++++++++++--------------- > 1 file changed, 24 insertions(+), 15 deletions(-) > > diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c > index 3bd41563f118..b6dd16153d38 100644 > --- a/net/bluetooth/sco.c > +++ b/net/bluetooth/sco.c > @@ -48,6 +48,8 @@ struct sco_conn { > spinlock_t lock; > struct sock *sk; > > + struct delayed_work sk_timer; > + I don’t like the sk_timer name. That is confusing. Maybe better use timeout_work or to_work. The sk_* are really more struct sock fields (hence the sk->sk_xyz naming schema). > unsigned int mtu; > }; > > @@ -74,9 +76,11 @@ struct sco_pinfo { > #define SCO_CONN_TIMEOUT (HZ * 40) > #define SCO_DISCONN_TIMEOUT (HZ * 2) > > -static void sco_sock_timeout(struct timer_list *t) > +static void sco_sock_timeout(struct work_struct *work) > { > - struct sock *sk = from_timer(sk, t, sk_timer); > + struct sco_conn *conn = container_of(work, struct sco_conn, > + sk_timer.work); > + struct sock *sk = conn->sk; > > BT_DBG("sock %p state %d", sk, sk->sk_state); > > @@ -89,16 +93,18 @@ static void sco_sock_timeout(struct timer_list *t) > sock_put(sk); > } > > -static void sco_sock_set_timer(struct sock *sk, long timeout) > +static void sco_sock_set_timer(struct sock *sk, struct delayed_work *work, > + long timeout) > { I don’t get the extra variable here. Can we not just pass in struct hci_conn. > BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout); > - sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout); > + cancel_delayed_work(work); > + schedule_delayed_work(work, timeout); > } > > -static void sco_sock_clear_timer(struct sock *sk) > +static void sco_sock_clear_timer(struct sock *sk, struct delayed_work *work) > { > BT_DBG("sock %p state %d", sk, sk->sk_state); > - sk_stop_timer(sk, &sk->sk_timer); > + cancel_delayed_work(work); Same as above, we pass in struct sock just for the debug message. > } > > /* ---- SCO connections ---- */ > @@ -174,7 +180,7 @@ static void sco_conn_del(struct hci_conn *hcon, int err) > if (sk) { > sock_hold(sk); > bh_lock_sock(sk); > - sco_sock_clear_timer(sk); > + sco_sock_clear_timer(sk, &conn->sk_timer); > sco_chan_del(sk, err); > bh_unlock_sock(sk); > sco_sock_kill(sk); > @@ -193,6 +199,8 @@ static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, > sco_pi(sk)->conn = conn; > conn->sk = sk; > > + INIT_DELAYED_WORK(&conn->sk_timer, sco_sock_timeout); > + > if (parent) > bt_accept_enqueue(parent, sk, true); > } > @@ -260,11 +268,11 @@ static int sco_connect(struct sock *sk) > goto done; > > if (hcon->state == BT_CONNECTED) { > - sco_sock_clear_timer(sk); > + sco_sock_clear_timer(sk, &conn->sk_timer); > sk->sk_state = BT_CONNECTED; > } else { > sk->sk_state = BT_CONNECT; > - sco_sock_set_timer(sk, sk->sk_sndtimeo); > + sco_sock_set_timer(sk, &conn->sk_timer, sk->sk_sndtimeo); > } > > done: > @@ -419,7 +427,8 @@ static void __sco_sock_close(struct sock *sk) > case BT_CONFIG: > if (sco_pi(sk)->conn->hcon) { > sk->sk_state = BT_DISCONN; > - sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT); > + sco_sock_set_timer(sk, &sco_pi(sk)->conn->sk_timer, > + SCO_DISCONN_TIMEOUT); > sco_conn_lock(sco_pi(sk)->conn); > hci_conn_drop(sco_pi(sk)->conn->hcon); > sco_pi(sk)->conn->hcon = NULL; > @@ -443,7 +452,8 @@ static void __sco_sock_close(struct sock *sk) > /* Must be called on unlocked socket. */ > static void sco_sock_close(struct sock *sk) > { > - sco_sock_clear_timer(sk); > + if (sco_pi(sk)->conn) > + sco_sock_clear_timer(sk, &sco_pi(sk)->conn->sk_timer); > lock_sock(sk); > __sco_sock_close(sk); > release_sock(sk); > @@ -500,8 +510,6 @@ static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, > > sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT; > > - timer_setup(&sk->sk_timer, sco_sock_timeout, 0); > - > bt_sock_link(&sco_sk_list, sk); > return sk; > } > @@ -1036,7 +1044,8 @@ static int sco_sock_shutdown(struct socket *sock, int how) > > if (!sk->sk_shutdown) { > sk->sk_shutdown = SHUTDOWN_MASK; > - sco_sock_clear_timer(sk); > + if (sco_pi(sk)->conn) > + sco_sock_clear_timer(sk, &sco_pi(sk)->conn->sk_timer); > __sco_sock_close(sk); > > if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && > @@ -1083,7 +1092,7 @@ static void sco_conn_ready(struct sco_conn *conn) > BT_DBG("conn %p", conn); > > if (sk) { > - sco_sock_clear_timer(sk); > + sco_sock_clear_timer(sk, &conn->sk_timer); > bh_lock_sock(sk); > sk->sk_state = BT_CONNECTED; > sk->sk_state_change(sk); Other than these minor cleanups, this looks great. Regards Marcel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AE00FC4338F for ; Thu, 29 Jul 2021 11:30:25 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0196760F01 for ; Thu, 29 Jul 2021 11:30:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 0196760F01 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=holtmann.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.linuxfoundation.org Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id BDF5682751; Thu, 29 Jul 2021 11:30:24 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id EFd5b13YU3yg; Thu, 29 Jul 2021 11:30:22 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id C20EB828DA; Thu, 29 Jul 2021 11:30:22 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 7AA93C0010; Thu, 29 Jul 2021 11:30:22 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 457D7C000E for ; Thu, 29 Jul 2021 11:30:21 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 20EB740541 for ; Thu, 29 Jul 2021 11:30:21 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8fikhx1UTsxx for ; Thu, 29 Jul 2021 11:30:18 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 Received: from mail.holtmann.org (coyote.holtmann.net [212.227.132.17]) by smtp4.osuosl.org (Postfix) with ESMTP id 55E8440538 for ; Thu, 29 Jul 2021 11:30:17 +0000 (UTC) Received: from smtpclient.apple (p5b3d23f8.dip0.t-ipconnect.de [91.61.35.248]) by mail.holtmann.org (Postfix) with ESMTPSA id 5FDB1CED14; Thu, 29 Jul 2021 13:30:15 +0200 (CEST) Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.100.0.2.22\)) Subject: Re: [PATCH v4] Bluetooth: schedule SCO timeouts with delayed_work From: Marcel Holtmann In-Reply-To: <20210728071721.411669-1-desmondcheongzx@gmail.com> Date: Thu, 29 Jul 2021 13:30:14 +0200 Message-Id: <565F72A4-F9B6-430F-A35D-8EAC7545C141@holtmann.org> References: <20210728071721.411669-1-desmondcheongzx@gmail.com> To: Desmond Cheong Zhi Xi X-Mailer: Apple Mail (2.3654.100.0.2.22) Cc: Johan Hedberg , "open list:NETWORKING \[GENERAL\]" , open list , linux-bluetooth , syzbot+2f6d7c28bb4bf7e82060@syzkaller.appspotmail.com, Luiz Augusto von Dentz , Jakub Kicinski , linux-kernel-mentees@lists.linuxfoundation.org, "David S. Miller" X-BeenThere: linux-kernel-mentees@lists.linuxfoundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-kernel-mentees-bounces@lists.linuxfoundation.org Sender: "Linux-kernel-mentees" SGkgRGVzbW9uZCwKCj4gc3RydWN0IHNvY2suc2tfdGltZXIgc2hvdWxkIGJlIHVzZWQgYXMgYSBz b2NrIGNsZWFudXAgdGltZXIuIEhvd2V2ZXIsCj4gU0NPIHVzZXMgaXQgdG8gaW1wbGVtZW50IHNv Y2sgdGltZW91dHMuCj4gCj4gVGhpcyBjYXVzZXMgaXNzdWVzIGJlY2F1c2Ugc3RydWN0IHNvY2su c2tfdGltZXIncyBjYWxsYmFjayBpcyBydW4gaW4KPiBhbiBJUlEgY29udGV4dCwgYW5kIHRoZSB0 aW1lciBjYWxsYmFjayBmdW5jdGlvbiBzY29fc29ja190aW1lb3V0IHRha2VzCj4gYSBzcGluIGxv Y2sgb24gdGhlIHNvY2tldC4gSG93ZXZlciwgb3RoZXIgZnVuY3Rpb25zIHN1Y2ggYXMKPiBzY29f Y29ubl9kZWwsIHNjb19jb25uX3JlYWR5LCByZmNvbW1fY29ubmVjdF9pbmQsIGFuZAo+IGJ0X2Fj Y2VwdF9lbnF1ZXVlIGFsc28gdGFrZSB0aGUgc3BpbiBsb2NrIHdpdGggaW50ZXJydXB0cyBlbmFi bGVkLgo+IAo+IFRoaXMgaW5jb25zaXN0ZW50IHtTT0ZUSVJRLU9OLVd9IC0+IHtJTi1TT0ZUSVJR LVd9IGxvY2sgdXNhZ2UgY291bGQKPiBsZWFkIHRvIGRlYWRsb2NrcyBhcyByZXBvcnRlZCBieSBT eXpib3QgWzFdOgo+ICAgICAgIENQVTAKPiAgICAgICAtLS0tCj4gIGxvY2soc2xvY2stQUZfQkxV RVRPT1RILUJUUFJPVE9fU0NPKTsKPiAgPEludGVycnVwdD4KPiAgICBsb2NrKHNsb2NrLUFGX0JM VUVUT09USC1CVFBST1RPX1NDTyk7Cj4gCj4gVG8gZml4IHRoaXMsIHdlIHVzZSBkZWxheWVkIHdv cmsgdG8gaW1wbGVtZW50IFNDTyBzb2NrIHRpbW91dHMKPiBpbnN0ZWFkLiBUaGlzIGFsbG93cyB1 cyB0byBhdm9pZCB0YWtpbmcgdGhlIHNwaW4gbG9jayBvbiB0aGUgc29ja2V0IGluCj4gYW4gSVJR IGNvbnRleHQsIGFuZCBjb3JyZWN0cyB0aGUgbWlzdXNlIG9mIHN0cnVjdCBzb2NrLnNrX3RpbWVy Lgo+IAo+IExpbms6IGh0dHBzOi8vc3l6a2FsbGVyLmFwcHNwb3QuY29tL2J1Zz9pZD05MDg5ZDg5 ZGUwNTAyZTEyMGYyMzRjYTBmYzhhNzAzZjczNjhiMzFlIFsxXQo+IFJlcG9ydGVkLWJ5OiBzeXpi b3QrMmY2ZDdjMjhiYjRiZjdlODIwNjBAc3l6a2FsbGVyLmFwcHNwb3RtYWlsLmNvbQo+IFNpZ25l ZC1vZmYtYnk6IERlc21vbmQgQ2hlb25nIFpoaSBYaSA8ZGVzbW9uZGNoZW9uZ3p4QGdtYWlsLmNv bT4KPiAtLS0KPiAKPiBIaSwKPiAKPiBBcyBzdWdnZXN0ZWQsIHRoaXMgcGF0Y2ggYWRkcmVzc2Vz IHRoZSBpbmNvbnNpc3RlbnQgbG9jayBzdGF0ZSB3aGlsZQo+IGF2b2lkaW5nIGhhdmluZyB0byBk ZWFsIHdpdGggbG9jYWxfYmhfZGlzYWJsZS4KPiAKPiBOb3cgdGhhdCBzY29fc29ja190aW1lb3V0 IGlzIG5vIGxvbmdlciBydW4gaW4gSVJRIGNvbnRleHQsIGl0IG1pZ2h0Cj4gYmUgdGhlIGNhc2Ug dGhhdCBiaF9sb2NrX3NvY2sgaXMgbm8gbG9uZ2VyIG5lZWRlZCB0byBzeW5jIGJldHdlZW4KPiBT T0ZUSVJRIGFuZCB1c2VyIGNvbnRleHRzLCBzbyB3ZSBjYW4gc3dpdGNoIHRvIGxvY2tfc29jay4K PiAKPiBJJ20gbm90IHRvbyBjZXJ0YWluIGFib3V0IHRoaXMsIG9yIGlmIHRoZXJlJ3MgYW55IGJl bmVmaXQgdG8gdXNpbmcKPiBsb2NrX3NvY2sgaW5zdGVhZCwgc28gSSd2ZSBsZWZ0IHRoYXQgb3V0 IG9mIHRoaXMgcGF0Y2guCgpJIGRvbuKAmXQgc2VlIGEgcmVhc29uIHdoeSB3ZSBjYW7igJl0IHN3 aXRjaCB0byBsb2NrX3NvY2ssIGJ1dCBsZXRzIGRvIHRoYXQgaW4gYSBzZXBhcmF0ZSBwYXRjaCBp biBjYXNlIEkgbWlzc2VkIHNvbWV0aGluZyBpdCBpcyBlYXNpZXIgdG8gcmV2ZXJ0LgoKPiAKPiB2 MyAtPiB2NDoKPiAtIFN3aXRjaCB0byB1c2luZyBkZWxheWVkX3dvcmsgdG8gc2NoZWR1bGUgU0NP IHNvY2sgdGltZW91dHMgaW5zdGVhZAo+IG9mIHVzaW5nIGxvY2FsX2JoX2Rpc2FibGUuIEFzIHN1 Z2dlc3RlZCBieSBMdWl6IEF1Z3VzdG8gdm9uIERlbnR6Lgo+IAo+IHYyIC0+IHYzOgo+IC0gU3Bs aXQgU0NPIGFuZCBSRkNPTU0gY29kZSBjaGFuZ2VzLCBhcyBzdWdnZXN0ZWQgYnkgTHVpeiBBdWd1 c3RvIHZvbgo+IERlbnR6Lgo+IC0gU2ltcGxpZnkgbG9jYWwgYmggZGlzYWJsaW5nIGluIFNDTyBi eSB1c2luZyBsb2NhbF9iaF9kaXNhYmxlL2VuYWJsZQo+IGluc2lkZSBzY29fY2hhbl9kZWwgc2lu Y2UgbG9jYWxfYmhfZGlzYWJsZS9lbmFibGUgcGFpcnMgYXJlIHJlZW50cmFudC4KPiAKPiB2MSAt PiB2MjoKPiAtIEluc3RlYWQgb2YgcHVsbGluZyBvdXQgdGhlIGNsZWFuLXVwIGNvZGUgb3V0IGZy b20gc2NvX2NoYW5fZGVsIGFuZAo+IHVzaW5nIGl0IGRpcmVjdGx5IGluIHNjb19jb25uX2RlbCwg ZGlzYWJsZSBsb2NhbCBzb2Z0aXJxcyBmb3IgcmVsZXZhbnQKPiBzZWN0aW9ucy4KPiAtIERpc2Fi bGUgbG9jYWwgc29mdGlycXMgbW9yZSB0aG9yb3VnaGx5IGZvciBpbnN0YW5jZXMgb2YKPiBiaF9s b2NrX3NvY2svYmhfbG9ja19zb2NrX25lc3RlZCBpbiB0aGUgYmx1ZXRvb3RoIHN1YnN5c3RlbS4K PiBTcGVjaWZpY2FsbHksIHRoZSBjYWxscyBpbiBhZl9ibHVldG9vdGguYyBhbmQgcmZjb21tL3Nv Y2suYyBhcmUgbm93IG1hZGUKPiB3aXRoIGxvY2FsIHNvZnRpcnFzIGRpc2FibGVkIGFzIHdlbGwu Cj4gCj4gQmVzdCB3aXNoZXMsCj4gRGVzbW9uZAo+IAo+IG5ldC9ibHVldG9vdGgvc2NvLmMgfCAz OSArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiAxIGZpbGUgY2hhbmdl ZCwgMjQgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL25l dC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCj4gaW5kZXggM2JkNDE1NjNm MTE4Li5iNmRkMTYxNTNkMzggMTAwNjQ0Cj4gLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYwo+ICsr KyBiL25ldC9ibHVldG9vdGgvc2NvLmMKPiBAQCAtNDgsNiArNDgsOCBAQCBzdHJ1Y3Qgc2NvX2Nv bm4gewo+IAlzcGlubG9ja190CWxvY2s7Cj4gCXN0cnVjdCBzb2NrCSpzazsKPiAKPiArCXN0cnVj dCBkZWxheWVkX3dvcmsJc2tfdGltZXI7Cj4gKwoKSSBkb27igJl0IGxpa2UgdGhlIHNrX3RpbWVy IG5hbWUuIFRoYXQgaXMgY29uZnVzaW5nLiBNYXliZSBiZXR0ZXIgdXNlIHRpbWVvdXRfd29yayBv ciB0b193b3JrLiBUaGUgc2tfKiBhcmUgcmVhbGx5IG1vcmUgc3RydWN0IHNvY2sgZmllbGRzICho ZW5jZSB0aGUgc2stPnNrX3h5eiBuYW1pbmcgc2NoZW1hKS4KCj4gCXVuc2lnbmVkIGludCAgICBt dHU7Cj4gfTsKPiAKPiBAQCAtNzQsOSArNzYsMTEgQEAgc3RydWN0IHNjb19waW5mbyB7Cj4gI2Rl ZmluZSBTQ09fQ09OTl9USU1FT1VUCShIWiAqIDQwKQo+ICNkZWZpbmUgU0NPX0RJU0NPTk5fVElN RU9VVAkoSFogKiAyKQo+IAo+IC1zdGF0aWMgdm9pZCBzY29fc29ja190aW1lb3V0KHN0cnVjdCB0 aW1lcl9saXN0ICp0KQo+ICtzdGF0aWMgdm9pZCBzY29fc29ja190aW1lb3V0KHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKPiB7Cj4gLQlzdHJ1Y3Qgc29jayAqc2sgPSBmcm9tX3RpbWVyKHNrLCB0 LCBza190aW1lcik7Cj4gKwlzdHJ1Y3Qgc2NvX2Nvbm4gKmNvbm4gPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0IHNjb19jb25uLAo+ICsJCQkJCSAgICAgc2tfdGltZXIud29yayk7Cj4gKwlzdHJ1 Y3Qgc29jayAqc2sgPSBjb25uLT5zazsKPiAKPiAJQlRfREJHKCJzb2NrICVwIHN0YXRlICVkIiwg c2ssIHNrLT5za19zdGF0ZSk7Cj4gCj4gQEAgLTg5LDE2ICs5MywxOCBAQCBzdGF0aWMgdm9pZCBz Y29fc29ja190aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQo+IAlzb2NrX3B1dChzayk7Cj4g fQo+IAo+IC1zdGF0aWMgdm9pZCBzY29fc29ja19zZXRfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBs b25nIHRpbWVvdXQpCj4gK3N0YXRpYyB2b2lkIHNjb19zb2NrX3NldF90aW1lcihzdHJ1Y3Qgc29j ayAqc2ssIHN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmssCj4gKwkJCSAgICAgICBsb25nIHRpbWVv dXQpCj4gewoKSSBkb27igJl0IGdldCB0aGUgZXh0cmEgdmFyaWFibGUgaGVyZS4gQ2FuIHdlIG5v dCBqdXN0IHBhc3MgaW4gc3RydWN0IGhjaV9jb25uLgoKCj4gCUJUX0RCRygic29jayAlcCBzdGF0 ZSAlZCB0aW1lb3V0ICVsZCIsIHNrLCBzay0+c2tfc3RhdGUsIHRpbWVvdXQpOwo+IC0Jc2tfcmVz ZXRfdGltZXIoc2ssICZzay0+c2tfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKPiArCWNhbmNl bF9kZWxheWVkX3dvcmsod29yayk7Cj4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsod29yaywgdGlt ZW91dCk7Cj4gfQo+IAo+IC1zdGF0aWMgdm9pZCBzY29fc29ja19jbGVhcl90aW1lcihzdHJ1Y3Qg c29jayAqc2spCj4gK3N0YXRpYyB2b2lkIHNjb19zb2NrX2NsZWFyX3RpbWVyKHN0cnVjdCBzb2Nr ICpzaywgc3RydWN0IGRlbGF5ZWRfd29yayAqd29yaykKPiB7Cj4gCUJUX0RCRygic29jayAlcCBz dGF0ZSAlZCIsIHNrLCBzay0+c2tfc3RhdGUpOwo+IC0Jc2tfc3RvcF90aW1lcihzaywgJnNrLT5z a190aW1lcik7Cj4gKwljYW5jZWxfZGVsYXllZF93b3JrKHdvcmspOwoKU2FtZSBhcyBhYm92ZSwg d2UgcGFzcyBpbiBzdHJ1Y3Qgc29jayBqdXN0IGZvciB0aGUgZGVidWcgbWVzc2FnZS4KCj4gfQo+ IAo+IC8qIC0tLS0gU0NPIGNvbm5lY3Rpb25zIC0tLS0gKi8KPiBAQCAtMTc0LDcgKzE4MCw3IEBA IHN0YXRpYyB2b2lkIHNjb19jb25uX2RlbChzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIGludCBlcnIp Cj4gCWlmIChzaykgewo+IAkJc29ja19ob2xkKHNrKTsKPiAJCWJoX2xvY2tfc29jayhzayk7Cj4g LQkJc2NvX3NvY2tfY2xlYXJfdGltZXIoc2spOwo+ICsJCXNjb19zb2NrX2NsZWFyX3RpbWVyKHNr LCAmY29ubi0+c2tfdGltZXIpOwo+IAkJc2NvX2NoYW5fZGVsKHNrLCBlcnIpOwo+IAkJYmhfdW5s b2NrX3NvY2soc2spOwo+IAkJc2NvX3NvY2tfa2lsbChzayk7Cj4gQEAgLTE5Myw2ICsxOTksOCBA QCBzdGF0aWMgdm9pZCBfX3Njb19jaGFuX2FkZChzdHJ1Y3Qgc2NvX2Nvbm4gKmNvbm4sIHN0cnVj dCBzb2NrICpzaywKPiAJc2NvX3BpKHNrKS0+Y29ubiA9IGNvbm47Cj4gCWNvbm4tPnNrID0gc2s7 Cj4gCj4gKwlJTklUX0RFTEFZRURfV09SSygmY29ubi0+c2tfdGltZXIsIHNjb19zb2NrX3RpbWVv dXQpOwo+ICsKPiAJaWYgKHBhcmVudCkKPiAJCWJ0X2FjY2VwdF9lbnF1ZXVlKHBhcmVudCwgc2ss IHRydWUpOwo+IH0KPiBAQCAtMjYwLDExICsyNjgsMTEgQEAgc3RhdGljIGludCBzY29fY29ubmVj dChzdHJ1Y3Qgc29jayAqc2spCj4gCQlnb3RvIGRvbmU7Cj4gCj4gCWlmIChoY29uLT5zdGF0ZSA9 PSBCVF9DT05ORUNURUQpIHsKPiAtCQlzY29fc29ja19jbGVhcl90aW1lcihzayk7Cj4gKwkJc2Nv X3NvY2tfY2xlYXJfdGltZXIoc2ssICZjb25uLT5za190aW1lcik7Cj4gCQlzay0+c2tfc3RhdGUg PSBCVF9DT05ORUNURUQ7Cj4gCX0gZWxzZSB7Cj4gCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNU Owo+IC0JCXNjb19zb2NrX3NldF90aW1lcihzaywgc2stPnNrX3NuZHRpbWVvKTsKPiArCQlzY29f c29ja19zZXRfdGltZXIoc2ssICZjb25uLT5za190aW1lciwgc2stPnNrX3NuZHRpbWVvKTsKPiAJ fQo+IAo+IGRvbmU6Cj4gQEAgLTQxOSw3ICs0MjcsOCBAQCBzdGF0aWMgdm9pZCBfX3Njb19zb2Nr X2Nsb3NlKHN0cnVjdCBzb2NrICpzaykKPiAJY2FzZSBCVF9DT05GSUc6Cj4gCQlpZiAoc2NvX3Bp KHNrKS0+Y29ubi0+aGNvbikgewo+IAkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47Cj4gLQkJ CXNjb19zb2NrX3NldF90aW1lcihzaywgU0NPX0RJU0NPTk5fVElNRU9VVCk7Cj4gKwkJCXNjb19z b2NrX3NldF90aW1lcihzaywgJnNjb19waShzayktPmNvbm4tPnNrX3RpbWVyLAo+ICsJCQkJCSAg IFNDT19ESVNDT05OX1RJTUVPVVQpOwo+IAkJCXNjb19jb25uX2xvY2soc2NvX3BpKHNrKS0+Y29u bik7Cj4gCQkJaGNpX2Nvbm5fZHJvcChzY29fcGkoc2spLT5jb25uLT5oY29uKTsKPiAJCQlzY29f cGkoc2spLT5jb25uLT5oY29uID0gTlVMTDsKPiBAQCAtNDQzLDcgKzQ1Miw4IEBAIHN0YXRpYyB2 b2lkIF9fc2NvX3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKQo+IC8qIE11c3QgYmUgY2FsbGVk IG9uIHVubG9ja2VkIHNvY2tldC4gKi8KPiBzdGF0aWMgdm9pZCBzY29fc29ja19jbG9zZShzdHJ1 Y3Qgc29jayAqc2spCj4gewo+IC0Jc2NvX3NvY2tfY2xlYXJfdGltZXIoc2spOwo+ICsJaWYgKHNj b19waShzayktPmNvbm4pCj4gKwkJc2NvX3NvY2tfY2xlYXJfdGltZXIoc2ssICZzY29fcGkoc2sp LT5jb25uLT5za190aW1lcik7Cj4gCWxvY2tfc29jayhzayk7Cj4gCV9fc2NvX3NvY2tfY2xvc2Uo c2spOwo+IAlyZWxlYXNlX3NvY2soc2spOwo+IEBAIC01MDAsOCArNTEwLDYgQEAgc3RhdGljIHN0 cnVjdCBzb2NrICpzY29fc29ja19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQg KnNvY2ssCj4gCj4gCXNjb19waShzayktPnNldHRpbmcgPSBCVF9WT0lDRV9DVlNEXzE2QklUOwo+ IAo+IC0JdGltZXJfc2V0dXAoJnNrLT5za190aW1lciwgc2NvX3NvY2tfdGltZW91dCwgMCk7Cj4g LQo+IAlidF9zb2NrX2xpbmsoJnNjb19za19saXN0LCBzayk7Cj4gCXJldHVybiBzazsKPiB9Cj4g QEAgLTEwMzYsNyArMTA0NCw4IEBAIHN0YXRpYyBpbnQgc2NvX3NvY2tfc2h1dGRvd24oc3RydWN0 IHNvY2tldCAqc29jaywgaW50IGhvdykKPiAKPiAJaWYgKCFzay0+c2tfc2h1dGRvd24pIHsKPiAJ CXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7Cj4gLQkJc2NvX3NvY2tfY2xlYXJfdGlt ZXIoc2spOwo+ICsJCWlmIChzY29fcGkoc2spLT5jb25uKQo+ICsJCQlzY29fc29ja19jbGVhcl90 aW1lcihzaywgJnNjb19waShzayktPmNvbm4tPnNrX3RpbWVyKTsKPiAJCV9fc2NvX3NvY2tfY2xv c2Uoc2spOwo+IAo+IAkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19MSU5HRVIpICYmIHNrLT5za19s aW5nZXJ0aW1lICYmCj4gQEAgLTEwODMsNyArMTA5Miw3IEBAIHN0YXRpYyB2b2lkIHNjb19jb25u X3JlYWR5KHN0cnVjdCBzY29fY29ubiAqY29ubikKPiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7 Cj4gCj4gCWlmIChzaykgewo+IC0JCXNjb19zb2NrX2NsZWFyX3RpbWVyKHNrKTsKPiArCQlzY29f c29ja19jbGVhcl90aW1lcihzaywgJmNvbm4tPnNrX3RpbWVyKTsKPiAJCWJoX2xvY2tfc29jayhz ayk7Cj4gCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7Cj4gCQlzay0+c2tfc3RhdGVfY2hh bmdlKHNrKTsKCk90aGVyIHRoYW4gdGhlc2UgbWlub3IgY2xlYW51cHMsIHRoaXMgbG9va3MgZ3Jl YXQuCgpSZWdhcmRzCgpNYXJjZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkxpbnV4LWtlcm5lbC1tZW50ZWVzIG1haWxpbmcgbGlzdApMaW51eC1rZXJu ZWwtbWVudGVlc0BsaXN0cy5saW51eGZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhm b3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWtlcm5lbC1tZW50ZWVzCg==