From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 03E1D3858D33 for ; Tue, 7 Feb 2023 11:57:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 03E1D3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ibm.com Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 317B92SL010922; Tue, 7 Feb 2023 11:57:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=pp1; bh=Tkmqg8JeQRvvHaaRL7lbHZUA8owW/bwpY34Xd+uH8OQ=; b=tMVxTe4NApa80fIrKfZPSaf9L6LokBCrHjO+mkLtFnIoaROahFdue9NpYbPUyH0a0iDV Q7quCEjVOPRiOTHwAn2VjShqhqCSYE1h85x/3Ypk/WEzj+zMVU4ipMhGXrazkc+FWNAC qVhHGbSjggu2WcRXKb9ZpdyvEhsfOVBCrAIB1Y0e7Pdt0Cns+Iz8QO6dBLPoSeG7EBxT 5Ckxw3AFhOha60+mkznpMiiNyjEU91LjtNiubbtyf1CVWVey+JPqsCHaSU7nhFV6WOu7 rZ+AYAQV87ZdZMPLR5X/n0ak4FGZxSPPbKyJnIhVudqvwo+WePnUf7w3ke11XSUNdDmh 4A== Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2044.outbound.protection.outlook.com [104.47.66.44]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nkksyc8xk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 07 Feb 2023 11:57:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eEIPLSfIDn6bE0JsHXdJK4p+sizs2NU6w8frwvl7NCxughd+21T1MdUy9c0mmZZDZuWz74nWQYsffTJH9EnDVUtzC+IvkzHY675qNL8Y/3cDziprBCr2fijptcdpndduAUElI/aTZAiXdwtVac9B5ezlAqIvjxmJI1wZcpOLY3MCJHHwP9CCyw6+NGHiXIZ5lpwYHESFhHikA+VRaQT+QChKa+XvEletZpNyHCWO9Y7Km1hD5VqcqiRc+1yQlNbd455O1VN4LQ5o8Upf01wlUc7or1oM/BSJj0diPULQ3szMttzuKQdwpuOEdZzlMSpAh3aa1Qk+OqC7UD+tx2u8gQ== 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=Tkmqg8JeQRvvHaaRL7lbHZUA8owW/bwpY34Xd+uH8OQ=; b=Ilm9tEjStNfwH1Qg5OTUlOdIjzebcFipRmXxlPe1JChZ0A0F0BlPX32iRRXnT/6dsuoZfcB4nZX8PWqUq1lp9yiXRs9PgrHoowRxwUkvNzlO35edxX/WInc6kG3aVN63wVDwmBIAEeAcm8C5xOZuMjFBHMRIG/8gw/H9vVCuohIU7Oo54y5LFC1xIn7DB90rtPv3nlk91FjBi7lJTw8zwhfc1aVvMg7ZEsHlCfzehL7bN0r0kta7TMCeUwnXPzH37jv8yfSV+LTaY2xj0ehpCCNMw7vn+NIInmM3OlscuwTmOc5mEO3d7+BQoyyoaIIhd0j30+wP2clnoPDr5ZTWFw== 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 MN0PR15MB5370.namprd15.prod.outlook.com (2603:10b6:208:375::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.36; Tue, 7 Feb 2023 11:57:13 +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.6064.036; Tue, 7 Feb 2023 11:57:12 +0000 From: Aditya Kamath1 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+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXOAALszAIABIz5JgAU9kgCAARgy1A== Date: Tue, 7 Feb 2023 11:57:12 +0000 Message-ID: References: <09f2433177505899c9bd31347af9b43118e4f890.camel@de.ibm.com> <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> In-Reply-To: <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR15MB3544:EE_|MN0PR15MB5370:EE_ x-ms-office365-filtering-correlation-id: c48962d4-c193-4c6b-acd7-08db0902731a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 6Qp3rbtZJt0BXSK/LHwfGoIiLBJEEMGN/NVZE0q6z72lkQIJIjb09qsuhTPmO4ayaVKfLJyiicgXmL+DEYzkEraoIEYU9ubrYuCs04GrkFjxf/53ojrVbZZwyvCvXAjMzv1xKmpjS+/QRAgiBKpXQE1HLGk8/gd9HzvA43DgunL1OstpwmHiTUKhFgvfFAUMCwkaStid+HTV8OC2WvidTvjOndM1h1lt9RSTSdGkRwA7SUDPdNsxWVaS0Cmmfq2haOYItBOVbABLF8gag8LH9Csko3x3itp4fSZbuLmQU3AfaWrdalkPjwJ7UUc23lLDVqIh5SWQ4wNQLmbnyXP+razwgdLVwyUWwHby8hhE/H+4t9TXXb8S6lNbgbOkUP91C3mCGjnc6DzFbboqNnZM7UghpPC0VAZNfqt2w5xrr33lLkkpMUYgRp6b4B7uuk6wxnLleigv4rQ+IsR959UNoBXFLF4K67VhzF3WLW0klp+QRml/B96WwRCYImJ4ElKchDAzpRRgr/rOyBPPQVC4mogWODR9Wg2CL/x1JjLSVNjcc/7kdOht3EU+A6zsX4CMhVR7MkOZYYhpEdEdMV3qdyX5YNJ4VSxyM5Cwwzn20vjnIRDkdVwTu8ykjfZ7lJJJ86dBhZDKrjdKy9vX9WYerwoHt/cZQXeGW9NZ8+fCPCFTa0obXxa1TuScs1pAGVH59qAkfi2qb+K4g5aWQbQAag== 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)(136003)(346002)(396003)(39860400002)(376002)(366004)(451199018)(2906002)(33656002)(83380400001)(7696005)(71200400001)(53546011)(9686003)(26005)(186003)(6506007)(478600001)(76116006)(66476007)(64756008)(66446008)(66556008)(66946007)(91956017)(4326008)(8676002)(5660300002)(55016003)(86362001)(52536014)(8936002)(41300700001)(316002)(30864003)(99936003)(110136005)(38070700005)(122000001)(38100700002)(19627405001)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?Mc+dov6xxtEm1TOfyWsb++6YGQHlecKJsASBJR9gJAe+H6gIbwehVtmcl+dc?= =?us-ascii?Q?bGkSy4HtIkeosgTZacA/P1oA/RzIo7PY5SJClvKlvMMhZ+2N1tUfOtTk9iwi?= =?us-ascii?Q?xVPc7mHA0e9US9RNnTGcfLn4zD7C7eeKAVCDKhAbL9c7GXhTeoswootEA7yJ?= =?us-ascii?Q?HxmP5GXPqfF7AY36RwmzqVKGf82JMbYK5YSwV+JNUNgtuMm/bSHzutH2kNoJ?= =?us-ascii?Q?YMjLzazXa4/g6M2+QMNX7VlVVSbyXELodlKEtIIWQ4dOpmr5CB/pkQBB4ulc?= =?us-ascii?Q?QyT38GNp3ORlq6ezDI3ztN1zbP/2jSOgNlDcrv7rpop0C+gsrC6WOfPo8Xtl?= =?us-ascii?Q?Dsg/KQh+ajwH98O1Jy/68xstgZY80PUgLeyay7AZ3N2d2h4+RC6j4H55mbbv?= =?us-ascii?Q?jp1BQ8/gdLDaGesBH5It0sEdkW4RBswInOYZhZHm7hSLYbqMtwTF95lVw7b0?= =?us-ascii?Q?vmg1Ua4A0yUIh2lsNwS0iLFrU6J4xmgua9L6o838nrVGMbNMBcv1xN2WoXDP?= =?us-ascii?Q?rr+mRYv1aXon4OOYZM5NW/4LDUJI09dcWo54RcjyvESd64E3d9Q0hRiDuJzJ?= =?us-ascii?Q?8aCxUo1pcZK0GalHtU/ABscNsEJWZ25Rqut/rCiaGUTWyCDHbMgfDMo+h1bK?= =?us-ascii?Q?pYagMiFqZrGULZ7fOe8Bi7rGX23NQ/BL5Mwg/Uu9j8c9HMW84CWGncZ2ZN+m?= =?us-ascii?Q?la553uiaGise+A7Cmx1bHOgl/JgBlwVnn34aPzhjOmYt/s1lEZhNnu7SWxrj?= =?us-ascii?Q?h4e7gRjjBnS8TcwyEkq2rERBJjUPLDSdsKk7ecn6lpjA8+HZ9TChw/UDyaEg?= =?us-ascii?Q?H/j/1ejWaZCLLmBPLUxYuu+KgVDtY6aSwiAE9Fzlu9y7qIU6Ma9jFQaag9RV?= =?us-ascii?Q?1EIV7Lmjvvy5HDhmitg1E7tDDcurtQTdYbJi/pFumTe6ZJwkJ5vPZiSwuRyC?= =?us-ascii?Q?7NaSYuEvLSN9jgP1Oalvb29W2nwodsQ5newkElDsquxu1RJsUhBMahz+fOt8?= =?us-ascii?Q?BLg8MTB6k6nPOpucgRq6mrhXxpn6B553oYTIsNV4mvDaKmd95kTeBXvxckWu?= =?us-ascii?Q?uksxQEmKyBuCd5SUb2VO09/rEhBM/VgH5RziNJtABOzSqIWDwt9h7akIaQlJ?= =?us-ascii?Q?SPtPTiBfU4ZAb/PRPeANuBKiXy7geYc+hn6qKSEgrffKsT3aGpLgOpgC6ECj?= =?us-ascii?Q?A2dOQ5doYs97FR3xZ/xdg1+SI3xhWeZZVUeZqNBKdcIzijjCfpSrTNJOSIni?= =?us-ascii?Q?MGlU2DD7duPYKQs8Og4AqgqBjZsqYImRRsumykgov8A0PZRcYW4RDw8K2398?= =?us-ascii?Q?zLzIr1qgja2zKSU5TDtveoQTX6gyH3Mqp6H8D2QypXIw1/gAFjl1TGjHdffE?= =?us-ascii?Q?G6Kz4ZawmtwM65uhISm0g9FsiYvcASN0gAGLWmbLRMhwFdh9dEsIB/wwImya?= =?us-ascii?Q?GuCaZeirCzHN8r+aYYz2WimK+sbM8Tn5XyoM22Z6LRZD4sQy93BfDUf8nHUG?= =?us-ascii?Q?6/XcN/9qQIs7iABV4lllKkct1b934glz7ROOKr6+km1axWKtyANVc533mweB?= =?us-ascii?Q?oUmN+MWlZSpLIO5pIyy4DNbhPzt1z5IbcY4j6t1K?= Content-Type: multipart/mixed; boundary="_004_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_" 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: c48962d4-c193-4c6b-acd7-08db0902731a X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2023 11:57:12.8301 (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: sdFiWhNvH6jd16mPvhzp2JJLRdcdiDKxeXPCTiEUoz0cj2+45zqGR6LnOJQME0ZXxDHxA/Cu8D+ynt3hsjcU6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR15MB5370 X-Proofpoint-GUID: 3xb8fD-3I0durDzx-PEEfBqxqSPa8X5s X-Proofpoint-ORIG-GUID: 3xb8fD-3I0durDzx-PEEfBqxqSPa8X5s X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1 definitions=2023-02-07_03,2023-02-06_03,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 phishscore=0 clxscore=1015 adultscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302070103 X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HTML_MESSAGE,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_004_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_ Content-Type: multipart/alternative; boundary="_000_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_" --_000_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Ulrich, Tom and community, Please find attached the patch. I have written my answers to the previous c= omments. Kindly let me know if we need more changes. If not kindly push thi= s to the community code. The sample output and programs are pasted below th= is email. >I think this would fit better into gdb.threads, given that this is about t= he >interaction of multiple inferiors with the threading library on AIX. This I will do it immediately after this patch is done. >> if (user_current_pid !=3D 0) >>+ inferior_ptid =3D ptid_t (user_current_pid); >This seems unrelated to the rest of the changes at first glance. >Why is this necessary? So, when we need to be in the right context when we read memory. Before com= ing into the target wait, we switch_to_no_thread () due to which our inferi= or_ptid is set to null. Our target_memory needs the correct inferior_ptid. = Also, in case we don't have a ptid_t (pid) and the application is threaded= we need the inferior_ptid to be set correctly like shown in the patch. Pre= viously we used switch_to_thread ().. Now if the application is theraded an= d we only pass ptid_t (user_current_pid) to switch_to_thread () it will cra= sh as main thread looks different or is ptid_t (pid, 0, tid). Hence, we set= inferior_ptid to simplify. >Also, is the "user_current_pid !=3D 0" check even still needed given >the change to pd_enable() below? So, this I have removed. You were right. >By comparison, the Linux version of this in proc-service.c also >switches the current inferior and address space: > scoped_restore_current_inferior restore_inferior; > set_current_inferior (ph->thread->inf); >scoped_restore_current_program_space restore_current_progspace; >set_current_program_space (ph->thread->inf->pspace); > scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_pti= d); >inferior_ptid =3D ph->thread->ptid; > so we should probably do the same for consistency. So, kindly allow me to disagree with you on this. What is happening is in i= nferior.c in do_target_wait1 () we call switch_to_inferior_no_thread ().. T= he function is as follows void switch_to_inferior_no_thread (inferior *inf) { set_current_inferior (inf); switch_to_no_thread (); set_current_program_space (inf->pspace); } Here we already set the correct current inferior and program space to the s= ame thing as that if we set in pdc_read_memory like linux. So, it does not = make any difference to add the changes like linux does. In the switch_to_no= _thread () we set inferior_ptid to null and that is why we only set inferio= r_ptid in pdc_read_memory and not anything else. So, I suggest we stick to = this plan. Secondly, things work if we do not do the same for pdc_write_mem= ory. I have not seen anything not work. So, I don't think it is good to add= it there. What say?? >This looks unnecessarily complicated. Isn't this just > *g++ =3D tp; This I have changed. >Is this a change in behavior to current GDB? I thought if the >application (whether a single inferior or one of multiple inferiors) >is threaded in the sense that it uses the libpthread library we >wanted to show it as threaded, so that the user can e.g. see the >thread ID in info threads. So, you are right. I read it somewhere which I am not able to recall that o= nly in multiple threads we need to show as thread. I checked the Linux outp= ut. It is what you mentioned. I have removed the gcount =3D=3D1 && pcount = =3D=3D 1 condition.. >This logic is still confusing me. Why is the > gptid.pid () =3D=3D pptid.pid () >check still needed? I thought we now collected only threads >of a single process to begin with, so they all ought to have >the same PID? >Also, if the point is the gptid.is_pid () check, this can >really only happen once per inferior, as it is switched >from non-threaded to threaded mode, right? So I removed the gptid.pid () =3D=3D pptid.pid () condition. The reason I h= ad added was the gcount {Thread count per process} was not per process befo= re. I was worried to swap process. Now we do not need it. As far as the check gptid.is_pid () is concerned, I will suggest we keep it= there. If cmp_result is > 0 and we have a main process swap to create a th= read. Rest is same in the loop. The reason being handling pi and gi variabl= es becomes complex otherwise. When this swap happens, we need to increment = both pi and gi.. Because we have taken care of the main threads in both pth= read library and GDB. And this for loop is executed only once. So, the firs= t event is main process being pthreaded. Once the swap happens pi and gi be= come one and since gcount =3D pcount =3D 1 we exit the for loop. Thread add= ition events comes after this. >That should just be "if (ptid.tid () =3D=3D 0)" then. This is done >- pd_deactivate (); >+ pd_disable (); >Why is this necessary? If it is, do we even need two >separate pd_deactivate and pd_disable routines any more? So, the process exits then all its threads also exit in the mourn inferior.= So, we disable everything. Yes, I removed pd_deactivate (). >>+ if (s.find ('(') !=3D std::string::npos >>+ && s.find (member_name) !=3D std::string::npos) >>+ return object_bfd; >Ah, I guess you also need to ensure the member_name follows >immediately after the '(', otherwise there could be confusion >if the member name happens to be part of the file name as well. This I have changed as per how you mentioned. Kindly check the patch and le= t me know :) Have a nice day ahead. Thanks and regards, Aditya. ------------------------------------------- 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; } ------------------------------------------------- Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15991124)] I am parent [New inferior 3 (process 20840796)] I am parent ^Cin Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 33947921, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 37421465, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 32899441, running) thread_function (arg=3D0x0) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 Thread 515 (tid 33751493, running) 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 Thread 258 (tid 34931151, running) 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) ----------------------------------------------------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? =46rom To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Ulrich Weigand Sent: 07 February 2023 00:37 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: >>I think the question here is simply whether, if you run the >>test suite both without and with your patch, are any of the >>FAILs fixed with the patch? If not, it would be good to >>create a new test that fails without the patch and succeeds >>with it, and add that to the test suite. > >So, this is something new to me. We will add it as a continuation in the s= ame thread >after this patch. I will need one information. Which test suite will we ad= d it in? >gdb.threads or gdb.base? Also, kindly suggest a simple test case that is w= ritten that >I can see and learn. Any simple hello_world program will do. I want to und= erstand how >that exp file is written and how it compares to tell if a test case is pas= s or fail. I think this would fit better into gdb.threads, given that this is about the interaction of multiple inferiors with the threading library on AIX. I'd just look at existing test cases in that directory. For simple tests, = we usually have a .c file and a .exp file with the same name. The .exp file starts out with instructions to build the test case, and start it up under GDB. Then follow a series of test statements which are verified against the output of the GDB under test. As a simple example in a related area, you can look e.g. at fork-child-threads.{c,exp}. >Kindly give me feedback for this patch, incase we can do anything better >or is incorrect. Some comments: >@@ -508,14 +550,13 @@ pdc_read_data (pthdb_user_t user_current_pid, void *= buf, > /* This is needed to eliminate the dependency of current thread > which is null so that thread reads the correct target memory. */ > { >- scoped_restore_current_thread restore_current_thread; >+ scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_= ptid); > /* Before the first inferior is added, we pass inferior_ptid.pid () > from pd_enable () which is 0. There is no need to switch threads > during first initialisation. In the rest of the callbacks the > current thread needs to be correct. */ > if (user_current_pid !=3D 0) >- switch_to_thread (current_inferior ()->process_target (), >- ptid_t (user_current_pid)); >+ inferior_ptid =3D ptid_t (user_current_pid); > status =3D target_read_memory (addr, (gdb_byte *) buf, len); > } This seems unrelated to the rest of the changes at first glance. Why is this necessary? Also, is the "user_current_pid !=3D 0" check even still needed given the change to pd_enable() below? By comparison, the Linux version of this in proc-service.c also switches the current inferior and address space: scoped_restore_current_inferior restore_inferior; set_current_inferior (ph->thread->inf); scoped_restore_current_program_space restore_current_progspace; set_current_program_space (ph->thread->inf->pspace); scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_ptid= ); inferior_ptid =3D ph->thread->ptid; so we should probably do the same for consistency. Also, the same logic will be required in pdc_write_data, where it is currently missing completely. >+ for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) >+ { >+ **(struct thread_info ***) &g =3D tp; >+ (*(struct thread_info ***) &g)++; >+ } This looks unnecessarily complicated. Isn't this just *g++ =3D tp; ? >+ /* If there is only one thread then we need not make the main >+ thread look like a thread. It can stay as a process. This >+ is useful when we have multiple inferiors, but only one is >+ threaded. So we need not make the other inferiors with only >+ main thread, look like a threaded one. For example, Thread >+ 1.1, 1.2, 2.1, 3.1 exists then it is useful to skip this for >+ loop for 2.1 and 3.1 leaving them as main process thread with >+ a dummy priv set. */ >+ >+ if (pcount =3D=3D 1 && gcount =3D=3D 1) >+ { >+ aix_thread_info *priv =3D new aix_thread_info; >+ tp =3D find_thread_ptid (proc_target, gptid); >+ tp->priv.reset (priv); >+ break; >+ } Is this a change in behavior to current GDB? I thought if the application (whether a single inferior or one of multiple inferiors) is threaded in the sense that it uses the libpthread library we wanted to show it as threaded, so that the user can e.g. see the thread ID in info threads. >+ /* This is to make the main process thread now look >+ like a thread. */ >+ >+ if (gptid.is_pid () && gptid.pid () =3D=3D pptid.pid ()) >+ { >+ thread_change_ptid (proc_target, gptid, pptid); >+ aix_thread_info *priv =3D new aix_thread_info; >+ priv->pdtid =3D pbuf[pi].pdtid; >+ priv->tid =3D pbuf[pi].tid; >+ tp =3D find_thread_ptid (proc_target, pptid); >+ tp->priv.reset (priv); >+ pi++; >+ gi++; >+ } >+ else >+ { >+ delete_thread (gbuf[gi]); >+ gi++; >+ } This logic is still confusing me. Why is the gptid.pid () =3D=3D pptid.pid () check still needed? I thought we now collected only threads of a single process to begin with, so they all ought to have the same PID? Also, if the point is the gptid.is_pid () check, this can really only happen once per inferior, as it is switched from non-threaded to threaded mode, right? Maybe it would simplify the logic to have all that (including the code under if (pcount =3D=3D 1 && gcount =3D=3D 1) above if it is actually needed) in a separate statement before that loop. I.e. directly before the loop, have a separate check whether the current process only has a single thread, whose ptid_t is still in the pid-only format, and if so, upgrade it to full TID format using the main thread's TID. Only after that, go through the loop to handle any other threads we may also have. (At that point, all GDB threads should already always be in TID format.) >- if (!PD_TID (ptid)) >+ if (!(ptid.tid () !=3D 0)) That should just be "if (ptid.tid () =3D=3D 0)" then. (Here and in a few other places.) >@@ -1741,7 +1823,7 @@ aix_thread_target::mourn_inferior () > { > target_ops *beneath =3D this->beneath (); > >- pd_deactivate (); >+ pd_disable (); > beneath->mourn_inferior (); > } Why is this necessary? If it is, do we even need two separate pd_deactivate and pd_disable routines any more? >@@ -618,6 +618,16 @@ solib_aix_bfd_open (const char *pathname) > if (member_name =3D=3D bfd_get_filename (object_bfd.get ())) > break; > >+ std::string s =3D bfd_get_filename (object_bfd.get ()); >+ >+ /* For every inferior after first int bfd system we >+ will have the pathname instead of the member name >+ registered. Hence the below condition exists. */ >+ >+ if (s.find ('(') !=3D std::string::npos >+ && s.find (member_name) !=3D std::string::npos) >+ return object_bfd; Ah, I guess you also need to ensure the member_name follows immediately after the '(', otherwise there could be confusion if the member name happens to be part of the file name as well. Bye, Ulrich --_000_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_-- --_004_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_ 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=26021; creation-date="Tue, 07 Feb 2023 11:50:36 GMT"; modification-date="Tue, 07 Feb 2023 11:50:49 GMT" Content-Transfer-Encoding: base64 RnJvbSAxZjVlMGQyMDgxNzNkMzZjNmY5NDBlNGY5OGY3M2Y5ZTkzOTM0ZmU5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFk aGFyIEthbWF0aCA8QWRpdHlhLkthbWF0aDFAaWJtLmNvbT4KRGF0ZTogVHVl LCA3IEZlYiAyMDIzIDA1OjQyOjEzIC0wNjAwClN1YmplY3Q6IFtQQVRDSF0g Rml4IE11bHRpIHRocmVhZCBkZWJ1ZyBidWcgZml4IGluIEFJWAoKSW4gdGhl IHJlY2VudCBjb21taXQgOThlZDI0ZmIzNWQ4OWViMjAxNzllZGY2YzEyZjU5 OWM3YTllMjI4ZSBtYWRlIGJ5IE1yLiBUb20gdGhlcmUgaXMgYSBjaGFuZ2Ug IGluIGFpeC10aHJlYWQuYyBmaWxlIHRoYXQgY2hhbmdlcwoKc3RhdGljX2Nh c3QgPGFpeF90aHJlYWRfaW5mbyAqPiBpbiBnZGIgdG8gZ2RiOjpjaGVja2Vk X3N0YXRpY19jYXN0IDxhaXhfdGhyZWFkX2luZm8gKj4KCkFJWCBmb2xrcyB1 c2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gd2lsbCBub3QgYmUgYWJsZSB0byBk ZWJ1ZyBtdWx0aSB0aHJlYWQgcHJvZ3JhbXMgYXMgYSByZXN1bHQgb2YgaXQK ClRoZSBlcnJvciBpbiBBSVggaXMgYXMgZm9sbG93czotCgppbnRlcm5hbC1l cnJvcjogY2hlY2tlZF9zdGF0aWNfY2FzdDogQXNzZXJ0aW9uICdyZXN1bHQg IT0gbnVsbHB0cicgZmFpbGVkLgoKVGhlIHJlYXNvbiBpcyB0aGF0IG9uY2Ug dGhlIHRocmVhZHMgYXJlIHN5bmNyb25pc2VkIHdpdGggc3luY190aHJlYWRs aXN0cyAoKSBhbmQgdGhyZWFkcyBhcmUgYWRkZWQgd2l0aCBwcml2IC0KCldl IGl0ZXJhdGUgb3ZlciB0aHJlYWRzIHRvIGdldCB0aGUgdGhyZWFkIHdobyBj YXVzZWQgdGhlIGV2ZW50IGFuZCByZXR1cm4gaXRzIHB0aWQKCkhvd2V2ZXIg dGhlIGFsbF90aHJlYWRzX3NhZmUgKCkgZnVuY3Rpb24gd2lsbCBhbHdheXMg cmV0dXJuIE5VTEwgYXMgdGhyZWFkIGlzIHlldCB0byBiZSB1cGRhdGVkIGlu IHRoYXQgbGlzdAoKU28gd2hhdCBoYXBwZW5zIGlzIHdlIHdlcmUgbm90IHNl dHRpbmcgdGhlIHRvcCB0YXJnZXQgYXMgdGhyZWFkcyBhcwoKU2hhcmVkIGxp YnJhcnkgd2FzIG5vdCBsb2FkZWQgZm9yIGEgbmV3IHByb2Nlc3MgYW5kCgpn Y291bnQgd2FzIG5vdCBjb3VudGVkIHBlciBwcm9jZXNzCgpUaGlzIHBhdGNo IGlzIGEgZml4IGZvciB0aGUgc2FtZS4KLS0tCiBnZGIvYWl4LXRocmVhZC5j IHwgMzI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tCiBnZGIvc29saWItYWl4LmMgIHwgIDE0ICsrCiAyIGZpbGVz IGNoYW5nZWQsIDIwNSBpbnNlcnRpb25zKCspLCAxMzYgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZ2RiL2FpeC10aHJlYWQuYyBiL2dkYi9haXgtdGhy ZWFkLmMKaW5kZXggZTU1NmMxNTM1NzYuLjFkODAwZjhiN2JlIDEwMDY0NAot LS0gYS9nZGIvYWl4LXRocmVhZC5jCisrKyBiL2dkYi9haXgtdGhyZWFkLmMK QEAgLTY4LDEwICs2OCw2IEBAIHN0YXRpYyBib29sIGRlYnVnX2FpeF90aHJl YWQ7CiAjZGVmaW5lIHB0aGRiX3RpZF90CXRpZF90CiAjZW5kaWYKIAotLyog UmV0dXJuIHdoZXRoZXIgdG8gdHJlYXQgUElEIGFzIGEgZGVidWdnYWJsZSB0 aHJlYWQgaWQuICAqLwotCi0jZGVmaW5lIFBEX1RJRChwdGlkKQkocGRfYWN0 aXZlICYmIHB0aWQudGlkICgpICE9IDApCi0KIC8qIFN1Y2Nlc3MgYW5kIGZh aWx1cmUgdmFsdWVzIHJldHVybmVkIGJ5IHB0aGRiIGNhbGxiYWNrcy4gICov CiAKICNkZWZpbmUgUERDX1NVQ0NFU1MJUFRIREJfU1VDQ0VTUwpAQCAtMTQ0 LDI0ICsxNDAsNiBAQCBjbGFzcyBhaXhfdGhyZWFkX3RhcmdldCBmaW5hbCA6 IHB1YmxpYyB0YXJnZXRfb3BzCiAKIHN0YXRpYyBhaXhfdGhyZWFkX3Rhcmdl dCBhaXhfdGhyZWFkX29wczsKIAotLyogQWRkcmVzcyBvZiB0aGUgZnVuY3Rp b24gdGhhdCBsaWJwdGhyZWFkIHdpbGwgY2FsbCB3aGVuIGxpYnB0aGRlYnVn Ci0gICBpcyByZWFkeSB0byBiZSBpbml0aWFsaXplZC4gICovCi0KLXN0YXRp YyBDT1JFX0FERFIgcGRfYnJrX2FkZHI7Ci0KLS8qIFdoZXRoZXIgdGhlIGN1 cnJlbnQgYXBwbGljYXRpb24gaXMgZGVidWdnYWJsZSBieSBwdGhkYi4gICov Ci0KLXN0YXRpYyBpbnQgcGRfYWJsZSA9IDA7Ci0KLS8qIFdoZXRoZXIgYSB0 aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCi0K LXN0YXRpYyBpbnQgcGRfYWN0aXZlID0gMDsKLQotLyogV2hldGhlciB0aGUg Y3VycmVudCBhcmNoaXRlY3R1cmUgaXMgNjQtYml0LiAgCi0gICBPbmx5IHZh bGlkIHdoZW4gcGRfYWJsZSBpcyB0cnVlLiAgKi8KLQotc3RhdGljIGludCBh cmNoNjQ7Ci0KIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBwdGhkYiBj YWxsYmFja3MuICAqLwogCiBzdGF0aWMgaW50IHBkY19zeW1ib2xfYWRkcnMg KHB0aGRiX3VzZXJfdCwgcHRoZGJfc3ltYm9sX3QgKiwgaW50KTsKQEAgLTE5 MSw5ICsxNjksNjYgQEAgc3RhdGljIHB0aGRiX2NhbGxiYWNrc190IHBkX2Nh bGxiYWNrcyA9IHsKICAgTlVMTAogfTsKIAotLyogQ3VycmVudCBwdGhkYiBz ZXNzaW9uLiAgKi8KKy8qIEFpeCB2YXJpYWJsZSBzdHJ1Y3R1cmUuICAqLwor c3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzIAoreworICAvKiBXaGV0aGVy IHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGlzIGRlYnVnZ2FibGUgYnkgcHRo ZGIuICAqLworICBpbnQgcGRfYWJsZTsKKworICAvKiBXaGV0aGVyIGEgdGhy ZWFkZWQgYXBwbGljYXRpb24gaXMgYmVpbmcgZGVidWdnZWQuICAqLworICBp bnQgcGRfYWN0aXZlOworCisgIC8qIEN1cnJlbnQgcHRoZGIgc2Vzc2lvbi4g ICovCisgIHB0aGRiX3Nlc3Npb25fdCBwZF9zZXNzaW9uOworCisgIC8qIEFk ZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgbGlicHRocmVhZCB3aWxsIGNh bGwgd2hlbiBsaWJwdGhkZWJ1ZworICAgaXMgcmVhZHkgdG8gYmUgaW5pdGlh bGl6ZWQuICAqLworICBDT1JFX0FERFIgcGRfYnJrX2FkZHI7CisKKyAgLyog V2hldGhlciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgaXMgNjQtYml0Lgor ICAgT25seSB2YWxpZCB3aGVuIHBkX2FibGUgaXMgdHJ1ZS4gICovCisgIGlu dCBhcmNoNjQ7Cit9OworCisvKiBLZXkgdG8gb3VyIHBlci1pbmZlcmlvciBk YXRhLiAgKi8KK3N0YXRpYyBjb25zdCByZWdpc3RyeTxpbmZlcmlvcj46Omtl eTxhaXhfdGhyZWFkX3ZhcmlhYmxlcz4KKyAgYWl4X3RocmVhZF92YXJpYWJs ZXNfaGFuZGxlOwogCi1zdGF0aWMgcHRoZGJfc2Vzc2lvbl90IHBkX3Nlc3Np b247CisvKiBGdW5jdGlvbiB0byBHZXQgYWl4X3RocmVhZF92YXJpYWJsZXMg ZGF0YS4gICovCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz KgorZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVzX2RhdGEgKHN0cnVjdCBpbmZl cmlvciAqaW5mKQoreworICBpZiAoaW5mID09IE5VTEwpCisgICAgcmV0dXJu IE5VTEw7CisKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKiBkYXRh OworCisgIGRhdGEgPSBhaXhfdGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUuZ2V0 IChpbmYpOworICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIGRhdGEgPSBhaXhf dGhyZWFkX3ZhcmlhYmxlc19oYW5kbGUuZW1wbGFjZSAoaW5mKTsKKworICBy ZXR1cm4gZGF0YTsKK30KKworLyogSGVscGVyIHRvIGdldCBkYXRhIGZvciBw dGlkIGluIGEgZnVuY3Rpb24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90 aHJlYWRfdmFyaWFibGVzKgorZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3Jf cHRpZCAocHRpZF90IHB0aWQpCit7CisgIGluZmVyaW9yICppbmYgPSBmaW5k X2luZmVyaW9yX3B0aWQgKGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3Nf dGFyZ2V0ICgpLAorCQkJCQlwdGlkKTsKKyAgcmV0dXJuIGdldF9haXhfdGhy ZWFkX3ZhcmlhYmxlc19kYXRhIChpbmYpOworfQorCisvKiBIZWxwZXIgdG8g Z2V0IGRhdGEgZm9yIHBpZCBpbiBhIGZ1bmN0aW9uLiAgKi8KKworc3RhdGlj IHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyoKK2dldF90aHJlYWRfZGF0 YV9oZWxwZXJfZm9yX3BpZCAocGlkX3QgcGlkKQoreworICBpbmZlcmlvciAq aW5mID0gZmluZF9pbmZlcmlvcl9waWQgKGN1cnJlbnRfaW5mZXJpb3IgKCkt PnByb2Nlc3NfdGFyZ2V0ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBpZCk7CisgIHJldHVybiBnZXRfYWl4X3RocmVh ZF92YXJpYWJsZXNfZGF0YSAoaW5mKTsKK30KIAogLyogUmV0dXJuIGEgcHJp bnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHB0aGRlYnVnIGZ1bmN0aW9uIHJl dHVybgogICAgU1RBVFVTLiAgKi8KQEAgLTMxOCw3ICszNTMsNyBAQCBwaWRf dG9fcHJjIChwdGlkX3QgKnB0aWRwKQogICBwdGlkX3QgcHRpZDsKIAogICBw dGlkID0gKnB0aWRwOwotICBpZiAoUERfVElEIChwdGlkKSkKKyAgaWYgKHB0 aWQudGlkICgpICE9IDApCiAgICAgKnB0aWRwID0gcHRpZF90IChwdGlkLnBp ZCAoKSk7CiB9CiAKQEAgLTM4OSw2ICs0MjQsOSBAQCBwZGNfcmVhZF9yZWdz IChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwKICAgZG91YmxlIGZw cnNbcHBjX251bV9mcHJzXTsKICAgc3RydWN0IHB0eHNwcnMgc3ByczY0Owog ICBzdHJ1Y3QgcHRzcHJzIHNwcnMzMjsKKyAgc3RydWN0IGFpeF90aHJlYWRf dmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0 YV9oZWxwZXJfZm9yX3BpZCAodXNlcl9jdXJyZW50X3BpZCk7CiAgIAogICBp ZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3Rk bG9nLCAicGRjX3JlYWRfcmVncyB0aWQ9JWQgZmxhZ3M9JXNcbiIsCkBAIC0z OTcsNyArNDM1LDcgQEAgcGRjX3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVz ZXJfY3VycmVudF9waWQsCiAgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3Rl cnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFHX0dQUlMpCiAgICAg ewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQp CiAJewogCSAgaWYgKCFwdHJhY2U2NGFpeCAoUFRUX1JFQURfR1BSUywgdGlk LCAKIAkJCSAgICAodW5zaWduZWQgbG9uZykgZ3ByczY0LCAwLCBOVUxMKSkK QEAgLTQyMyw3ICs0NjEsNyBAQCBwZGNfcmVhZF9yZWdzIChwdGhkYl91c2Vy X3QgdXNlcl9jdXJyZW50X3BpZCwKICAgLyogU3BlY2lhbC1wdXJwb3NlIHJl Z2lzdGVycy4gICovCiAgIGlmIChmbGFncyAmIFBUSERCX0ZMQUdfU1BSUykK ICAgICB7Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFy Y2g2NCkKIAl7CiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRfUkVBRF9TUFJT LCB0aWQsIAogCQkJICAgICh1bnNpZ25lZCBsb25nKSAmc3ByczY0LCAwLCBO VUxMKSkKQEAgLTQ1Niw2ICs0OTQsMTAgQEAgcGRjX3dyaXRlX3JlZ3MgKHB0 aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAgICB0aGlzIGlzIG5l ZWRlZCwgSSBoYXZlIGltcGxlbWVudGVkIHdoYXQgSSB0aGluayBpdCBzaG91 bGQgZG8sCiAgICAgIGhvd2V2ZXIgdGhpcyBjb2RlIGlzIHVudGVzdGVkLiAg Ki8KIAorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7Cisg IAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkICh1 c2VyX2N1cnJlbnRfcGlkKTsKKwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkK ICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAicGRjX3dyaXRlX3JlZ3Mg dGlkPSVkIGZsYWdzPSVzXG4iLAogCQkoaW50KSB0aWQsIGhleF9zdHJpbmcg KGZsYWdzKSk7CkBAIC00NjMsNyArNTA1LDcgQEAgcGRjX3dyaXRlX3JlZ3Mg KHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAvKiBHZW5lcmFs LXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJf RkxBR19HUFJTKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBp ZiAoZGF0YS0+YXJjaDY0KQogCXB0cmFjZTY0YWl4IChQVFRfV1JJVEVfR1BS UywgdGlkLCAKIAkJICAgICAodW5zaWduZWQgbG9uZykgY29udGV4dC0+Z3By LCAwLCBOVUxMKTsKICAgICAgIGVsc2UKQEAgLTQ3OSw3ICs1MjEsNyBAQCBw ZGNfd3JpdGVfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQs CiAgIC8qIFNwZWNpYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAo ZmxhZ3MgJiBQVEhEQl9GTEFHX1NQUlMpCiAgICAgewotICAgICAgaWYgKGFy Y2g2NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAgcHRyYWNl NjRhaXggKFBUVF9XUklURV9TUFJTLCB0aWQsIAogCQkgICAgICAgKHVuc2ln bmVkIGxvbmcpICZjb250ZXh0LT5tc3IsIDAsIE5VTEwpOwpAQCAtNTA4LDE0 ICs1NTAsMTIgQEAgcGRjX3JlYWRfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJf Y3VycmVudF9waWQsIHZvaWQgKmJ1ZiwKICAgLyogVGhpcyBpcyBuZWVkZWQg dG8gZWxpbWluYXRlIHRoZSBkZXBlbmRlbmN5IG9mIGN1cnJlbnQgdGhyZWFk CiAgICAgIHdoaWNoIGlzIG51bGwgc28gdGhhdCB0aHJlYWQgcmVhZHMgdGhl IGNvcnJlY3QgdGFyZ2V0IG1lbW9yeS4gICovCiAgIHsKLSAgICBzY29wZWRf cmVzdG9yZV9jdXJyZW50X3RocmVhZCByZXN0b3JlX2N1cnJlbnRfdGhyZWFk OworICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1h a2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAgICAvKiBC ZWZvcmUgdGhlIGZpcnN0IGluZmVyaW9yIGlzIGFkZGVkLCB3ZSBwYXNzIGlu ZmVyaW9yX3B0aWQucGlkICgpCiAgICAgICAgZnJvbSBwZF9lbmFibGUgKCkg d2hpY2ggaXMgMC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3dpdGNoIHRocmVh ZHMKICAgICAgICBkdXJpbmcgZmlyc3QgaW5pdGlhbGlzYXRpb24uICBJbiB0 aGUgcmVzdCBvZiB0aGUgY2FsbGJhY2tzIHRoZQogICAgICAgIGN1cnJlbnQg dGhyZWFkIG5lZWRzIHRvIGJlIGNvcnJlY3QuICAqLwotICAgIGlmICh1c2Vy X2N1cnJlbnRfcGlkICE9IDApCi0gICAgICBzd2l0Y2hfdG9fdGhyZWFkIChj dXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwKLQkJCXB0 aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpOworICAgIGluZmVyaW9yX3B0aWQg PSBwdGlkX3QgKHVzZXJfY3VycmVudF9waWQpOwogICAgIHN0YXR1cyA9IHRh cmdldF9yZWFkX21lbW9yeSAoYWRkciwgKGdkYl9ieXRlICopIGJ1ZiwgbGVu KTsKICAgfQogICByZXQgPSBzdGF0dXMgPT0gMCA/IFBEQ19TVUNDRVNTIDog UERDX0ZBSUxVUkU7CkBAIC02MzksMzkgKzY3OSw2IEBAIHBjbXAgKGNvbnN0 IHZvaWQgKnAxdiwgY29uc3Qgdm9pZCAqcDJ2KQogICByZXR1cm4gcDEtPnB0 aGlkIDwgcDItPnB0aGlkID8gLTEgOiBwMS0+cHRoaWQgPiBwMi0+cHRoaWQ7 CiB9CiAKLS8qIGl0ZXJhdGVfb3Zlcl90aHJlYWRzKCkgY2FsbGJhY2sgZm9y IGNvdW50aW5nIEdEQiB0aHJlYWRzLgotCi0gICBEbyBub3QgY291bnQgdGhl IG1haW4gdGhyZWFkICh3aG9zZSB0aWQgaXMgemVybykuICBUaGlzIG1hdGNo ZXMKLSAgIHRoZSBsaXN0IG9mIHRocmVhZHMgcHJvdmlkZWQgYnkgdGhlIHB0 aHJlYWRkZWJ1ZyBsaWJyYXJ5LCB3aGljaAotICAgZG9lcyBub3QgaW5jbHVk ZSB0aGF0IG1haW4gdGhyZWFkIGVpdGhlciwgYW5kIHRodXMgYWxsb3dzIHVz Ci0gICB0byBjb21wYXJlIHRoZSB0d28gbGlzdHMuICAqLwotCi1zdGF0aWMg aW50Ci1naXRlcl9jb3VudCAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQs IHZvaWQgKmNvdW50cCkKLXsKLSAgaWYgKFBEX1RJRCAodGhyZWFkLT5wdGlk KSkKLSAgICAoKihpbnQgKikgY291bnRwKSsrOwotICByZXR1cm4gMDsKLX0K LQotLyogaXRlcmF0ZV9vdmVyX3RocmVhZHMoKSBjYWxsYmFjayBmb3IgYWNj dW11bGF0aW5nIEdEQiB0aHJlYWQgcGlkcy4KLQotICAgRG8gbm90IGluY2x1 ZGUgdGhlIG1haW4gdGhyZWFkICh3aG9zZSB0aWQgaXMgemVybykuICBUaGlz IG1hdGNoZXMKLSAgIHRoZSBsaXN0IG9mIHRocmVhZHMgcHJvdmlkZWQgYnkg dGhlIHB0aHJlYWRkZWJ1ZyBsaWJyYXJ5LCB3aGljaAotICAgZG9lcyBub3Qg aW5jbHVkZSB0aGF0IG1haW4gdGhyZWFkIGVpdGhlciwgYW5kIHRodXMgYWxs b3dzIHVzCi0gICB0byBjb21wYXJlIHRoZSB0d28gbGlzdHMuICAqLwotCi1z dGF0aWMgaW50Ci1naXRlcl9hY2N1bSAoc3RydWN0IHRocmVhZF9pbmZvICp0 aHJlYWQsIHZvaWQgKmJ1ZnApCi17Ci0gIGlmIChQRF9USUQgKHRocmVhZC0+ cHRpZCkpCi0gICAgewotICAgICAgKiooc3RydWN0IHRocmVhZF9pbmZvICoq KikgYnVmcCA9IHRocmVhZDsKLSAgICAgICgqKHN0cnVjdCB0aHJlYWRfaW5m byAqKiopIGJ1ZnApKys7Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQogLyog cHRpZCBjb21wYXJpc29uIGZ1bmN0aW9uICovCiAKIHN0YXRpYyBpbnQKQEAg LTcxOSw3ICs3MjYsMTAgQEAgZ2V0X3NpZ25hbGVkX3RocmVhZCAoaW50IHBp ZCkKIAkJICAgIHNpemVvZiAodGhyaW5mKSwgJmt0aWQsIDEpICE9IDEpCiAJ YnJlYWs7CiAKLSAgICAgIGlmICh0aHJpbmYudGlfY3Vyc2lnID09IFNJR1RS QVApCisgICAgICAvKiBXZSBhbHNvIG5lZWQgdG8ga2VlcCBpbiBtaW5kIFRy YXAgYW5kIGludGVycnVwdCBvciBhbnkKKyAgICAgICAgIHNpZ25hbCB0aGF0 IG5lZWRzIHRvIGJlIGhhbmRsZWQgaW4gcGRfdXBkYXRlICgpLiAgKi8KKwor ICAgICAgaWYgKHRocmluZi50aV9jdXJzaWcpCiAJcmV0dXJuIHRocmluZi50 aV90aWQ7CiAgICAgfQogCkBAIC03NTAsNiArNzYwLDExIEBAIHN5bmNfdGhy ZWFkbGlzdHMgKGludCBwaWQpCiAgIHB0aGRiX3B0aHJlYWRfdCBwZHRpZDsK ICAgcHRocmVhZF90IHB0aGlkOwogICBwdGhkYl90aWRfdCB0aWQ7CisgIHBy b2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2NfdGFyZ2V0CisgICAgICAgICAg ICA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFyZ2V0ICgpOwor ICB0aHJlYWRfaW5mbyAgKnRwOworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJp YWJsZXMgKmRhdGE7CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVy X2Zvcl9waWQgKHBpZCk7CiAKICAgLyogQWNjdW11bGF0ZSBhbiBhcnJheSBv ZiBsaWJwdGhkZWJ1ZyB0aHJlYWRzIHNvcnRlZCBieSBwdGhyZWFkIGlkLiAg Ki8KIApAQCAtNzU5LDExICs3NzQsMTEgQEAgc3luY190aHJlYWRsaXN0cyAo aW50IHBpZCkKIAogICBmb3IgKGNtZCA9IFBUSERCX0xJU1RfRklSU1Q7OyBj bWQgPSBQVEhEQl9MSVNUX05FWFQpCiAgICAgewotICAgICAgc3RhdHVzID0g cHRoZGJfcHRocmVhZCAocGRfc2Vzc2lvbiwgJnBkdGlkLCBjbWQpOworICAg ICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZCAoZGF0YS0+cGRfc2Vzc2lvbiwg JnBkdGlkLCBjbWQpOwogICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUND RVNTIHx8IHBkdGlkID09IFBUSERCX0lOVkFMSURfUFRIUkVBRCkKIAlicmVh azsKIAotICAgICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9wdGlkIChwZF9z ZXNzaW9uLCBwZHRpZCwgJnB0aGlkKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRi X3B0aHJlYWRfcHRpZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZwdGhp ZCk7CiAgICAgICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MgfHwgcHRo aWQgPT0gUFRIREJfSU5WQUxJRF9QVElEKQogCWNvbnRpbnVlOwogCkBAIC03 ODAsNyArNzk1LDcgQEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAog ICBmb3IgKHBpID0gMDsgcGkgPCBwY291bnQ7IHBpKyspCiAgICAgewotICAg ICAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF90aWQgKHBkX3Nlc3Npb24sIHBi dWZbcGldLnBkdGlkLCAmdGlkKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRiX3B0 aHJlYWRfdGlkIChkYXRhLT5wZF9zZXNzaW9uLCBwYnVmW3BpXS5wZHRpZCwg JnRpZCk7CiAgICAgICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAJ dGlkID0gUFRIREJfSU5WQUxJRF9USUQ7CiAgICAgICBwYnVmW3BpXS50aWQg PSB0aWQ7CkBAIC03OTAsMTAgKzgwNSwxNyBAQCBzeW5jX3RocmVhZGxpc3Rz IChpbnQgcGlkKQogCiAgIC8qIEFjY3VtdWxhdGUgYW4gYXJyYXkgb2YgR0RC IHRocmVhZHMgc29ydGVkIGJ5IHBpZC4gICovCiAKKyAgLyogZ2NvdW50IGlz IEdEQiB0aHJlYWQgY291bnQgYW5kIHBjb3VudCBpcyBwdGhyZWFkbGliIHRo cmVhZCBjb3VudC4gICovCisKICAgZ2NvdW50ID0gMDsKLSAgaXRlcmF0ZV9v dmVyX3RocmVhZHMgKGdpdGVyX2NvdW50LCAmZ2NvdW50KTsKKyAgZm9yICh0 aHJlYWRfaW5mbyAqdHAgOiBhbGxfdGhyZWFkcyAocHJvY190YXJnZXQsIHB0 aWRfdCAocGlkKSkpCisgICAgZ2NvdW50Kys7CiAgIGcgPSBnYnVmID0gWE5F V1ZFQyAoc3RydWN0IHRocmVhZF9pbmZvICosIGdjb3VudCk7Ci0gIGl0ZXJh dGVfb3Zlcl90aHJlYWRzIChnaXRlcl9hY2N1bSwgJmcpOworICBmb3IgKHRo cmVhZF9pbmZvICp0cCA6IGFsbF90aHJlYWRzIChwcm9jX3RhcmdldCwgcHRp ZF90IChwaWQpKSkKKyAgeworICAgICpnID0gdHA7CisgICAgKmcrKzsKKyAg fQogICBxc29ydCAoZ2J1ZiwgZ2NvdW50LCBzaXplb2YgKmdidWYsIGdjbXAp OwogCiAgIC8qIEFwcGx5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3byBh cnJheXMgdG8gR0RCJ3MgdGhyZWFkIGxpc3QuICAqLwpAQCAtODEwLDggKzgz Miw2IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAJICBwcml2LT5w ZHRpZCA9IHBidWZbcGldLnBkdGlkOwogCSAgcHJpdi0+dGlkID0gcGJ1Zltw aV0udGlkOwogCi0JICBwcm9jZXNzX3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3Rh cmdldAotCSAgICA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPnByb2Nlc3NfdGFy Z2V0ICgpOwogCSAgdGhyZWFkID0gYWRkX3RocmVhZF93aXRoX2luZm8gKHBy b2NfdGFyZ2V0LAogCQkJCQkgcHRpZF90IChwaWQsIDAsIHBidWZbcGldLnB0 aGlkKSwKIAkJCQkJIHByaXYpOwpAQCAtODQxLDEzICs4NjEsMjggQEAgc3lu Y190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAkgICAgfQogCSAgZWxzZSBpZiAo Y21wX3Jlc3VsdCA+IDApCiAJICAgIHsKLQkgICAgICBkZWxldGVfdGhyZWFk IChnYnVmW2dpXSk7Ci0JICAgICAgZ2krKzsKKwkgICAgICAvKiBUaGlzIGlz IHRvIG1ha2UgdGhlIG1haW4gcHJvY2VzcyB0aHJlYWQgbm93IGxvb2sKKwkJ IGxpa2UgYSB0aHJlYWQuICAqLworCisJICAgICAgaWYgKGdwdGlkLmlzX3Bp ZCAoKSkKKwkgICAgICB7CisJCXRocmVhZF9jaGFuZ2VfcHRpZCAocHJvY190 YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJCWFpeF90aHJlYWRfaW5mbyAqcHJp diA9IG5ldyBhaXhfdGhyZWFkX2luZm87CisJCXByaXYtPnBkdGlkID0gcGJ1 ZltwaV0ucGR0aWQ7CisJCXByaXYtPnRpZCA9IHBidWZbcGldLnRpZDsKKwkJ dHAgPSBmaW5kX3RocmVhZF9wdGlkIChwcm9jX3RhcmdldCwgcHB0aWQpOwor CQl0cC0+cHJpdi5yZXNldCAocHJpdik7CisJCXBpKys7CisJCWdpKys7CisJ ICAgICAgfQorCSAgICAgIGVsc2UKKwkgICAgICB7CisJCWRlbGV0ZV90aHJl YWQgKGdidWZbZ2ldKTsKKwkJZ2krKzsKKwkgICAgICB9CiAJICAgIH0KIAkg IGVsc2UKIAkgICAgewotCSAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQg KnByb2NfdGFyZ2V0Ci0JCT0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vz c190YXJnZXQgKCk7CiAJICAgICAgdGhyZWFkID0gYWRkX3RocmVhZCAocHJv Y190YXJnZXQsIHBwdGlkKTsKIAogCSAgICAgIGFpeF90aHJlYWRfaW5mbyAq cHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87CkBAIC04ODcsMTEgKzkyMiwx NCBAQCBwZF91cGRhdGUgKGludCBwaWQpCiAgIHB0aWRfdCBwdGlkOwogICBw dGhkYl90aWRfdCB0aWQ7CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFk ID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRh OworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQg KHBpZCk7CiAKLSAgaWYgKCFwZF9hY3RpdmUpCisgIGlmICghZGF0YS0+cGRf YWN0aXZlKQogICAgIHJldHVybiBwdGlkX3QgKHBpZCk7CiAKLSAgc3RhdHVz ID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUgKHBkX3Nlc3Npb24pOworICBzdGF0 dXMgPSBwdGhkYl9zZXNzaW9uX3VwZGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbik7 CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICByZXR1cm4g cHRpZF90IChwaWQpOwogCkBAIC05MTgsMzEgKzk1NiwyMCBAQCBzdGF0aWMg cHRpZF90CiBwZF9hY3RpdmF0ZSAoaW50IHBpZCkKIHsKICAgaW50IHN0YXR1 czsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBk YXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkIChwaWQpOwog CQkKLSAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl9pbml0IChwaWQsIGFyY2g2 NCA/IFBFTV82NEJJVCA6IFBFTV8zMkJJVCwKKyAgc3RhdHVzID0gcHRoZGJf c2Vzc2lvbl9pbml0IChwaWQsIGRhdGEtPmFyY2g2NCA/IFBFTV82NEJJVCA6 IFBFTV8zMkJJVCwKIAkJCSAgICAgICBQVEhEQl9GTEFHX1JFR1MsICZwZF9j YWxsYmFja3MsIAotCQkJICAgICAgICZwZF9zZXNzaW9uKTsKKwkJCSAgICAg ICAmZGF0YS0+cGRfc2Vzc2lvbik7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJf U1VDQ0VTUykKICAgICB7CiAgICAgICByZXR1cm4gcHRpZF90IChwaWQpOwog ICAgIH0KLSAgcGRfYWN0aXZlID0gMTsKKyAgZGF0YS0+cGRfYWN0aXZlID0g MTsKICAgcmV0dXJuIHBkX3VwZGF0ZSAocGlkKTsKIH0KIAotLyogVW5kbyB0 aGUgZWZmZWN0cyBvZiBwZF9hY3RpdmF0ZSgpLiAgKi8KLQotc3RhdGljIHZv aWQKLXBkX2RlYWN0aXZhdGUgKHZvaWQpCi17Ci0gIGlmICghcGRfYWN0aXZl KQotICAgIHJldHVybjsKLSAgcHRoZGJfc2Vzc2lvbl9kZXN0cm95IChwZF9z ZXNzaW9uKTsKLSAgCi0gIHBpZF90b19wcmMgKCZpbmZlcmlvcl9wdGlkKTsK LSAgcGRfYWN0aXZlID0gMDsKLX0KLQogLyogQW4gb2JqZWN0IGZpbGUgaGFz IGp1c3QgYmVlbiBsb2FkZWQuICBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50 CiAgICBhcHBsaWNhdGlvbiBpcyBwdGhyZWFkZWQsIGFuZCBpZiBzbywgcHJl cGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAKQEAgLTk1MiwxMyAr OTc5LDE5IEBAIHBkX2VuYWJsZSAodm9pZCkKICAgaW50IHN0YXR1czsKICAg Y2hhciAqc3R1Yl9uYW1lOwogICBzdHJ1Y3QgYm91bmRfbWluaW1hbF9zeW1i b2wgbXM7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsK KworICBpZiAoIWluZmVyaW9yX3B0aWQucGlkICgpKQorICAgIHJldHVybjsK KyAgCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlk IChpbmZlcmlvcl9wdGlkKTsKIAogICAvKiBEb24ndCBpbml0aWFsaXplIHR3 aWNlLiAgKi8KLSAgaWYgKHBkX2FibGUpCisgIGlmIChkYXRhLT5wZF9hYmxl KQogICAgIHJldHVybjsKIAogICAvKiBDaGVjayBhcHBsaWNhdGlvbiB3b3Jk IHNpemUuICAqLwotICBhcmNoNjQgPSByZWdpc3Rlcl9zaXplICh0YXJnZXRf Z2RiYXJjaCAoKSwgMCkgPT0gODsKKyAgZGF0YS0+YXJjaDY0ID0gcmVnaXN0 ZXJfc2l6ZSAodGFyZ2V0X2dkYmFyY2ggKCksIDApID09IDg7CiAKICAgLyog Q2hlY2sgd2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgcHRocmVhZGVkLiAg Ki8KICAgc3R1Yl9uYW1lID0gTlVMTDsKQEAgLTk3MiwxMyArMTAwNSwxMyBA QCBwZF9lbmFibGUgKHZvaWQpCiAgIG1zID0gbG9va3VwX21pbmltYWxfc3lt Ym9sIChzdHViX25hbWUsIE5VTEwsIE5VTEwpOwogICBpZiAobXMubWluc3lt ID09IE5VTEwpCiAgICAgcmV0dXJuOwotICBwZF9icmtfYWRkciA9IG1zLnZh bHVlX2FkZHJlc3MgKCk7Ci0gIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9i cmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwgcGRfYnJrX2FkZHIpKQor ICBkYXRhLT5wZF9icmtfYWRkciA9IG1zLnZhbHVlX2FkZHJlc3MgKCk7Cisg IGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVha3BvaW50ICh0YXJnZXRf Z2RiYXJjaCAoKSwgZGF0YS0+cGRfYnJrX2FkZHIpKQogICAgIHJldHVybjsK IAogICAvKiBQcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KICAg Y3VycmVudF9pbmZlcmlvciAoKS0+cHVzaF90YXJnZXQgKCZhaXhfdGhyZWFk X29wcyk7Ci0gIHBkX2FibGUgPSAxOworICBkYXRhLT5wZF9hYmxlID0gMTsg CiAKICAgLyogSWYgd2UncmUgZGVidWdnaW5nIGEgY29yZSBmaWxlIG9yIGFu IGF0dGFjaGVkIGluZmVyaW9yLCB0aGUKICAgICAgcHRocmVhZCBsaWJyYXJ5 IG1heSBhbHJlYWR5IGhhdmUgYmVlbiBpbml0aWFsaXplZCwgc28gdHJ5IHRv CkBAIC05OTEsMjggKzEwMjQsMzEgQEAgcGRfZW5hYmxlICh2b2lkKQogc3Rh dGljIHZvaWQKIHBkX2Rpc2FibGUgKHZvaWQpCiB7Ci0gIGlmICghcGRfYWJs ZSkKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBk YXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJp b3JfcHRpZCk7CisKKyAgaWYgKCFkYXRhLT5wZF9hYmxlKQogICAgIHJldHVy bjsKLSAgaWYgKHBkX2FjdGl2ZSkKLSAgICBwZF9kZWFjdGl2YXRlICgpOwot ICBwZF9hYmxlID0gMDsKKyAgaWYgKCFkYXRhLT5wZF9hY3RpdmUpCisgICAg cmV0dXJuOworICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKGRhdGEtPnBkX3Nl c3Npb24pOworIAorICBwaWRfdG9fcHJjICgmaW5mZXJpb3JfcHRpZCk7Cisg IGRhdGEtPnBkX2FjdGl2ZSA9IDA7CisgIGRhdGEtPnBkX2FibGUgPSAwOwog ICBjdXJyZW50X2luZmVyaW9yICgpLT51bnB1c2hfdGFyZ2V0ICgmYWl4X3Ro cmVhZF9vcHMpOwogfQogCiAvKiBuZXdfb2JqZmlsZSBvYnNlcnZlciBjYWxs YmFjay4KIAogICAgSWYgT0JKRklMRSBpcyBub24tbnVsbCwgY2hlY2sgd2hl dGhlciBhIHRocmVhZGVkIGFwcGxpY2F0aW9uIGlzCi0gICBiZWluZyBkZWJ1 Z2dlZCwgYW5kIGlmIHNvLCBwcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5n LgotCi0gICBJZiBPQkpGSUxFIGlzIG51bGwsIHN0b3AgZGVidWdnaW5nIHRo cmVhZHMuICAqLworICAgYmVpbmcgZGVidWdnZWQsIGFuZCBpZiBzbywgcHJl cGFyZSBmb3IgdGhyZWFkIGRlYnVnZ2luZy4gICovCiAKIHN0YXRpYyB2b2lk CiBuZXdfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCiB7CiAg IGlmIChvYmpmaWxlKQogICAgIHBkX2VuYWJsZSAoKTsKLSAgZWxzZQotICAg IHBkX2Rpc2FibGUgKCk7CiB9CiAKIC8qIEF0dGFjaCB0byBwcm9jZXNzIHNw ZWNpZmllZCBieSBBUkdTLiAgKi8KQEAgLTEwNDIsOCArMTA3OCwxMSBAQCBh aXhfdGhyZWFkX3RhcmdldDo6cmVzdW1lIChwdGlkX3QgcHRpZCwgaW50IHN0 ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiB7CiAgIHN0cnVjdCB0aHJlYWRf aW5mbyAqdGhyZWFkOwogICBwdGhkYl90aWRfdCB0aWRbMl07CisgIHN0cnVj dCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgCisgIGRhdGEgPSBn ZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkKTsKIAotICBp ZiAoIVBEX1RJRCAocHRpZCkpCisgIGlmIChwdGlkLnRpZCAoKSA9PSAwKQog ICAgIHsKICAgICAgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRp ZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlkKTsKICAg ICAgIApAQCAtMTA2NSw3ICsxMTA0LDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6 OnJlc3VtZSAocHRpZF90IHB0aWQsIGludCBzdGVwLCBlbnVtIGdkYl9zaWdu YWwgc2lnKQogCSAgICAgICBwdGlkLmx3cCAoKSk7CiAgICAgICB0aWRbMV0g PSAwOwogCi0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFy Y2g2NCkKIAlwdHJhY2U2NGFpeCAoUFRUX0NPTlRJTlVFLCB0aWRbMF0sIChs b25nIGxvbmcpIDEsCiAJCSAgICAgZ2RiX3NpZ25hbF90b19ob3N0IChzaWcp LCAoUFRSQUNFX1RZUEVfQVJHNSkgdGlkKTsKICAgICAgIGVsc2UKQEAgLTEw ODIsNiArMTEyMSw3IEBAIHB0aWRfdAogYWl4X3RocmVhZF90YXJnZXQ6Ondh aXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0 YXR1cywKIAkJCSB0YXJnZXRfd2FpdF9mbGFncyBvcHRpb25zKQogeworICBz dHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CiAgIHsKICAgICBw aWRfdG9fcHJjICgmcHRpZCk7CiAKQEAgLTEwOTUsOCArMTEzNSwxMCBAQCBh aXhfdGhyZWFkX3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0 YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzLAogICAgICBwaWQtb25seSBwdGlk cy4gICovCiAgIGdkYl9hc3NlcnQgKHB0aWQuaXNfcGlkICgpKTsKIAorICBk YXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocHRpZCk7 CisKICAgLyogQ2hlY2sgd2hldGhlciBsaWJwdGhkZWJ1ZyBtaWdodCBiZSBy ZWFkeSB0byBiZSBpbml0aWFsaXplZC4gICovCi0gIGlmICghcGRfYWN0aXZl ICYmIHN0YXR1cy0+a2luZCAoKSA9PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBF RAorICBpZiAoIWRhdGEtPnBkX2FjdGl2ZSAmJiBzdGF0dXMtPmtpbmQgKCkg PT0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQKICAgICAgICYmIHN0YXR1cy0+ c2lnICgpID09IEdEQl9TSUdOQUxfVFJBUCkKICAgICB7CiAgICAgICBwcm9j ZXNzX3N0cmF0dW1fdGFyZ2V0ICpwcm9jX3RhcmdldApAQCAtMTEwNSw3ICsx MTQ3LDcgQEAgYWl4X3RocmVhZF90YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlk LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywKICAgICAgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gcmVnY2FjaGUtPmFyY2ggKCk7CiAK ICAgICAgIGlmIChyZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSkKLQkgIC0g Z2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNoKSA9PSBwZF9i cmtfYWRkcikKKwkgIC0gZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChn ZGJhcmNoKSA9PSBkYXRhLT5wZF9icmtfYWRkcikKIAlyZXR1cm4gcGRfYWN0 aXZhdGUgKHB0aWQucGlkICgpKTsKICAgICB9CiAKQEAgLTEyMjksMTggKzEy NzEsMjAgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVhZCAoc3RydWN0IHJlZ2Nh Y2hlICpyZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwcGNf Z2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwPHBwY19nZGJhcmNo X3RkZXA+IChnZGJhcmNoKTsKICAgaW50IHN0YXR1cywgaTsKICAgcHRoZGJf Y29udGV4dF90IGN0eDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz ICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3Jf cHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJl YWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCiAJCSJmZXRjaF9y ZWdzX3VzZXJfdGhyZWFkICVseFxuIiwgKGxvbmcpIHBkdGlkKTsKLSAgc3Rh dHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNzaW9uLCBwZHRp ZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29udGV4dCAo ZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVz ICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6 IGZldGNoX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0IHJldHVy bmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CiAKICAg LyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAKLSAgaWYgKGFy Y2g2NCkKKyAgaWYgKGRhdGEtPmFyY2g2NCkKICAgICBzdXBwbHlfZ3ByczY0 IChyZWdjYWNoZSwgY3R4Lmdwcik7CiAgIGVsc2UKICAgICBmb3IgKGkgPSAw OyBpIDwgcHBjX251bV9ncHJzOyBpKyspCkBAIC0xMjUzLDcgKzEyOTcsNyBA QCBmZXRjaF9yZWdzX3VzZXJfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogU3BlY2lh bCByZWdpc3RlcnMuICAqLwogCi0gIGlmIChhcmNoNjQpCisgIGlmIChkYXRh LT5hcmNoNjQpCiAgICAgc3VwcGx5X3NwcnM2NCAocmVnY2FjaGUsIGN0eC5p YXIsIGN0eC5tc3IsIGN0eC5jciwgY3R4LmxyLCBjdHguY3RyLAogCQkJICAg ICBjdHgueGVyLCBjdHguZnBzY3IpOwogICBlbHNlCkBAIC0xMjg4LDE4ICsx MzMyLDIxIEBAIGZldGNoX3JlZ3Nfa2VybmVsX3RocmVhZCAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vLAogICBzdHJ1Y3QgcHR4c3By cyBzcHJzNjQ7CiAgIHN0cnVjdCBwdHNwcnMgc3ByczMyOwogICBpbnQgaTsK KyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAg ZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHJlZ2Nh Y2hlLT5wdGlkICgpKTsKIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAg ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAogCQkiZmV0Y2hfcmVnc19rZXJu ZWxfdGhyZWFkIHRpZD0lbHggcmVnbm89JWQgYXJjaDY0PSVkXG4iLAotCQko bG9uZykgdGlkLCByZWdubywgYXJjaDY0KTsKKwkJKGxvbmcpIHRpZCwgcmVn bm8sIGRhdGEtPmFyY2g2NCk7CiAKICAgLyogR2VuZXJhbC1wdXJwb3NlIHJl Z2lzdGVycy4gICovCiAgIGlmIChyZWdubyA9PSAtMQogICAgICAgfHwgKHRk ZXAtPnBwY19ncDBfcmVnbnVtIDw9IHJlZ25vCiAJICAmJiByZWdubyA8IHRk ZXAtPnBwY19ncDBfcmVnbnVtICsgcHBjX251bV9ncHJzKSkKICAgICB7Ci0g ICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAl7 CiAJICBpZiAoIXB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsIAog CQkJICAgICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5VTEwpKQpAQCAt MTMzMSw3ICsxMzc4LDcgQEAgZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFkIChz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYg KHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwg cmVnbm8pKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAo ZGF0YS0+YXJjaDY0KQogCXsKIAkgIGlmICghcHRyYWNlNjRhaXggKFBUVF9S RUFEX1NQUlMsIHRpZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcpICZzcHJz NjQsIDAsIE5VTEwpKQpAQCAtMTM2Myw3ICsxNDEwLDcgQEAgYWl4X3RocmVh ZF90YXJnZXQ6OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgaW50IHJlZ25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRo cmVhZDsKICAgcHRoZGJfdGlkX3QgdGlkOwogCi0gIGlmICghUERfVElEIChy ZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50 aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3RlcnMg KHJlZ2NhY2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNTExLDYg KzE1NTgsOCBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQp CiAgIHB0aGRiX2NvbnRleHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMyOwog ICB1aW50NjRfdCBpbnQ2NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFi bGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9m b3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90 aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgCkBAIC0xNTE4 LDcgKzE1NjcsNyBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0 aWQpCiAKICAgLyogUmV0cmlldmUgdGhlIHRocmVhZCdzIGN1cnJlbnQgY29u dGV4dCBmb3IgaXRzIG5vbi1yZWdpc3RlcgogICAgICB2YWx1ZXMuICAqLwot ICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKHBkX3Nlc3Npb24s IHBkdGlkLCAmY3R4KTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250 ZXh0IChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CiAgIGlmIChz dGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBlcnJvciAoXygiYWl4LXRo cmVhZDogc3RvcmVfcmVnaXN0ZXJzOiBwdGhkYl9wdGhyZWFkX2NvbnRleHQg cmV0dXJuZWQgJXMiKSwKIAkgICBwZF9zdGF0dXMyc3RyIChzdGF0dXMpKTsK QEAgLTE1MjgsNyArMTU3Nyw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQg KGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJl YWRfdCBwZHRpZCkKICAgZm9yIChpID0gMDsgaSA8IHBwY19udW1fZ3Byczsg aSsrKQogICAgIGlmIChSRUdfVkFMSUQgPT0gcmVnY2FjaGUtPmdldF9yZWdp c3Rlcl9zdGF0dXMgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSkpCiAgICAg ICB7Ci0JaWYgKGFyY2g2NCkKKwlpZiAoZGF0YS0+YXJjaDY0KQogCSAgewog CSAgICByZWdjYWNoZS0+cmF3X2NvbGxlY3QgKHRkZXAtPnBwY19ncDBfcmVn bnVtICsgaSwgKHZvaWQgKikgJmludDY0KTsKIAkgICAgY3R4LmdwcltpXSA9 IGludDY0OwpAQCAtMTU0NSw3ICsxNTk0LDcgQEAgc3RvcmVfcmVnc191c2Vy X3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRo ZGJfcHRocmVhZF90IHBkdGlkKQogICAgIGZpbGxfZnBycyAocmVnY2FjaGUs IGN0eC5mcHIpOwogCiAgIC8qIFNwZWNpYWwgcmVnaXN0ZXJzIChhbHdheXMg a2VwdCBpbiBjdHggYXMgNjQgYml0cykuICAqLwotICBpZiAoYXJjaDY0KQor ICBpZiAoZGF0YS0+YXJjaDY0KQogICAgIHsKICAgICAgIGZpbGxfc3ByczY0 IChyZWdjYWNoZSwgJmN0eC5pYXIsICZjdHgubXNyLCAmY3R4LmNyLCAmY3R4 LmxyLCAmY3R4LmN0ciwKIAkJCSAgICAgJmN0eC54ZXIsICZjdHguZnBzY3Ip OwpAQCAtMTU3Niw3ICsxNjI1LDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVh ZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRoZGJfcHRo cmVhZF90IHBkdGlkKQogCWN0eC5mcHNjciA9IHRtcF9mcHNjcjsKICAgICB9 CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zZXRjb250ZXh0IChwZF9z ZXNzaW9uLCBwZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJl YWRfc2V0Y29udGV4dCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgp OwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJyb3Ig KF8oImFpeC10aHJlYWQ6IHN0b3JlX3JlZ2lzdGVyczogIgogCSAgICAgInB0 aGRiX3B0aHJlYWRfc2V0Y29udGV4dCByZXR1cm5lZCAlcyIpLApAQCAtMTYw Miw2ICsxNjUxLDkgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25z dCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAgIGRv dWJsZSBmcHJzW3BwY19udW1fZnByc107CiAgIHN0cnVjdCBwdHhzcHJzIHNw cnM2NDsKICAgc3RydWN0IHB0c3BycyAgc3ByczMyOworICBzdHJ1Y3QgYWl4 X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3Ro cmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAocmVnY2FjaGUtPnB0aWQgKCkp OwogCiAgIGlmIChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYg KGdkYl9zdGRsb2csIApAQCAtMTYxMyw3ICsxNjY1LDcgQEAgc3RvcmVfcmVn c19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLCBpbnQgcmVnbm8sCiAgICAgICB8fCAodGRlcC0+cHBjX2dwMF9yZWdu dW0gPD0gcmVnbm8KIAkgICYmIHJlZ25vIDwgdGRlcC0+cHBjX2dwMF9yZWdu dW0gKyBwcGNfbnVtX2ZwcnMpKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQp CisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1mZXRj aDogc29tZSByZWdzIG1heSBub3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkg IHB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsICh1bnNpZ25lZCBs b25nKSBncHJzNjQsIDAsIE5VTEwpOwpAQCAtMTY0Niw3ICsxNjk4LDcgQEAg c3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09IC0x IHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAg IHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0 KQogCXsKIAkgIC8qIFByZS1mZXRjaDogc29tZSByZWdpc3RlcnMgd29uJ3Qg YmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0YWl4IChQVFRfUkVB RF9TUFJTLCB0aWQsIApAQCAtMTcwMyw3ICsxNzU1LDcgQEAgYWl4X3RocmVh ZF90YXJnZXQ6OnN0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgaW50IHJlZ25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRo cmVhZDsKICAgcHRoZGJfdGlkX3QgdGlkOwogCi0gIGlmICghUERfVElEIChy ZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRpZCAoKS50 aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5zdG9yZV9yZWdpc3RlcnMg KHJlZ2NhY2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNzQxLDcg KzE3OTMsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6bW91cm5faW5mZXJpb3Ig KCkKIHsKICAgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IHRoaXMtPmJlbmVhdGgg KCk7CiAKLSAgcGRfZGVhY3RpdmF0ZSAoKTsKKyAgcGRfZGlzYWJsZSAoKTsK ICAgYmVuZWF0aC0+bW91cm5faW5mZXJpb3IgKCk7CiB9CiAKQEAgLTE3NTAs NyArMTgwMiw3IEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojptb3Vybl9pbmZlcmlv ciAoKQogYm9vbAogYWl4X3RocmVhZF90YXJnZXQ6OnRocmVhZF9hbGl2ZSAo cHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElEIChwdGlkKSkKKyAgaWYg KHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGggKCktPnRo cmVhZF9hbGl2ZSAocHRpZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0aHJl YWQgbGlzdCBldmVyeSB0aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxsCkBA IC0xNzY2LDcgKzE4MTgsNyBAQCBhaXhfdGhyZWFkX3RhcmdldDo6dGhyZWFk X2FsaXZlIChwdGlkX3QgcHRpZCkKIHN0ZDo6c3RyaW5nCiBhaXhfdGhyZWFk X3RhcmdldDo6cGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICgh UERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAg cmV0dXJuIGJlbmVhdGggKCktPnBpZF90b19zdHIgKHB0aWQpOwogCiAgIHJl dHVybiBzdHJpbmdfcHJpbnRmIChfKCJUaHJlYWQgJXMiKSwgcHVsb25nZXN0 IChwdGlkLnRpZCAoKSkpOwpAQCAtMTc4Niw4ICsxODM4LDExIEBAIGFpeF90 aHJlYWRfdGFyZ2V0OjpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVh ZF9pbmZvICp0aHJlYWQpCiAgIHB0aGRiX2RldGFjaHN0YXRlX3QgZGV0YWNo c3RhdGU7CiAgIGludCBjYW5jZWxwZW5kOwogICBzdGF0aWMgY2hhciAqcmV0 ID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRh OworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlk ICh0aHJlYWQtPnB0aWQpOwogCi0gIGlmICghUERfVElEICh0aHJlYWQtPnB0 aWQpKQorICBpZiAodGhyZWFkLT5wdGlkLnRpZCAoKSA9PSAwKQogICAgIHJl dHVybiBOVUxMOwogCiAgIHN0cmluZ19maWxlIGJ1ZjsKQEAgLTE4MDAsMjQg KzE4NTUsMjQgQEAgYWl4X3RocmVhZF90YXJnZXQ6OmV4dHJhX3RocmVhZF9p bmZvIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKICAgICAvKiBpMThu OiBMaWtlICJ0aHJlYWQtaWRlbnRpZmllciAlZCwgW3N0YXRlXSBydW5uaW5n LCBzdXNwZW5kZWQiICovCiAgICAgYnVmLnByaW50ZiAoXygidGlkICVkIiks IChpbnQpdGlkKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3N0YXRl IChwZF9zZXNzaW9uLCBwZHRpZCwgJnN0YXRlKTsKKyAgc3RhdHVzID0gcHRo ZGJfcHRocmVhZF9zdGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZz dGF0ZSk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBz dGF0ZSA9IFBTVF9OT1RTVVA7CiAgIGJ1Zi5wcmludGYgKCIsICVzIiwgc3Rh dGUyc3RyIChzdGF0ZSkpOwogCi0gIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRf c3VzcGVuZHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9 IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChkYXRhLT5wZF9zZXNzaW9u LCBwZHRpZCwgCiAJCQkJICAgICAgICZzdXNwZW5kc3RhdGUpOwogICBpZiAo c3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgc3VzcGVuZHN0YXRlID09IFBT U19TVVNQRU5ERUQpCiAgICAgLyogaTE4bjogTGlrZSAiVGhyZWFkLUlkICVk LCBbc3RhdGVdIHJ1bm5pbmcsIHN1c3BlbmRlZCIgKi8KICAgICBidWYucHJp bnRmIChfKCIsIHN1c3BlbmRlZCIpKTsKIAotICBzdGF0dXMgPSBwdGhkYl9w dGhyZWFkX2RldGFjaHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0 YXR1cyA9IHB0aGRiX3B0aHJlYWRfZGV0YWNoc3RhdGUgKGRhdGEtPnBkX3Nl c3Npb24sIHBkdGlkLCAKIAkJCQkgICAgICAmZGV0YWNoc3RhdGUpOwogICBp ZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgZGV0YWNoc3RhdGUgPT0g UERTX0RFVEFDSEVEKQogICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1JZCAl ZCwgW3N0YXRlXSBydW5uaW5nLCBkZXRhY2hlZCIgKi8KICAgICBidWYucHJp bnRmIChfKCIsIGRldGFjaGVkIikpOwogCi0gIHB0aGRiX3B0aHJlYWRfY2Fu Y2VscGVuZCAocGRfc2Vzc2lvbiwgcGR0aWQsICZjYW5jZWxwZW5kKTsKKyAg cHRoZGJfcHRocmVhZF9jYW5jZWxwZW5kIChkYXRhLT5wZF9zZXNzaW9uLCBw ZHRpZCwgJmNhbmNlbHBlbmQpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NV Q0NFU1MgJiYgY2FuY2VscGVuZCkKICAgICAvKiBpMThuOiBMaWtlICJUaHJl YWQtSWQgJWQsIFtzdGF0ZV0gcnVubmluZywgY2FuY2VsIHBlbmRpbmciICov CiAgICAgYnVmLnByaW50ZiAoXygiLCBjYW5jZWwgcGVuZGluZyIpKTsKZGlm ZiAtLWdpdCBhL2dkYi9zb2xpYi1haXguYyBiL2dkYi9zb2xpYi1haXguYwpp bmRleCBmNDgzZjU0ZGUxMy4uNmJlODEwNjRlYmQgMTAwNjQ0Ci0tLSBhL2dk Yi9zb2xpYi1haXguYworKysgYi9nZGIvc29saWItYWl4LmMKQEAgLTYxOCw2 ICs2MTgsMjAgQEAgc29saWJfYWl4X2JmZF9vcGVuIChjb25zdCBjaGFyICpw YXRobmFtZSkKICAgICAgIGlmIChtZW1iZXJfbmFtZSA9PSBiZmRfZ2V0X2Zp bGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSkpCiAJYnJlYWs7CiAKKyAgICAg IHN0ZDo6c3RyaW5nIHMgPSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3RfYmZk LmdldCAoKSk7CisKKyAgICAgIC8qIEZvciBldmVyeSBpbmZlcmlvciBhZnRl ciBmaXJzdCBpbnQgYmZkIHN5c3RlbSB3ZSAKKwkgd2lsbCBoYXZlIHRoZSBw YXRobmFtZSBpbnN0ZWFkIG9mIHRoZSBtZW1iZXIgbmFtZQorCSByZWdpc3Rl cmVkLiBIZW5jZSB0aGUgYmVsb3cgY29uZGl0aW9uIGV4aXN0cy4gICovCisK KyAgICAgIGlmIChzLmZpbmQgKCcoJykgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp CisJeworCSAgaW50IHBvcyA9IHMuZmluZCAoJygnKTsKKwkgIGludCBsZW4g PSBzLmZpbmQgKCcpJykgLSBzLmZpbmQgKCcoJyk7CisJICBpZiAocy5zdWJz dHIgKHBvcysxLCBsZW4tMSkgPT0gbWVtYmVyX25hbWUpIAorCSAgICByZXR1 cm4gb2JqZWN0X2JmZDsKKwl9CisKICAgICAgIG9iamVjdF9iZmQgPSBnZGJf YmZkX29wZW5yX25leHRfYXJjaGl2ZWRfZmlsZSAoYXJjaGl2ZV9iZmQuZ2V0 ICgpLAogCQkJCQkJICAgICBvYmplY3RfYmZkLmdldCAoKSk7CiAgICAgfQot LSAKMi4zMS4xCgo= --_004_CH2PR15MB35449148A6541A1581B1749ED6DB9CH2PR15MB3544namp_--