From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id yLxIBaBk72P8ajYAWB0awg (envelope-from ) for ; Fri, 17 Feb 2023 06:27:28 -0500 Received: by simark.ca (Postfix, from userid 112) id 1185F1E222; Fri, 17 Feb 2023 06:27:28 -0500 (EST) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=hjtk4AdS; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 1B6F51E128 for ; Fri, 17 Feb 2023 06:27:27 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 77813385482D for ; Fri, 17 Feb 2023 11:27:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 77813385482D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1676633246; bh=6Ur9ougdxi7l7h6+HikofbdzIubULIh2vG/uDZ8zbxE=; h=To:CC:Subject:Date:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=hjtk4AdSITofB+m2MO0JKQsX8HHt5R/xS9IlOXwGV4ItePLKRsBvArIAPOLnSwwMx uoXIMa+Dj9vQUXO8dBB4XkaRBNjBgQiByxkSV0OSJM8pyJ3ZtpubY2pMAWB0LPwvXm OlfgKKDojW7hVh7okbn9jKJEliVTQlAbHdq2VR+Y= Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 328693858C31 for ; Fri, 17 Feb 2023 11:27:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 328693858C31 Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31H8vfDD014453; Fri, 17 Feb 2023 11:27:02 GMT Received: from nam04-bn8-obe.outbound.protection.outlook.com (mail-bn8nam04lp2043.outbound.protection.outlook.com [104.47.74.43]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nt15wt3td-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 17 Feb 2023 11:27:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SRoT47WhN6Yg5N7EdQPx4ta5vvjRShXqe4MC/xA3RTlKgifjyhbksWPpDf72cbbJBXmOovac1og6WDuV5YgKCxo4IIlhLhCZQ0yNUpH6cZWKcaFdpMy17grEP1gTfX/09aZeda2XJxp5B/dTmq90un5w0hkYVpnvOOolvJAgytqA7/aEPePvoprb6Fw9IXAcoXcXZdWxou/frbAPx/QHC4c5NvzFRzUa/iYDWudCAJdlP+Yxv416HG5R42Lj0WgeYCNLrUKz5emP+NjfgmfrbfeRYe10mLwrgeD1e4j/9rSedse8PpWTFoHe81hWgEbHpHButaCHYxvm6fw8w2H3lw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=V5jF+in6w5tcrU6T26jQ2UIU/toezUH+NHngYpU4e8c=; b=l7veipo9OEBY86nC7XpgGFUkbTrM93SjhvQgTe6XsiUUQ4iz4pXzp9j4GWlVLK661c+pUyO7P8gqWTdhE2ap53y5Nm2vQiwnAYYDgTfP/Mr3oMpoVLeFmPb54TBmVTJvGt3KoSw4WoUqb5ghEBWGYptY3PKhf9jyGhfh/HwJSn7iXCY+sgHhFVMaAmPlTn/idSxAPEMhjuqbaPOMwp8ihHQywfGpdS1gEqYIGYwgDd87sF57p39f8GS8WHrMZnKStbinSRH2S3/p/rmfiRwY1Ufmh6LbS0hrmaEJEvicnMfUzXjIEbgs+ZjZPeKQ3nDx9WPUU6sWfo6lVx4G+oyntQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from CH2PR15MB3544.namprd15.prod.outlook.com (2603:10b6:610:5::26) by MW4PR15MB4777.namprd15.prod.outlook.com (2603:10b6:303:10b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.13; Fri, 17 Feb 2023 11:26:59 +0000 Received: from CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880]) by CH2PR15MB3544.namprd15.prod.outlook.com ([fe80::1e54:c91e:9426:8880%5]) with mapi id 15.20.6111.013; Fri, 17 Feb 2023 11:26:59 +0000 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" CC: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Topic: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Index: AQHY6DximDPpCqTL9kGyFvcEZokFBq4jlIiAgBFljYeAAA2HgIAIORaygAMrdQCACMPAdYADi8KAgAAbf+aAABUYgIAADhDtgAjHItiAAgYnAIACq/WKgAVsGwCABC6K8oAAZcYAgAq8WQ+AADoMgIAFnB/fgAUxEICABkBkK4AWHiQAgAFvY+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXOAALszAIABIz5JgAU9kgCAARgy1IACBimAgAL6kLSABOXQgIABOu4PgAOIfYCAAQPT3w== Date: Fri, 17 Feb 2023 11:26:59 +0000 Message-ID: References: <09f2433177505899c9bd31347af9b43118e4f890.camel@de.ibm.com> <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> <10cb526ef81fd8a63fd776e51bf9505c8dff1e33.camel@de.ibm.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR15MB3544:EE_|MW4PR15MB4777:EE_ x-ms-office365-filtering-correlation-id: 7bbf8fc8-cf0e-4cfd-da78-08db10d9e24c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pMtjoauC5rh3kq7nTQO4J1mbn/EmBZogrIv7RZcsuB1wROHYa7s1b0YUtfgmRwFyUn23CNkJlhC5lE5s7ED8Okp9sJQ7bwYr6iMSGu4EEGppKA4z2Kv13A4fLYzIvMugUMzgKvfMEMyYa02XexaceF4x5OtlFgre3UROVVobI+A3ixyO4DPOO4UX1YCoFMFTWAnov5/XRwlpIAt/bXtQWzqjdqH6e4lfw9K9V7aulk0IqaMSYWiqKsa9HoQo/n3goeKMHXSsBtz9ujwVdQfUZYaEuPrWmtTXMqgVEa3wbNXmEvE2MlcfLU2gODQuUWc4oags73Nal4jxPBQOd8Dp/hzjq3TeoAK3N1rh5cIjJka2Soxbl1XQHTQxDV5TYePHaLfkgd8/jrAqc/2/+j4nhS72teN/dak59/Od6pcHESp0tBcBQFAkwGQFoJ455G7fiMo/i9T4t09BEAbvsyRruaDmQBv5UKgRyvmz5hQVqwZ18DHE64GM9idQdGNaLEs2PJmWHu3p6OiiCpuk6VPraVJ3q3rz2C8QCAKLIsePezoxfWs66BkqfdzGY0YQNwT6bR8FEWkVhwzlKkG8vdxX5OGexfl1Z2ZMSK4cSBJmZnbYu6TR4UUUv5btUutDJZfv0ObwA5DEXaYQ8rOtDdp/Sto8QVchoZBz4FoQ52nxkXEZC4A9YvbkG1YFfeEN5e/fGa4Cwt3YC0EesCu6qOyn5g== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR15MB3544.namprd15.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(366004)(39860400002)(396003)(136003)(376002)(346002)(451199018)(71200400001)(478600001)(83380400001)(38070700005)(122000001)(99936003)(55016003)(86362001)(38100700002)(33656002)(9686003)(186003)(6506007)(53546011)(7696005)(8936002)(41300700001)(52536014)(2906002)(5660300002)(91956017)(4326008)(64756008)(76116006)(66476007)(8676002)(66446008)(66946007)(316002)(110136005)(66556008); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?Windows-1252?Q?kH2+683eCZAG6Lvea6ZxrOyZKltEzyWOpx6Qe+1thlnO6BoqMf6IGxJG?= =?Windows-1252?Q?sa/VNelOKzWMoOkDahy4jlXaOZ3jejN0UE79olDGDah1XoPc69IMUzzF?= =?Windows-1252?Q?1vqd7gvvS2d6Aik/NVZUzvzqpcoc8uEWKnNVsEmqaxyRy4OBcmJH3OOr?= =?Windows-1252?Q?/NlRpEtr7zOSm59M2lAD/sR1TIjwp1WXxFIbxEB+EzvrjRdqfqozeYFt?= =?Windows-1252?Q?/PbodWQiGm55Zwvuj4/dRdsKCIWJlbj98rfC94002rj48OPL/Xwjfzli?= =?Windows-1252?Q?7jD9MDlxYwsHoouoASFUwFegN+lzvGlZlYWLDc6pQ1lqTM5CoL3R15wM?= =?Windows-1252?Q?hYWN+nOWR5Dg+slJwqNBjoX8/WEPkLNLuj6wVejG6cTjol8v2Eth8NCq?= =?Windows-1252?Q?0ScecdseVhiUrro1Vb4rBNcqLL7vDC6X0StJLLAW+h/VHdbiizKIPjqC?= =?Windows-1252?Q?G+5mhFFNQvujjSqvTlTP6/RqMeBp0VdEFyOMwGqlruSsBZOiMhE8LYoU?= =?Windows-1252?Q?rBEYBO8JgHEzjQtjDNaX300AFmNfe3rl8aEeG636vAMKx02Px2SEZxqr?= =?Windows-1252?Q?8zVbzi9aoEd6lM4FxwvhMMl8kQHvS3OV7TC+fX4rO5FpS9elS+lZhOSK?= =?Windows-1252?Q?8NdRHe7Oa88icJvdLF5mekzAYIx1O7UyzU7c1IB+bIdAR1IR3ON6d2qg?= =?Windows-1252?Q?TmE/1qpKg8rgVjt/acj6H34MjsL5yemNgeEVh5RAq/A0l25laaDgk8HJ?= =?Windows-1252?Q?KVLfDbcECCfS/v3+8tjTQpEcLN8C/Bl4ojOC4E/ZLq36nBcBp2ndy+Us?= =?Windows-1252?Q?EXYi9P5j+mnHHAFjZIbRYx19javA64dLkZi9xPT9fzhDxSFiIYG9P/4x?= =?Windows-1252?Q?c+Gv0qz5PqeJG9MwlTMi4dkAlJh8qtEm8Izt9UWyA1axBIUPKQqlrNBu?= =?Windows-1252?Q?SAdcvKMrgUvAy2eSqZoH2131FFPSi8GxBbk6GhlLf4ELy/IXgFtvGiNM?= =?Windows-1252?Q?F19ijvGgJ9CwJZ7vGYK63JBW+mF/nXGkEfmS9E/uztzyjnghPBU933TP?= =?Windows-1252?Q?dROV7nqC8WlGvMBk0gmxH1WvtDwXHhndhJu51VNZpvs6jTD+IeDkfRw2?= =?Windows-1252?Q?r8yFxufcdo2YntAOZ4QOIoI3BRfrnnyflNXaBQdsBggh0hZZDqmBGcWI?= =?Windows-1252?Q?r0pPl1ZCUnGe3iXdd/PTikqNc8TMZdANtZ5KUpkRuoIsC5SRiEruq8Gw?= =?Windows-1252?Q?fVG+KlhE6ThzRjMsnwCc91ATRIFVfPnPdfVZXtluo3DoI6tfferXPs5R?= =?Windows-1252?Q?RNrb23XMjzIaexorzLfRyy4Sxk6n1Q5I0yGZg1KqZnv0F24W4rd4hsC8?= =?Windows-1252?Q?FGxYozZ7CMYhQPlfvG2iVtWI8Yl86MuccvVJ8wsRwjwGIpvso4RnE4wO?= =?Windows-1252?Q?IugcIoAlG3IppkKpfBRvahasmV/Nz3XXwTXdwBox2pf+1U4LrzTbHbPq?= =?Windows-1252?Q?+ZeNTIf8g74Dl7CseLusNTSQiFbs0V9wY2OrkPn0onc7NPVSmbN5Kyzp?= =?Windows-1252?Q?sd7n2FDjV637Q7wXarxKBIy/VbLaks+y1vU6by93Vd0CRcaUD5h7ZrM/?= =?Windows-1252?Q?fIOmE4rKELqHBmi7mZcXud4z8dOqYBJagf1wNxT1BLm5C3B69plnOYht?= =?Windows-1252?Q?uEszRNnWvK3+R/edxTYF6tPYU7YZrBGQm7+qkmNR6QrCzU0bhdy/iHI1?= =?Windows-1252?Q?F8PU9KihGu+xxyU3y/152aJD/LfGYytt3fPhcNxnuMsTaGBrdoW3cRWC?= =?Windows-1252?Q?jlUsBHhIzGyuH5azJb/a4bphSnE=3D?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB354455A756AF729AE5F796E2D6A19CH2PR15MB3544namp_" MIME-Version: 1.0 X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR15MB3544.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7bbf8fc8-cf0e-4cfd-da78-08db10d9e24c X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Feb 2023 11:26:59.3379 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: EkcaEnKRiirv/94bU1HePb3eSEOEmFWn56WpTpLiEMMzcRkfyiXIq4+mOpyz4GIONuYn3SJNhQ51wRUhdYQuoQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR15MB4777 X-Proofpoint-ORIG-GUID: 1n-Vyua-baKeSZx3U7Ag4_gIseDNUlXp X-Proofpoint-GUID: 1n-Vyua-baKeSZx3U7Ag4_gIseDNUlXp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-17_06,2023-02-17_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 lowpriorityscore=0 phishscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302170101 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Aditya Kamath1 via Gdb-patches Reply-To: Aditya Kamath1 Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" --_004_CH2PR15MB354455A756AF729AE5F796E2D6A19CH2PR15MB3544namp_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi Ulrich, Tom and community. Please find attached the patch. {See: 0001-Fix-multi-thread-debug-bug-in-AI= X.patch} >Not sure if I follow you exactly here, but my understanding is >indeed that follow_fork should initially create an inferior for >the new process with just a single main thread using (pid, 0, 0). >Subsequently, aix-thread should detect that the new inferior >uses pthreads and then switch its ptid to (pid, 0, tid). >Not sure where exactly this goes wrong for you. What is the >path leading to this crash you're observing? Let me explain this using the example code pasted below this email. Conside= r we now follow the child {which is the only case, previous version of the = patch was failing}. --------------------------------------------------------------------- >(gdb) set follow-fork-mode child >(gdb) set detach-on-fork off >(gdb) r >Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork >[New Thread 258] >[New Thread 515] >[Attaching after Thread 515 fork to child process 10748216] >[New inferior 2 (process 10748216)] --------------------------------------------------------------------- GDB until here know that a fork event occurred and the child process is <10= 748216, 0, 0> via wait () in the rs6000-aix-nat.c file. The child in the GD= B core is . GDB has three things to do here. ** It will get a new object file notifier of the new process, ** new inferior is created so the new inferior notifier {Kindly See initial= ize_aix_thread () in aix-thread.c where aix_thread_inferior_created () will= be called } ** And follow_fork () event since GDB must decide it has to follow the chil= d. Note:- Our child process is This is the exact order in which the above 3 things will be executed from t= he main GDB event loop. So, the first task gets done. The new object file notifier has called pd_en= able (), to pd_activate () to sync_threadlist () where we will change child= process to if the libpthdebug session is initialised success= fully. The second task now, new inferior notifier calls aix_thread_inferior_create= d () to pd_enable () (), to pd_activate () to sync_threadlist (). Now we have changed the child process from to . But no one has informed the GDB core about this change. It is still of the = view that child process is from the set_forked () status it got= from rs6000-aix-nat wait () while a fork () event was being detected. So w= hen it attempts to handle the third task which is to follow the child proce= ss since we have given that command, the child ptid passed to switch_to_thr= ead is . But this does not exists. Since the first two events ch= anged it. So GDB got surprised on not finding it and failed to debug furthe= r thereby giving an option to dump the core with an assertion below. {Kindl= y see the back trace I pasted in the previous email. One can verify this}. ----------------------------------------------------------------------- >thread.c:1337: internal-error: switch_to_thread: Assertion `thr !=3D NULL'= ?>failed. >A problem internal to GDB has been detected, >further debugging may prove unreliable. ---------------------------------------------------------------------------= - The game is about when we decide to set the pd_active or say thread debuggi= ng active. We did it in two places. In the wait () and pd_enable () in aix-= thread.c file. We need it to put it in the correct place which we aren=92t = correctly. If there is a need for any non-target function like follow_fork = to use ptid_t (pid, 0 , 0) then we must not change the thread ptid though t= he library is initialised. This is where we are going wrong. Let me also tell you all what I tried today and failed. I had removed pd_ac= tivate () from the pd_enable () and called pd_activate () only from wait ()= for all the events. {Currently we do only for trap}. But the problem is if= we have many inferiors and couple of them with no private data set, since = we didn=92t in pd_enable () via pd_activate () as we removed it, then at a= ny point if we iterate_over_threads () over these inferiors we will crash s= ince these don=92t have private data set yet. So this is a tricky problem. Wonder how Linux folks did it. If anyone knows= it will be of help if shared. Kindly let me know at high level. I could no= t understand how they are handling the same. >But you can determine >the inferior associated with a PID directly via find_inferior_pid >without ever involving any thread. This is done in this patch. Thank you Ulrich. Let me know what you think. Awaiting for a reply. Have a nice day ahead. Thanks and regards, Aditya. ------------------------------------------------------------------- Code Code :- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } From: Ulrich Weigand Date: Friday, 17 February 2023 at 1:16 AM To: simark@simark.ca , Aditya Kamath1 , gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Aditya Kamath1 wrote: >So what is happening is that the when after a new process is born, >its pthread library is getting intialised and we have changed its >ptid from ptid (pid, 0, 0) to ptid (pid, 0, tid). Since we follow >fork the code in inferior.c file will switch to the thread child >where the child is reported as ptid (pid, 0, 0) but exists as >ptid (pid, 0, tid). This leads to this crash. We did try with two >variables if you recall in the previous patch. But your point of >pd_active being there for it was valid. So somehow something isn't >correct that I did not understand. We have pd_activate () in only >two places. So is follow_fork () is expecting us to switch to child >process and then change the ptid of the child?? If yes, how do we go?? >And if not where are we going wrong here. Not sure if I follow you exactly here, but my understanding is indeed that follow_fork should initially create an inferior for the new process with just a single main thread using (pid, 0, 0). Subsequently, aix-thread should detect that the new inferior uses pthreads and then switch its ptid to (pid, 0, tid). Not sure where exactly this goes wrong for you. What is the path leading to this crash you're observing? >Also this ptid_t (pid, 0, 0) and our main thread being >ptid_t (pid, 0, tid) might need a smarted way to switch to the >main thread's process space and set the right current inferior >process in pdc_read_memory. Kindly check it in this patch and >let me know if we can do it better. So you currently do: + thread_info *thread =3D find_thread_ptid (current_inferior (), + ptid_t (user_current_pid)); + /* If the pthread debug library is loaded, then we need the ptid_t (pid,= 0 ,tid). + Since the main thread in the below for loop will be in the first iter= ation + we will break. */ + if (!thread) + { + for (thread_info *tp: all_threads (current_inferior ()->process_target= (), + ptid_t (user_current_pid))) + { + thread =3D tp; + break; + } + } [...] + { + scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_p= tid); + inferior_ptid =3D ptid_t (user_current_pid); + scoped_restore_current_inferior restore_inferior; + set_current_inferior (thread->inf); + + scoped_restore_current_program_space restore_current_progspace; + set_current_program_space (thread->inf->pspace); + status =3D target_write_memory (addr, (gdb_byte *) buf, len); + } This is overkill. Note that at no point do you actually ever use "thread" itself, only "thread->inf". But you can determine the inferior associated with a PID directly via find_inferior_pid without ever involving any thread. Bye, Ulrich --_004_CH2PR15MB354455A756AF729AE5F796E2D6A19CH2PR15MB3544namp_ Content-Type: application/octet-stream; name="0001-Fix-multi-thread-debug-bug-in-AIX.patch" Content-Description: 0001-Fix-multi-thread-debug-bug-in-AIX.patch Content-Disposition: attachment; filename="0001-Fix-multi-thread-debug-bug-in-AIX.patch"; size=29654; creation-date="Fri, 17 Feb 2023 11:16:43 GMT"; modification-date="Fri, 17 Feb 2023 11:16:43 GMT" Content-Transfer-Encoding: base64 RnJvbSBiNDY5YjBiYzQwMjY2NmE3YzA2YmIxM2I2OTMxODU5ODBjOTkyZjU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFkaGFyIEthbWF0aCA8QWRpdHlhLkthbWF0 aDFAaWJtLmNvbT4KRGF0ZTogRnJpLCAxNyBGZWIgMjAyMyAwMzoxNjozNCAtMDYwMApTdWJqZWN0 OiBbUEFUQ0hdIEZpeCBtdWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcgdW5kZXIgQUlYCgpNdWx0aS10 aHJlYWRlZCBkZWJ1Z2dpbmcgdXNpbmcgdGhlIGxpYnB0aGRlYnVnIGRlYnVnIGludGVyZmFjZQpp cyBjdXJyZW50bHkgYnJva2VuIGR1ZSB0byBtdWx0aXBsZSBpc3N1ZXMuCgpXaGVuIGRlYnVnZ2lu ZyBhIHNpbmdsZSBpbmZlcmlvciwgd2Ugd2VyZSBnZXR0aW5nIGFzc2VydGlvbgpmYWlsdXJlcyBp biBnZXRfYWl4X3RocmVhZF9pbmZvIGFzIG5vIHRwLT5wcml2IHN0cnVjdHVyZSB3YXMKYWxsb2Nh dGVkIGZvciB0aGUgbWFpbiB0aHJlYWQuCgpXZSBmaXhlZCB0aGlzIGJ5IHN3aXRjaGluZyB0aGUg bWFpbgp0aHJlYWQgZnJvbSBhIChwaWQsIDAsIDApIHB0aWRfdCB0byBhIChwaWQsIDAsIHRpZCkg cHRpZF90IGFuZAphbGxvY2FpbmcgdGhlIHRwLT5wcml2IHN0cnVjdHVyZSBpbiBzeW5jX3RocmVh ZGxpc3RzLgoKQXMgYSByZXN1bHQsIHRoZSBzd2l0Y2hfdG9fdGhyZWFkIGNhbGwgaW4gcGRjX3Jl YWRfZGF0YSBjb3VsZApub3cgZmFpbCBzaW5jZSB0aGUgbWFpbiB0aHJlYWQgbm8gbG9uZ2VyIHVz ZXMgKHBpZCwgMCwgMCkuCgpTbyB3ZSByZXBsYWNlZCB0aGUgY2FsbCBieSBvbmx5IHN3aXRjaGlu ZyBpbmZlcmlvcl9wdGlkLCB0aGUgY3VycmVudAppbmZlcmlvciwgYW5kIHRoZSBjdXJyZW50IGFk ZHJlc3Mgc3BhY2UgKGxpa2UgcHJvYy1zZXJ2aWNlLmMpLgpBZGQgc2ltaWxhciBzd2l0Y2hpbmcg dG8gcGRjX3dyaXRlX2RhdGEgd2hlcmUgaXQgd2FzIG1pc3NpbmcKY29tcGxldGVseS4KCldoZW4g ZGVidWdnaW5nIG11bHRpcGxlIGluZmVyaW9ycywgYW4gYWRkaXRpb25hbCBzZXQgb2YKcHJvYmxl bXMgcHJldmVudGVkIGNvcnJlY3QgbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nOgoKRmlyc3Qgb2Yg YWxsLCBhaXgtdGhyZWFkLmMgdXNlZCB0byBoYXZlIGEgbnVtYmVyIG9mIGdsb2JhbAp2YXJpYWJs ZXMgaG9sZGluZyBwZXItaW5mZXJpb3IgaW5mb3JtYXRpb24uCgpXZSBzd2l0Y2hlZCBoZXNlCnRv IGEgcGVyLWluZmVyaW9yIGRhdGEgc3RydWN0dXJlIGluc3RlYWQuCgpBbHNvLCBzeW5jX3RocmVh ZGxpc3RzIHdhcyBnZXR0aW5nIGNvbmZ1c2VkIGFzIHdlIHdlcmUKY29tcGFyaW5nIHRoZSBsaXN0 IG9mIHRocmVhZHMgcmV0dXJuZWQgYnkgbGlicHRoZGVidWcKZm9yICpvbmUqIHByb2Nlc3Mgd2l0 aCBHREIncyBsaXN0IG9mIHRocmVhZHMgZm9yICphbGwqCnByb2Nlc3Nlcy4gTm93IHdlIG9ubHkg dXNlIGhlIEdEQiB0aHJlYWRzIG9mIHRoZSBjdXJyZW50CmluZmVyaW9yIGluc3RlYWQuCgpGaW5h bGx5LCB0aGUgcHJlc2VuY2Ugb2YgdGhlIHRocmVhZCBsaWJyYXJ5IGluIGFueSBidXQKdGhlIGZp cnN0IGluZmVyaW9yIHdhcyBub3QgY29ycmVjdGx5IGRldGVjdGVkIGR1ZSB0byBhCmJ1ZyBpbiBz b2xpYi1haXguYywgd2hlcmUgdGhlIEJGRCBmaWxlIG5hbWUgZm9yIHNoYXJlZApsaWJyYXJ5IG1l bWJlcnMgd2FzIGNoYW5nZWQgd2hlbiB0aGUgbGlicmFyeSB3YXMgbG9hZGVkCmZvciB0aGUgZmly c3QgdGltZSwgd2hpY2ggY2F1c2VkIHRoZSBsaWJyYXJ5IHRvIG5vIGxvbmdlcgpiZSByZWNvZ25p emVkIGJ5IG5hbWUgd2hlbiBsb2FkZWQgYSBzZWNvbmQgdGltZSwKLS0tCiBnZGIvYWl4LXRocmVh ZC5jIHwgMzY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t CiBnZGIvc29saWItYWl4LmMgIHwgIDE0ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDI0MCBpbnNlcnRp b25zKCspLCAxNDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2RiL2FpeC10aHJlYWQuYyBi L2dkYi9haXgtdGhyZWFkLmMKaW5kZXggZTU1NmMxNTM1NzYuLmM2MTUzZTFmNzFlIDEwMDY0NAot LS0gYS9nZGIvYWl4LXRocmVhZC5jCisrKyBiL2dkYi9haXgtdGhyZWFkLmMKQEAgLTY4LDEwICs2 OCw2IEBAIHN0YXRpYyBib29sIGRlYnVnX2FpeF90aHJlYWQ7CiAjZGVmaW5lIHB0aGRiX3RpZF90 CXRpZF90CiAjZW5kaWYKIAotLyogUmV0dXJuIHdoZXRoZXIgdG8gdHJlYXQgUElEIGFzIGEgZGVi dWdnYWJsZSB0aHJlYWQgaWQuICAqLwotCi0jZGVmaW5lIFBEX1RJRChwdGlkKQkocGRfYWN0aXZl ICYmIHB0aWQudGlkICgpICE9IDApCi0KIC8qIFN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWVzIHJl dHVybmVkIGJ5IHB0aGRiIGNhbGxiYWNrcy4gICovCiAKICNkZWZpbmUgUERDX1NVQ0NFU1MJUFRI REJfU1VDQ0VTUwpAQCAtMTQ0LDI0ICsxNDAsNiBAQCBjbGFzcyBhaXhfdGhyZWFkX3RhcmdldCBm aW5hbCA6IHB1YmxpYyB0YXJnZXRfb3BzCiAKIHN0YXRpYyBhaXhfdGhyZWFkX3RhcmdldCBhaXhf dGhyZWFkX29wczsKIAotLyogQWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBsaWJwdGhyZWFk IHdpbGwgY2FsbCB3aGVuIGxpYnB0aGRlYnVnCi0gICBpcyByZWFkeSB0byBiZSBpbml0aWFsaXpl ZC4gICovCi0KLXN0YXRpYyBDT1JFX0FERFIgcGRfYnJrX2FkZHI7Ci0KLS8qIFdoZXRoZXIgdGhl IGN1cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdnYWJsZSBieSBwdGhkYi4gICovCi0KLXN0YXRp YyBpbnQgcGRfYWJsZSA9IDA7Ci0KLS8qIFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlvbiBp cyBiZWluZyBkZWJ1Z2dlZC4gICovCi0KLXN0YXRpYyBpbnQgcGRfYWN0aXZlID0gMDsKLQotLyog V2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMgNjQtYml0LiAgCi0gICBPbmx5IHZh bGlkIHdoZW4gcGRfYWJsZSBpcyB0cnVlLiAgKi8KLQotc3RhdGljIGludCBhcmNoNjQ7Ci0KIC8q IEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBwdGhkYiBjYWxsYmFja3MuICAqLwogCiBzdGF0aWMg aW50IHBkY19zeW1ib2xfYWRkcnMgKHB0aGRiX3VzZXJfdCwgcHRoZGJfc3ltYm9sX3QgKiwgaW50 KTsKQEAgLTE5MSw5ICsxNjksNjYgQEAgc3RhdGljIHB0aGRiX2NhbGxiYWNrc190IHBkX2NhbGxi YWNrcyA9IHsKICAgTlVMTAogfTsKIAotLyogQ3VycmVudCBwdGhkYiBzZXNzaW9uLiAgKi8KKy8q IEFpeCB2YXJpYWJsZSBzdHJ1Y3R1cmUuICAqLworc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz IAoreworICAvKiBXaGV0aGVyIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGlzIGRlYnVnZ2FibGUg YnkgcHRoZGIuICAqLworICBpbnQgcGRfYWJsZTsKKworICAvKiBXaGV0aGVyIGEgdGhyZWFkZWQg YXBwbGljYXRpb24gaXMgYmVpbmcgZGVidWdnZWQuICAqLworICBpbnQgcGRfYWN0aXZlOworCisg IC8qIEN1cnJlbnQgcHRoZGIgc2Vzc2lvbi4gICovCisgIHB0aGRiX3Nlc3Npb25fdCBwZF9zZXNz aW9uOworCisgIC8qIEFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgbGlicHRocmVhZCB3aWxs IGNhbGwgd2hlbiBsaWJwdGhkZWJ1ZworICAgaXMgcmVhZHkgdG8gYmUgaW5pdGlhbGl6ZWQuICAq LworICBDT1JFX0FERFIgcGRfYnJrX2FkZHI7CisKKyAgLyogV2hldGhlciB0aGUgY3VycmVudCBh cmNoaXRlY3R1cmUgaXMgNjQtYml0LgorICAgT25seSB2YWxpZCB3aGVuIHBkX2FibGUgaXMgdHJ1 ZS4gICovCisgIGludCBhcmNoNjQ7Cit9OworCisvKiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBk YXRhLiAgKi8KK3N0YXRpYyBjb25zdCByZWdpc3RyeTxpbmZlcmlvcj46OmtleTxhaXhfdGhyZWFk X3ZhcmlhYmxlcz4KKyAgYWl4X3RocmVhZF92YXJpYWJsZXNfaGFuZGxlOworCisvKiBGdW5jdGlv biB0byBHZXQgYWl4X3RocmVhZF92YXJpYWJsZXMgZGF0YS4gICovCitzdGF0aWMgc3RydWN0IGFp eF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKHN0cnVj dCBpbmZlcmlvciAqaW5mKQoreworICBpZiAoaW5mID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7 CiAKLXN0YXRpYyBwdGhkYl9zZXNzaW9uX3QgcGRfc2Vzc2lvbjsKKyAgc3RydWN0IGFpeF90aHJl YWRfdmFyaWFibGVzKiBkYXRhOworCisgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5k bGUuZ2V0IChpbmYpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIGRhdGEgPSBhaXhfdGhyZWFk X3ZhcmlhYmxlc19oYW5kbGUuZW1wbGFjZSAoaW5mKTsKKworICByZXR1cm4gZGF0YTsKK30KKwor LyogSGVscGVyIHRvIGdldCBkYXRhIGZvciBwdGlkIGluIGEgZnVuY3Rpb24uICAqLworCitzdGF0 aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9m b3JfcHRpZCAocHRpZF90IHB0aWQpCit7CisgIGluZmVyaW9yICppbmYgPSBmaW5kX2luZmVyaW9y X3B0aWQgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpLAorCQkJCQlwdGlk KTsKKyAgcmV0dXJuIGdldF9haXhfdGhyZWFkX3ZhcmlhYmxlc19kYXRhIChpbmYpOworfQorCisv KiBIZWxwZXIgdG8gZ2V0IGRhdGEgZm9yIHBpZCBpbiBhIGZ1bmN0aW9uLiAgKi8KKworc3RhdGlj IHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyoKK2dldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9y X3BpZCAocGlkX3QgcGlkKQoreworICBpbmZlcmlvciAqaW5mID0gZmluZF9pbmZlcmlvcl9waWQg KGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCk7CisgIHJldHVybiBnZXRfYWl4X3RocmVhZF92 YXJpYWJsZXNfZGF0YSAoaW5mKTsKK30KIAogLyogUmV0dXJuIGEgcHJpbnRhYmxlIHJlcHJlc2Vu dGF0aW9uIG9mIHB0aGRlYnVnIGZ1bmN0aW9uIHJldHVybgogICAgU1RBVFVTLiAgKi8KQEAgLTMx OCw3ICszNTMsNyBAQCBwaWRfdG9fcHJjIChwdGlkX3QgKnB0aWRwKQogICBwdGlkX3QgcHRpZDsK IAogICBwdGlkID0gKnB0aWRwOwotICBpZiAoUERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlk ICgpICE9IDApCiAgICAgKnB0aWRwID0gcHRpZF90IChwdGlkLnBpZCAoKSk7CiB9CiAKQEAgLTM4 OSw2ICs0MjQsOSBAQCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3Bp ZCwKICAgZG91YmxlIGZwcnNbcHBjX251bV9mcHJzXTsKICAgc3RydWN0IHB0eHNwcnMgc3ByczY0 OwogICBzdHJ1Y3QgcHRzcHJzIHNwcnMzMjsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz ICpkYXRhOworICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAodXNl cl9jdXJyZW50X3BpZCk7CiAgIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLCAicGRjX3JlYWRfcmVncyB0aWQ9JWQgZmxhZ3M9JXNcbiIsCkBAIC0z OTcsNyArNDM1LDcgQEAgcGRjX3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9w aWQsCiAgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQ VEhEQl9GTEFHX0dQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRh LT5hcmNoNjQpCiAJewogCSAgaWYgKCFwdHJhY2U2NGFpeCAoUFRUX1JFQURfR1BSUywgdGlkLCAK IAkJCSAgICAodW5zaWduZWQgbG9uZykgZ3ByczY0LCAwLCBOVUxMKSkKQEAgLTQyMyw3ICs0NjEs NyBAQCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwKICAgLyog U3BlY2lhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAgIGlmIChmbGFncyAmIFBUSERCX0ZMQUdf U1BSUykKICAgICB7Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkK IAl7CiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsIAogCQkJICAgICh1 bnNpZ25lZCBsb25nKSAmc3ByczY0LCAwLCBOVUxMKSkKQEAgLTQ1Niw2ICs0OTQsMTAgQEAgcGRj X3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAgICB0aGlzIGlz IG5lZWRlZCwgSSBoYXZlIGltcGxlbWVudGVkIHdoYXQgSSB0aGluayBpdCBzaG91bGQgZG8sCiAg ICAgIGhvd2V2ZXIgdGhpcyBjb2RlIGlzIHVudGVzdGVkLiAgKi8KIAorICBzdHJ1Y3QgYWl4X3Ro cmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBl cl9mb3JfcGlkICh1c2VyX2N1cnJlbnRfcGlkKTsKKwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkK ICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAicGRjX3dyaXRlX3JlZ3MgdGlkPSVkIGZsYWdz PSVzXG4iLAogCQkoaW50KSB0aWQsIGhleF9zdHJpbmcgKGZsYWdzKSk7CkBAIC00NjMsNyArNTA1 LDcgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAv KiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxB R19HUFJTKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0 KQogCXB0cmFjZTY0YWl4IChQVFRfV1JJVEVfR1BSUywgdGlkLCAKIAkJICAgICAodW5zaWduZWQg bG9uZykgY29udGV4dC0+Z3ByLCAwLCBOVUxMKTsKICAgICAgIGVsc2UKQEAgLTQ3OSw3ICs1MjEs NyBAQCBwZGNfd3JpdGVfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8q IFNwZWNpYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFH X1NQUlMpCiAgICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQp CiAJewogCSAgcHRyYWNlNjRhaXggKFBUVF9XUklURV9TUFJTLCB0aWQsIAogCQkgICAgICAgKHVu c2lnbmVkIGxvbmcpICZjb250ZXh0LT5tc3IsIDAsIE5VTEwpOwpAQCAtNDk5LDcgKzU0MSw5IEBA IHBkY19yZWFkX2RhdGEgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCB2b2lkICpidWYs CiAJICAgICAgIHB0aGRiX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuKQogewogICBpbnQgc3RhdHVz LCByZXQ7Ci0KKyAgaW5mZXJpb3IgKmluZiA9IGZpbmRfaW5mZXJpb3JfcGlkIChjdXJyZW50X2lu ZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwgCisJCQkJICAgICB1c2VyX2N1cnJlbnRfcGlk KTsKKyAgCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRs b2csCiAJCSJwZGNfcmVhZF9kYXRhICh1c2VyX2N1cnJlbnRfcGlkID0gJWxkLCBidWYgPSAweCVs eCwgYWRkciA9ICVzLCBsZW4gPSAlbGQpXG4iLApAQCAtNTA4LDE0ICs1NTIsMTcgQEAgcGRjX3Jl YWRfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQgKmJ1ZiwKICAgLyog VGhpcyBpcyBuZWVkZWQgdG8gZWxpbWluYXRlIHRoZSBkZXBlbmRlbmN5IG9mIGN1cnJlbnQgdGhy ZWFkCiAgICAgIHdoaWNoIGlzIG51bGwgc28gdGhhdCB0aHJlYWQgcmVhZHMgdGhlIGNvcnJlY3Qg dGFyZ2V0IG1lbW9yeS4gICovCiAgIHsKLSAgICBzY29wZWRfcmVzdG9yZV9jdXJyZW50X3RocmVh ZCByZXN0b3JlX2N1cnJlbnRfdGhyZWFkOworICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJp b3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAgICAvKiBC ZWZvcmUgdGhlIGZpcnN0IGluZmVyaW9yIGlzIGFkZGVkLCB3ZSBwYXNzIGluZmVyaW9yX3B0aWQu cGlkICgpCiAgICAgICAgZnJvbSBwZF9lbmFibGUgKCkgd2hpY2ggaXMgMC4gIFRoZXJlIGlzIG5v IG5lZWQgdG8gc3dpdGNoIHRocmVhZHMKICAgICAgICBkdXJpbmcgZmlyc3QgaW5pdGlhbGlzYXRp b24uICBJbiB0aGUgcmVzdCBvZiB0aGUgY2FsbGJhY2tzIHRoZQogICAgICAgIGN1cnJlbnQgdGhy ZWFkIG5lZWRzIHRvIGJlIGNvcnJlY3QuICAqLwotICAgIGlmICh1c2VyX2N1cnJlbnRfcGlkICE9 IDApCi0gICAgICBzd2l0Y2hfdG9fdGhyZWFkIChjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNz X3RhcmdldCAoKSwKLQkJCXB0aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpOworICAgIGluZmVyaW9y X3B0aWQgPSBwdGlkX3QgKHVzZXJfY3VycmVudF9waWQpOworICAgIHNjb3BlZF9yZXN0b3JlX2N1 cnJlbnRfaW5mZXJpb3IgcmVzdG9yZV9pbmZlcmlvcjsKKyAgICBzZXRfY3VycmVudF9pbmZlcmlv ciAoaW5mKTsKKworICAgIHNjb3BlZF9yZXN0b3JlX2N1cnJlbnRfcHJvZ3JhbV9zcGFjZSByZXN0 b3JlX2N1cnJlbnRfcHJvZ3NwYWNlOworICAgIHNldF9jdXJyZW50X3Byb2dyYW1fc3BhY2UgKGlu Zi0+cHNwYWNlKTsKICAgICBzdGF0dXMgPSB0YXJnZXRfcmVhZF9tZW1vcnkgKGFkZHIsIChnZGJf Ynl0ZSAqKSBidWYsIGxlbik7CiAgIH0KICAgcmV0ID0gc3RhdHVzID09IDAgPyBQRENfU1VDQ0VT UyA6IFBEQ19GQUlMVVJFOwpAQCAtNTMzLDEzICs1ODAsMjUgQEAgcGRjX3dyaXRlX2RhdGEgKHB0 aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCB2b2lkICpidWYsCiAJCXB0aGRiX2FkZHJfdCBh ZGRyLCBzaXplX3QgbGVuKQogewogICBpbnQgc3RhdHVzLCByZXQ7CisgIGluZmVyaW9yICppbmYg PSBmaW5kX2luZmVyaW9yX3BpZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQg KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3VycmVudF9w aWQpOwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRs b2csCiAJCSJwZGNfd3JpdGVfZGF0YSAodXNlcl9jdXJyZW50X3BpZCA9ICVsZCwgYnVmID0gMHgl bHgsIGFkZHIgPSAlcywgbGVuID0gJWxkKVxuIiwKIAkJdXNlcl9jdXJyZW50X3BpZCwgKGxvbmcp IGJ1ZiwgaGV4X3N0cmluZyAoYWRkciksIGxlbik7CiAKLSAgc3RhdHVzID0gdGFyZ2V0X3dyaXRl X21lbW9yeSAoYWRkciwgKGdkYl9ieXRlICopIGJ1ZiwgbGVuKTsKKyAgeworICAgIHNjb3BlZF9y ZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlv cl9wdGlkKTsKKyAgICBpbmZlcmlvcl9wdGlkID0gcHRpZF90ICh1c2VyX2N1cnJlbnRfcGlkKTsK KyAgICBzY29wZWRfcmVzdG9yZV9jdXJyZW50X2luZmVyaW9yIHJlc3RvcmVfaW5mZXJpb3I7Cisg ICAgc2V0X2N1cnJlbnRfaW5mZXJpb3IgKGluZik7CisKKyAgICBzY29wZWRfcmVzdG9yZV9jdXJy ZW50X3Byb2dyYW1fc3BhY2UgcmVzdG9yZV9jdXJyZW50X3Byb2dzcGFjZTsKKyAgICBzZXRfY3Vy cmVudF9wcm9ncmFtX3NwYWNlIChpbmYtPnBzcGFjZSk7CisgICAgc3RhdHVzID0gdGFyZ2V0X3dy aXRlX21lbW9yeSAoYWRkciwgKGdkYl9ieXRlICopIGJ1ZiwgbGVuKTsKKyAgfQorCiAgIHJldCA9 IHN0YXR1cyA9PSAwID8gUERDX1NVQ0NFU1MgOiBQRENfRkFJTFVSRTsKIAogICBpZiAoZGVidWdf YWl4X3RocmVhZCkKQEAgLTYzOSwzOSArNjk4LDYgQEAgcGNtcCAoY29uc3Qgdm9pZCAqcDF2LCBj b25zdCB2b2lkICpwMnYpCiAgIHJldHVybiBwMS0+cHRoaWQgPCBwMi0+cHRoaWQgPyAtMSA6IHAx LT5wdGhpZCA+IHAyLT5wdGhpZDsKIH0KIAotLyogaXRlcmF0ZV9vdmVyX3RocmVhZHMoKSBjYWxs YmFjayBmb3IgY291bnRpbmcgR0RCIHRocmVhZHMuCi0KLSAgIERvIG5vdCBjb3VudCB0aGUgbWFp biB0aHJlYWQgKHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMgbWF0Y2hlcwotICAgdGhlIGxpc3Qg b2YgdGhyZWFkcyBwcm92aWRlZCBieSB0aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0g ICBkb2VzIG5vdCBpbmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxv d3MgdXMKLSAgIHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCi0KLXN0YXRpYyBpbnQKLWdp dGVyX2NvdW50IChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgdm9pZCAqY291bnRwKQotewot ICBpZiAoUERfVElEICh0aHJlYWQtPnB0aWQpKQotICAgICgqKGludCAqKSBjb3VudHApKys7Ci0g IHJldHVybiAwOwotfQotCi0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBh Y2N1bXVsYXRpbmcgR0RCIHRocmVhZCBwaWRzLgotCi0gICBEbyBub3QgaW5jbHVkZSB0aGUgbWFp biB0aHJlYWQgKHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMgbWF0Y2hlcwotICAgdGhlIGxpc3Qg b2YgdGhyZWFkcyBwcm92aWRlZCBieSB0aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0g ICBkb2VzIG5vdCBpbmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxv d3MgdXMKLSAgIHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCi0KLXN0YXRpYyBpbnQKLWdp dGVyX2FjY3VtIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgdm9pZCAqYnVmcCkKLXsKLSAg aWYgKFBEX1RJRCAodGhyZWFkLT5wdGlkKSkKLSAgICB7Ci0gICAgICAqKihzdHJ1Y3QgdGhyZWFk X2luZm8gKioqKSBidWZwID0gdGhyZWFkOwotICAgICAgKCooc3RydWN0IHRocmVhZF9pbmZvICoq KikgYnVmcCkrKzsKLSAgICB9Ci0gIHJldHVybiAwOwotfQotCiAvKiBwdGlkIGNvbXBhcmlzb24g ZnVuY3Rpb24gKi8KIAogc3RhdGljIGludApAQCAtNzE5LDcgKzc0NSwxMCBAQCBnZXRfc2lnbmFs ZWRfdGhyZWFkIChpbnQgcGlkKQogCQkgICAgc2l6ZW9mICh0aHJpbmYpLCAma3RpZCwgMSkgIT0g MSkKIAlicmVhazsKIAotICAgICAgaWYgKHRocmluZi50aV9jdXJzaWcgPT0gU0lHVFJBUCkKKyAg ICAgIC8qIFdlIGFsc28gbmVlZCB0byBrZWVwIGluIG1pbmQgVHJhcCBhbmQgaW50ZXJydXB0IG9y IGFueQorICAgICAgICAgc2lnbmFsIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBwZF91cGRh dGUgKCkuICAqLworCisgICAgICBpZiAodGhyaW5mLnRpX2N1cnNpZykKIAlyZXR1cm4gdGhyaW5m LnRpX3RpZDsKICAgICB9CiAKQEAgLTc0MSw3ICs3NzAsNyBAQCBnZXRfc2lnbmFsZWRfdGhyZWFk IChpbnQgcGlkKQogICAgICAgIGhhdmUgZGlmZmljdWx0eSB3aXRoIGNlcnRhaW4gY2FsbCBwYXR0 ZXJucyAqLwogCiBzdGF0aWMgdm9pZAotc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKK3N5bmNf dGhyZWFkbGlzdHMgKHBpZF90IHBpZCkgCiB7CiAgIGludCBjbWQsIHN0YXR1czsKICAgaW50IHBj b3VudCwgcHNpemUsIHBpLCBnY291bnQsIGdpOwpAQCAtNzUwLDYgKzc3OSwxMSBAQCBzeW5jX3Ro cmVhZGxpc3RzIChpbnQgcGlkKQogICBwdGhkYl9wdGhyZWFkX3QgcGR0aWQ7CiAgIHB0aHJlYWRf dCBwdGhpZDsKICAgcHRoZGJfdGlkX3QgdGlkOworICBwcm9jZXNzX3N0cmF0dW1fdGFyZ2V0ICpw cm9jX3RhcmdldAorICAgICAgICAgICAgPSBjdXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3Rh cmdldCAoKTsKKyAgdGhyZWFkX2luZm8gICp0cDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkIChwaWQp OwogCiAgIC8qIEFjY3VtdWxhdGUgYW4gYXJyYXkgb2YgbGlicHRoZGVidWcgdGhyZWFkcyBzb3J0 ZWQgYnkgcHRocmVhZCBpZC4gICovCiAKQEAgLTc1OSwxMSArNzkzLDExIEBAIHN5bmNfdGhyZWFk bGlzdHMgKGludCBwaWQpCiAKICAgZm9yIChjbWQgPSBQVEhEQl9MSVNUX0ZJUlNUOzsgY21kID0g UFRIREJfTElTVF9ORVhUKQogICAgIHsKLSAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWQgKHBk X3Nlc3Npb24sICZwZHRpZCwgY21kKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWQgKGRh dGEtPnBkX3Nlc3Npb24sICZwZHRpZCwgY21kKTsKICAgICAgIGlmIChzdGF0dXMgIT0gUFRIREJf U1VDQ0VTUyB8fCBwZHRpZCA9PSBQVEhEQl9JTlZBTElEX1BUSFJFQUQpCiAJYnJlYWs7CiAKLSAg ICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfcHRpZCAocGRfc2Vzc2lvbiwgcGR0aWQsICZwdGhp ZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3B0aWQgKGRhdGEtPnBkX3Nlc3Npb24s IHBkdGlkLCAmcHRoaWQpOwogICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTIHx8IHB0 aGlkID09IFBUSERCX0lOVkFMSURfUFRJRCkKIAljb250aW51ZTsKIApAQCAtNzgwLDcgKzgxNCw3 IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAKICAgZm9yIChwaSA9IDA7IHBpIDwgcGNv dW50OyBwaSsrKQogICAgIHsKLSAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfdGlkIChwZF9z ZXNzaW9uLCBwYnVmW3BpXS5wZHRpZCwgJnRpZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhy ZWFkX3RpZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGJ1ZltwaV0ucGR0aWQsICZ0aWQpOwogICAgICAg aWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTKQogCXRpZCA9IFBUSERCX0lOVkFMSURfVElEOwog ICAgICAgcGJ1ZltwaV0udGlkID0gdGlkOwpAQCAtNzkwLDEzICs4MjQsMjYgQEAgc3luY190aHJl YWRsaXN0cyAoaW50IHBpZCkKIAogICAvKiBBY2N1bXVsYXRlIGFuIGFycmF5IG9mIEdEQiB0aHJl YWRzIHNvcnRlZCBieSBwaWQuICAqLwogCisgIC8qIGdjb3VudCBpcyBHREIgdGhyZWFkIGNvdW50 IGFuZCBwY291bnQgaXMgcHRocmVhZGxpYiB0aHJlYWQgY291bnQuICAqLworCiAgIGdjb3VudCA9 IDA7Ci0gIGl0ZXJhdGVfb3Zlcl90aHJlYWRzIChnaXRlcl9jb3VudCwgJmdjb3VudCk7CisgIGZv ciAodGhyZWFkX2luZm8gKnRwIDogYWxsX3RocmVhZHMgKHByb2NfdGFyZ2V0LCBwdGlkX3QgKHBp ZCkpKQorICAgIGdjb3VudCsrOwogICBnID0gZ2J1ZiA9IFhORVdWRUMgKHN0cnVjdCB0aHJlYWRf aW5mbyAqLCBnY291bnQpOwotICBpdGVyYXRlX292ZXJfdGhyZWFkcyAoZ2l0ZXJfYWNjdW0sICZn KTsKKyAgZm9yICh0aHJlYWRfaW5mbyAqdHAgOiBhbGxfdGhyZWFkcyAocHJvY190YXJnZXQsIHB0 aWRfdCAocGlkKSkpCisgICAgKmcrKyA9IHRwOwogICBxc29ydCAoZ2J1ZiwgZ2NvdW50LCBzaXpl b2YgKmdidWYsIGdjbXApOwogCisgIHRwID0gZmluZF90aHJlYWRfcHRpZCAocHJvY190YXJnZXQs IHB0aWRfdCAocGlkKSk7CisKKyAgLyogSWYgdGhlIHB0aHJlYWRsaWJyYXJ5IGlzIG5vdCByZWFk eSB0byBkZWJ1ZyAKKyAgICAgdGhlbiB0aGlzIGlzIGp1c3QgYSBtYWluIHByb2Nlc3Mgd2hpY2gg bmVlZHMgCisgICAgIGEgcHJpdiB0byBiZSBzZXQuICBUaGUgaWYgY29uZGl0aW9uIGJlbG93IGRv ZXMgCisgICAgIHRoZSBzYW1lLiAgT3RoZXJ3aXNlIHdlIGdvIHRvIHRoZSBmb3IgbG9vcCB0byAK KyAgICAgc3luYyB0aGUgcHRocmVhZCBhbmQgR0RCIHRocmVhZCBsaXN0cy4gICovCisKICAgLyog QXBwbHkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyB0byBHREIncyB0aHJlYWQg bGlzdC4gICovCisKICAgZm9yIChwaSA9IGdpID0gMDsgcGkgPCBwY291bnQgfHwgZ2kgPCBnY291 bnQ7KQogICAgIHsKICAgICAgIGlmIChwaSA9PSBwY291bnQpCkBAIC04MTAsOCArODU3LDYgQEAg c3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAkgIHByaXYtPnBkdGlkID0gcGJ1ZltwaV0ucGR0 aWQ7CiAJICBwcml2LT50aWQgPSBwYnVmW3BpXS50aWQ7CiAKLQkgIHByb2Nlc3Nfc3RyYXR1bV90 YXJnZXQgKnByb2NfdGFyZ2V0Ci0JICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190 YXJnZXQgKCk7CiAJICB0aHJlYWQgPSBhZGRfdGhyZWFkX3dpdGhfaW5mbyAocHJvY190YXJnZXQs CiAJCQkJCSBwdGlkX3QgKHBpZCwgMCwgcGJ1ZltwaV0ucHRoaWQpLAogCQkJCQkgcHJpdik7CkBA IC04NDEsMTMgKzg4NiwyNyBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQogCSAgICB9CiAJ ICBlbHNlIGlmIChjbXBfcmVzdWx0ID4gMCkKIAkgICAgewotCSAgICAgIGRlbGV0ZV90aHJlYWQg KGdidWZbZ2ldKTsKLQkgICAgICBnaSsrOworCSAgICAgIC8qIFRoaXMgaXMgdG8gbWFrZSB0aGUg bWFpbiBwcm9jZXNzIHRocmVhZCBub3cgbG9vaworICAgICAgICAgICAgICAgICBsaWtlIGEgdGhy ZWFkLiAgKi8KKworCSAgICAgIGlmIChncHRpZC5pc19waWQgKCkpCisJCXsKKwkJICB0aHJlYWRf Y2hhbmdlX3B0aWQgKHByb2NfdGFyZ2V0LCBncHRpZCwgcHB0aWQpOworCQkgIGFpeF90aHJlYWRf aW5mbyAqcHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87CisgICAgICAgICAgICAgICAgICBwcml2 LT5wZHRpZCA9IHBidWZbcGldLnBkdGlkOworICAgICAgICAgICAgICAgICAgcHJpdi0+dGlkID0g cGJ1ZltwaV0udGlkOworCQkgIHRwLT5wcml2LnJlc2V0IChwcml2KTsKKwkJICBnaSsrOworCQkg IHBpKys7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBkZWxldGVfdGhyZWFkIChnYnVmW2dp XSk7CisJCSAgZ2krKzsKKwkJfQogCSAgICB9CiAJICBlbHNlCiAJICAgIHsKLQkgICAgICBwcm9j ZXNzX3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAotCQk9IGN1cnJlbnRfaW5mZXJpb3IgKCkt PnByb2Nlc3NfdGFyZ2V0ICgpOwogCSAgICAgIHRocmVhZCA9IGFkZF90aHJlYWQgKHByb2NfdGFy Z2V0LCBwcHRpZCk7CiAKIAkgICAgICBhaXhfdGhyZWFkX2luZm8gKnByaXYgPSBuZXcgYWl4X3Ro cmVhZF9pbmZvOwpAQCAtODgxLDE3ICs5NDAsMjAgQEAgaXRlcl90aWQgKHN0cnVjdCB0aHJlYWRf aW5mbyAqdGhyZWFkLCB2b2lkICp0aWRwKQogICAgcmV0dXJuIGEgcGlkLW9ubHkgcHRpZCB3aXRo IFBJRC4gICovCiAKIHN0YXRpYyBwdGlkX3QKLXBkX3VwZGF0ZSAoaW50IHBpZCkKK3BkX3VwZGF0 ZSAocGlkX3QgcGlkKQogewogICBpbnQgc3RhdHVzOwogICBwdGlkX3QgcHRpZDsKICAgcHRoZGJf dGlkX3QgdGlkOwogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IE5VTEw7CisgIHN0cnVj dCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRh X2hlbHBlcl9mb3JfcGlkIChwaWQpOwogCi0gIGlmICghcGRfYWN0aXZlKQorICBpZiAoIWRhdGEt PnBkX2FjdGl2ZSkKICAgICByZXR1cm4gcHRpZF90IChwaWQpOwogCi0gIHN0YXR1cyA9IHB0aGRi X3Nlc3Npb25fdXBkYXRlIChwZF9zZXNzaW9uKTsKKyAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91 cGRhdGUgKGRhdGEtPnBkX3Nlc3Npb24pOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1Mp CiAgICAgcmV0dXJuIHB0aWRfdCAocGlkKTsKIApAQCAtOTE1LDM0ICs5NzcsMjMgQEAgcGRfdXBk YXRlIChpbnQgcGlkKQogICAgZm9yIHRoYXQgdGhyZWFkLiAgT3RoZXJ3aXNlLCByZXR1cm4gYSBw dGlkLW9ubHkgcHRpZCB1c2luZyBQSUQuICAqLwogCiBzdGF0aWMgcHRpZF90Ci1wZF9hY3RpdmF0 ZSAoaW50IHBpZCkKK3BkX2FjdGl2YXRlIChwaWRfdCBwaWQpCiB7CiAgIGludCBzdGF0dXM7Ci0J CQotICBzdGF0dXMgPSBwdGhkYl9zZXNzaW9uX2luaXQgKHBpZCwgYXJjaDY0ID8gUEVNXzY0QklU IDogUEVNXzMyQklULAorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRh dGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQgKHBpZCk7CisgIAorICBzdGF0dXMg PSBwdGhkYl9zZXNzaW9uX2luaXQgKHBpZCwgZGF0YS0+YXJjaDY0ID8gUEVNXzY0QklUIDogUEVN XzMyQklULAogCQkJICAgICAgIFBUSERCX0ZMQUdfUkVHUywgJnBkX2NhbGxiYWNrcywgCi0JCQkg ICAgICAgJnBkX3Nlc3Npb24pOworCQkJICAgICAgICZkYXRhLT5wZF9zZXNzaW9uKTsKICAgaWYg KHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTKQogICAgIHsKICAgICAgIHJldHVybiBwdGlkX3QgKHBp ZCk7CiAgICAgfQotICBwZF9hY3RpdmUgPSAxOworICBkYXRhLT5wZF9hY3RpdmUgPSAxOwogICBy ZXR1cm4gcGRfdXBkYXRlIChwaWQpOwogfQogCi0vKiBVbmRvIHRoZSBlZmZlY3RzIG9mIHBkX2Fj dGl2YXRlKCkuICAqLwotCi1zdGF0aWMgdm9pZAotcGRfZGVhY3RpdmF0ZSAodm9pZCkKLXsKLSAg aWYgKCFwZF9hY3RpdmUpCi0gICAgcmV0dXJuOwotICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKHBk X3Nlc3Npb24pOwotICAKLSAgcGlkX3RvX3ByYyAoJmluZmVyaW9yX3B0aWQpOwotICBwZF9hY3Rp dmUgPSAwOwotfQotCiAvKiBBbiBvYmplY3QgZmlsZSBoYXMganVzdCBiZWVuIGxvYWRlZC4gIENo ZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQKICAgIGFwcGxpY2F0aW9uIGlzIHB0aHJlYWRlZCwgYW5k IGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KIApAQCAtOTUyLDEzICsx MDAzLDE5IEBAIHBkX2VuYWJsZSAodm9pZCkKICAgaW50IHN0YXR1czsKICAgY2hhciAqc3R1Yl9u YW1lOwogICBzdHJ1Y3QgYm91bmRfbWluaW1hbF9zeW1ib2wgbXM7CisgIHN0cnVjdCBhaXhfdGhy ZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKworICBpZiAoIWluZmVyaW9yX3B0aWQucGlkICgpKQorICAg IHJldHVybjsKKyAgCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChp bmZlcmlvcl9wdGlkKTsKIAogICAvKiBEb24ndCBpbml0aWFsaXplIHR3aWNlLiAgKi8KLSAgaWYg KHBkX2FibGUpCisgIGlmIChkYXRhLT5wZF9hYmxlKQogICAgIHJldHVybjsKIAogICAvKiBDaGVj ayBhcHBsaWNhdGlvbiB3b3JkIHNpemUuICAqLwotICBhcmNoNjQgPSByZWdpc3Rlcl9zaXplICh0 YXJnZXRfZ2RiYXJjaCAoKSwgMCkgPT0gODsKKyAgZGF0YS0+YXJjaDY0ID0gcmVnaXN0ZXJfc2l6 ZSAodGFyZ2V0X2dkYmFyY2ggKCksIDApID09IDg7CiAKICAgLyogQ2hlY2sgd2hldGhlciB0aGUg YXBwbGljYXRpb24gaXMgcHRocmVhZGVkLiAgKi8KICAgc3R1Yl9uYW1lID0gTlVMTDsKQEAgLTk3 MiwxMyArMTAyOSwxMyBAQCBwZF9lbmFibGUgKHZvaWQpCiAgIG1zID0gbG9va3VwX21pbmltYWxf c3ltYm9sIChzdHViX25hbWUsIE5VTEwsIE5VTEwpOwogICBpZiAobXMubWluc3ltID09IE5VTEwp CiAgICAgcmV0dXJuOwotICBwZF9icmtfYWRkciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7Ci0gIGlm ICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgcGRf YnJrX2FkZHIpKQorICBkYXRhLT5wZF9icmtfYWRkciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7Cisg IGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwg ZGF0YS0+cGRfYnJrX2FkZHIpKQogICAgIHJldHVybjsKIAogICAvKiBQcmVwYXJlIGZvciB0aHJl YWQgZGVidWdnaW5nLiAgKi8KICAgY3VycmVudF9pbmZlcmlvciAoKS0+cHVzaF90YXJnZXQgKCZh aXhfdGhyZWFkX29wcyk7Ci0gIHBkX2FibGUgPSAxOworICBkYXRhLT5wZF9hYmxlID0gMTsgCiAK ICAgLyogSWYgd2UncmUgZGVidWdnaW5nIGEgY29yZSBmaWxlIG9yIGFuIGF0dGFjaGVkIGluZmVy aW9yLCB0aGUKICAgICAgcHRocmVhZCBsaWJyYXJ5IG1heSBhbHJlYWR5IGhhdmUgYmVlbiBpbml0 aWFsaXplZCwgc28gdHJ5IHRvCkBAIC05OTEsMjggKzEwNDgsMzEgQEAgcGRfZW5hYmxlICh2b2lk KQogc3RhdGljIHZvaWQKIHBkX2Rpc2FibGUgKHZvaWQpCiB7Ci0gIGlmICghcGRfYWJsZSkKKyAg c3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9k YXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CisKKyAgaWYgKCFkYXRhLT5wZF9h YmxlKQorICAgIHJldHVybjsKKyAgaWYgKCFkYXRhLT5wZF9hY3RpdmUpCiAgICAgcmV0dXJuOwot ICBpZiAocGRfYWN0aXZlKQotICAgIHBkX2RlYWN0aXZhdGUgKCk7Ci0gIHBkX2FibGUgPSAwOwor ICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKGRhdGEtPnBkX3Nlc3Npb24pOworIAorICBwaWRfdG9f cHJjICgmaW5mZXJpb3JfcHRpZCk7CisgIGRhdGEtPnBkX2FjdGl2ZSA9IDA7CisgIGRhdGEtPnBk X2FibGUgPSAwOwogICBjdXJyZW50X2luZmVyaW9yICgpLT51bnB1c2hfdGFyZ2V0ICgmYWl4X3Ro cmVhZF9vcHMpOwogfQogCiAvKiBuZXdfb2JqZmlsZSBvYnNlcnZlciBjYWxsYmFjay4KIAogICAg SWYgT0JKRklMRSBpcyBub24tbnVsbCwgY2hlY2sgd2hldGhlciBhIHRocmVhZGVkIGFwcGxpY2F0 aW9uIGlzCi0gICBiZWluZyBkZWJ1Z2dlZCwgYW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQg ZGVidWdnaW5nLgotCi0gICBJZiBPQkpGSUxFIGlzIG51bGwsIHN0b3AgZGVidWdnaW5nIHRocmVh ZHMuICAqLworICAgYmVpbmcgZGVidWdnZWQsIGFuZCBpZiBzbywgcHJlcGFyZSBmb3IgdGhyZWFk IGRlYnVnZ2luZy4gICovCiAKIHN0YXRpYyB2b2lkCiBuZXdfb2JqZmlsZSAoc3RydWN0IG9iamZp bGUgKm9iamZpbGUpCiB7CiAgIGlmIChvYmpmaWxlKQogICAgIHBkX2VuYWJsZSAoKTsKLSAgZWxz ZQotICAgIHBkX2Rpc2FibGUgKCk7CiB9CiAKIC8qIEF0dGFjaCB0byBwcm9jZXNzIHNwZWNpZmll ZCBieSBBUkdTLiAgKi8KQEAgLTEwNDIsOCArMTEwMiwxMSBAQCBhaXhfdGhyZWFkX3RhcmdldDo6 cmVzdW1lIChwdGlkX3QgcHRpZCwgaW50IHN0ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiB7CiAg IHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkOwogICBwdGhkYl90aWRfdCB0aWRbMl07CisgIHN0 cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgCisgIGRhdGEgPSBnZXRfdGhyZWFk X2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkKTsKIAotICBpZiAoIVBEX1RJRCAocHRpZCkpCisg IGlmIChwdGlkLnRpZCAoKSA9PSAwKQogICAgIHsKICAgICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVf aW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAg ICAgIApAQCAtMTA2NSw3ICsxMTI4LDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6OnJlc3VtZSAocHRp ZF90IHB0aWQsIGludCBzdGVwLCBlbnVtIGdkYl9zaWduYWwgc2lnKQogCSAgICAgICBwdGlkLmx3 cCAoKSk7CiAgICAgICB0aWRbMV0gPSAwOwogCi0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYg KGRhdGEtPmFyY2g2NCkKIAlwdHJhY2U2NGFpeCAoUFRUX0NPTlRJTlVFLCB0aWRbMF0sIChsb25n IGxvbmcpIDEsCiAJCSAgICAgZ2RiX3NpZ25hbF90b19ob3N0IChzaWcpLCAoUFRSQUNFX1RZUEVf QVJHNSkgdGlkKTsKICAgICAgIGVsc2UKQEAgLTEwODIsNiArMTE0NSw3IEBAIHB0aWRfdAogYWl4 X3RocmVhZF90YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0 dXMgKnN0YXR1cywKIAkJCSB0YXJnZXRfd2FpdF9mbGFncyBvcHRpb25zKQogeworICBzdHJ1Y3Qg YWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CiAgIHsKICAgICBwaWRfdG9fcHJjICgmcHRpZCk7 CiAKQEAgLTEwOTUsOCArMTE1OSwxMCBAQCBhaXhfdGhyZWFkX3RhcmdldDo6d2FpdCAocHRpZF90 IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzLAogICAgICBwaWQtb25seSBw dGlkcy4gICovCiAgIGdkYl9hc3NlcnQgKHB0aWQuaXNfcGlkICgpKTsKIAorICBkYXRhID0gZ2V0 X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocHRpZCk7CisKICAgLyogQ2hlY2sgd2hldGhl ciBsaWJwdGhkZWJ1ZyBtaWdodCBiZSByZWFkeSB0byBiZSBpbml0aWFsaXplZC4gICovCi0gIGlm ICghcGRfYWN0aXZlICYmIHN0YXR1cy0+a2luZCAoKSA9PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBF RAorICBpZiAoIWRhdGEtPnBkX2FjdGl2ZSAmJiBzdGF0dXMtPmtpbmQgKCkgPT0gVEFSR0VUX1dB SVRLSU5EX1NUT1BQRUQKICAgICAgICYmIHN0YXR1cy0+c2lnICgpID09IEdEQl9TSUdOQUxfVFJB UCkKICAgICB7CiAgICAgICBwcm9jZXNzX3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldApAQCAt MTEwNSw3ICsxMTcxLDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBz dHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywKICAgICAgIHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoID0gcmVnY2FjaGUtPmFyY2ggKCk7CiAKICAgICAgIGlmIChyZWdjYWNoZV9yZWFkX3Bj IChyZWdjYWNoZSkKLQkgIC0gZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNoKSA9 PSBwZF9icmtfYWRkcikKKwkgIC0gZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNo KSA9PSBkYXRhLT5wZF9icmtfYWRkcikKIAlyZXR1cm4gcGRfYWN0aXZhdGUgKHB0aWQucGlkICgp KTsKICAgICB9CiAKQEAgLTEyMjksMTggKzEyOTUsMjAgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVh ZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBw cGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChn ZGJhcmNoKTsKICAgaW50IHN0YXR1cywgaTsKICAgcHRoZGJfY29udGV4dF90IGN0eDsKKyAgc3Ry dWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRh X2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJl YWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCiAJCSJmZXRjaF9yZWdzX3VzZXJfdGhy ZWFkICVseFxuIiwgKGxvbmcpIHBkdGlkKTsKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250 ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRf Y29udGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9 IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6IGZldGNoX3JlZ2lzdGVy czogcHRoZGJfcHRocmVhZF9jb250ZXh0IHJldHVybmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0 ciAoc3RhdHVzKSk7CiAKICAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAKLSAg aWYgKGFyY2g2NCkKKyAgaWYgKGRhdGEtPmFyY2g2NCkKICAgICBzdXBwbHlfZ3ByczY0IChyZWdj YWNoZSwgY3R4Lmdwcik7CiAgIGVsc2UKICAgICBmb3IgKGkgPSAwOyBpIDwgcHBjX251bV9ncHJz OyBpKyspCkBAIC0xMjUzLDcgKzEzMjEsNyBAQCBmZXRjaF9yZWdzX3VzZXJfdGhyZWFkIChzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogU3Bl Y2lhbCByZWdpc3RlcnMuICAqLwogCi0gIGlmIChhcmNoNjQpCisgIGlmIChkYXRhLT5hcmNoNjQp CiAgICAgc3VwcGx5X3NwcnM2NCAocmVnY2FjaGUsIGN0eC5pYXIsIGN0eC5tc3IsIGN0eC5jciwg Y3R4LmxyLCBjdHguY3RyLAogCQkJICAgICBjdHgueGVyLCBjdHguZnBzY3IpOwogICBlbHNlCkBA IC0xMjg4LDE4ICsxMzU2LDIxIEBAIGZldGNoX3JlZ3Nfa2VybmVsX3RocmVhZCAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vLAogICBzdHJ1Y3QgcHR4c3BycyBzcHJzNjQ7CiAg IHN0cnVjdCBwdHNwcnMgc3ByczMyOwogICBpbnQgaTsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFy aWFibGVzICpkYXRhOworICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0 aWQgKHJlZ2NhY2hlLT5wdGlkICgpKTsKIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBn ZGJfcHJpbnRmIChnZGJfc3RkbG9nLAogCQkiZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFkIHRpZD0l bHggcmVnbm89JWQgYXJjaDY0PSVkXG4iLAotCQkobG9uZykgdGlkLCByZWdubywgYXJjaDY0KTsK KwkJKGxvbmcpIHRpZCwgcmVnbm8sIGRhdGEtPmFyY2g2NCk7CiAKICAgLyogR2VuZXJhbC1wdXJw b3NlIHJlZ2lzdGVycy4gICovCiAgIGlmIChyZWdubyA9PSAtMQogICAgICAgfHwgKHRkZXAtPnBw Y19ncDBfcmVnbnVtIDw9IHJlZ25vCiAJICAmJiByZWdubyA8IHRkZXAtPnBwY19ncDBfcmVnbnVt ICsgcHBjX251bV9ncHJzKSkKICAgICB7Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRh dGEtPmFyY2g2NCkKIAl7CiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQs IAogCQkJICAgICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5VTEwpKQpAQCAtMTMzMSw3ICsx NDAyLDcgQEAgZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJf cCAoZ2RiYXJjaCwgcmVnbm8pKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAo ZGF0YS0+YXJjaDY0KQogCXsKIAkgIGlmICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQUlMsIHRp ZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcpICZzcHJzNjQsIDAsIE5VTEwpKQpAQCAtMTM2Miwx MiArMTQzMywxNiBAQCBhaXhfdGhyZWFkX3RhcmdldDo6ZmV0Y2hfcmVnaXN0ZXJzIChzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pCiB7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAq dGhyZWFkOwogICBwdGhkYl90aWRfdCB0aWQ7CisgIHRocmVhZCA9IGZpbmRfdGhyZWFkX3B0aWQg KGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpLCBwdGlkX3QgKHJlZ2NhY2hl LT5wdGlkICgpLnBpZCAoKSwgMCwgcmVnY2FjaGUtPnB0aWQgKCkudGlkICgpKSk7CiAKLSAgaWYg KCFQRF9USUQgKHJlZ2NhY2hlLT5wdGlkICgpKSkKKyAgLyogSWYgYSBuZXcgaW5mZXJpb3IgaXMg Ym9ybiwgdGhlbiBpdHMgcHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGlzIHlldCB0bworICAgICBpbml0 aWFsaXNlZCBhbmQgaGVuY2UgaGFzIG5vIHByaXZhdGUgZGF0YS4gU28gdGhlIGJlbG93IGlmIGNv bmRpdGlvbgorICAgICBleGlzdHMuICAqLworCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50aWQg KCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdu byk7CiAgIGVsc2UKICAgICB7Ci0gICAgICB0aHJlYWQgPSBmaW5kX3RocmVhZF9wdGlkIChjdXJy ZW50X2luZmVyaW9yICgpLCByZWdjYWNoZS0+cHRpZCAoKSk7CiAgICAgICBhaXhfdGhyZWFkX2lu Zm8gKnByaXYgPSBnZXRfYWl4X3RocmVhZF9pbmZvICh0aHJlYWQpOwogICAgICAgdGlkID0gcHJp di0+dGlkOwogCkBAIC0xNTExLDYgKzE1ODYsOCBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChj b25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAg IHB0aGRiX2NvbnRleHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMyOwogICB1aW50NjRfdCBpbnQ2 NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3Ro cmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVn X2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCkBAIC0xNTE4LDcgKzE1 OTUsNyBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogUmV0cmlldmUgdGhlIHRocmVh ZCdzIGN1cnJlbnQgY29udGV4dCBmb3IgaXRzIG5vbi1yZWdpc3RlcgogICAgICB2YWx1ZXMuICAq LwotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKHBkX3Nlc3Npb24sIHBkdGlkLCAm Y3R4KTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChkYXRhLT5wZF9zZXNzaW9u LCBwZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBlcnJv ciAoXygiYWl4LXRocmVhZDogc3RvcmVfcmVnaXN0ZXJzOiBwdGhkYl9wdGhyZWFkX2NvbnRleHQg cmV0dXJuZWQgJXMiKSwKIAkgICBwZF9zdGF0dXMyc3RyIChzdGF0dXMpKTsKQEAgLTE1MjgsNyAr MTYwNSw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRfdCBwZHRpZCkKICAgZm9yIChpID0gMDsgaSA8IHBwY19u dW1fZ3ByczsgaSsrKQogICAgIGlmIChSRUdfVkFMSUQgPT0gcmVnY2FjaGUtPmdldF9yZWdpc3Rl cl9zdGF0dXMgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSkpCiAgICAgICB7Ci0JaWYgKGFyY2g2 NCkKKwlpZiAoZGF0YS0+YXJjaDY0KQogCSAgewogCSAgICByZWdjYWNoZS0+cmF3X2NvbGxlY3Qg KHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSwgKHZvaWQgKikgJmludDY0KTsKIAkgICAgY3R4Lmdw cltpXSA9IGludDY0OwpAQCAtMTU0NSw3ICsxNjIyLDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVh ZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlk KQogICAgIGZpbGxfZnBycyAocmVnY2FjaGUsIGN0eC5mcHIpOwogCiAgIC8qIFNwZWNpYWwgcmVn aXN0ZXJzIChhbHdheXMga2VwdCBpbiBjdHggYXMgNjQgYml0cykuICAqLwotICBpZiAoYXJjaDY0 KQorICBpZiAoZGF0YS0+YXJjaDY0KQogICAgIHsKICAgICAgIGZpbGxfc3ByczY0IChyZWdjYWNo ZSwgJmN0eC5pYXIsICZjdHgubXNyLCAmY3R4LmNyLCAmY3R4LmxyLCAmY3R4LmN0ciwKIAkJCSAg ICAgJmN0eC54ZXIsICZjdHguZnBzY3IpOwpAQCAtMTU3Niw3ICsxNjUzLDcgQEAgc3RvcmVfcmVn c191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRo cmVhZF90IHBkdGlkKQogCWN0eC5mcHNjciA9IHRtcF9mcHNjcjsKICAgICB9CiAKLSAgc3RhdHVz ID0gcHRoZGJfcHRocmVhZF9zZXRjb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7Cisg IHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0 aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8o ImFpeC10aHJlYWQ6IHN0b3JlX3JlZ2lzdGVyczogIgogCSAgICAgInB0aGRiX3B0aHJlYWRfc2V0 Y29udGV4dCByZXR1cm5lZCAlcyIpLApAQCAtMTYwMiw2ICsxNjc5LDkgQEAgc3RvcmVfcmVnc19r ZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8s CiAgIGRvdWJsZSBmcHJzW3BwY19udW1fZnByc107CiAgIHN0cnVjdCBwdHhzcHJzIHNwcnM2NDsK ICAgc3RydWN0IHB0c3BycyAgc3ByczMyOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMg KmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocmVn Y2FjaGUtPnB0aWQgKCkpOwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmlu dGYgKGdkYl9zdGRsb2csIApAQCAtMTYxMyw3ICsxNjkzLDcgQEAgc3RvcmVfcmVnc19rZXJuZWxf dGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAgICAg ICB8fCAodGRlcC0+cHBjX2dwMF9yZWdudW0gPD0gcmVnbm8KIAkgICYmIHJlZ25vIDwgdGRlcC0+ cHBjX2dwMF9yZWdudW0gKyBwcGNfbnVtX2ZwcnMpKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQp CisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1mZXRjaDogc29tZSByZWdz IG1heSBub3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVBRF9H UFJTLCB0aWQsICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5VTEwpOwpAQCAtMTY0Niw3ICsx NzI2LDcgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVn aXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAg ICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1mZXRjaDogc29tZSByZWdpc3RlcnMg d29uJ3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJT LCB0aWQsIApAQCAtMTcwMyw3ICsxNzgzLDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6OnN0b3JlX3Jl Z2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQogICBzdHJ1Y3Qg dGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3QgdGlkOwogCi0gIGlmICghUERfVElE IChyZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50aWQgKCkgPT0g MCkKICAgICBiZW5lYXRoICgpLT5zdG9yZV9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdubyk7CiAg IGVsc2UKICAgICB7CkBAIC0xNzQxLDcgKzE4MjEsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6bW91 cm5faW5mZXJpb3IgKCkKIHsKICAgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IHRoaXMtPmJlbmVhdGgg KCk7CiAKLSAgcGRfZGVhY3RpdmF0ZSAoKTsKKyAgcGRfZGlzYWJsZSAoKTsKICAgYmVuZWF0aC0+ bW91cm5faW5mZXJpb3IgKCk7CiB9CiAKQEAgLTE3NTAsNyArMTgzMCw3IEBAIGFpeF90aHJlYWRf dGFyZ2V0Ojptb3Vybl9pbmZlcmlvciAoKQogYm9vbAogYWl4X3RocmVhZF90YXJnZXQ6OnRocmVh ZF9hbGl2ZSAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYgKHB0 aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnRocmVhZF9hbGl2ZSAocHRp ZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0aHJlYWQgbGlzdCBldmVyeSB0aW1lIHRoZSBjaGls ZCBzdG9wcywgc28gYWxsCkBAIC0xNzY2LDcgKzE4NDYsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6 dGhyZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkKIHN0ZDo6c3RyaW5nCiBhaXhfdGhyZWFkX3Rhcmdl dDo6cGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAg aWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnBpZF90b19zdHIg KHB0aWQpOwogCiAgIHJldHVybiBzdHJpbmdfcHJpbnRmIChfKCJUaHJlYWQgJXMiKSwgcHVsb25n ZXN0IChwdGlkLnRpZCAoKSkpOwpAQCAtMTc4Niw4ICsxODY2LDExIEBAIGFpeF90aHJlYWRfdGFy Z2V0OjpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQpCiAgIHB0 aGRiX2RldGFjaHN0YXRlX3QgZGV0YWNoc3RhdGU7CiAgIGludCBjYW5jZWxwZW5kOwogICBzdGF0 aWMgY2hhciAqcmV0ID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRh OworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkICh0aHJlYWQtPnB0 aWQpOwogCi0gIGlmICghUERfVElEICh0aHJlYWQtPnB0aWQpKQorICBpZiAodGhyZWFkLT5wdGlk LnRpZCAoKSA9PSAwKQogICAgIHJldHVybiBOVUxMOwogCiAgIHN0cmluZ19maWxlIGJ1ZjsKQEAg LTE4MDAsMjQgKzE4ODMsMjQgQEAgYWl4X3RocmVhZF90YXJnZXQ6OmV4dHJhX3RocmVhZF9pbmZv IChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKICAgICAvKiBpMThuOiBMaWtlICJ0aHJlYWQt aWRlbnRpZmllciAlZCwgW3N0YXRlXSBydW5uaW5nLCBzdXNwZW5kZWQiICovCiAgICAgYnVmLnBy aW50ZiAoXygidGlkICVkIiksIChpbnQpdGlkKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFk X3N0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgJnN0YXRlKTsKKyAgc3RhdHVzID0gcHRoZGJfcHRo cmVhZF9zdGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZzdGF0ZSk7CiAgIGlmIChzdGF0 dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBzdGF0ZSA9IFBTVF9OT1RTVVA7CiAgIGJ1Zi5wcmlu dGYgKCIsICVzIiwgc3RhdGUyc3RyIChzdGF0ZSkpOwogCi0gIHN0YXR1cyA9IHB0aGRiX3B0aHJl YWRfc3VzcGVuZHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0 aHJlYWRfc3VzcGVuZHN0YXRlIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgCiAJCQkJICAgICAg ICZzdXNwZW5kc3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgc3VzcGVu ZHN0YXRlID09IFBTU19TVVNQRU5ERUQpCiAgICAgLyogaTE4bjogTGlrZSAiVGhyZWFkLUlkICVk LCBbc3RhdGVdIHJ1bm5pbmcsIHN1c3BlbmRlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIsIHN1 c3BlbmRlZCIpKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2RldGFjaHN0YXRlIChwZF9z ZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfZGV0YWNoc3RhdGUgKGRh dGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAKIAkJCQkgICAgICAmZGV0YWNoc3RhdGUpOwogICBpZiAo c3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgZGV0YWNoc3RhdGUgPT0gUERTX0RFVEFDSEVEKQog ICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1JZCAlZCwgW3N0YXRlXSBydW5uaW5nLCBkZXRhY2hl ZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIsIGRldGFjaGVkIikpOwogCi0gIHB0aGRiX3B0aHJl YWRfY2FuY2VscGVuZCAocGRfc2Vzc2lvbiwgcGR0aWQsICZjYW5jZWxwZW5kKTsKKyAgcHRoZGJf cHRocmVhZF9jYW5jZWxwZW5kIChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmNhbmNlbHBlbmQp OwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgY2FuY2VscGVuZCkKICAgICAvKiBp MThuOiBMaWtlICJUaHJlYWQtSWQgJWQsIFtzdGF0ZV0gcnVubmluZywgY2FuY2VsIHBlbmRpbmci ICovCiAgICAgYnVmLnByaW50ZiAoXygiLCBjYW5jZWwgcGVuZGluZyIpKTsKZGlmZiAtLWdpdCBh L2dkYi9zb2xpYi1haXguYyBiL2dkYi9zb2xpYi1haXguYwppbmRleCBmNDgzZjU0ZGUxMy4uNmJl ODEwNjRlYmQgMTAwNjQ0Ci0tLSBhL2dkYi9zb2xpYi1haXguYworKysgYi9nZGIvc29saWItYWl4 LmMKQEAgLTYxOCw2ICs2MTgsMjAgQEAgc29saWJfYWl4X2JmZF9vcGVuIChjb25zdCBjaGFyICpw YXRobmFtZSkKICAgICAgIGlmIChtZW1iZXJfbmFtZSA9PSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmpl Y3RfYmZkLmdldCAoKSkpCiAJYnJlYWs7CiAKKyAgICAgIHN0ZDo6c3RyaW5nIHMgPSBiZmRfZ2V0 X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSk7CisKKyAgICAgIC8qIEZvciBldmVyeSBpbmZl cmlvciBhZnRlciBmaXJzdCBpbnQgYmZkIHN5c3RlbSB3ZSAKKwkgd2lsbCBoYXZlIHRoZSBwYXRo bmFtZSBpbnN0ZWFkIG9mIHRoZSBtZW1iZXIgbmFtZQorCSByZWdpc3RlcmVkLiBIZW5jZSB0aGUg YmVsb3cgY29uZGl0aW9uIGV4aXN0cy4gICovCisKKyAgICAgIGlmIChzLmZpbmQgKCcoJykgIT0g c3RkOjpzdHJpbmc6Om5wb3MpCisJeworCSAgaW50IHBvcyA9IHMuZmluZCAoJygnKTsKKwkgIGlu dCBsZW4gPSBzLmZpbmQgKCcpJykgLSBzLmZpbmQgKCcoJyk7CisJICBpZiAocy5zdWJzdHIgKHBv cysxLCBsZW4tMSkgPT0gbWVtYmVyX25hbWUpIAorCSAgICByZXR1cm4gb2JqZWN0X2JmZDsKKwl9 CisKICAgICAgIG9iamVjdF9iZmQgPSBnZGJfYmZkX29wZW5yX25leHRfYXJjaGl2ZWRfZmlsZSAo YXJjaGl2ZV9iZmQuZ2V0ICgpLAogCQkJCQkJICAgICBvYmplY3RfYmZkLmdldCAoKSk7CiAgICAg fQotLSAKMi4zMS4xCgo= --_004_CH2PR15MB354455A756AF729AE5F796E2D6A19CH2PR15MB3544namp_--