Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261328AbVA1RSS (ORCPT ); Fri, 28 Jan 2005 12:18:18 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261491AbVA1RSS (ORCPT ); Fri, 28 Jan 2005 12:18:18 -0500 Received: from vds-320151.amen-pro.com ([62.193.204.86]:7889 "EHLO vds-320151.amen-pro.com") by vger.kernel.org with ESMTP id S261328AbVA1RRv (ORCPT ); Fri, 28 Jan 2005 12:17:51 -0500 Subject: [PATCH] OpenBSD Networking-related randomization port From: Lorenzo =?ISO-8859-1?Q?Hern=E1ndez_?= =?ISO-8859-1?Q?Garc=EDa-Hierro?= To: "linux-kernel@vger.kernel.org" Cc: torvalds@osdl.org Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-/poQPsPWPlhmC2H0WE0A" Date: Fri, 28 Jan 2005 18:17:17 +0100 Message-Id: <1106932637.3778.92.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.0.2 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 25014 Lines: 369 --=-/poQPsPWPlhmC2H0WE0A Content-Type: multipart/mixed; boundary="=-elejvCsbUodp6gJ9Abb3" --=-elejvCsbUodp6gJ9Abb3 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, Attached you can find a split up patch ported from grSecurity [1], as Linus commented that he wouldn't get a whole-sale patch, I was working on it and also studying what features of grSecurity can be implemented without a development or maintenance overhead, aka less-invasive implementations. It adds support for advanced networking-related randomization, in concrete it adds support for TCP ISNs randomization, RPC XIDs randomization, IP IDs randomization and finally a sub-key under the Cryptographic options menu for Linux PRNG [2] enhancements (useful now and also for future patch submissions), which currently has an only-one option for poll sizes increasing (x2). As it's impact is minimal (in performance and development/maintenance terms), I recommend to merge it, as it gives a basic prevention for the so-called system fingerprinting (which is used most by "kids" to know how old and insecure could be a target system, many time used as the first, even only-one, data to decide if attack or not the target host) among other things. There's only a missing feature that is present on grSecurity, the sources ports randomization which seems achieved now by some changes that can be checked out in the Linux BKBits repository: http://linux.bkbits.net:8080/linux-2.6/diffs/net/ipv4/tcp_ipv4.c@1.105?nav= =3Dindex.html|src/|src/net|src/net/ipv4|hist/net/ipv4/tcp_ipv4.c (net/ipv4/tcp_ipv4.c@1.105) I'm not sure of the effectiveness of that changes, but I just prefer to keep it as most simple as possible.If there are thoughts on reverting to the old schema, and using obsd_rand.c code instead, just drop me a line and I will modify the patch. I've uploaded the patches and obsd_rand.c source to: http://cvs.tuxedo-es.org/cgi-bin/viewcvs.cgi/obsd-netrand/ References:=09 [1]: http://www.grsecurity.net [2]: http://en.wikipedia.org/wiki/Pseudorandom_number_generator Cheers, --=20 Lorenzo Hern=E1ndez Garc=EDa-Hierro =20 [1024D/6F2B2DEC] & [2048g/9AE91A22][http://tuxedo-es.org] --=-elejvCsbUodp6gJ9Abb3 Content-Disposition: attachment; filename=openbsd-netrand-2.6.11-rc2.patch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name=openbsd-netrand-2.6.11-rc2.patch; charset=ISO-8859-1 ZGlmZiAtTnVyIGxpbnV4LTIuNi4xMS1yYzIvY3J5cHRvL0tjb25maWcgbGludXgtMi42LjExLXJj Mi50eDEvY3J5cHRvL0tjb25maWcNCi0tLSBsaW51eC0yLjYuMTEtcmMyL2NyeXB0by9LY29uZmln CTIwMDUtMDEtMjYgMTk6NTQ6MDYuMDAwMDAwMDAwICswMTAwDQorKysgbGludXgtMi42LjExLXJj Mi50eDEvY3J5cHRvL0tjb25maWcJMjAwNS0wMS0yOCAxNzowNTozOS4wMDAwMDAwMDAgKzAxMDAN CkBAIC00LDYgKzQsMjYgQEANCiANCiBtZW51ICJDcnlwdG9ncmFwaGljIG9wdGlvbnMiDQogDQor Y29uZmlnIFJBTkRPTQ0KKwlib29sICJSYW5kb20gTnVtYmVycyBHZW5lcmF0b3IgZW5oYW5jZW1l bnRzIg0KKwloZWxwDQorCSAgQnkgZW5hYmxpbmcgdGhpcyBvcHRpb24sIHlvdSB3aWxsIGJlIGFi bGUgdG8gc2VsZWN0DQorCSAgYSBmZXcgZW5oYW5jZW1lbnRzIGZvciB0aGUgTGludXggUmFuZG9t IE51bWJlcnMgR2VuZXJhdG9yDQorCSAgKC4vZHJpdmVycy9jaGFyL3JhbmRvbS57aCxjfSkuDQor CSAgDQorCSAgSWYgdW5zdXJlOiBzYXkgWS4NCisJICANCitjb25maWcgUkFORE9NX0lOQ1JFQVNF RF9QT09MU0laRVMNCisJYm9vbCAiTGFyZ2VyIGVudHJvcHkgcG9vbHMiDQorCWRlcGVuZHMgb24g UkFORE9NDQorCWhlbHANCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGVudHJvcHkgcG9vbHMg dXNlZCBmb3IgbWFueSBmZWF0dXJlcyBvZiBMaW51eA0KKyAgICAgICAgICB3aWxsIGJlIGRvdWJs ZWQgaW4gc2l6ZS4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3Ugc2F5IFkNCisgICAgICAgICAg aGVyZS4gIFNheWluZyBZIGhlcmUgaGFzIGEgc2ltaWxhciBlZmZlY3QgYXMgbW9kaWZ5aW5nDQor ICAgICAgICAgIC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tL3Bvb2xzaXplLg0KKwkgIA0KKwkgIElm IHVuc3VyZTogc2F5IFkuDQorDQogY29uZmlnIENSWVBUTw0KIAlib29sICJDcnlwdG9ncmFwaGlj IEFQSSINCiAJaGVscA0KZGlmZiAtTnVyIGxpbnV4LTIuNi4xMS1yYzIvZHJpdmVycy9jaGFyL3Jh bmRvbS5jIGxpbnV4LTIuNi4xMS1yYzIudHgxL2RyaXZlcnMvY2hhci9yYW5kb20uYw0KLS0tIGxp bnV4LTIuNi4xMS1yYzIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCTIwMDUtMDEtMjYgMTk6NTQ6MDcu MDAwMDAwMDAwICswMTAwDQorKysgbGludXgtMi42LjExLXJjMi50eDEvZHJpdmVycy9jaGFyL3Jh bmRvbS5jCTIwMDUtMDEtMjggMTc6MDM6MDIuMDAwMDAwMDAwICswMTAwDQpAQCAtMjU1LDEwICsy NTUsMjAgQEANCiANCiAvKg0KICAqIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24NCisgKiBJZiAi aW5jcmVhc2VkIHBvb2wgc2l6ZXMiIG9wdGlvbiBpcyBlbmFibGVkLA0KKyAqIHRoZW4gcG9sbCBz aXplIGRlZmF1bHQgdmFsdWVzIGdldCBpbmNyZWFzZWQgeDIuIA0KICAqLw0KKyANCisjaWZkZWYg Q09ORklHX1JBTkRPTV9JTkNSRUFTRURfUE9PTFNJWkVTDQorI2RlZmluZSBERUZBVUxUX1BPT0xf U0laRSAxMDI0DQorI2RlZmluZSBTRUNPTkRBUllfUE9PTF9TSVpFIDI1Ng0KKyNkZWZpbmUgQkFU Q0hfRU5UUk9QWV9TSVpFIDUxMg0KKyNlbHNlDQogI2RlZmluZSBERUZBVUxUX1BPT0xfU0laRSA1 MTINCiAjZGVmaW5lIFNFQ09OREFSWV9QT09MX1NJWkUgMTI4DQogI2RlZmluZSBCQVRDSF9FTlRS T1BZX1NJWkUgMjU2DQorI2VuZGlmDQorDQogI2RlZmluZSBVU0VfU0hBDQogDQogLyoNCmRpZmYg LU51ciBsaW51eC0yLjYuMTEtcmMyL2luY2x1ZGUvbGludXgvcmFuZG9tLmggbGludXgtMi42LjEx LXJjMi50eDEvaW5jbHVkZS9saW51eC9yYW5kb20uaA0KLS0tIGxpbnV4LTIuNi4xMS1yYzIvaW5j bHVkZS9saW51eC9yYW5kb20uaAkyMDA1LTAxLTI2IDE5OjU0OjE3LjAwMDAwMDAwMCArMDEwMA0K KysrIGxpbnV4LTIuNi4xMS1yYzIudHgxL2luY2x1ZGUvbGludXgvcmFuZG9tLmgJMjAwNS0wMS0y NyAyMzo0NTozNC4wMDAwMDAwMDAgKzAxMDANCkBAIC00Miw2ICs0MiwxMiBAQA0KIA0KICNpZmRl ZiBfX0tFUk5FTF9fDQogDQorI2lmZGVmIENPTkZJR19ORVRfU0VDVVJJVFkNCitleHRlcm4gdW5z aWduZWQgbG9uZyBvYnNkX2dldF9yYW5kb21fbG9uZyh2b2lkKTsNCitleHRlcm4gX191MTYgaXBf cmFuZG9taWQodm9pZCk7DQorZXh0ZXJuIF9fdTMyIGlwX3JhbmRvbWlzbih2b2lkKTsNCisjZW5k aWYNCisNCiBleHRlcm4gdm9pZCByYW5kX2luaXRpYWxpemVfaXJxKGludCBpcnEpOw0KIA0KIGV4 dGVybiB2b2lkIGFkZF9pbnB1dF9yYW5kb21uZXNzKHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25l ZCBpbnQgY29kZSwNCmRpZmYgLU51ciBsaW51eC0yLjYuMTEtcmMyL25ldC9pcHY0L3RjcF9pcHY0 LmMgbGludXgtMi42LjExLXJjMi50eDEvbmV0L2lwdjQvdGNwX2lwdjQuYw0KLS0tIGxpbnV4LTIu Ni4xMS1yYzIvbmV0L2lwdjQvdGNwX2lwdjQuYwkyMDA1LTAxLTI2IDE5OjU0OjE5LjAwMDAwMDAw MCArMDEwMA0KKysrIGxpbnV4LTIuNi4xMS1yYzIudHgxL25ldC9pcHY0L3RjcF9pcHY0LmMJMjAw NS0wMS0yOCAxNzoxNjowOS4wMDAwMDAwMDAgKzAxMDANCkBAIC01MzksMTAgKzUzOSwxNCBAQA0K IA0KIHN0YXRpYyBpbmxpbmUgX191MzIgdGNwX3Y0X2luaXRfc2VxdWVuY2Uoc3RydWN0IHNvY2sg KnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KIHsNCisjaWZkZWYgQ09ORklHX05FVF9SQU5ESVNO DQorCQlyZXR1cm4gaXBfcmFuZG9taXNuKCk7DQorI2Vsc2UNCiAJcmV0dXJuIHNlY3VyZV90Y3Bf c2VxdWVuY2VfbnVtYmVyKHNrYi0+bmguaXBoLT5kYWRkciwNCiAJCQkJCSAgc2tiLT5uaC5pcGgt PnNhZGRyLA0KIAkJCQkJICBza2ItPmgudGgtPmRlc3QsDQogCQkJCQkgIHNrYi0+aC50aC0+c291 cmNlKTsNCisjZW5kaWYNCiB9DQogDQogLyogY2FsbGVkIHdpdGggbG9jYWwgYmggZGlzYWJsZWQg Ki8NCkBAIC04MzMsMTQgKzgzNywyMSBAQA0KIAl0Y3BfdjRfc2V0dXBfY2FwcyhzaywgJnJ0LT51 LmRzdCk7DQogCXRwLT5leHQyX2hlYWRlcl9sZW4gPSBydC0+dS5kc3QuaGVhZGVyX2xlbjsNCiAN Ci0JaWYgKCF0cC0+d3JpdGVfc2VxKQ0KKwlpZiAoIXRwLT53cml0ZV9zZXEpIHsNCisjaWZkZWYg Q09ORklHX05FVF9SQU5ESVNODQorCQkJdHAtPndyaXRlX3NlcSA9IGlwX3JhbmRvbWlzbigpOw0K KyNlbHNlDQogCQl0cC0+d3JpdGVfc2VxID0gc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIoaW5l dC0+c2FkZHIsDQogCQkJCQkJCSAgIGluZXQtPmRhZGRyLA0KIAkJCQkJCQkgICBpbmV0LT5zcG9y dCwNCiAJCQkJCQkJICAgdXNpbi0+c2luX3BvcnQpOw0KLQ0KKyNlbmRpZg0KKwl9DQorI2lmZGVm IENPTkZJR19ORVRfUkFORElEDQorCQlpbmV0LT5pZCA9IGh0b25zKGlwX3JhbmRvbWlkKCkpOw0K KyNlbHNlDQogCWluZXQtPmlkID0gdHAtPndyaXRlX3NlcSBeIGppZmZpZXM7DQotDQorI2VuZGlm DQogCWVyciA9IHRjcF9jb25uZWN0KHNrKTsNCiAJcnQgPSBOVUxMOw0KIAlpZiAoZXJyKQ0KQEAg LTE1NzksOCArMTU5MCwxMSBAQA0KIAlpZiAobmV3aW5ldC0+b3B0KQ0KIAkJbmV3dHAtPmV4dF9o ZWFkZXJfbGVuID0gbmV3aW5ldC0+b3B0LT5vcHRsZW47DQogCW5ld3RwLT5leHQyX2hlYWRlcl9s ZW4gPSBkc3QtPmhlYWRlcl9sZW47DQorI2lmZGVmIENPTkZJR19ORVRfUkFORElEDQorCW5ld2lu ZXQtPmlkID0gaHRvbnMoaXBfcmFuZG9taWQoKSk7DQorI2Vsc2UNCiAJbmV3aW5ldC0+aWQgPSBu ZXd0cC0+d3JpdGVfc2VxIF4gamlmZmllczsNCi0NCisjZW5kaWYNCiAJdGNwX3N5bmNfbXNzKG5l d3NrLCBkc3RfcG10dShkc3QpKTsNCiAJbmV3dHAtPmFkdm1zcyA9IGRzdF9tZXRyaWMoZHN0LCBS VEFYX0FEVk1TUyk7DQogCXRjcF9pbml0aWFsaXplX3Jjdl9tc3MobmV3c2spOw0KZGlmZiAtTnVy IGxpbnV4LTIuNi4xMS1yYzIvbmV0L2lwdjQvdWRwLmMgbGludXgtMi42LjExLXJjMi50eDEvbmV0 L2lwdjQvdWRwLmMNCi0tLSBsaW51eC0yLjYuMTEtcmMyL25ldC9pcHY0L3VkcC5jCTIwMDUtMDEt MjYgMTk6NTQ6MTkuMDAwMDAwMDAwICswMTAwDQorKysgbGludXgtMi42LjExLXJjMi50eDEvbmV0 L2lwdjQvdWRwLmMJMjAwNS0wMS0yNyAyMzowMjozMi4wMDAwMDAwMDAgKzAxMDANCkBAIC05NCw2 ICs5NCw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4NCiAjaW5jbHVkZSA8bGludXgvaXB2 Ni5oPg0KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvcmFu ZG9tLmg+DQogI2luY2x1ZGUgPG5ldC9zbm1wLmg+DQogI2luY2x1ZGUgPG5ldC90Y3AuaD4NCiAj aW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+DQpkaWZmIC1OdXIgbGludXgtMi42LjExLXJjMi9uZXQv S2NvbmZpZyBsaW51eC0yLjYuMTEtcmMyLnR4MS9uZXQvS2NvbmZpZw0KLS0tIGxpbnV4LTIuNi4x MS1yYzIvbmV0L0tjb25maWcJMjAwNS0wMS0yNiAxOTo1NDoxNy4wMDAwMDAwMDAgKzAxMDANCisr KyBsaW51eC0yLjYuMTEtcmMyLnR4MS9uZXQvS2NvbmZpZwkyMDA1LTAxLTI4IDE3OjA0OjMwLjYw ODY1MjY4MCArMDEwMA0KQEAgLTgxLDYgKzgxLDU5IEBADQogDQogCSAgU2F5IFkgdW5sZXNzIHlv dSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4NCiANCitjb25maWcgTkVUX1NFQ1VSSVRZDQorCWJv b2wgIk5ldHdvcmsgUHJvdGVjdGlvbnMiDQorCWRlcGVuZHMgb24gTkVUDQorCXNlbGVjdCBJTkVU DQorCWhlbHANCisJIEJ5IGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB5b3Ugd2lsbCBiZSBhYmxlIHRv IGNob29zZSBhIGZldyBvcHRpb25zDQorCSB0aGF0IHdpbGwgZW5oYW5jZSB0aGUgVENQL0lQIHN0 YWNrIGFuZCBuZXR3b3JrLXJlbGF0ZWQgcmFuZG9taXphdGlvbi4NCisJIEFuIGV4YW1wbGUgb2Yg cmVzdWx0cyBvZiB0aGlzLCBpcyB0aGF0IHRoZSBzeXN0ZW0gd2lsbCBiZSBhIGRpZmZpY3VsdA0K Kwkgc3ViamVjdCBvZiAocmVtb3RlKSBmaW5nZXJwcmludGluZy4NCisJIA0KKwkgVGhlc2UgcHJv dGVjdGlvbnMgY29tZSBmcm9tIHRoZSBnclNlY3VyaXR5IHByb2plY3QgYnkgQnJhZCBTcGVuZ2xl ciwNCisJIGFuZCBiYXNlZCBvbiBPcGVuQlNEIGV4dGVuZGVkIG5ldHdvcmtpbmcgc2VjdXJpdHkg ZmVhdHVyZXMuDQorCSANCisJIFBvcnRlZCB0byB2YW5pbGxhIHNvdXJjZXMgYnkgTG9yZW56byBI ZXJuw6FuZGV6IEdhcmPDrWEtSGllcnJvDQorCSA8bG9yZW56b0BnbnUub3JnPi4NCisJIEluZm9y bWF0aW9uIGF0IGh0dHA6Ly90dXhlZG8tZXMub3JnIGFuZCBodHRwOi8vZ3JzZWN1cml0eS5uZXQu DQorCSANCisJIFNob3J0IGFuc3dlcjogc2F5IFkuDQorDQorY29uZmlnIE5FVF9SQU5ESVNODQor ICAgICAgICBib29sICJUcnVseSByYW5kb20gVENQIElTTiBzZWxlY3Rpb24iDQorICAgICAgICBk ZXBlbmRzIG9uIE5FVF9TRUNVUklUWQ0KKyAgICAgICAgaGVscA0KKyAgICAgICAgICBJZiB5b3Ug c2F5IFkgaGVyZSwgTGludXgncyBkZWZhdWx0IHNlbGVjdGlvbiBvZiBUQ1AgSW5pdGlhbCBTZXF1 ZW5jZQ0KKyAgICAgICAgICBOdW1iZXJzIChJU05zKSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhh dCBvZiBPcGVuQlNELiAgTGludXggdXNlcw0KKyAgICAgICAgICBhbiBNRDQgaGFzaCBiYXNlZCBv biB0aGUgY29ubmVjdGlvbiBwbHVzIGEgdGltZSB2YWx1ZSB0byBjcmVhdGUgdGhlDQorICAgICAg ICAgIElTTiwgd2hpbGUgT3BlbkJTRCdzIHNlbGVjdGlvbiBpcyByYW5kb20uICBJZiB0aGUgc3lz Y3RsIG9wdGlvbiBpcw0KKyAgICAgICAgICBlbmFibGVkLCBhIHN5c2N0bCBvcHRpb24gd2l0aCBu YW1lICJyYW5kX2lzbnMiIGlzIGNyZWF0ZWQuDQorDQorY29uZmlnIE5FVF9SQU5ESUQNCisgICAg ICAgIGJvb2wgIlJhbmRvbWl6ZWQgSVAgSURzIg0KKyAgICAgICAgZGVwZW5kcyBvbiBORVRfU0VD VVJJVFkNCisgICAgICAgIGhlbHANCisgICAgICAgICAgSWYgeW91IHNheSBZIGhlcmUsIGFsbCB0 aGUgaWQgZmllbGQgb24gYWxsIG91dGdvaW5nIHBhY2tldHMNCisgICAgICAgICAgd2lsbCBiZSBy YW5kb21pemVkLiAgVGhpcyBoaW5kZXJzIG9zIGZpbmdlcnByaW50ZXJzIGFuZA0KKyAgICAgICAg ICBrZWVwcyB5b3VyIG1hY2hpbmUgZnJvbSBiZWluZyB1c2VkIGFzIGEgYm91bmNlIGZvciBhbiB1 bnRyYWNlYWJsZQ0KKyAgICAgICAgICBwb3J0c2Nhbi4gIElkcyBhcmUgdXNlZCBmb3IgZnJhZ21l bnRlZCBwYWNrZXRzLCBmcmFnbWVudHMgYmVsb25naW5nDQorICAgICAgICAgIHRvIHRoZSBzYW1l IHBhY2tldCBoYXZlIHRoZSBzYW1lIGlkLiAgQnkgZGVmYXVsdCBsaW51eCBvbmx5DQorICAgICAg ICAgIGluY3JlbWVudHMgdGhlIGlkIHZhbHVlIG9uIGVhY2ggcGFja2V0IHNlbnQgdG8gYW4gaW5k aXZpZHVhbCBob3N0Lg0KKyAgICAgICAgICBXZSB1c2UgYSBwb3J0IG9mIHRoZSBPcGVuQlNEIHJh bmRvbSBpcCBpZCBjb2RlIHRvIGFjaGlldmUgdGhlDQorICAgICAgICAgIHJhbmRvbW5lc3MsIHdo aWxlIGtlZXBpbmcgdGhlIHBvc3NpYmlsaXR5IG9mIGlkIGR1cGxpY2F0ZXMgdG8NCisgICAgICAg ICAgbmVhciBub25lLg0KKyAgICAgICAgICANCitjb25maWcgTkVUX1JBTkRSUEMNCisgICAgICAg IGJvb2wgIlJhbmRvbWl6ZWQgUlBDIFhJRHMiDQorICAgICAgICBkZXBlbmRzIG9uIE5FVF9TRUNV UklUWQ0KKyAgICAgICAgaGVscA0KKyAgICAgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIG1l dGhvZCBvZiBkZXRlcm1pbmluZyBYSURzIGZvciBSUEMgcmVxdWVzdHMgd2lsbA0KKyAgICAgICAg ICBiZSByYW5kb21pemVkLCBpbnN0ZWFkIG9mIHVzaW5nIGxpbnV4J3MgZGVmYXVsdCBiZWhhdmlv ciBvZiBzaW1wbHkNCisgICAgICAgICAgaW5jcmVtZW50aW5nIHRoZSBYSUQuICBJZiB5b3Ugd2Fu dCB5b3VyIFJQQyBjb25uZWN0aW9ucyB0byBiZSBtb3JlDQorICAgICAgICAgIHNlY3VyZSwgc2F5 IFkgaGVyZS4NCisNCisNCiBjb25maWcgSU5FVA0KIAlib29sICJUQ1AvSVAgbmV0d29ya2luZyIN CiAJLS0taGVscC0tLQ0KZGlmZiAtTnVyIGxpbnV4LTIuNi4xMS1yYzIvbmV0L01ha2VmaWxlIGxp bnV4LTIuNi4xMS1yYzIudHgxL25ldC9NYWtlZmlsZQ0KLS0tIGxpbnV4LTIuNi4xMS1yYzIvbmV0 L01ha2VmaWxlCTIwMDUtMDEtMjYgMTk6NTA6NDkuMDAwMDAwMDAwICswMTAwDQorKysgbGludXgt Mi42LjExLXJjMi50eDEvbmV0L01ha2VmaWxlCTIwMDUtMDEtMjcgMjM6MDQ6MDIuMDAwMDAwMDAw ICswMTAwDQpAQCAtMTEsNiArMTEsNyBAQA0KIA0KIHRtcC0kKENPTkZJR19DT01QQVQpIAkJOj0g Y29tcGF0Lm8NCiBvYmotJChDT05GSUdfTkVUKQkJKz0gJCh0bXAteSkNCitvYmotJChDT05GSUdf TkVUX1NFQ1VSSVRZKQkrPSBvYnNkX3JhbmQubw0KIA0KICMgTExDIGhhcyB0byBiZSBsaW5rZWQg YmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyLw0KIG9iai0kKENPTkZJR19MTEMpCQkrPSBsbGMv DQpkaWZmIC1OdXIgbGludXgtMi42LjExLXJjMi9uZXQvb2JzZF9yYW5kLmMgbGludXgtMi42LjEx LXJjMi50eDEvbmV0L29ic2RfcmFuZC5jDQotLS0gbGludXgtMi42LjExLXJjMi9uZXQvb2JzZF9y YW5kLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDANCisrKyBsaW51eC0yLjYu MTEtcmMyLnR4MS9uZXQvb2JzZF9yYW5kLmMJMjAwNS0wMS0yOCAxNzo0Mzo1MC40NTI5MDE4MjQg KzAxMDANCkBAIC0wLDAgKzEsMjY5IEBADQorLyogJElkOiBvcGVuYnNkLW5ldHJhbmQtMi42LjEx LXJjMi5wYXRjaCx2IDEuMiAyMDA1LzAxLzI4IDE2OjUxOjAyIGxvcmVuem8gRXhwICQNCisgKiBD b3B5cmlnaHQgKGMpIDIwMDUgTG9yZW56byBIZXJuYW5kZXogR2FyY2lhLUhpZXJybyA8bG9yZW56 b0BnbnUub3JnPi4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogQWRkZWQgc29t ZSBtYWNyb3MgYW5kIHN0b2xlbiBjb2RlIGZyb20gcmFuZG9tLmMsIGZvciBpbmRpdmlkdWFsIGFu ZCBsZXNzDQorICogImludmFzaXZlIiBpbXBsZW1lbnRhdGlvbi5BbHNvIHJlbW92ZWQgdGhlIGdl dF9yYW5kb21fbG9uZygpIG1hY3JvIGRlZmluaXRpb24sDQorICogd2hpY2ggaXMgbm90IGdvb2Qg aWYgd2UgY2FuIHNpbXBseSBjYWxsIGJhY2sgb2JzZF9nZXRfcmFuZG9tX2xvbmcoKS4NCisgKg0K KyAqIENvcHlyaWdodCAoYykgMTk5NiwgMTk5NywgMjAwMC0yMDAyIE1pY2hhZWwgU2hhbGF5ZWZm Lg0KKyAqIA0KKyAqIFZlcnNpb24gMS45MCwgbGFzdCBtb2RpZmllZCAyOC1KYW4tMDUNCisgKiAg ICANCisgKiBDb3B5cmlnaHQgVGhlb2RvcmUgVHMnbywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5Nywg MTk5OCwgMTk5OS4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogQ29weXJpZ2h0 IDE5OTggTmllbHMgUHJvdm9zIDxwcm92b3NAY2l0aS51bWljaC5lZHU+DQorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4NCisgKiBUaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPiBjYW1l IHVwIHdpdGggdGhlIGlkZWEgb2YgdXNpbmcNCisgKiBzdWNoIGEgbWF0aGVtYXRpY2FsIHN5c3Rl bSB0byBnZW5lcmF0ZSBtb3JlIHJhbmRvbSAoeWV0IG5vbi1yZXBlYXRpbmcpDQorICogaWRzIHRv IHNvbHZlIHRoZSByZXNvbHZlci9uYW1lZCBwcm9ibGVtLiAgQnV0IE5pZWxzIGRlc2lnbmVkIHRo ZQ0KKyAqIGFjdHVhbCBzeXN0ZW0gYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzLg0KKyAqDQorICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICogYXJlIG1ldDoNCisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciwNCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1INCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTDQorICog T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4NCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUDQorICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLA0KKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YNCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8bGludXgvdGltZS5o Pg0KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5o Pg0KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4NCisNCisjZGVmaW5lIFJVX09VVCAxODANCisj ZGVmaW5lIFJVX01BWCAzMDAwMA0KKyNkZWZpbmUgUlVfR0VOIDINCisjZGVmaW5lIFJVX04gMzI3 NDkNCisjZGVmaW5lIFJVX0FHRU4gNw0KKyNkZWZpbmUgUlVfTSAzMTEwNA0KKyNkZWZpbmUgUEZB Q19OIDMNCisNCisvKg0KKyAqIFN0b2xlbiBmcm9tIC4vZHJpdmVycy9jaGFyL3JhbmRvbS5jDQor ICovDQorDQorLyogRk9PLCBHRUVLIGFuZCBIRUNLIGFyZSBiYXNpYyBnZWVraXNoIE1ENCBmdW5j dGlvbnM6IGZvbyBzZWxlY3Rpb24sIGdlZWsgbWFqb3JpdHksIGhlY2sgcGFyaXR5ICovDQorI2Rl ZmluZSBGT08oeCwgeSwgeikgKCh6KSBeICgoeCkgJiAoKHkpIF4gKHopKSkpDQorI2RlZmluZSBH RUVLKHgsIHksIHopICgoKHgpICYgKHkpKSArICgoKHgpIF4gKHkpKSAmICh6KSkpDQorI2RlZmlu ZSBIRUNLKHgsIHksIHopICgoeCkgXiAoeSkgXiAoeikpDQorI2RlZmluZSBPQlJPVU5EKGYsIGEs IGIsIGMsIGQsIHgsIHMpCVwNCisJKGEgKz0gZihiLCBjLCBkKSArIHgsIGEgPSAoYSA8PCBzKSB8 IChhID4+ICgzMiAtIHMpKSkNCisjZGVmaW5lIG9iSzEgMA0KKyNkZWZpbmUgb2JLMiAwMTMyNDA0 NzQ2MzFVTA0KKyNkZWZpbmUgb2JLMyAwMTU2NjYzNjU2NDFVTA0KKyNkZWZpbmUgT0JfUkVLRVlf SU5URVJWQUwgKDMwMCAqIEhaKQ0KKw0KKw0KK2NvbnN0IHN0YXRpYyBfX3UxNiBwZmFjdHNbUEZB Q19OXSA9IHsgMiwgMywgMjcyOSB9Ow0KKw0KK3N0YXRpYyBfX3UxNiBydV94Ow0KK3N0YXRpYyBf X3UxNiBydV9zZWVkLCBydV9zZWVkMjsNCitzdGF0aWMgX191MTYgcnVfYSwgcnVfYjsNCitzdGF0 aWMgX191MTYgcnVfZzsNCitzdGF0aWMgX191MTYgcnVfY291bnRlciA9IDA7DQorc3RhdGljIF9f dTE2IHJ1X21zYiA9IDA7DQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcnVfcmVzZWVkID0gMDsNCitz dGF0aWMgX191MzIgdG1wOw0KKw0KKyNkZWZpbmUgVENQX1JORElTU19ST1VORFMJMTUNCisjZGVm aW5lIFRDUF9STkRJU1NfT1VUCQk3MjAwDQorI2RlZmluZSBUQ1BfUk5ESVNTX01BWAkJMzAwMDAN CisNCitzdGF0aWMgX191OCB0Y3Bfcm5kaXNzX3Nib3hbMTI4XTsNCitzdGF0aWMgX191MTYgdGNw X3JuZGlzc19tc2I7DQorc3RhdGljIF9fdTE2IHRjcF9ybmRpc3NfY250Ow0KK3N0YXRpYyB1bnNp Z25lZCBsb25nIHRjcF9ybmRpc3NfcmVzZWVkOw0KKw0KK3N0YXRpYyBfX3UxNiBwbW9kKF9fdTE2 LCBfX3UxNiwgX191MTYpOw0KK3N0YXRpYyB2b2lkIGlwX2luaXRpZCh2b2lkKTsNCitfX3UxNiBp cF9yYW5kb21pZCh2b2lkKTsNCisNCisvKg0KKyAqIEJhc2ljIGN1dC1kb3duIE1ENCB0cmFuc2Zv cm0uICBSZXR1cm5zIG9ubHkgMzIgYml0cyBvZiByZXN1bHQuDQorICovDQorc3RhdGljIF9fdTMy IGhhbGZfbWQ0X3RyYW5zZm9ybSAoX191MzIgY29uc3QgYnVmWzRdLCBfX3UzMiBjb25zdCBpbls4 XSkNCit7DQorCV9fdTMyIGEgPSBidWZbMF0sIGIgPSBidWZbMV0sIGMgPSBidWZbMl0sIGQgPSBi dWZbM107DQorDQorCS8qIFJvdW5kIDEgKi8NCisJT0JST1VORChGT08sIGEsIGIsIGMsIGQsIGlu WzBdICsgb2JLMSwgIDMpOw0KKwlPQlJPVU5EKEZPTywgZCwgYSwgYiwgYywgaW5bMV0gKyBvYksx LCAgNyk7DQorCU9CUk9VTkQoRk9PLCBjLCBkLCBhLCBiLCBpblsyXSArIG9iSzEsIDExKTsNCisJ T0JST1VORChGT08sIGIsIGMsIGQsIGEsIGluWzNdICsgb2JLMSwgMTkpOw0KKwlPQlJPVU5EKEZP TywgYSwgYiwgYywgZCwgaW5bNF0gKyBvYksxLCAgMyk7DQorCU9CUk9VTkQoRk9PLCBkLCBhLCBi LCBjLCBpbls1XSArIG9iSzEsICA3KTsNCisJT0JST1VORChGT08sIGMsIGQsIGEsIGIsIGluWzZd ICsgb2JLMSwgMTEpOw0KKwlPQlJPVU5EKEZPTywgYiwgYywgZCwgYSwgaW5bN10gKyBvYksxLCAx OSk7DQorDQorCS8qIFJvdW5kIDIgKi8NCisJT0JST1VORChHRUVLLCBhLCBiLCBjLCBkLCBpblsx XSArIG9iSzIsICAzKTsNCisJT0JST1VORChHRUVLLCBkLCBhLCBiLCBjLCBpblszXSArIG9iSzIs ICA1KTsNCisJT0JST1VORChHRUVLLCBjLCBkLCBhLCBiLCBpbls1XSArIG9iSzIsICA5KTsNCisJ T0JST1VORChHRUVLLCBiLCBjLCBkLCBhLCBpbls3XSArIG9iSzIsIDEzKTsNCisJT0JST1VORChH RUVLLCBhLCBiLCBjLCBkLCBpblswXSArIG9iSzIsICAzKTsNCisJT0JST1VORChHRUVLLCBkLCBh LCBiLCBjLCBpblsyXSArIG9iSzIsICA1KTsNCisJT0JST1VORChHRUVLLCBjLCBkLCBhLCBiLCBp bls0XSArIG9iSzIsICA5KTsNCisJT0JST1VORChHRUVLLCBiLCBjLCBkLCBhLCBpbls2XSArIG9i SzIsIDEzKTsNCisNCisJLyogUm91bmQgMyAqLw0KKwlPQlJPVU5EKEhFQ0ssIGEsIGIsIGMsIGQs IGluWzNdICsgb2JLMywgIDMpOw0KKwlPQlJPVU5EKEhFQ0ssIGQsIGEsIGIsIGMsIGluWzddICsg b2JLMywgIDkpOw0KKwlPQlJPVU5EKEhFQ0ssIGMsIGQsIGEsIGIsIGluWzJdICsgb2JLMywgMTEp Ow0KKwlPQlJPVU5EKEhFQ0ssIGIsIGMsIGQsIGEsIGluWzZdICsgb2JLMywgMTUpOw0KKwlPQlJP VU5EKEhFQ0ssIGEsIGIsIGMsIGQsIGluWzFdICsgb2JLMywgIDMpOw0KKwlPQlJPVU5EKEhFQ0ss IGQsIGEsIGIsIGMsIGluWzVdICsgb2JLMywgIDkpOw0KKwlPQlJPVU5EKEhFQ0ssIGMsIGQsIGEs IGIsIGluWzBdICsgb2JLMywgMTEpOw0KKwlPQlJPVU5EKEhFQ0ssIGIsIGMsIGQsIGEsIGluWzRd ICsgb2JLMywgMTUpOw0KKw0KKwlyZXR1cm4gYnVmWzFdICsgYjsJLyogIm1vc3QgaGFzaGVkIiB3 b3JkICovDQorCS8qIEFsdGVybmF0aXZlOiByZXR1cm4gc3VtIG9mIGFsbCB3b3Jkcz8gKi8NCit9 DQorDQordW5zaWduZWQgbG9uZyBvYnNkX2dldF9yYW5kb21fbG9uZyh2b2lkKQ0KK3sNCisJc3Rh dGljIHRpbWVfdCAgIHJla2V5X3RpbWU7DQorCXN0YXRpYyBfX3UzMiAgICBzZWNyZXRbMTJdOw0K Kwl0aW1lX3QgICAgICAgICAgdDsNCisNCisJLyoNCisJICogUGljayBhIHJhbmRvbSBzZWNyZXQg ZXZlcnkgT0JfUkVLRVlfSU5URVJWQUwgc2Vjb25kcy4NCisJICovDQorCXQgPSBnZXRfc2Vjb25k cygpOw0KKwlpZiAoIXJla2V5X3RpbWUgfHwgKHQgLSByZWtleV90aW1lKSA+IE9CX1JFS0VZX0lO VEVSVkFMKSB7DQorCQlyZWtleV90aW1lID0gdDsNCisJCWdldF9yYW5kb21fYnl0ZXMoc2VjcmV0 LCBzaXplb2Yoc2VjcmV0KSk7DQorCX0NCisNCisJc2VjcmV0WzFdID0gaGFsZl9tZDRfdHJhbnNm b3JtKHNlY3JldCs4LCBzZWNyZXQpOw0KKwlzZWNyZXRbMF0gPSBoYWxmX21kNF90cmFuc2Zvcm0o c2VjcmV0KzgsIHNlY3JldCk7DQorCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKilzZWNyZXQ7DQor fQ0KKw0KK3N0YXRpYyBfX3UxNg0KK3Btb2QoX191MTYgZ2VuLCBfX3UxNiBleHAsIF9fdTE2IG1v ZCkNCit7DQorCV9fdTE2IHMsIHQsIHU7DQorDQorCXMgPSAxOw0KKwl0ID0gZ2VuOw0KKwl1ID0g ZXhwOw0KKw0KKwl3aGlsZSAodSkgew0KKwkJaWYgKHUgJiAxKQ0KKwkJCXMgPSAocyAqIHQpICUg bW9kOw0KKwkJdSA+Pj0gMTsNCisJCXQgPSAodCAqIHQpICUgbW9kOw0KKwl9DQorCXJldHVybiAo cyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQoraXBfaW5pdGlkKHZvaWQpDQorew0KKwlfX3UxNiBq LCBpOw0KKwlpbnQgbm9wcmltZSA9IDE7DQorDQorCXJ1X3ggPSAoKHRtcCA9IG9ic2RfZ2V0X3Jh bmRvbV9sb25nKCkpICYgMHhGRkZGKSAlIFJVX007DQorDQorCXJ1X3NlZWQgPSAodG1wID4+IDE2 KSAmIDB4N0ZGRjsNCisJcnVfc2VlZDIgPSBvYnNkX2dldF9yYW5kb21fbG9uZygpICYgMHg3RkZG Ow0KKw0KKwlydV9iID0gKCh0bXAgPSBvYnNkX2dldF9yYW5kb21fbG9uZygpKSAmIDB4ZmZmZSkg fCAxOw0KKwlydV9hID0gcG1vZChSVV9BR0VOLCAodG1wID4+IDE2KSAmIDB4ZmZmZSwgUlVfTSk7 DQorCXdoaWxlIChydV9iICUgMyA9PSAwKQ0KKwkJcnVfYiArPSAyOw0KKw0KKwlqID0gKHRtcCA9 IG9ic2RfZ2V0X3JhbmRvbV9sb25nKCkpICUgUlVfTjsNCisJdG1wID0gdG1wID4+IDE2Ow0KKw0K Kwl3aGlsZSAobm9wcmltZSkgew0KKwkJZm9yIChpID0gMDsgaSA8IFBGQUNfTjsgaSsrKQ0KKwkJ CWlmIChqICUgcGZhY3RzW2ldID09IDApDQorCQkJCWJyZWFrOw0KKw0KKwkJaWYgKGkgPj0gUEZB Q19OKQ0KKwkJCW5vcHJpbWUgPSAwOw0KKwkJZWxzZQ0KKwkJCWogPSAoaiArIDEpICUgUlVfTjsN CisJfQ0KKw0KKwlydV9nID0gcG1vZChSVV9HRU4sIGosIFJVX04pOw0KKwlydV9jb3VudGVyID0g MDsNCisNCisJcnVfcmVzZWVkID0geHRpbWUudHZfc2VjICsgUlVfT1VUOw0KKwlydV9tc2IgPSBy dV9tc2IgPT0gMHg4MDAwID8gMCA6IDB4ODAwMDsNCit9DQorDQorX191MTYNCitpcF9yYW5kb21p ZCh2b2lkKQ0KK3sNCisJaW50IGksIG47DQorDQorCWlmIChydV9jb3VudGVyID49IFJVX01BWCB8 fCB0aW1lX2FmdGVyKGdldF9zZWNvbmRzKCksIHJ1X3Jlc2VlZCkpDQorCQlpcF9pbml0aWQoKTsN CisNCisJaWYgKCF0bXApDQorCQl0bXAgPSBvYnNkX2dldF9yYW5kb21fbG9uZygpOw0KKw0KKwlu ID0gdG1wICYgMHgzOw0KKwl0bXAgPSB0bXAgPj4gMjsNCisJaWYgKHJ1X2NvdW50ZXIgKyBuID49 IFJVX01BWCkNCisJCWlwX2luaXRpZCgpOw0KKwlmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykNCisJ CXJ1X3ggPSAocnVfYSAqIHJ1X3ggKyBydV9iKSAlIFJVX007DQorCXJ1X2NvdW50ZXIgKz0gaTsN CisNCisJcmV0dXJuICgocnVfc2VlZCBeIHBtb2QocnVfZywgcnVfc2VlZDIgXiBydV94LCBSVV9O KSkgfCBydV9tc2IpOw0KK30NCisNCitzdGF0aWMgX191MTYNCit0Y3Bfcm5kaXNzX2VuY3J5cHQo X191MTYgdmFsKQ0KK3sNCisJX191MTYgc3VtID0gMCwgaTsNCisNCisJZm9yIChpID0gMDsgaSA8 IFRDUF9STkRJU1NfUk9VTkRTOyBpKyspIHsNCisJCXN1bSArPSAweDc5Yjk7DQorCQl2YWwgXj0g KChfX3UxNikgdGNwX3JuZGlzc19zYm94Wyh2YWwgXiBzdW0pICYgMHg3Zl0pIDw8IDc7DQorCQl2 YWwgPSAoKHZhbCAmIDB4ZmYpIDw8IDcpIHwgKHZhbCA+PiA4KTsNCisJfQ0KKw0KKwlyZXR1cm4g dmFsOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK3RjcF9ybmRpc3NfaW5pdCh2b2lkKQ0KK3sNCisJ Z2V0X3JhbmRvbV9ieXRlcyh0Y3Bfcm5kaXNzX3Nib3gsIHNpemVvZiAodGNwX3JuZGlzc19zYm94 KSk7DQorCXRjcF9ybmRpc3NfcmVzZWVkID0gZ2V0X3NlY29uZHMoKSArIFRDUF9STkRJU1NfT1VU Ow0KKwl0Y3Bfcm5kaXNzX21zYiA9IHRjcF9ybmRpc3NfbXNiID09IDB4ODAwMCA/IDAgOiAweDgw MDA7DQorCXRjcF9ybmRpc3NfY250ID0gMDsNCit9DQorDQorX191MzINCitpcF9yYW5kb21pc24o dm9pZCkNCit7DQorCWlmICh0Y3Bfcm5kaXNzX2NudCA+PSBUQ1BfUk5ESVNTX01BWCB8fA0KKwkg ICAgdGltZV9hZnRlcihnZXRfc2Vjb25kcygpLCB0Y3Bfcm5kaXNzX3Jlc2VlZCkpDQorCQl0Y3Bf cm5kaXNzX2luaXQoKTsNCisNCisJcmV0dXJuICgoKHRjcF9ybmRpc3NfZW5jcnlwdCh0Y3Bfcm5k aXNzX2NudCsrKSB8DQorCQkgIHRjcF9ybmRpc3NfbXNiKSA8PCAxNikgfCAob2JzZF9nZXRfcmFu ZG9tX2xvbmcoKSAmIDB4N2ZmZikpOw0KK30NCmRpZmYgLU51ciBsaW51eC0yLjYuMTEtcmMyL25l dC9zdW5ycGMveHBydC5jIGxpbnV4LTIuNi4xMS1yYzIudHgxL25ldC9zdW5ycGMveHBydC5jDQot LS0gbGludXgtMi42LjExLXJjMi9uZXQvc3VucnBjL3hwcnQuYwkyMDA1LTAxLTI2IDE5OjU0OjIw LjAwMDAwMDAwMCArMDEwMA0KKysrIGxpbnV4LTIuNi4xMS1yYzIudHgxL25ldC9zdW5ycGMveHBy dC5jCTIwMDUtMDEtMjggMDA6MDc6MTguMDAwMDAwMDAwICswMTAwDQpAQCAtMTM0Miw3ICsxMzQy LDExIEBADQogICovDQogc3RhdGljIGlubGluZSB1MzIgeHBydF9hbGxvY194aWQoc3RydWN0IHJw Y194cHJ0ICp4cHJ0KQ0KIHsNCisjaWZkZWYgQ09ORklHX05FVF9SQU5EUlBDDQorCQlyZXR1cm4g KHUzMikgb2JzZF9nZXRfcmFuZG9tX2xvbmcoKTsNCisjZWxzZQ0KIAlyZXR1cm4geHBydC0+eGlk Kys7DQorI2VuZGlmDQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9pZCB4cHJ0X2luaXRfeGlkKHN0 cnVjdCBycGNfeHBydCAqeHBydCkNCj== --=-elejvCsbUodp6gJ9Abb3-- --=-/poQPsPWPlhmC2H0WE0A Content-Type: application/pgp-signature; name=signature.asc Content-Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQBB+nOdDcEopW8rLewRAo7xAKDAtnSzm64MoNDUQRP0UXFyILcGpACghTdt oRNXsp+R2Fe1SfXJMscNnFk= =D/oA -----END PGP SIGNATURE----- --=-/poQPsPWPlhmC2H0WE0A-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/