>Number: 9390 >Category: c >Synopsis: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Jan 21 18:06:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: david@aspl.es >Release: 3.2.2 20030119 (Debian prerelease) >Organization: >Environment: LANG=es_ES@euro LC_ALL=es_ES@euro >Description: I'm trying a Linux kernel in an Athlon CPU. I get a segmentation fault when I run "make bzImage" and the environment variables LANG or LC_ALL are set to "es_ES@euro": gcc -D__KERNEL__ -I/usr/src/linux-2.4.20/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=athlon -nostdinc -iwithprefix include -DKBUILD_BASENAME=module -c -o module.o module.c module.c: En la función `sys_get_kernel_syms': module.c:1004: error interno: Violación de segmento Por favor envíe un reporte completo de `bugs', con el código preprocesado si es apropiado. Vea para más instrucciones. If I change -march to another architecture, everything goes well. If I unset LC_ALL and LANG environment variables, it works perfectly too. >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="module.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="module.c" I2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8YXNtL21vZHVsZS5oPgojaW5jbHVkZSA8YXNtL3Vh Y2Nlc3MuaD4KI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KI2luY2x1ZGUgPGxpbnV4L3NtcF9s b2NrLmg+CiNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgoj aW5jbHVkZSA8bGludXgvc2xhYi5oPgojaW5jbHVkZSA8bGludXgva21vZC5oPgojaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4KCi8qCiAqIE9yaWdpbmFsbHkgYnkgQW5vbnltb3VzIChhcyBmYXIg YXMgSSBrbm93Li4uKQogKiBMaW51eCB2ZXJzaW9uIGJ5IEJhcyBMYWFyaG92ZW4gPGJhc0B2aW1l Yy5ubD4KICogMC45OS4xNCB2ZXJzaW9uIGJ5IEpvbiBUb21icyA8am9uQGd0ZXgwMi51cy5lcz4s CiAqIEhlYXZpbHkgbW9kaWZpZWQgYnkgQmpvcm4gRWt3YWxsIDxiajBybkBibG94LnNlPiBNYXkg MTk5NCAoQykKICogUmV3cml0dGVuIGJ5IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAdGFtdS5lZHU+ IERlYyAxOTk2CiAqIEFkZCBNT0RfSU5JVElBTElaSU5HIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5j b20uYXU+IE5vdiAxOTk5CiAqIEFkZCBrYWxsc3ltcyBzdXBwb3J0LCBLZWl0aCBPd2VucyA8a2Fv c0BvY3MuY29tLmF1PiBBcHIgMjAwMAogKiBBZGQgYXNtL21vZHVsZSBzdXBwb3J0LCBJQTY0IGhh cyBzcGVjaWFsIHJlcXVpcmVtZW50cy4gIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IFNl cCAyMDAwCiAqIEZpeCBhc3NvcnRlZCBidWdzIGluIG1vZHVsZSB2ZXJpZmljYXRpb24uICBLZWl0 aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiBTZXAgMjAwMAogKiBGaXggc3lzX2luaXRfbW9kdWxl IHJhY2UsIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4gT2N0IDIwMDAKICogICAg IGh0dHA6Ly93d3cudXdzZy5pdS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC8wMDA4LjMvMDM3 OS5odG1sCiAqIFJlcGxhY2UgeHh4X21vZHVsZV9zeW1ib2wgd2l0aCBpbnRlcl9tb2R1bGVfeHh4 LiAgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gT2N0IDIwMDAKICogQWRkIGEgbW9kdWxl IGxpc3QgbG9jayBmb3Iga2VybmVsIGZhdWx0IHJhY2UgZml4aW5nLiBBbGFuIENveCA8YWxhbkBy ZWRoYXQuY29tPgogKgogKiBUaGlzIHNvdXJjZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR1BMLCB0 aGUgc2FtZSBhcyBhbGwga2VybmVsIHNvdXJjZXMuCiAqLwoKI2lmIGRlZmluZWQoQ09ORklHX01P RFVMRVMpIHx8IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQoKZXh0ZXJuIHN0cnVjdCBtb2R1bGVf c3ltYm9sIF9fc3RhcnRfX19rc3ltdGFiW107CmV4dGVybiBzdHJ1Y3QgbW9kdWxlX3N5bWJvbCBf X3N0b3BfX19rc3ltdGFiW107CgpleHRlcm4gY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9l bnRyeSBfX3N0YXJ0X19fZXhfdGFibGVbXTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBleGNlcHRpb25f dGFibGVfZW50cnkgX19zdG9wX19fZXhfdGFibGVbXTsKCmV4dGVybiBjb25zdCBjaGFyIF9fc3Rh cnRfX19rYWxsc3ltc1tdIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7CmV4dGVybiBjb25zdCBjaGFy IF9fc3RvcF9fX2thbGxzeW1zW10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKCnN0cnVjdCBtb2R1 bGUga2VybmVsX21vZHVsZSA9CnsKCXNpemVfb2Zfc3RydWN0OgkJc2l6ZW9mKHN0cnVjdCBtb2R1 bGUpLAoJbmFtZTogCQkJIiIsCgl1YzoJIAkJe0FUT01JQ19JTklUKDEpfSwKCWZsYWdzOgkJCU1P RF9SVU5OSU5HLAoJc3ltczoJCQlfX3N0YXJ0X19fa3N5bXRhYiwKCWV4X3RhYmxlX3N0YXJ0OgkJ X19zdGFydF9fX2V4X3RhYmxlLAoJZXhfdGFibGVfZW5kOgkJX19zdG9wX19fZXhfdGFibGUsCglr YWxsc3ltc19zdGFydDoJCV9fc3RhcnRfX19rYWxsc3ltcywKCWthbGxzeW1zX2VuZDoJCV9fc3Rv cF9fX2thbGxzeW1zLAp9OwoKc3RydWN0IG1vZHVsZSAqbW9kdWxlX2xpc3QgPSAma2VybmVsX21v ZHVsZTsKCiNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSB8fCBkZWZpbmVkKENPTkZJ R19LQUxMU1lNUykgKi8KCi8qIGludGVyX21vZHVsZSBmdW5jdGlvbnMgYXJlIGFsd2F5cyBhdmFp bGFibGUsIGV2ZW4gd2hlbiB0aGUga2VybmVsIGlzCiAqIGNvbXBpbGVkIHdpdGhvdXQgbW9kdWxl cy4gIENvbnN1bWVycyBvZiBpbnRlcl9tb2R1bGVfeHh4IHJvdXRpbmVzCiAqIHdpbGwgYWx3YXlz IHdvcmssIGV2ZW4gd2hlbiBib3RoIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHRoaXMKICog YXBwcm9hY2ggcmVtb3ZlcyBsb3RzIG9mICNpZmRlZnMgaW4gbWFpbmxpbmUgY29kZS4KICovCgpz dGF0aWMgc3RydWN0IGxpc3RfaGVhZCBpbWVfbGlzdCA9IExJU1RfSEVBRF9JTklUKGltZV9saXN0 KTsKc3RhdGljIHNwaW5sb2NrX3QgaW1lX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CnN0YXRp YyBpbnQga21hbGxvY19mYWlsZWQ7CgovKgogKglUaGlzIGxvY2sgcHJldmVudHMgbW9kaWZpY2F0 aW9ucyB0aGF0IG1pZ2h0IHJhY2UgdGhlIGtlcm5lbCBmYXVsdAogKglmaXh1cHMuIEl0IGRvZXMg bm90IHByZXZlbnQgcmVhZGVyIHdhbGtzIHRoYXQgdGhlIG1vZHVsZXMgY29kZQogKglkb2VzLiBU aGUga2VybmVsIGxvY2sgZG9lcyB0aGF0LgogKgogKglTaW5jZSB2bWFsbG9jIGZhdWx0IGZpeHVw cyBvY2N1ciBpbiBhbnkgY29udGV4dCB0aGlzIGxvY2sgaXMgdGFrZW4KICoJaXJxc2F2ZSBhdCBh bGwgdGltZXMuCiAqLwogCnNwaW5sb2NrX3QgbW9kbGlzdF9sb2NrID0gU1BJTl9MT0NLX1VOTE9D S0VEOwoKLyoqCiAqIGludGVyX21vZHVsZV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgbmV3IHNldCBv ZiBpbnRlciBtb2R1bGUgZGF0YS4KICogQGltX25hbWU6IGFuIGFyYml0cmFyeSBzdHJpbmcgdG8g aWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCiAqIEBvd25lcjogbW9kdWxlIHRoYXQg aXMgcmVnaXN0ZXJpbmcgdGhlIGRhdGEsIGFsd2F5cyB1c2UgVEhJU19NT0RVTEUKICogQHVzZXJk YXRhOiBwb2ludGVyIHRvIGFyYml0cmFyeSB1c2VyZGF0YSB0byBiZSByZWdpc3RlcmVkCiAqCiAq IERlc2NyaXB0aW9uOiBDaGVjayB0aGF0IHRoZSBpbV9uYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVu IHJlZ2lzdGVyZWQsCiAqIGNvbXBsYWluIGlmIGl0IGhhcy4gIEZvciBuZXcgZGF0YSwgYWRkIGl0 IHRvIHRoZSBpbnRlcl9tb2R1bGVfZW50cnkKICogbGlzdC4KICovCnZvaWQgaW50ZXJfbW9kdWxl X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKmltX25hbWUsIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBjb25z dCB2b2lkICp1c2VyZGF0YSkKewoJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVy X21vZHVsZV9lbnRyeSAqaW1lLCAqaW1lX25ldzsKCglpZiAoIShpbWVfbmV3ID0ga21hbGxvYyhz aXplb2YoKmltZSksIEdGUF9LRVJORUwpKSkgewoJCS8qIE92ZXJsb2FkZWQga2VybmVsLCBub3Qg ZmF0YWwgKi8KCQlwcmludGsoS0VSTl9FUlIKCQkJIkFpZWUsIGludGVyX21vZHVsZV9yZWdpc3Rl cjogY2Fubm90IGttYWxsb2MgZW50cnkgZm9yICclcydcbiIsCgkJCWltX25hbWUpOwoJCWttYWxs b2NfZmFpbGVkID0gMTsKCQlyZXR1cm47Cgl9CgltZW1zZXQoaW1lX25ldywgMCwgc2l6ZW9mKCpp bWVfbmV3KSk7CglpbWVfbmV3LT5pbV9uYW1lID0gaW1fbmFtZTsKCWltZV9uZXctPm93bmVyID0g b3duZXI7CglpbWVfbmV3LT51c2VyZGF0YSA9IHVzZXJkYXRhOwoKCXNwaW5fbG9jaygmaW1lX2xv Y2spOwoJbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewoJCWltZSA9IGxpc3RfZW50cnko dG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKCQlpZiAoc3RyY21wKGltZS0+ aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewoJCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwoJCQlr ZnJlZShpbWVfbmV3KTsKCQkJLyogUHJvZ3JhbSBsb2dpYyBlcnJvciwgZmF0YWwgKi8KCQkJcHJp bnRrKEtFUk5fRVJSICJpbnRlcl9tb2R1bGVfcmVnaXN0ZXI6IGR1cGxpY2F0ZSBpbV9uYW1lICcl cyciLCBpbV9uYW1lKTsKCQkJQlVHKCk7CgkJfQoJfQoJbGlzdF9hZGQoJihpbWVfbmV3LT5saXN0 KSwgJmltZV9saXN0KTsKCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Cn0KCi8qKgogKiBpbnRlcl9t b2R1bGVfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBzZXQgb2YgaW50ZXIgbW9kdWxlIGRhdGEu CiAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBt dXN0IGJlIHVuaXF1ZQogKgogKiBEZXNjcmlwdGlvbjogQ2hlY2sgdGhhdCB0aGUgaW1fbmFtZSBo YXMgYmVlbiByZWdpc3RlcmVkLCBjb21wbGFpbiBpZgogKiBpdCBoYXMgbm90LiAgRm9yIGV4aXN0 aW5nIGRhdGEsIHJlbW92ZSBpdCBmcm9tIHRoZQogKiBpbnRlcl9tb2R1bGVfZW50cnkgbGlzdC4K ICovCnZvaWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqaW1fbmFtZSkKewoJ c3RydWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwoK CXNwaW5fbG9jaygmaW1lX2xvY2spOwoJbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewoJ CWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsK CQlpZiAoc3RyY21wKGltZS0+aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewoJCQlsaXN0X2RlbCgm KGltZS0+bGlzdCkpOwoJCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwoJCQlrZnJlZShpbWUpOwoJ CQlyZXR1cm47CgkJfQoJfQoJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKCWlmIChrbWFsbG9jX2Zh aWxlZCkgewoJCXByaW50ayhLRVJOX0VSUgoJCQkiaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXI6IG5v IGVudHJ5IGZvciAnJXMnLCAiCgkJCSJwcm9iYWJseSBjYXVzZWQgYnkgcHJldmlvdXMga21hbGxv YyBmYWlsdXJlXG4iLAoJCQlpbV9uYW1lKTsKCQlyZXR1cm47Cgl9CgllbHNlIHsKCQkvKiBQcm9n cmFtIGxvZ2ljIGVycm9yLCBmYXRhbCAqLwoJCXByaW50ayhLRVJOX0VSUiAiaW50ZXJfbW9kdWxl X3VucmVnaXN0ZXI6IG5vIGVudHJ5IGZvciAnJXMnIiwgaW1fbmFtZSk7CgkJQlVHKCk7Cgl9Cn0K Ci8qKgogKiBpbnRlcl9tb2R1bGVfZ2V0IC0gcmV0dXJuIGFyYml0cmFyeSB1c2VyZGF0YSBmcm9t IGFub3RoZXIgbW9kdWxlLgogKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVu dGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKICoKICogRGVzY3JpcHRpb246IElmIHRoZSBp bV9uYW1lIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCByZXR1cm4gTlVMTC4KICogVHJ5IHRvIGlu Y3JlbWVudCB0aGUgdXNlIGNvdW50IG9uIHRoZSBvd25pbmcgbW9kdWxlLCBpZiB0aGF0IGZhaWxz CiAqIHRoZW4gcmV0dXJuIE5VTEwuICBPdGhlcndpc2UgcmV0dXJuIHRoZSB1c2VyZGF0YS4KICov CmNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXQoY29uc3QgY2hhciAqaW1fbmFtZSkKewoJc3Ry dWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwoJY29u c3Qgdm9pZCAqcmVzdWx0ID0gTlVMTDsKCglzcGluX2xvY2soJmltZV9sb2NrKTsKCWxpc3RfZm9y X2VhY2godG1wLCAmaW1lX2xpc3QpIHsKCQlpbWUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGlu dGVyX21vZHVsZV9lbnRyeSwgbGlzdCk7CgkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25h bWUpID09IDApIHsKCQkJaWYgKHRyeV9pbmNfbW9kX2NvdW50KGltZS0+b3duZXIpKQoJCQkJcmVz dWx0ID0gaW1lLT51c2VyZGF0YTsKCQkJYnJlYWs7CgkJfQoJfQoJc3Bpbl91bmxvY2soJmltZV9s b2NrKTsKCXJldHVybihyZXN1bHQpOwp9CgovKioKICogaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0 IC0gaW0gZ2V0IHdpdGggYXV0b21hdGljIHJlcXVlc3RfbW9kdWxlLgogKiBAaW1fbmFtZTogYW4g YXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKICog QG1vZG5hbWU6IG1vZHVsZSB0aGF0IGlzIGV4cGVjdGVkIHRvIHJlZ2lzdGVyIGltX25hbWUKICoK ICogRGVzY3JpcHRpb246IElmIGludGVyX21vZHVsZV9nZXQgZmFpbHMsIGRvIHJlcXVlc3RfbW9k dWxlIHRoZW4gcmV0cnkuCiAqLwpjb25zdCB2b2lkICppbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3Qo Y29uc3QgY2hhciAqaW1fbmFtZSwgY29uc3QgY2hhciAqbW9kbmFtZSkKewoJY29uc3Qgdm9pZCAq cmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1lKTsKCWlmICghcmVzdWx0KSB7CgkJcmVx dWVzdF9tb2R1bGUobW9kbmFtZSk7CgkJcmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1l KTsKCX0KCXJldHVybihyZXN1bHQpOwp9CgovKioKICogaW50ZXJfbW9kdWxlX3B1dCAtIHJlbGVh c2UgdXNlIG9mIGRhdGEgZnJvbSBhbm90aGVyIG1vZHVsZS4KICogQGltX25hbWU6IGFuIGFyYml0 cmFyeSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCiAqCiAqIERl c2NyaXB0aW9uOiBJZiB0aGUgaW1fbmFtZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCwgY29tcGxh aW4sCiAqIG90aGVyd2lzZSBkZWNyZW1lbnQgdGhlIHVzZSBjb3VudCBvbiB0aGUgb3duaW5nIG1v ZHVsZS4KICovCnZvaWQgaW50ZXJfbW9kdWxlX3B1dChjb25zdCBjaGFyICppbV9uYW1lKQp7Cglz dHJ1Y3QgbGlzdF9oZWFkICp0bXA7CglzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWU7CgoJ c3Bpbl9sb2NrKCZpbWVfbG9jayk7CglsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7CgkJ aW1lID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnksIGxpc3QpOwoJ CWlmIChzdHJjbXAoaW1lLT5pbV9uYW1lLCBpbV9uYW1lKSA9PSAwKSB7CgkJCWlmIChpbWUtPm93 bmVyKQoJCQkJX19NT0RfREVDX1VTRV9DT1VOVChpbWUtPm93bmVyKTsKCQkJc3Bpbl91bmxvY2so JmltZV9sb2NrKTsKCQkJcmV0dXJuOwoJCX0KCX0KCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Cglw cmludGsoS0VSTl9FUlIgImludGVyX21vZHVsZV9wdXQ6IG5vIGVudHJ5IGZvciAnJXMnIiwgaW1f bmFtZSk7CglCVUcoKTsKfQoKCiNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKQkvKiBUaGUgcmVz dCBvZiB0aGUgc291cmNlICovCgpzdGF0aWMgbG9uZyBnZXRfbW9kX25hbWUoY29uc3QgY2hhciAq dXNlcl9uYW1lLCBjaGFyICoqYnVmKTsKc3RhdGljIHZvaWQgcHV0X21vZF9uYW1lKGNoYXIgKmJ1 Zik7CnN0cnVjdCBtb2R1bGUgKmZpbmRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpOwp2b2lkIGZy ZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKiwgaW50IHRhZ19mcmVlZCk7CgoKLyoKICogQ2FsbGVk IGF0IGJvb3QgdGltZQogKi8KCnZvaWQgX19pbml0IGluaXRfbW9kdWxlcyh2b2lkKQp7CglrZXJu ZWxfbW9kdWxlLm5zeW1zID0gX19zdG9wX19fa3N5bXRhYiAtIF9fc3RhcnRfX19rc3ltdGFiOwoK CWFyY2hfaW5pdF9tb2R1bGVzKCZrZXJuZWxfbW9kdWxlKTsKfQoKLyoKICogQ29weSB0aGUgbmFt ZSBvZiBhIG1vZHVsZSBmcm9tIHVzZXIgc3BhY2UuCiAqLwoKc3RhdGljIGlubGluZSBsb25nCmdl dF9tb2RfbmFtZShjb25zdCBjaGFyICp1c2VyX25hbWUsIGNoYXIgKipidWYpCnsKCXVuc2lnbmVk IGxvbmcgcGFnZTsKCWxvbmcgcmV0dmFsOwoKCXBhZ2UgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tF Uk5FTCk7CglpZiAoIXBhZ2UpCgkJcmV0dXJuIC1FTk9NRU07CgoJcmV0dmFsID0gc3RybmNweV9m cm9tX3VzZXIoKGNoYXIgKilwYWdlLCB1c2VyX25hbWUsIFBBR0VfU0laRSk7CglpZiAocmV0dmFs ID4gMCkgewoJCWlmIChyZXR2YWwgPCBQQUdFX1NJWkUpIHsKCQkJKmJ1ZiA9IChjaGFyICopcGFn ZTsKCQkJcmV0dXJuIHJldHZhbDsKCQl9CgkJcmV0dmFsID0gLUVOQU1FVE9PTE9ORzsKCX0gZWxz ZSBpZiAoIXJldHZhbCkKCQlyZXR2YWwgPSAtRUlOVkFMOwoKCWZyZWVfcGFnZShwYWdlKTsKCXJl dHVybiByZXR2YWw7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApwdXRfbW9kX25hbWUoY2hhciAqYnVm KQp7CglmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKfQoKLyoKICogQWxsb2NhdGUgc3Bh Y2UgZm9yIGEgbW9kdWxlLgogKi8KCmFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwpzeXNfY3JlYXRl X21vZHVsZShjb25zdCBjaGFyICpuYW1lX3VzZXIsIHNpemVfdCBzaXplKQp7CgljaGFyICpuYW1l OwoJbG9uZyBuYW1lbGVuLCBlcnJvcjsKCXN0cnVjdCBtb2R1bGUgKm1vZDsKCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CgoJaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKCQlyZXR1cm4gLUVQRVJN OwoJbG9ja19rZXJuZWwoKTsKCWlmICgobmFtZWxlbiA9IGdldF9tb2RfbmFtZShuYW1lX3VzZXIs ICZuYW1lKSkgPCAwKSB7CgkJZXJyb3IgPSBuYW1lbGVuOwoJCWdvdG8gZXJyMDsKCX0KCWlmIChz aXplIDwgc2l6ZW9mKHN0cnVjdCBtb2R1bGUpK25hbWVsZW4pIHsKCQllcnJvciA9IC1FSU5WQUw7 CgkJZ290byBlcnIxOwoJfQoJaWYgKGZpbmRfbW9kdWxlKG5hbWUpICE9IE5VTEwpIHsKCQllcnJv ciA9IC1FRVhJU1Q7CgkJZ290byBlcnIxOwoJfQoJaWYgKChtb2QgPSAoc3RydWN0IG1vZHVsZSAq KW1vZHVsZV9tYXAoc2l6ZSkpID09IE5VTEwpIHsKCQllcnJvciA9IC1FTk9NRU07CgkJZ290byBl cnIxOwoJfQoKCW1lbXNldChtb2QsIDAsIHNpemVvZigqbW9kKSk7Cgltb2QtPnNpemVfb2Zfc3Ry dWN0ID0gc2l6ZW9mKCptb2QpOwoJbW9kLT5uYW1lID0gKGNoYXIgKikobW9kICsgMSk7Cgltb2Qt PnNpemUgPSBzaXplOwoJbWVtY3B5KChjaGFyKikobW9kKzEpLCBuYW1lLCBuYW1lbGVuKzEpOwoK CXB1dF9tb2RfbmFtZShuYW1lKTsKCglzcGluX2xvY2tfaXJxc2F2ZSgmbW9kbGlzdF9sb2NrLCBm bGFncyk7Cgltb2QtPm5leHQgPSBtb2R1bGVfbGlzdDsKCW1vZHVsZV9saXN0ID0gbW9kOwkvKiBs aW5rIGl0IGluICovCglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtb2RsaXN0X2xvY2ssIGZsYWdz KTsKCgllcnJvciA9IChsb25nKSBtb2Q7Cglnb3RvIGVycjA7CmVycjE6CglwdXRfbW9kX25hbWUo bmFtZSk7CmVycjA6Cgl1bmxvY2tfa2VybmVsKCk7CglyZXR1cm4gZXJyb3I7Cn0KCi8qCiAqIElu aXRpYWxpemUgYSBtb2R1bGUuCiAqLwoKYXNtbGlua2FnZSBsb25nCnN5c19pbml0X21vZHVsZShj b25zdCBjaGFyICpuYW1lX3VzZXIsIHN0cnVjdCBtb2R1bGUgKm1vZF91c2VyKQp7CglzdHJ1Y3Qg bW9kdWxlIG1vZF90bXAsICptb2Q7CgljaGFyICpuYW1lLCAqbl9uYW1lLCAqbmFtZV90bXAgPSBO VUxMOwoJbG9uZyBuYW1lbGVuLCBuX25hbWVsZW4sIGksIGVycm9yOwoJdW5zaWduZWQgbG9uZyBt b2RfdXNlcl9zaXplOwoJc3RydWN0IG1vZHVsZV9yZWYgKmRlcDsKCglpZiAoIWNhcGFibGUoQ0FQ X1NZU19NT0RVTEUpKQoJCXJldHVybiAtRVBFUk07Cglsb2NrX2tlcm5lbCgpOwoJaWYgKChuYW1l bGVuID0gZ2V0X21vZF9uYW1lKG5hbWVfdXNlciwgJm5hbWUpKSA8IDApIHsKCQllcnJvciA9IG5h bWVsZW47CgkJZ290byBlcnIwOwoJfQoJaWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0g TlVMTCkgewoJCWVycm9yID0gLUVOT0VOVDsKCQlnb3RvIGVycjE7Cgl9CgoJLyogQ2hlY2sgbW9k dWxlIGhlYWRlciBzaXplLiAgV2UgYWxsb3cgYSBiaXQgb2Ygc2xvcCBvdmVyIHRoZQoJICAgc2l6 ZSB3ZSBhcmUgZmFtaWxpYXIgd2l0aCB0byBjb3BlIHdpdGggYSB2ZXJzaW9uIG9mIGluc21vZAoJ ICAgZm9yIGEgbmV3ZXIga2VybmVsLiAgQnV0IGRvbid0IG92ZXIgZG8gaXQuICovCglpZiAoKGVy cm9yID0gZ2V0X3VzZXIobW9kX3VzZXJfc2l6ZSwgJm1vZF91c2VyLT5zaXplX29mX3N0cnVjdCkp ICE9IDApCgkJZ290byBlcnIxOwoJaWYgKG1vZF91c2VyX3NpemUgPCAodW5zaWduZWQgbG9uZykm KChzdHJ1Y3QgbW9kdWxlICopMEwpLT5wZXJzaXN0X3N0YXJ0CgkgICAgfHwgbW9kX3VzZXJfc2l6 ZSA+IHNpemVvZihzdHJ1Y3QgbW9kdWxlKSArIDE2KnNpemVvZih2b2lkKikpIHsKCQlwcmludGso S0VSTl9FUlIgImluaXRfbW9kdWxlOiBJbnZhbGlkIG1vZHVsZSBoZWFkZXIgc2l6ZS5cbiIKCQkg ICAgICAgS0VSTl9FUlIgIkEgbmV3IHZlcnNpb24gb2YgdGhlIG1vZHV0aWxzIGlzIGxpa2VseSAi CgkJCQkibmVlZGVkLlxuIik7CgkJZXJyb3IgPSAtRUlOVkFMOwoJCWdvdG8gZXJyMTsKCX0KCgkv KiBIb2xkIHRoZSBjdXJyZW50IGNvbnRlbnRzIHdoaWxlIHdlIHBsYXkgd2l0aCB0aGUgdXNlcidz IGlkZWEKCSAgIG9mIHJpZ2h0ZW91c25lc3MuICAqLwoJbW9kX3RtcCA9ICptb2Q7CgluYW1lX3Rt cCA9IGttYWxsb2Moc3RybGVuKG1vZC0+bmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsJLyogV2hlcmUn cyBrc3RyZHVwKCk/ICovCglpZiAobmFtZV90bXAgPT0gTlVMTCkgewoJCWVycm9yID0gLUVOT01F TTsKCQlnb3RvIGVycjE7Cgl9CglzdHJjcHkobmFtZV90bXAsIG1vZC0+bmFtZSk7CgoJZXJyb3Ig PSBjb3B5X2Zyb21fdXNlcihtb2QsIG1vZF91c2VyLCBtb2RfdXNlcl9zaXplKTsKCWlmIChlcnJv cikgewoJCWVycm9yID0gLUVGQVVMVDsKCQlnb3RvIGVycjI7Cgl9CgoJLyogU2FuaXR5IGNoZWNr IHRoZSBzaXplIG9mIHRoZSBtb2R1bGUuICAqLwoJZXJyb3IgPSAtRUlOVkFMOwoKCWlmIChtb2Qt PnNpemUgPiBtb2RfdG1wLnNpemUpIHsKCQlwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBT aXplIG9mIGluaXRpYWxpemVkIG1vZHVsZSAiCgkJCQkiZXhjZWVkcyBzaXplIG9mIGNyZWF0ZWQg bW9kdWxlLlxuIik7CgkJZ290byBlcnIyOwoJfQoKCS8qIE1ha2Ugc3VyZSBhbGwgaW50ZXJlc3Rp bmcgcG9pbnRlcnMgYXJlIHNhbmUuICAqLwoKCWlmICghbW9kX2JvdW5kKG1vZC0+bmFtZSwgbmFt ZWxlbiwgbW9kKSkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+bmFtZSBv dXQgb2YgYm91bmRzLlxuIik7CgkJZ290byBlcnIyOwoJfQoJaWYgKG1vZC0+bnN5bXMgJiYgIW1v ZF9ib3VuZChtb2QtPnN5bXMsIG1vZC0+bnN5bXMsIG1vZCkpIHsKCQlwcmludGsoS0VSTl9FUlIg ImluaXRfbW9kdWxlOiBtb2QtPnN5bXMgb3V0IG9mIGJvdW5kcy5cbiIpOwoJCWdvdG8gZXJyMjsK CX0KCWlmIChtb2QtPm5kZXBzICYmICFtb2RfYm91bmQobW9kLT5kZXBzLCBtb2QtPm5kZXBzLCBt b2QpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9kLT5kZXBzIG91dCBvZiBi b3VuZHMuXG4iKTsKCQlnb3RvIGVycjI7Cgl9CglpZiAobW9kLT5pbml0ICYmICFtb2RfYm91bmQo bW9kLT5pbml0LCAwLCBtb2QpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9k LT5pbml0IG91dCBvZiBib3VuZHMuXG4iKTsKCQlnb3RvIGVycjI7Cgl9CglpZiAobW9kLT5jbGVh bnVwICYmICFtb2RfYm91bmQobW9kLT5jbGVhbnVwLCAwLCBtb2QpKSB7CgkJcHJpbnRrKEtFUk5f RVJSICJpbml0X21vZHVsZTogbW9kLT5jbGVhbnVwIG91dCBvZiBib3VuZHMuXG4iKTsKCQlnb3Rv IGVycjI7Cgl9CglpZiAobW9kLT5leF90YWJsZV9zdGFydCA+IG1vZC0+ZXhfdGFibGVfZW5kCgkg ICAgfHwgKG1vZC0+ZXhfdGFibGVfc3RhcnQgJiYKCQkhKCh1bnNpZ25lZCBsb25nKW1vZC0+ZXhf dGFibGVfc3RhcnQgPj0gKCh1bnNpZ25lZCBsb25nKW1vZCArIG1vZC0+c2l6ZV9vZl9zdHJ1Y3Qp CgkJICAmJiAoKHVuc2lnbmVkIGxvbmcpbW9kLT5leF90YWJsZV9lbmQKCQkgICAgICA8ICh1bnNp Z25lZCBsb25nKW1vZCArIG1vZC0+c2l6ZSkpKQoJICAgIHx8ICgoKHVuc2lnbmVkIGxvbmcpbW9k LT5leF90YWJsZV9zdGFydAoJCSAtICh1bnNpZ25lZCBsb25nKW1vZC0+ZXhfdGFibGVfZW5kKQoJ CSUgc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpKSkgewoJCXByaW50ayhLRVJO X0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+ZXhfdGFibGVfKiBpbnZhbGlkLlxuIik7CgkJZ290byBl cnIyOwoJfQoJaWYgKG1vZC0+ZmxhZ3MgJiB+TU9EX0FVVE9DTEVBTikgewoJCXByaW50ayhLRVJO X0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+ZmxhZ3MgaW52YWxpZC5cbiIpOwoJCWdvdG8gZXJyMjsK CX0KCWlmIChtb2RfbWVtYmVyX3ByZXNlbnQobW9kLCBjYW5fdW5sb2FkKQoJICAgICYmIG1vZC0+ Y2FuX3VubG9hZCAmJiAhbW9kX2JvdW5kKG1vZC0+Y2FuX3VubG9hZCwgMCwgbW9kKSkgewoJCXBy aW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+Y2FuX3VubG9hZCBvdXQgb2YgYm91bmRz LlxuIik7CgkJZ290byBlcnIyOwoJfQoJaWYgKG1vZF9tZW1iZXJfcHJlc2VudChtb2QsIGthbGxz eW1zX2VuZCkpIHsKCSAgICBpZiAobW9kLT5rYWxsc3ltc19lbmQgJiYKCQkoIW1vZF9ib3VuZCht b2QtPmthbGxzeW1zX3N0YXJ0LCAwLCBtb2QpIHx8CgkJICFtb2RfYm91bmQobW9kLT5rYWxsc3lt c19lbmQsIDAsIG1vZCkpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9kLT5r YWxsc3ltcyBvdXQgb2YgYm91bmRzLlxuIik7CgkJZ290byBlcnIyOwoJICAgIH0KCSAgICBpZiAo bW9kLT5rYWxsc3ltc19zdGFydCA+IG1vZC0+a2FsbHN5bXNfZW5kKSB7CgkJcHJpbnRrKEtFUk5f RVJSICJpbml0X21vZHVsZTogbW9kLT5rYWxsc3ltcyBpbnZhbGlkLlxuIik7CgkJZ290byBlcnIy OwoJICAgIH0KCX0KCWlmIChtb2RfbWVtYmVyX3ByZXNlbnQobW9kLCBhcmNoZGF0YV9lbmQpKSB7 CgkgICAgaWYgKG1vZC0+YXJjaGRhdGFfZW5kICYmCgkJKCFtb2RfYm91bmQobW9kLT5hcmNoZGF0 YV9zdGFydCwgMCwgbW9kKSB8fAoJCSAhbW9kX2JvdW5kKG1vZC0+YXJjaGRhdGFfZW5kLCAwLCBt b2QpKSkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+YXJjaGRhdGEgb3V0 IG9mIGJvdW5kcy5cbiIpOwoJCWdvdG8gZXJyMjsKCSAgICB9CgkgICAgaWYgKG1vZC0+YXJjaGRh dGFfc3RhcnQgPiBtb2QtPmFyY2hkYXRhX2VuZCkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9t b2R1bGU6IG1vZC0+YXJjaGRhdGEgaW52YWxpZC5cbiIpOwoJCWdvdG8gZXJyMjsKCSAgICB9Cgl9 CglpZiAobW9kX21lbWJlcl9wcmVzZW50KG1vZCwga2VybmVsX2RhdGEpICYmIG1vZC0+a2VybmVs X2RhdGEpIHsKCSAgICBwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBtb2QtPmtlcm5lbF9k YXRhIG11c3QgYmUgemVyby5cbiIpOwoJICAgIGdvdG8gZXJyMjsKCX0KCgkvKiBDaGVjayB0aGF0 IHRoZSB1c2VyIGlzbid0IGRvaW5nIHNvbWV0aGluZyBzaWxseSB3aXRoIHRoZSBuYW1lLiAgKi8K CglpZiAoKG5fbmFtZWxlbiA9IGdldF9tb2RfbmFtZShtb2QtPm5hbWUgLSAodW5zaWduZWQgbG9u Zyltb2QKCQkJCSAgICAgICsgKHVuc2lnbmVkIGxvbmcpbW9kX3VzZXIsCgkJCQkgICAgICAmbl9u YW1lKSkgPCAwKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogZ2V0X21vZF9uYW1l IGZhaWx1cmUuXG4iKTsKCQllcnJvciA9IG5fbmFtZWxlbjsKCQlnb3RvIGVycjI7Cgl9CglpZiAo bmFtZWxlbiAhPSBuX25hbWVsZW4gfHwgc3RyY21wKG5fbmFtZSwgbW9kX3RtcC5uYW1lKSAhPSAw KSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogY2hhbmdlZCBtb2R1bGUgbmFtZSB0 byAiCgkJCQkiYCVzJyBmcm9tIGAlcydcbiIsCgkJICAgICAgIG5fbmFtZSwgbW9kX3RtcC5uYW1l KTsKCQlnb3RvIGVycjM7Cgl9CgoJLyogT2ssIHRoYXQncyBhYm91dCBhbGwgdGhlIHNhbml0eSB3 ZSBjYW4gc3RvbWFjaDsgY29weSB0aGUgcmVzdC4gICovCgoJaWYgKGNvcHlfZnJvbV91c2VyKChj aGFyICopbW9kK21vZF91c2VyX3NpemUsCgkJCSAgIChjaGFyICopbW9kX3VzZXIrbW9kX3VzZXJf c2l6ZSwKCQkJICAgbW9kLT5zaXplLW1vZF91c2VyX3NpemUpKSB7CgkJZXJyb3IgPSAtRUZBVUxU OwoJCWdvdG8gZXJyMzsKCX0KCglpZiAobW9kdWxlX2FyY2hfaW5pdChtb2QpKQoJCWdvdG8gZXJy MzsKCgkvKiBPbiBzb21lIG1hY2hpbmVzIGl0IGlzIG5lY2Vzc2FyeSB0byBkbyBzb21ldGhpbmcg aGVyZQoJICAgdG8gbWFrZSB0aGUgSSBhbmQgRCBjYWNoZXMgY29uc2lzdGVudC4gICovCglmbHVz aF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpbW9kLCAodW5zaWduZWQgbG9uZyltb2QgKyBt b2QtPnNpemUpOwoKCW1vZC0+bmV4dCA9IG1vZF90bXAubmV4dDsKCW1vZC0+cmVmcyA9IE5VTEw7 CgoJLyogU2FuaXR5IGNoZWNrIHRoZSBtb2R1bGUncyBkZXBlbmRlbnRzICovCglmb3IgKGkgPSAw LCBkZXAgPSBtb2QtPmRlcHM7IGkgPCBtb2QtPm5kZXBzOyArK2ksICsrZGVwKSB7CgkJc3RydWN0 IG1vZHVsZSAqbywgKmQgPSBkZXAtPmRlcDsKCgkJLyogTWFrZSBzdXJlIHRoZSBpbmRpY2F0ZWQg ZGVwZW5kZW5jaWVzIGFyZSByZWFsbHkgbW9kdWxlcy4gICovCgkJaWYgKGQgPT0gbW9kKSB7CgkJ CXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IHNlbGYtcmVmZXJlbnRpYWwgIgoJCQkJCSJk ZXBlbmRlbmN5IGluIG1vZC0+ZGVwcy5cbiIpOwoJCQlnb3RvIGVycjM7CgkJfQoKCQkvKiBTY2Fu IHRoZSBjdXJyZW50IG1vZHVsZXMgZm9yIHRoaXMgZGVwZW5kZW5jeSAqLwoJCWZvciAobyA9IG1v ZHVsZV9saXN0OyBvICE9ICZrZXJuZWxfbW9kdWxlICYmIG8gIT0gZDsgbyA9IG8tPm5leHQpCgkJ CTsKCgkJaWYgKG8gIT0gZCkgewoJCQlwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBmb3Vu ZCBkZXBlbmRlbmN5IHRoYXQgaXMgIgoJCQkJIihubyBsb25nZXI/KSBhIG1vZHVsZS5cbiIpOwoJ CQlnb3RvIGVycjM7CgkJfQoJfQoKCS8qIFVwZGF0ZSBtb2R1bGUgcmVmZXJlbmNlcy4gICovCglm b3IgKGkgPSAwLCBkZXAgPSBtb2QtPmRlcHM7IGkgPCBtb2QtPm5kZXBzOyArK2ksICsrZGVwKSB7 CgkJc3RydWN0IG1vZHVsZSAqZCA9IGRlcC0+ZGVwOwoKCQlkZXAtPnJlZiA9IG1vZDsKCQlkZXAt Pm5leHRfcmVmID0gZC0+cmVmczsKCQlkLT5yZWZzID0gZGVwOwoJCS8qIEJlaW5nIHJlZmVyZW5j ZWQgYnkgYSBkZXBlbmRlbnQgbW9kdWxlIGNvdW50cyBhcyBhCgkJICAgdXNlIGFzIGZhciBhcyBr bW9kIGlzIGNvbmNlcm5lZC4gICovCgkJZC0+ZmxhZ3MgfD0gTU9EX1VTRURfT05DRTsKCX0KCgkv KiBGcmVlIG91ciB0ZW1wb3JhcnkgbWVtb3J5LiAgKi8KCXB1dF9tb2RfbmFtZShuX25hbWUpOwoJ cHV0X21vZF9uYW1lKG5hbWUpOwoKCS8qIEluaXRpYWxpemUgdGhlIG1vZHVsZS4gICovCglhdG9t aWNfc2V0KCZtb2QtPnVjLnVzZWNvdW50LDEpOwoJbW9kLT5mbGFncyB8PSBNT0RfSU5JVElBTEla SU5HOwoJaWYgKG1vZC0+aW5pdCAmJiAoZXJyb3IgPSBtb2QtPmluaXQoKSkgIT0gMCkgewoJCWF0 b21pY19zZXQoJm1vZC0+dWMudXNlY291bnQsMCk7CgkJbW9kLT5mbGFncyAmPSB+TU9EX0lOSVRJ QUxJWklORzsKCQlpZiAoZXJyb3IgPiAwKQkvKiBCdWdneSBtb2R1bGUgKi8KCQkJZXJyb3IgPSAt RUJVU1k7CgkJZ290byBlcnIwOwoJfQoJYXRvbWljX2RlYygmbW9kLT51Yy51c2Vjb3VudCk7CgoJ LyogQW5kIHNldCBpdCBydW5uaW5nLiAgKi8KCW1vZC0+ZmxhZ3MgPSAobW9kLT5mbGFncyB8IE1P RF9SVU5OSU5HKSAmIH5NT0RfSU5JVElBTElaSU5HOwoJZXJyb3IgPSAwOwoJZ290byBlcnIwOwoK ZXJyMzoKCXB1dF9tb2RfbmFtZShuX25hbWUpOwplcnIyOgoJKm1vZCA9IG1vZF90bXA7CglzdHJj cHkoKGNoYXIgKiltb2QtPm5hbWUsIG5hbWVfdG1wKTsJLyogV2Uga25vdyB0aGVyZSBpcyByb29t IGZvciB0aGlzICovCmVycjE6CglwdXRfbW9kX25hbWUobmFtZSk7CmVycjA6Cgl1bmxvY2tfa2Vy bmVsKCk7CglrZnJlZShuYW1lX3RtcCk7CglyZXR1cm4gZXJyb3I7Cn0KCnN0YXRpYyBzcGlubG9j a190IHVubG9hZF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwppbnQgdHJ5X2luY19tb2RfY291 bnQoc3RydWN0IG1vZHVsZSAqbW9kKQp7CglpbnQgcmVzID0gMTsKCWlmIChtb2QpIHsKCQlzcGlu X2xvY2soJnVubG9hZF9sb2NrKTsKCQlpZiAobW9kLT5mbGFncyAmIE1PRF9ERUxFVEVEKQoJCQly ZXMgPSAwOwoJCWVsc2UKCQkJX19NT0RfSU5DX1VTRV9DT1VOVChtb2QpOwoJCXNwaW5fdW5sb2Nr KCZ1bmxvYWRfbG9jayk7Cgl9CglyZXR1cm4gcmVzOwp9Cgphc21saW5rYWdlIGxvbmcKc3lzX2Rl bGV0ZV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZV91c2VyKQp7CglzdHJ1Y3QgbW9kdWxlICptb2Qs ICpuZXh0OwoJY2hhciAqbmFtZTsKCWxvbmcgZXJyb3I7CglpbnQgc29tZXRoaW5nX2NoYW5nZWQ7 CgoJaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKCQlyZXR1cm4gLUVQRVJNOwoKCWxvY2tf a2VybmVsKCk7CglpZiAobmFtZV91c2VyKSB7CgkJaWYgKChlcnJvciA9IGdldF9tb2RfbmFtZShu YW1lX3VzZXIsICZuYW1lKSkgPCAwKQoJCQlnb3RvIG91dDsKCQllcnJvciA9IC1FTk9FTlQ7CgkJ aWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0gTlVMTCkgewoJCQlwdXRfbW9kX25hbWUo bmFtZSk7CgkJCWdvdG8gb3V0OwoJCX0KCQlwdXRfbW9kX25hbWUobmFtZSk7CgkJZXJyb3IgPSAt RUJVU1k7CgkJaWYgKG1vZC0+cmVmcyAhPSBOVUxMKQoJCQlnb3RvIG91dDsKCgkJc3Bpbl9sb2Nr KCZ1bmxvYWRfbG9jayk7CgkJaWYgKCFfX01PRF9JTl9VU0UobW9kKSkgewoJCQltb2QtPmZsYWdz IHw9IE1PRF9ERUxFVEVEOwoJCQlzcGluX3VubG9jaygmdW5sb2FkX2xvY2spOwoJCQlmcmVlX21v ZHVsZShtb2QsIDApOwoJCQllcnJvciA9IDA7CgkJfSBlbHNlIHsKCQkJc3Bpbl91bmxvY2soJnVu bG9hZF9sb2NrKTsKCQl9CgkJZ290byBvdXQ7Cgl9CgoJLyogRG8gYXV0b21hdGljIHJlYXBpbmcg Ki8KcmVzdGFydDoKCXNvbWV0aGluZ19jaGFuZ2VkID0gMDsKCQoJZm9yIChtb2QgPSBtb2R1bGVf bGlzdDsgbW9kICE9ICZrZXJuZWxfbW9kdWxlOyBtb2QgPSBuZXh0KSB7CgkJbmV4dCA9IG1vZC0+ bmV4dDsKCQlzcGluX2xvY2soJnVubG9hZF9sb2NrKTsKCQlpZiAobW9kLT5yZWZzID09IE5VTEwK CQkgICAgJiYgKG1vZC0+ZmxhZ3MgJiBNT0RfQVVUT0NMRUFOKQoJCSAgICAmJiAobW9kLT5mbGFn cyAmIE1PRF9SVU5OSU5HKQoJCSAgICAmJiAhKG1vZC0+ZmxhZ3MgJiBNT0RfREVMRVRFRCkKCQkg ICAgJiYgKG1vZC0+ZmxhZ3MgJiBNT0RfVVNFRF9PTkNFKQoJCSAgICAmJiAhX19NT0RfSU5fVVNF KG1vZCkpIHsKCQkJaWYgKChtb2QtPmZsYWdzICYgTU9EX1ZJU0lURUQpCgkJCSAgICAmJiAhKG1v ZC0+ZmxhZ3MgJiBNT0RfSlVTVF9GUkVFRCkpIHsKCQkJCXNwaW5fdW5sb2NrKCZ1bmxvYWRfbG9j ayk7CgkJCQltb2QtPmZsYWdzICY9IH5NT0RfVklTSVRFRDsKCQkJfSBlbHNlIHsKCQkJCW1vZC0+ ZmxhZ3MgfD0gTU9EX0RFTEVURUQ7CgkJCQlzcGluX3VubG9jaygmdW5sb2FkX2xvY2spOwoJCQkJ ZnJlZV9tb2R1bGUobW9kLCAxKTsKCQkJCXNvbWV0aGluZ19jaGFuZ2VkID0gMTsKCQkJfQoJCX0g ZWxzZSB7CgkJCXNwaW5fdW5sb2NrKCZ1bmxvYWRfbG9jayk7CgkJfQoJfQoJCglpZiAoc29tZXRo aW5nX2NoYW5nZWQpCgkJZ290byByZXN0YXJ0OwoJCQoJZm9yIChtb2QgPSBtb2R1bGVfbGlzdDsg bW9kICE9ICZrZXJuZWxfbW9kdWxlOyBtb2QgPSBtb2QtPm5leHQpCgkJbW9kLT5mbGFncyAmPSB+ TU9EX0pVU1RfRlJFRUQ7CgkKCWVycm9yID0gMDsKb3V0OgoJdW5sb2NrX2tlcm5lbCgpOwoJcmV0 dXJuIGVycm9yOwp9CgovKiBRdWVyeSB2YXJpb3VzIGJpdHMgYWJvdXQgbW9kdWxlcy4gICovCgpz dGF0aWMgaW50CnFtX21vZHVsZXMoY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpy ZXQpCnsKCXN0cnVjdCBtb2R1bGUgKm1vZDsKCXNpemVfdCBubW9kLCBzcGFjZSwgbGVuOwoKCW5t b2QgPSBzcGFjZSA9IDA7CgoJZm9yIChtb2Q9bW9kdWxlX2xpc3Q7IG1vZCAhPSAma2VybmVsX21v ZHVsZTsgbW9kPW1vZC0+bmV4dCwgKytubW9kKSB7CgkJbGVuID0gc3RybGVuKG1vZC0+bmFtZSkr MTsKCQlpZiAobGVuID4gYnVmc2l6ZSkKCQkJZ290byBjYWxjX3NwYWNlX25lZWRlZDsKCQlpZiAo Y29weV90b191c2VyKGJ1ZiwgbW9kLT5uYW1lLCBsZW4pKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQli dWYgKz0gbGVuOwoJCWJ1ZnNpemUgLT0gbGVuOwoJCXNwYWNlICs9IGxlbjsKCX0KCglpZiAocHV0 X3VzZXIobm1vZCwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gMDsKCmNh bGNfc3BhY2VfbmVlZGVkOgoJc3BhY2UgKz0gbGVuOwoJd2hpbGUgKChtb2QgPSBtb2QtPm5leHQp ICE9ICZrZXJuZWxfbW9kdWxlKQoJCXNwYWNlICs9IHN0cmxlbihtb2QtPm5hbWUpKzE7CgoJaWYg KHB1dF91c2VyKHNwYWNlLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoJZWxzZQoJCXJldHVybiAt RU5PU1BDOwp9CgpzdGF0aWMgaW50CnFtX2RlcHMoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpi dWYsIHNpemVfdCBidWZzaXplLCBzaXplX3QgKnJldCkKewoJc2l6ZV90IGksIHNwYWNlLCBsZW47 CgoJaWYgKG1vZCA9PSAma2VybmVsX21vZHVsZSkKCQlyZXR1cm4gLUVJTlZBTDsKCWlmICghTU9E X0NBTl9RVUVSWShtb2QpKQoJCWlmIChwdXRfdXNlcigwLCByZXQpKQoJCQlyZXR1cm4gLUVGQVVM VDsKCQllbHNlCgkJCXJldHVybiAwOwoKCXNwYWNlID0gMDsKCWZvciAoaSA9IDA7IGkgPCBtb2Qt Pm5kZXBzOyArK2kpIHsKCQljb25zdCBjaGFyICpkZXBfbmFtZSA9IG1vZC0+ZGVwc1tpXS5kZXAt Pm5hbWU7CgoJCWxlbiA9IHN0cmxlbihkZXBfbmFtZSkrMTsKCQlpZiAobGVuID4gYnVmc2l6ZSkK CQkJZ290byBjYWxjX3NwYWNlX25lZWRlZDsKCQlpZiAoY29weV90b191c2VyKGJ1ZiwgZGVwX25h bWUsIGxlbikpCgkJCXJldHVybiAtRUZBVUxUOwoJCWJ1ZiArPSBsZW47CgkJYnVmc2l6ZSAtPSBs ZW47CgkJc3BhY2UgKz0gbGVuOwoJfQoKCWlmIChwdXRfdXNlcihpLCByZXQpKQoJCXJldHVybiAt RUZBVUxUOwoJZWxzZQoJCXJldHVybiAwOwoKY2FsY19zcGFjZV9uZWVkZWQ6CglzcGFjZSArPSBs ZW47Cgl3aGlsZSAoKytpIDwgbW9kLT5uZGVwcykKCQlzcGFjZSArPSBzdHJsZW4obW9kLT5kZXBz W2ldLmRlcC0+bmFtZSkrMTsKCglpZiAocHV0X3VzZXIoc3BhY2UsIHJldCkpCgkJcmV0dXJuIC1F RkFVTFQ7CgllbHNlCgkJcmV0dXJuIC1FTk9TUEM7Cn0KCnN0YXRpYyBpbnQKcW1fcmVmcyhzdHJ1 Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqcmV0KQp7 CglzaXplX3QgbnJlZnMsIHNwYWNlLCBsZW47CglzdHJ1Y3QgbW9kdWxlX3JlZiAqcmVmOwoKCWlm IChtb2QgPT0gJmtlcm5lbF9tb2R1bGUpCgkJcmV0dXJuIC1FSU5WQUw7CglpZiAoIU1PRF9DQU5f UVVFUlkobW9kKSkKCQlpZiAocHV0X3VzZXIoMCwgcmV0KSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJ ZWxzZQoJCQlyZXR1cm4gMDsKCglzcGFjZSA9IDA7Cglmb3IgKG5yZWZzID0gMCwgcmVmID0gbW9k LT5yZWZzOyByZWYgOyArK25yZWZzLCByZWYgPSByZWYtPm5leHRfcmVmKSB7CgkJY29uc3QgY2hh ciAqcmVmX25hbWUgPSByZWYtPnJlZi0+bmFtZTsKCgkJbGVuID0gc3RybGVuKHJlZl9uYW1lKSsx OwoJCWlmIChsZW4gPiBidWZzaXplKQoJCQlnb3RvIGNhbGNfc3BhY2VfbmVlZGVkOwoJCWlmIChj b3B5X3RvX3VzZXIoYnVmLCByZWZfbmFtZSwgbGVuKSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJYnVm ICs9IGxlbjsKCQlidWZzaXplIC09IGxlbjsKCQlzcGFjZSArPSBsZW47Cgl9CgoJaWYgKHB1dF91 c2VyKG5yZWZzLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoJZWxzZQoJCXJldHVybiAwOwoKY2Fs Y19zcGFjZV9uZWVkZWQ6CglzcGFjZSArPSBsZW47Cgl3aGlsZSAoKHJlZiA9IHJlZi0+bmV4dF9y ZWYpICE9IE5VTEwpCgkJc3BhY2UgKz0gc3RybGVuKHJlZi0+cmVmLT5uYW1lKSsxOwoKCWlmIChw dXRfdXNlcihzcGFjZSwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gLUVO T1NQQzsKfQoKc3RhdGljIGludApxbV9zeW1ib2xzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAq YnVmLCBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpyZXQpCnsKCXNpemVfdCBpLCBzcGFjZSwgbGVu OwoJc3RydWN0IG1vZHVsZV9zeW1ib2wgKnM7CgljaGFyICpzdHJpbmdzOwoJdW5zaWduZWQgbG9u ZyAqdmFsczsKCglpZiAoIU1PRF9DQU5fUVVFUlkobW9kKSkKCQlpZiAocHV0X3VzZXIoMCwgcmV0 KSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJZWxzZQoJCQlyZXR1cm4gMDsKCglzcGFjZSA9IG1vZC0+ bnN5bXMgKiAyKnNpemVvZih2b2lkICopOwoKCWkgPSBsZW4gPSAwOwoJcyA9IG1vZC0+c3ltczsK CglpZiAoc3BhY2UgPiBidWZzaXplKQoJCWdvdG8gY2FsY19zcGFjZV9uZWVkZWQ7CgoJaWYgKCFh Y2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIHNwYWNlKSkKCQlyZXR1cm4gLUVGQVVMVDsKCgli dWZzaXplIC09IHNwYWNlOwoJdmFscyA9ICh1bnNpZ25lZCBsb25nICopYnVmOwoJc3RyaW5ncyA9 IGJ1ZitzcGFjZTsKCglmb3IgKDsgaSA8IG1vZC0+bnN5bXMgOyArK2ksICsrcywgdmFscyArPSAy KSB7CgkJbGVuID0gc3RybGVuKHMtPm5hbWUpKzE7CgkJaWYgKGxlbiA+IGJ1ZnNpemUpCgkJCWdv dG8gY2FsY19zcGFjZV9uZWVkZWQ7CgoJCWlmIChjb3B5X3RvX3VzZXIoc3RyaW5ncywgcy0+bmFt ZSwgbGVuKQoJCSAgICB8fCBfX3B1dF91c2VyKHMtPnZhbHVlLCB2YWxzKzApCgkJICAgIHx8IF9f cHV0X3VzZXIoc3BhY2UsIHZhbHMrMSkpCgkJCXJldHVybiAtRUZBVUxUOwoKCQlzdHJpbmdzICs9 IGxlbjsKCQlidWZzaXplIC09IGxlbjsKCQlzcGFjZSArPSBsZW47Cgl9CglpZiAocHV0X3VzZXIo aSwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gMDsKCmNhbGNfc3BhY2Vf bmVlZGVkOgoJZm9yICg7IGkgPCBtb2QtPm5zeW1zOyArK2ksICsrcykKCQlzcGFjZSArPSBzdHJs ZW4ocy0+bmFtZSkrMTsKCglpZiAocHV0X3VzZXIoc3BhY2UsIHJldCkpCgkJcmV0dXJuIC1FRkFV TFQ7CgllbHNlCgkJcmV0dXJuIC1FTk9TUEM7Cn0KCnN0YXRpYyBpbnQKcW1faW5mbyhzdHJ1Y3Qg bW9kdWxlICptb2QsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqcmV0KQp7Cglp bnQgZXJyb3IgPSAwOwoKCWlmIChtb2QgPT0gJmtlcm5lbF9tb2R1bGUpCgkJcmV0dXJuIC1FSU5W QUw7CgoJaWYgKHNpemVvZihzdHJ1Y3QgbW9kdWxlX2luZm8pIDw9IGJ1ZnNpemUpIHsKCQlzdHJ1 Y3QgbW9kdWxlX2luZm8gaW5mbzsKCQlpbmZvLmFkZHIgPSAodW5zaWduZWQgbG9uZyltb2Q7CgkJ aW5mby5zaXplID0gbW9kLT5zaXplOwoJCWluZm8uZmxhZ3MgPSBtb2QtPmZsYWdzOwoJCQoJCS8q IHVzZWNvdW50IGlzIG9uZSB0b28gaGlnaCBoZXJlIC0gcmVwb3J0IGFwcHJvcHJpYXRlbHkgdG8K CQkgICBjb21wZW5zYXRlIGZvciBsb2NraW5nICovCgkJaW5mby51c2Vjb3VudCA9IChtb2RfbWVt YmVyX3ByZXNlbnQobW9kLCBjYW5fdW5sb2FkKQoJCQkJICYmIG1vZC0+Y2FuX3VubG9hZCA/IC0x IDogYXRvbWljX3JlYWQoJm1vZC0+dWMudXNlY291bnQpLTEpOwoKCQlpZiAoY29weV90b191c2Vy KGJ1ZiwgJmluZm8sIHNpemVvZihzdHJ1Y3QgbW9kdWxlX2luZm8pKSkKCQkJcmV0dXJuIC1FRkFV TFQ7Cgl9IGVsc2UKCQllcnJvciA9IC1FTk9TUEM7CgoJaWYgKHB1dF91c2VyKHNpemVvZihzdHJ1 Y3QgbW9kdWxlX2luZm8pLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoKCXJldHVybiBlcnJvcjsK fQoKYXNtbGlua2FnZSBsb25nCnN5c19xdWVyeV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZV91c2Vy LCBpbnQgd2hpY2gsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsCgkJIHNpemVfdCAqcmV0KQp7 CglzdHJ1Y3QgbW9kdWxlICptb2Q7CglpbnQgZXJyOwoKCWxvY2tfa2VybmVsKCk7CglpZiAobmFt ZV91c2VyID09IE5VTEwpCgkJbW9kID0gJmtlcm5lbF9tb2R1bGU7CgllbHNlIHsKCQlsb25nIG5h bWVsZW47CgkJY2hhciAqbmFtZTsKCgkJaWYgKChuYW1lbGVuID0gZ2V0X21vZF9uYW1lKG5hbWVf dXNlciwgJm5hbWUpKSA8IDApIHsKCQkJZXJyID0gbmFtZWxlbjsKCQkJZ290byBvdXQ7CgkJfQoJ CWVyciA9IC1FTk9FTlQ7CgkJaWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0gTlVMTCkg ewoJCQlwdXRfbW9kX25hbWUobmFtZSk7CgkJCWdvdG8gb3V0OwoJCX0KCQlwdXRfbW9kX25hbWUo bmFtZSk7Cgl9CgoJLyogX19NT0RfIHRvdWNoZXMgdGhlIGZsYWdzLiBXZSBtdXN0IGF2b2lkIHRo YXQgKi8KCQoJYXRvbWljX2luYygmbW9kLT51Yy51c2Vjb3VudCk7CgkJCglzd2l0Y2ggKHdoaWNo KQoJewoJY2FzZSAwOgoJCWVyciA9IDA7CgkJYnJlYWs7CgljYXNlIFFNX01PRFVMRVM6CgkJZXJy ID0gcW1fbW9kdWxlcyhidWYsIGJ1ZnNpemUsIHJldCk7CgkJYnJlYWs7CgljYXNlIFFNX0RFUFM6 CgkJZXJyID0gcW1fZGVwcyhtb2QsIGJ1ZiwgYnVmc2l6ZSwgcmV0KTsKCQlicmVhazsKCWNhc2Ug UU1fUkVGUzoKCQllcnIgPSBxbV9yZWZzKG1vZCwgYnVmLCBidWZzaXplLCByZXQpOwoJCWJyZWFr OwoJY2FzZSBRTV9TWU1CT0xTOgoJCWVyciA9IHFtX3N5bWJvbHMobW9kLCBidWYsIGJ1ZnNpemUs IHJldCk7CgkJYnJlYWs7CgljYXNlIFFNX0lORk86CgkJZXJyID0gcW1faW5mbyhtb2QsIGJ1Ziwg YnVmc2l6ZSwgcmV0KTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJZXJyID0gLUVJTlZBTDsKCQlicmVh azsKCX0KCWF0b21pY19kZWMoJm1vZC0+dWMudXNlY291bnQpOwoJCm91dDoKCXVubG9ja19rZXJu ZWwoKTsKCXJldHVybiBlcnI7Cn0KCi8qCiAqIENvcHkgdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUg dG8gdXNlciBzcGFjZS4gIElmIHRoZSBhcmd1bWVudCBpcwogKiBOVUxMLCBqdXN0IHJldHVybiB0 aGUgc2l6ZSBvZiB0aGUgdGFibGUuCiAqCiAqIFRoaXMgY2FsbCBpcyBvYnNvbGV0ZS4gIE5ldyBw cm9ncmFtcyBzaG91bGQgdXNlIHF1ZXJ5X21vZHVsZStRTV9TWU1CT0xTCiAqIHdoaWNoIGRvZXMg bm90IGFyYml0cmFyaWx5IGxpbWl0IHRoZSBsZW5ndGggb2Ygc3ltYm9scy4KICovCgphc21saW5r YWdlIGxvbmcKc3lzX2dldF9rZXJuZWxfc3ltcyhzdHJ1Y3Qga2VybmVsX3N5bSAqdGFibGUpCnsK CXN0cnVjdCBtb2R1bGUgKm1vZDsKCWludCBpOwoJc3RydWN0IGtlcm5lbF9zeW0ga3N5bTsKCgls b2NrX2tlcm5lbCgpOwoJZm9yIChtb2QgPSBtb2R1bGVfbGlzdCwgaSA9IDA7IG1vZDsgbW9kID0g bW9kLT5uZXh0KSB7CgkJLyogaW5jbHVkZSB0aGUgY291bnQgZm9yIHRoZSBtb2R1bGUgbmFtZSEg Ki8KCQlpICs9IG1vZC0+bnN5bXMgKyAxOwoJfQoKCWlmICh0YWJsZSA9PSBOVUxMKQoJCWdvdG8g b3V0OwoKCS8qIFNvIHRoYXQgd2UgZG9uJ3QgZ2l2ZSB0aGUgdXNlciBvdXIgc3RhY2sgY29udGVu dCAqLwoJbWVtc2V0ICgma3N5bSwgMCwgc2l6ZW9mIChrc3ltKSk7CgoJZm9yIChtb2QgPSBtb2R1 bGVfbGlzdCwgaSA9IDA7IG1vZDsgbW9kID0gbW9kLT5uZXh0KSB7CgkJc3RydWN0IG1vZHVsZV9z eW1ib2wgKm1zeW07CgkJdW5zaWduZWQgaW50IGo7CgoJCWlmICghTU9EX0NBTl9RVUVSWShtb2Qp KQoJCQljb250aW51ZTsKCgkJLyogbWFnaWM6IHdyaXRlIG1vZHVsZSBpbmZvIGFzIGEgcHNldWRv IHN5bWJvbCAqLwoJCWtzeW0udmFsdWUgPSAodW5zaWduZWQgbG9uZyltb2Q7CgkJa3N5bS5uYW1l WzBdID0gJyMnOwoJCXN0cm5jcHkoa3N5bS5uYW1lKzEsIG1vZC0+bmFtZSwgc2l6ZW9mKGtzeW0u bmFtZSktMSk7CgkJa3N5bS5uYW1lW3NpemVvZihrc3ltLm5hbWUpLTFdID0gJ1wwJzsKCgkJaWYg KGNvcHlfdG9fdXNlcih0YWJsZSwgJmtzeW0sIHNpemVvZihrc3ltKSkgIT0gMCkKCQkJZ290byBv dXQ7CgkJKytpLCArK3RhYmxlOwoKCQlpZiAobW9kLT5uc3ltcyA9PSAwKQoJCQljb250aW51ZTsK CgkJZm9yIChqID0gMCwgbXN5bSA9IG1vZC0+c3ltczsgaiA8IG1vZC0+bnN5bXM7ICsraiwgKytt c3ltKSB7CgkJCWtzeW0udmFsdWUgPSBtc3ltLT52YWx1ZTsKCQkJc3RybmNweShrc3ltLm5hbWUs IG1zeW0tPm5hbWUsIHNpemVvZihrc3ltLm5hbWUpKTsKCQkJa3N5bS5uYW1lW3NpemVvZihrc3lt Lm5hbWUpLTFdID0gJ1wwJzsKCgkJCWlmIChjb3B5X3RvX3VzZXIodGFibGUsICZrc3ltLCBzaXpl b2Yoa3N5bSkpICE9IDApCgkJCQlnb3RvIG91dDsKCQkJKytpLCArK3RhYmxlOwoJCX0KCX0Kb3V0 OgoJdW5sb2NrX2tlcm5lbCgpOwoJcmV0dXJuIGk7Cn0KCi8qCiAqIExvb2sgZm9yIGEgbW9kdWxl IGJ5IG5hbWUsIGlnbm9yaW5nIG1vZHVsZXMgbWFya2VkIGZvciBkZWxldGlvbi4KICovCgpzdHJ1 Y3QgbW9kdWxlICoKZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKewoJc3RydWN0IG1vZHVs ZSAqbW9kOwoKCWZvciAobW9kID0gbW9kdWxlX2xpc3Q7IG1vZCA7IG1vZCA9IG1vZC0+bmV4dCkg ewoJCWlmIChtb2QtPmZsYWdzICYgTU9EX0RFTEVURUQpCgkJCWNvbnRpbnVlOwoJCWlmICghc3Ry Y21wKG1vZC0+bmFtZSwgbmFtZSkpCgkJCWJyZWFrOwoJfQoKCXJldHVybiBtb2Q7Cn0KCi8qCiAq IEZyZWUgdGhlIGdpdmVuIG1vZHVsZS4KICovCgp2b2lkCmZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1 bGUgKm1vZCwgaW50IHRhZ19mcmVlZCkKewoJc3RydWN0IG1vZHVsZV9yZWYgKmRlcDsKCXVuc2ln bmVkIGk7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoKCS8qIExldCB0aGUgbW9kdWxlIGNsZWFuIHVw LiAgKi8KCglpZiAobW9kLT5mbGFncyAmIE1PRF9SVU5OSU5HKQoJewoJCWlmKG1vZC0+Y2xlYW51 cCkKCQkJbW9kLT5jbGVhbnVwKCk7CgkJbW9kLT5mbGFncyAmPSB+TU9EX1JVTk5JTkc7Cgl9CgoJ LyogUmVtb3ZlIHRoZSBtb2R1bGUgZnJvbSB0aGUgZGVwZW5kZW5jeSBsaXN0cy4gICovCgoJZm9y IChpID0gMCwgZGVwID0gbW9kLT5kZXBzOyBpIDwgbW9kLT5uZGVwczsgKytpLCArK2RlcCkgewoJ CXN0cnVjdCBtb2R1bGVfcmVmICoqcHA7CgkJZm9yIChwcCA9ICZkZXAtPmRlcC0+cmVmczsgKnBw ICE9IGRlcDsgcHAgPSAmKCpwcCktPm5leHRfcmVmKQoJCQljb250aW51ZTsKCQkqcHAgPSBkZXAt Pm5leHRfcmVmOwoJCWlmICh0YWdfZnJlZWQgJiYgZGVwLT5kZXAtPnJlZnMgPT0gTlVMTCkKCQkJ ZGVwLT5kZXAtPmZsYWdzIHw9IE1PRF9KVVNUX0ZSRUVEOwoJfQoKCS8qIEFuZCBmcm9tIHRoZSBt YWluIG1vZHVsZSBsaXN0LiAgKi8KCglzcGluX2xvY2tfaXJxc2F2ZSgmbW9kbGlzdF9sb2NrLCBm bGFncyk7CglpZiAobW9kID09IG1vZHVsZV9saXN0KSB7CgkJbW9kdWxlX2xpc3QgPSBtb2QtPm5l eHQ7Cgl9IGVsc2UgewoJCXN0cnVjdCBtb2R1bGUgKnA7CgkJZm9yIChwID0gbW9kdWxlX2xpc3Q7 IHAtPm5leHQgIT0gbW9kOyBwID0gcC0+bmV4dCkKCQkJY29udGludWU7CgkJcC0+bmV4dCA9IG1v ZC0+bmV4dDsKCX0KCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1vZGxpc3RfbG9jaywgZmxhZ3Mp OwoKCS8qIEFuZCBmcmVlIHRoZSBtZW1vcnkuICAqLwoKCW1vZHVsZV91bm1hcChtb2QpOwp9Cgov KgogKiBDYWxsZWQgYnkgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIHRvIHJldHVybiBhIGN1cnJlbnQg bGlzdCBvZiBtb2R1bGVzLgogKi8KCmludCBnZXRfbW9kdWxlX2xpc3QoY2hhciAqcCkKewoJc2l6 ZV90IGxlZnQgPSBQQUdFX1NJWkU7CglzdHJ1Y3QgbW9kdWxlICptb2Q7CgljaGFyIHRtcHN0cls2 NF07CglzdHJ1Y3QgbW9kdWxlX3JlZiAqcmVmOwoKCWZvciAobW9kID0gbW9kdWxlX2xpc3Q7IG1v ZCAhPSAma2VybmVsX21vZHVsZTsgbW9kID0gbW9kLT5uZXh0KSB7CgkJbG9uZyBsZW47CgkJY29u c3QgY2hhciAqcTsKCiNkZWZpbmUgc2FmZV9jb3B5X3N0cihzdHIsIGxlbikJCQkJCQlcCgkJZG8g ewkJCQkJCQlcCgkJCWlmIChsZWZ0IDwgbGVuKQkJCQkJXAoJCQkJZ290byBmaW5pOwkJCQlcCgkJ CW1lbWNweShwLCBzdHIsIGxlbik7IHAgKz0gbGVuLCBsZWZ0IC09IGxlbjsJXAoJCX0gd2hpbGUg KDApCiNkZWZpbmUgc2FmZV9jb3B5X2NzdHIoc3RyKQlzYWZlX2NvcHlfc3RyKHN0ciwgc2l6ZW9m KHN0ciktMSkKCgkJbGVuID0gc3RybGVuKG1vZC0+bmFtZSk7CgkJc2FmZV9jb3B5X3N0cihtb2Qt Pm5hbWUsIGxlbik7CgoJCWlmICgobGVuID0gMjAgLSBsZW4pID4gMCkgewoJCQlpZiAobGVmdCA8 IGxlbikKCQkJCWdvdG8gZmluaTsKCQkJbWVtc2V0KHAsICcgJywgbGVuKTsKCQkJcCArPSBsZW47 CgkJCWxlZnQgLT0gbGVuOwoJCX0KCgkJbGVuID0gc3ByaW50Zih0bXBzdHIsICIlOGx1IiwgbW9k LT5zaXplKTsKCQlzYWZlX2NvcHlfc3RyKHRtcHN0ciwgbGVuKTsKCgkJaWYgKG1vZC0+ZmxhZ3Mg JiBNT0RfUlVOTklORykgewoJCQlsZW4gPSBzcHJpbnRmKHRtcHN0ciwgIiU0bGQiLAoJCQkJICAg ICAgKG1vZF9tZW1iZXJfcHJlc2VudChtb2QsIGNhbl91bmxvYWQpCgkJCQkgICAgICAgJiYgbW9k LT5jYW5fdW5sb2FkCgkJCQkgICAgICAgPyAtMUwgOiAobG9uZylhdG9taWNfcmVhZCgmbW9kLT51 Yy51c2Vjb3VudCkpKTsKCQkJc2FmZV9jb3B5X3N0cih0bXBzdHIsIGxlbik7CgkJfQoKCQlpZiAo bW9kLT5mbGFncyAmIE1PRF9ERUxFVEVEKQoJCQlzYWZlX2NvcHlfY3N0cigiIChkZWxldGVkKSIp OwoJCWVsc2UgaWYgKG1vZC0+ZmxhZ3MgJiBNT0RfUlVOTklORykgewoJCQlpZiAobW9kLT5mbGFn cyAmIE1PRF9BVVRPQ0xFQU4pCgkJCQlzYWZlX2NvcHlfY3N0cigiIChhdXRvY2xlYW4pIik7CgkJ CWlmICghKG1vZC0+ZmxhZ3MgJiBNT0RfVVNFRF9PTkNFKSkKCQkJCXNhZmVfY29weV9jc3RyKCIg KHVudXNlZCkiKTsKCQl9CgkJZWxzZSBpZiAobW9kLT5mbGFncyAmIE1PRF9JTklUSUFMSVpJTkcp CgkJCXNhZmVfY29weV9jc3RyKCIgKGluaXRpYWxpemluZykiKTsKCQllbHNlCgkJCXNhZmVfY29w eV9jc3RyKCIgKHVuaW5pdGlhbGl6ZWQpIik7CgoJCWlmICgocmVmID0gbW9kLT5yZWZzKSAhPSBO VUxMKSB7CgkJCXNhZmVfY29weV9jc3RyKCIgWyIpOwoJCQl3aGlsZSAoMSkgewoJCQkJcSA9IHJl Zi0+cmVmLT5uYW1lOwoJCQkJbGVuID0gc3RybGVuKHEpOwoJCQkJc2FmZV9jb3B5X3N0cihxLCBs ZW4pOwoKCQkJCWlmICgocmVmID0gcmVmLT5uZXh0X3JlZikgIT0gTlVMTCkKCQkJCQlzYWZlX2Nv cHlfY3N0cigiICIpOwoJCQkJZWxzZQoJCQkJCWJyZWFrOwoJCQl9CgkJCXNhZmVfY29weV9jc3Ry KCJdIik7CgkJfQoJCXNhZmVfY29weV9jc3RyKCJcbiIpOwoKI3VuZGVmIHNhZmVfY29weV9zdHIK I3VuZGVmIHNhZmVfY29weV9jc3RyCgl9CgpmaW5pOgoJcmV0dXJuIFBBR0VfU0laRSAtIGxlZnQ7 Cn0KCi8qCiAqIENhbGxlZCBieSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gdG8gcmV0dXJuIGEgY3Vy cmVudCBsaXN0IG9mIGtzeW1zLgogKi8KCnN0cnVjdCBtb2Rfc3ltIHsKCXN0cnVjdCBtb2R1bGUg Km1vZDsKCWludCBpbmRleDsKfTsKCi8qIGl0ZXJhdG9yICovCgpzdGF0aWMgdm9pZCAqc19zdGFy dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQp7CglzdHJ1Y3QgbW9kX3N5bSAqcCA9 IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CglzdHJ1Y3QgbW9kdWxlICp2OwoJbG9m Zl90IG4gPSAqcG9zOwoKCWlmICghcCkKCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKCWxvY2tf a2VybmVsKCk7Cglmb3IgKHYgPSBtb2R1bGVfbGlzdCwgbiA9ICpwb3M7IHY7IG4gLT0gdi0+bnN5 bXMsIHYgPSB2LT5uZXh0KSB7CgkJaWYgKG4gPCB2LT5uc3ltcykgewoJCQlwLT5tb2QgPSB2OwoJ CQlwLT5pbmRleCA9IG47CgkJCXJldHVybiBwOwoJCX0KCX0KCXVubG9ja19rZXJuZWwoKTsKCWtm cmVlKHApOwoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyB2b2lkICpzX25leHQoc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKewoJc3RydWN0IG1vZF9zeW0gKnYgPSBwOwoJ KCpwb3MpKys7CglpZiAoKyt2LT5pbmRleCA+PSB2LT5tb2QtPm5zeW1zKSB7CgkJZG8gewoJCQl2 LT5tb2QgPSB2LT5tb2QtPm5leHQ7CgkJCWlmICghdi0+bW9kKSB7CgkJCQl1bmxvY2tfa2VybmVs KCk7CgkJCQlrZnJlZShwKTsKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJfSB3aGlsZSAoIXYtPm1v ZC0+bnN5bXMpOwoJCXYtPmluZGV4ID0gMDsKCX0KCXJldHVybiBwOwp9CgpzdGF0aWMgdm9pZCBz X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQp7CglpZiAocCAmJiAhSVNfRVJSKHAp KSB7CgkJdW5sb2NrX2tlcm5lbCgpOwoJCWtmcmVlKHApOwoJfQp9CgpzdGF0aWMgaW50IHNfc2hv dyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCnsKCXN0cnVjdCBtb2Rfc3ltICp2ID0gcDsK CXN0cnVjdCBtb2R1bGVfc3ltYm9sICpzeW07CgoJaWYgKCFNT0RfQ0FOX1FVRVJZKHYtPm1vZCkp CgkJcmV0dXJuIDA7CglzeW0gPSAmdi0+bW9kLT5zeW1zW3YtPmluZGV4XTsKCWlmICgqdi0+bW9k LT5uYW1lKQoJCXNlcV9wcmludGYobSwgIiUwKmx4ICVzXHRbJXNdXG4iLCAoaW50KSgyKnNpemVv Zih2b2lkKikpLAoJCQkgICAgICAgc3ltLT52YWx1ZSwgc3ltLT5uYW1lLCB2LT5tb2QtPm5hbWUp OwoJZWxzZQoJCXNlcV9wcmludGYobSwgIiUwKmx4ICVzXG4iLCAoaW50KSgyKnNpemVvZih2b2lk KikpLAoJCQkgICAgICAgc3ltLT52YWx1ZSwgc3ltLT5uYW1lKTsKCXJldHVybiAwOwp9CgpzdHJ1 Y3Qgc2VxX29wZXJhdGlvbnMga3N5bXNfb3AgPSB7CglzdGFydDoJc19zdGFydCwKCW5leHQ6CXNf bmV4dCwKCXN0b3A6CXNfc3RvcCwKCXNob3c6CXNfc2hvdwp9OwoKI2Vsc2UJCS8qIENPTkZJR19N T0RVTEVTICovCgovKiBEdW1teSBzeXNjYWxscyBmb3IgcGVvcGxlIHdobyBkb24ndCB3YW50IG1v ZHVsZXMgKi8KCmFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwpzeXNfY3JlYXRlX21vZHVsZShjb25z dCBjaGFyICpuYW1lX3VzZXIsIHNpemVfdCBzaXplKQp7CglyZXR1cm4gLUVOT1NZUzsKfQoKYXNt bGlua2FnZSBsb25nCnN5c19pbml0X21vZHVsZShjb25zdCBjaGFyICpuYW1lX3VzZXIsIHN0cnVj dCBtb2R1bGUgKm1vZF91c2VyKQp7CglyZXR1cm4gLUVOT1NZUzsKfQoKYXNtbGlua2FnZSBsb25n CnN5c19kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWVfdXNlcikKewoJcmV0dXJuIC1FTk9T WVM7Cn0KCmFzbWxpbmthZ2UgbG9uZwpzeXNfcXVlcnlfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWVf dXNlciwgaW50IHdoaWNoLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplLAoJCSBzaXplX3QgKnJl dCkKewoJLyogTGV0IHRoZSBwcm9ncmFtIGtub3cgYWJvdXQgdGhlIG5ldyBpbnRlcmZhY2UuICBO b3QgdGhhdAoJICAgaXQnbGwgZG8gdGhlbSBtdWNoIGdvb2QuICAqLwoJaWYgKHdoaWNoID09IDAp CgkJcmV0dXJuIDA7CgoJcmV0dXJuIC1FTk9TWVM7Cn0KCmFzbWxpbmthZ2UgbG9uZwpzeXNfZ2V0 X2tlcm5lbF9zeW1zKHN0cnVjdCBrZXJuZWxfc3ltICp0YWJsZSkKewoJcmV0dXJuIC1FTk9TWVM7 Cn0KCmludCB0cnlfaW5jX21vZF9jb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCnsKCXJldHVybiAx Owp9CgojZW5kaWYJLyogQ09ORklHX01PRFVMRVMgKi8K