Date: Sat, 9 Sep 2017 15:12:17 +0900 From: Tomoaki AOKI <junchoon@dec.sakura.ne.jp> To: svn-src-head@freebsd.org Cc: Warner Losh <imp@bsdimp.com> Subject: Re: svn commit: r322941 - head/sys/boot/efi/boot1 Message-ID: <20170909151217.9082b61a9ef00b86bf90ff8e@dec.sakura.ne.jp> In-Reply-To: <CANCZdfoK=2%2BFa=jEjGOUeipxdFZTnQ8hxxThQDsQAY2KJWEOtA@mail.gmail.com> References: <20170902164311.eb7e5d2fa0e40f3b4e5e6142@dec.sakura.ne.jp> <CANCZdfoDk6fyNL=jJAxn%2BL=WZ84HwkpJDtM1PDhPPJ6HWmeYPw@mail.gmail.com> <CANCZdfoK=2%2BFa=jEjGOUeipxdFZTnQ8hxxThQDsQAY2KJWEOtA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --Multipart=_Sat__9_Sep_2017_15_12_17_+0900_dSgJ8XyasnCX=vd0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sat, 2 Sep 2017 11:26:50 -0600 Warner Losh <imp@bsdimp.com> wrote: > On Sat, Sep 2, 2017 at 11:25 AM, Warner Losh <imp@bsdimp.com> wrote: > > > > > > > On Sat, Sep 2, 2017 at 1:43 AM, Tomoaki AOKI <junchoon@dec.sakura.ne.jp> > > wrote: > > > >> Hi. > >> > >> This broke boot drive selection functionality by smh@ at r295320 on > >> Feb.5, 2016. [1] > >> Now, even if I forcibly select 2nd HDD via UEFI firmware, boot1.efi > >> (as bootx64.efi) selects /boot/loader.efi on 1st HDD. Each boot > >> partition are ZFS pools. Confirmed previous rev was OK. > >> > >> Attached is the boot log (with EFI_DEBUG). Pool zsysS02 should be > >> selected there instead of zsysS01. As I have no serial console, there > >> can be some typos. (Took video and hand-typed.) > >> > >> The boot order should be as below (what smh@ implemented). > >> > >> 1. ZFS pool on which drive boot1.efi is read from. > >> 2. UFS partition on which drive boot1.efi is read from. > >> 3. If both 1 and 2 are missed, try from UEFI 1st drive and later. > >> > >> P.S. Another possibility (not tested yet): > >> Not forcibly prefer 1st drive, but reversed selection. > >> (If boot1.efi is on 1st drive, loader.efi on 2nd drive is read.) > >> > >> [1] > >> https://lists.freebsd.org/pipermail/svn-src-head/2016-Februa > >> ry/082215.html > > > > > > Looks like the matching function that I replaced this stuff with wasn't > > quite the same. Will fix. I hadn't thought I'd broken it, honestly, since > > the setup I have still worked. The intent was to keep things as they were, > > which clearly didn't happen in at least your case. I'll take a look at the > > logs to see if I can spot the differences between the two setups. The > > intent was to keep functionality, for now, the same. > > > > In the long term, though, this guessing and matching is going to end up > > first as deprecated and then as removed. To be replaced by a boot1.efi that > > follows the EFI Boot Manager protocol where exactly what to load is > > contained in EFI env variables. That's what all my changes to boot1 have > > been working towards. > > > > Warner > > > > P.S. This is the doc I put together for discussion. I'm keeping it updated > as each stage is implemented. > > https://docs.google.com/document/d/1aK9IqF-60JPEbUeSAUAkYjF2W_8EnmczFs6RqCT90Jg/edit > > Lemme know if you have any comments. > > Warner > Read that, and have some comments. (Maybe not enough understood UEFI 2.6 boot manager spec, though) If I understood current code correctly, third on "Current Algorithm" looks incorrect. boot1.efi looks for ZFS, then UFS for all devices, per-device basis. And yes, it cannot specify which partition to boot from. A fix was proposed by Naomichi Nonaka as bug 207940.[1] (Not using UEFI boot manager protocol, though.) This patch no longer applicable to head with recent changes, but applicable for stable/11 with slight fix (attached, working for me). Unfortunately, Naomichi is no longer working on it, as it haven't introduced to head for a long time, and now he knows GRUB2 can chainload loader.efi on ZFS pool. [1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=207940 For "Proposed Algorithm", some problematic UEFI firmware could miss non-default location. As workaround, current \EFI\BOOT\BOOTx64.efi (within boot1.efifat) should be kept (at least, as an installer option) to fallback. For 2) b), some people could want largest partition number to take precedence over smaller, especially when they create a new partition to test new environment keeping old environment untouched. For 2) c), the administrator should better have opportunity to re-select another device to boot from, especially for -head users. Sometimes head cannot boot after installworld and need convenient way to boot from other device temporarily. (Improperly built loader.efi, broken *.4th, ...) If the machine is at a datacenter, USB memstick wouldn't help, but flexible boot manager could do if there's any remote KVM switch or something alike. *Setting BootNext and restart would be fine, if the UEFI firmware is NOT a problematic one, and BootNext is cleared after successful boot (just like "boot once" for MBR+UFS). *Would be better if something like "BootEmergency" (non-existent for now, automatically selected only when "BootFailed") can be implemented. But maybe cannot, as it should need UEFI firmware support and I couldn't find such a feature in UEFI spec. > > > Author: imp > >> > Date: Sun Aug 27 03:10:16 2017 > >> > New Revision: 322941 > >> > URL: https://svnweb.freebsd.org/changeset/base/322941 > >> > > >> > Log: > >> > Eliminate redunant device path matching. > >> > > >> > Use efi_devpath_match instead of device_paths_match. They are > >> > functionally the same. Remove device_paths_match from boot1.c and call > >> > efi_devpath_match instead. > >> > > >> > Sponsored by: Netflix > >> > > >> > Modified: > >> > head/sys/boot/efi/boot1/boot1.c > >> > > >> > Modified: head/sys/boot/efi/boot1/boot1.c > >> > ============================================================ > >> ================== > >> > --- head/sys/boot/efi/boot1/boot1.c Sat Aug 26 23:13:18 2017 > >> (r322940) > >> > +++ head/sys/boot/efi/boot1/boot1.c Sun Aug 27 03:10:16 2017 > >> (r322941) > >> > @@ -76,53 +76,6 @@ Free(void *buf, const char *file __unused, int line > >> __ } > >> > > >> > /* > >> > - * nodes_match returns TRUE if the imgpath isn't NULL and the nodes > >> match, > >> > - * FALSE otherwise. > >> > - */ > >> > -static BOOLEAN > >> > -nodes_match(EFI_DEVICE_PATH *imgpath, EFI_DEVICE_PATH *devpath) > >> > -{ > >> > - size_t len; > >> > - > >> > - if (imgpath == NULL || imgpath->Type != devpath->Type || > >> > - imgpath->SubType != devpath->SubType) > >> > - return (FALSE); > >> > - > >> > - len = DevicePathNodeLength(imgpath); > >> > - if (len != DevicePathNodeLength(devpath)) > >> > - return (FALSE); > >> > - > >> > - return (memcmp(imgpath, devpath, (size_t)len) == 0); > >> > -} > >> > - > >> > -/* > >> > - * device_paths_match returns TRUE if the imgpath isn't NULL and all > >> nodes > >> > - * in imgpath and devpath match up to their respective occurrences of a > >> > - * media node, FALSE otherwise. > >> > - */ > >> > -static BOOLEAN > >> > -device_paths_match(EFI_DEVICE_PATH *imgpath, EFI_DEVICE_PATH *devpath) > >> > -{ > >> > - > >> > - if (imgpath == NULL) > >> > - return (FALSE); > >> > - > >> > - while (!IsDevicePathEnd(imgpath) && !IsDevicePathEnd(devpath)) > >> { > >> > - if (IsDevicePathType(imgpath, MEDIA_DEVICE_PATH) && > >> > - IsDevicePathType(devpath, MEDIA_DEVICE_PATH)) > >> > - return (TRUE); > >> > - > >> > - if (!nodes_match(imgpath, devpath)) > >> > - return (FALSE); > >> > - > >> > - imgpath = NextDevicePathNode(imgpath); > >> > - devpath = NextDevicePathNode(devpath); > >> > - } > >> > - > >> > - return (FALSE); > >> > -} > >> > - > >> > -/* > >> > * devpath_last returns the last non-path end node in devpath. > >> > */ > >> > static EFI_DEVICE_PATH * > >> > @@ -318,7 +271,7 @@ probe_handle(EFI_HANDLE h, EFI_DEVICE_PATH > >> *imgpath, B > >> > if (!blkio->Media->LogicalPartition) > >> > return (EFI_UNSUPPORTED); > >> > > >> > - *preferred = device_paths_match(imgpath, devpath); > >> > + *preferred = efi_devpath_match(imgpath, devpath); > >> > > >> > /* Run through each module, see if it can load this partition > >> */ > >> > for (i = 0; i < NUM_BOOT_MODULES; i++) { > >> > >> -- > >> Tomoaki AOKI <junchoon@dec.sakura.ne.jp> > >> > > > > -- Tomoaki AOKI <junchoon@dec.sakura.ne.jp> --Multipart=_Sat__9_Sep_2017_15_12_17_+0900_dSgJ8XyasnCX=vd0 Content-Type: application/octet-stream; name="boot1.c.NNonaka.diff.rev4_after_s11_r318625" Content-Disposition: attachment; filename="boot1.c.NNonaka.diff.rev4_after_s11_r318625" Content-Transfer-Encoding: base64 SW5kZXg6IHN5cy9ib290L2VmaS9ib290MS9ib290MS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9ib290 L2VmaS9ib290MS9ib290MS5jCShyZXZpc2lvbiAyOTU2ODMpCisrKyBzeXMvYm9vdC9lZmkvYm9v dDEvYm9vdDEuYwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8 ZWZpLmg+CiAjaW5jbHVkZSA8ZWZpY29uc2N0bC5oPgorI2luY2x1ZGUgPGVmaWxpYi5oPgogCiAj aW5jbHVkZSAiYm9vdF9tb2R1bGUuaCIKICNpbmNsdWRlICJwYXRocy5oIgpAQCAtNDcsMTEgKzQ4 LDE4IEBACiAvKiBUaGUgaW5pdGlhbCBudW1iZXIgb2YgaGFuZGxlcyB1c2VkIHRvIHF1ZXJ5IEVG SSBmb3IgcGFydGl0aW9ucy4gKi8KICNkZWZpbmUgTlVNX0hBTkRMRVNfSU5JVAkyNAogCit2b2lk IGVmaV9jb25zX3B1dGNoYXIoaW50KTsKK2ludCBlZmlfY29uc19nZXRjaGFyKHZvaWQpOworaW50 IGVmaV9jb25zX3BvbGwodm9pZCk7CitpbnQgZ2V0Y2hhcih2b2lkKTsKK2NoYXIgKmh1bWFuaXpl X251bWJlcl9rbWd0KFVJTlQ2NCk7CiBFRklfU1RBVFVTIGVmaV9tYWluKEVGSV9IQU5ETEUgWGlt YWdlLCBFRklfU1lTVEVNX1RBQkxFKiBYc3lzdGFiKTsKIAogRUZJX1NZU1RFTV9UQUJMRSAqc3lz dGFiOwogRUZJX0JPT1RfU0VSVklDRVMgKmJzOwogc3RhdGljIEVGSV9IQU5ETEUgKmltYWdlOwor c3RhdGljIFNJTVBMRV9URVhUX09VVFBVVF9JTlRFUkZBQ0UJKmNvbm91dDsKK3N0YXRpYyBTSU1Q TEVfSU5QVVRfSU5URVJGQUNFCQkqY29uaW47CiAKIHN0YXRpYyBFRklfR1VJRCBCbG9ja0lvUHJv dG9jb2xHVUlEID0gQkxPQ0tfSU9fUFJPVE9DT0w7CiBzdGF0aWMgRUZJX0dVSUQgRGV2aWNlUGF0 aEdVSUQgPSBERVZJQ0VfUEFUSF9QUk9UT0NPTDsKQEAgLTU5LDYgKzY3LDM1IEBACiBzdGF0aWMg RUZJX0dVSUQgTG9hZGVkSW1hZ2VHVUlEID0gTE9BREVEX0lNQUdFX1BST1RPQ09MOwogc3RhdGlj IEVGSV9HVUlEIENvbnNvbGVDb250cm9sR1VJRCA9IEVGSV9DT05TT0xFX0NPTlRST0xfUFJPVE9D T0xfR1VJRDsKIAorCisjZGVmaW5lIERFRkFVTFRfRkdDT0xPUiBFRklfTElHSFRHUkFZCisjZGVm aW5lIERFRkFVTFRfQkdDT0xPUiBFRklfQkxBQ0sKKworY2hhciAqaHVtYW5pemVfbnVtYmVyX2tt Z3QoVUlOVDY0IHNpemUpIHsKKwlzdGF0aWMgY2hhciBidWYyWzZdOworCVVJTlQ2NCBzaXplMDsK KworCWlmIChzaXplIDwgMTAyNCkKKwkJc3ByaW50ZihidWYyLCAiJWx1QiIsIHNpemUpOworCWVs c2UgaWYgKHNpemUwID0gKHNpemUqMTArNTEyKS8xMDI0LCBzaXplMCA8IDEwMCkKKwkJc3ByaW50 ZihidWYyLCAiJWx1LiVsdUsiLCBzaXplMCAvIDEwLCBzaXplMCAlIDEwKTsKKwllbHNlIGlmIChz aXplMCA9IChzaXplKzUxMikvMTAyNCwgc2l6ZTAgPCAxMDI0KQorCQlzcHJpbnRmKGJ1ZjIsICIl bHVLIiwgc2l6ZTApOworCWVsc2UgaWYgKHNpemUwID0gKHNpemUqMTAvMTAyNCs1MTIpLzEwMjQs IHNpemUwIDwgMTAwKQorCQlzcHJpbnRmKGJ1ZjIsICIlbHUuJWx1TSIsIHNpemUwIC8gMTAsIHNp emUwICUgMTApOworCWVsc2UgaWYgKHNpemUwID0gKHNpemUvMTAyNCs1MTIpLzEwMjQsIHNpemUw IDwgMTAyNCkKKwkJc3ByaW50ZihidWYyLCAiJWx1TSIsIHNpemUwKTsKKwllbHNlIGlmIChzaXpl MCA9IChzaXplKjEwLzEwMjQvMTAyNCs1MTIpLzEwMjQsIHNpemUwIDwgMTAwKQorCQlzcHJpbnRm KGJ1ZjIsICIlbHUuJWx1RyIsIHNpemUwIC8gMTAsIHNpemUwICUgMTApOworCWVsc2UgaWYgKHNp emUwID0gKHNpemUvMTAyNC8xMDI0KzUxMikvMTAyNCwgc2l6ZTAgPCAxMDI0KQorCQlzcHJpbnRm KGJ1ZjIsICIlbHVHIiwgc2l6ZTApOworCWVsc2UgaWYgKHNpemUwID0gKHNpemUqMTAvMTAyNC8x MDI0LzEwMjQrNTEyKS8xMDI0LCBzaXplMCA8IDEwMCkKKwkJc3ByaW50ZihidWYyLCAiJWx1LiVs dVQiLCBzaXplMCAvIDEwLCBzaXplMCAlIDEwKTsKKwllbHNlCisJCXNwcmludGYoYnVmMiwgIiVs dVQiLCAoc2l6ZS8xMDI0LzEwMjQvMTAyNCs1MTIpLzEwMjQpOworCXJldHVybihidWYyKTsKK30K KwogLyoKICAqIFByb3ZpZGUgTWFsbG9jIC8gRnJlZSBiYWNrZWQgYnkgRUZJcyBBbGxvY2F0ZVBv b2wgLyBGcmVlUG9vbCB3aGljaCBlbnN1cmVzCiAgKiBtZW1vcnkgaXMgY29ycmVjdGx5IGFsaWdu ZWQgYXZvaWRpbmcgRUZJX0lOVkFMSURfUEFSQU1FVEVSIHJldHVybnMgZnJvbQpAQCAtMTUxLDcg KzE4OCw2IEBACiBzdGF0aWMgaW50CiBkZXZwYXRoX25vZGVfc3RyKGNoYXIgKmJ1Ziwgc2l6ZV90 IHNpemUsIEVGSV9ERVZJQ0VfUEFUSCAqZGV2cGF0aCkKIHsKLQogCXN3aXRjaCAoZGV2cGF0aC0+ VHlwZSkgewogCWNhc2UgTUVTU0FHSU5HX0RFVklDRV9QQVRIOgogCQlzd2l0Y2ggKGRldnBhdGgt PlN1YlR5cGUpIHsKQEAgLTI1MSw4ICsyODcsOSBAQAogCQkJSEFSRERSSVZFX0RFVklDRV9QQVRI ICpoZDsKIAogCQkJaGQgPSAoSEFSRERSSVZFX0RFVklDRV9QQVRIICopKHZvaWQgKilkZXZwYXRo OwotCQkJcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc2l6ZSwgImhkKCV4KSIsCi0JCQkgICAgaGQtPlBh cnRpdGlvbk51bWJlcik7CisJCQlyZXR1cm4gc25wcmludGYoYnVmLCBzaXplLCAiaGQocCVkKSAo JXMpIiwKKwkJCSAgICBoZC0+UGFydGl0aW9uTnVtYmVyLAorCQkJICAgIGh1bWFuaXplX251bWJl cl9rbWd0KGhkLT5QYXJ0aXRpb25TaXplICogNTEyKSk7CiAJCX0KIAkJZGVmYXVsdDoKIAkJCXJl dHVybiBzbnByaW50ZihidWYsIHNpemUsICJtZWRpYSgweCUwMngpIiwKQEAgLTM1MCw2ICszODcs MTg2IEBACiAJcmV0dXJuIChFRklfTk9UX0ZPVU5EKTsKIH0KIAorLyogcXVpY2sgZGlydHkgd29y ay4gKi8KKyNkZWZpbmUJTlVNX0RFVl9MSVNUCTM1CisKK3R5cGVkZWYgc3RydWN0IHsKKwljb25z dCBib290X21vZHVsZV90CSptb2RwOworCWRldl9pbmZvX3QJCSpkZXZpbmZvcDsKK30gbW9kZGV2 X3Q7CisKK3N0YXRpYyBtb2RkZXZfdCBkZXZfbGlzdFtOVU1fREVWX0xJU1RdOworCitzdGF0aWMg aW50CitsaXN0X2RldmljZXModm9pZCkKK3sKKwlVSU5UTiBpLCBqOworCWRldl9pbmZvX3QgKmRl djsKKwljb25zdCBib290X21vZHVsZV90ICptb2Q7CisKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBp IDwgTlVNX0JPT1RfTU9EVUxFUzsgaSsrKSB7CisJCWlmIChib290X21vZHVsZXNbaV0gPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCQltb2QgPSBib290X21vZHVsZXNbaV07CisJCWZvciAoZGV2ID0g bW9kLT5kZXZpY2VzKCk7IGRldiAhPSBOVUxMOyBkZXYgPSBkZXYtPm5leHQpIHsKKwkJCWRldl9s aXN0W2pdLmRldmluZm9wID0gZGV2OworCQkJZGV2X2xpc3Rbal0ubW9kcCA9IG1vZDsKKwkJCWor KzsKKwkJCWlmIChqID49IE5VTV9ERVZfTElTVCkKKwkJCSAgICBicmVhazsKKwkJfQorCX0KKwor CXJldHVybiAoaik7Cit9CisKKyNkZWZpbmUJU0VMRUNUX1RJTUVPVVQJMTAKKworc3RhdGljIGNo YXIKK2lkeDJjaGFyKGludCBpKQoreworCXJldHVybiAoaTwxMCA/ICcwJytpIDogJ2EnK2ktMTAp OworfQorCitzdGF0aWMgaW50CitjaGFyMmlkeChjaGFyIGMpCit7CisJcmV0dXJuICgoYyA+PSAn MCcgJiYgYyA8PSAnOScpID8gYyAtICcwJyA6CisJICAgIChjID49ICdBJyAmJiBjIDw9ICdaJykg PyBjIC0gJ0EnICsgMTAgOgorCSAgICAoYyA+PSAnYScgJiYgYyA8PSAneicpID8gYyAtICdhJyAr IDEwIDoKKwkgICAgLTEgKTsKK30KKworc3RhdGljIHZvaWQKK21vdmVfdG9fdG9sKCkKK3sKKwlp bnQgeCx5OworCisJeCA9IGNvbm91dC0+TW9kZS0+Q3Vyc29yQ29sdW1uOworCXkgPSBjb25vdXQt Pk1vZGUtPkN1cnNvclJvdzsKKwljb25vdXQtPlNldEN1cnNvclBvc2l0aW9uKGNvbm91dCwgMCwg eSk7Cit9CisKK3N0YXRpYyBFRklfU1RBVFVTCitzZWxlY3RfYm9vdGRldihpbnQgbmRldnMsIGNv bnN0IGJvb3RfbW9kdWxlX3QgKiptb2RwLCBkZXZfaW5mb190ICoqZGV2aW5mb3AsCisgICAgdm9p ZCAqKmJ1ZnAsIHNpemVfdCAqYnVmc2l6ZSkKK3sKKwlpbnQgaTsKKwlpbnQgYywgbjsKKwlpbnQg dGltZV9sZWZ0OworCUVGSV9TVEFUVVMgc3RhdHVzOworCUVGSV9FVkVOVCB0aW1lcjsKKwlFRklf RVZFTlQgZXZlbnRzWzJdOworCVVJTlROIGlkeDsKKwlkZXZfaW5mb190ICpkZXY7CisJY29uc3Qg Ym9vdF9tb2R1bGVfdCAqbW9kOworCisJaWYgKChuZGV2cyA8PSAwKSB8fCAobmRldnMgPj0gTlVN X0RFVl9MSVNUKSkgeworCQlyZXR1cm4gKEVGSV9OT1RfRk9VTkQpOworCX0gZWxzZSBpZiAobmRl dnMgPT0gMSkgeworCQkvKiBPbmx5IG9uZSBjb25kaWRhdGUuICovCisJCSptb2RwID0gbW9kID0g ZGV2X2xpc3RbMF0ubW9kcDsKKwkJKmRldmluZm9wID0gZGV2ID0gZGV2X2xpc3RbMF0uZGV2aW5m b3A7CisJCXJldHVybiAobW9kLT5sb2FkKFBBVEhfTE9BREVSX0VGSSwgZGV2LAorCQkJIGJ1ZnAs IGJ1ZnNpemUpKTsKKwl9CisJLyogVHdvIG9yIG1vcmUgY2FuZGlkYXRlIGV4aXN0LiAqLworCXN0 YXR1cyA9IGJzLT5DcmVhdGVFdmVudChFVlRfVElNRVIsIDAsIDAsIE5VTEwsICZ0aW1lcik7CisJ aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgeworCQlwcmludGYoIkNhbid0IGFsbG9jYXRlIHRp bWVyIGV2ZW50LlxuIik7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisJcHJpbnRmKCIgIDA6IEF1 dG9TZWxlY3RlZCBQYXJ0aXRpb24gKERlZmF1bHQpOiAwXG4iKTsgCisJZm9yIChpID0gMDsgaSA8 IG5kZXZzOyBpKyspIHsKKwkJaWYgKGRldl9saXN0W2ldLmRldmluZm9wLT5wcmVmZXJyZWQgPT0g VFJVRSkKKwkJCWMgPSAnKic7CisJCWVsc2UKKwkJCWMgPSAnICc7CisJCXByaW50ZigiICVjJWM6 ICVzOiAlczogJWNcbiIsIGMsIGlkeDJjaGFyKGkrMSksCisJCSAgICBkZXZfbGlzdFtpXS5tb2Rw LT5uYW1lLAorCQkgICAgZGV2cGF0aF9zdHIoZGV2X2xpc3RbaV0uZGV2aW5mb3AtPmRldnBhdGgp LAorCQkJaWR4MmNoYXIoaSsxKSk7CisJfQorCS8qIE9uZSBhbHBoYS1udW0gc2VsZWN0aW9uIG9u bHkuIElzIHRoaXMgYmlnIGVub3VnaCA/PyAqLworCWJzLT5TZXRUaW1lcih0aW1lciwgVGltZXJQ ZXJpb2RpYywgMTAwMDAwMDApOyAKKwlldmVudHNbMF0gPSB0aW1lcjsKKwlldmVudHNbMV0gPSBj b25pbi0+V2FpdEZvcktleTsKKwl0aW1lX2xlZnQgPSBTRUxFQ1RfVElNRU9VVDsKKworCXdoaWxl ICgxKSB7CisJCWlmICh0aW1lX2xlZnQgPiAwKSB7CisJCQlwcmludGYoIlNlbGVjdCBmcm9tIDAg dG8gJWMuIFRpbWVvdXQgaW4gJTJkIHNlY29uZHMsIgorCQkJICAgICAgICIgW1NwYWNlXSB0byBw YXVzZSA6ICIsCisJCQkgICAgICAgaWR4MmNoYXIobmRldnMpLCB0aW1lX2xlZnQpOworCQl9CisJ CXN0YXR1cyA9IGJzLT5XYWl0Rm9yRXZlbnQoMiwgZXZlbnRzLCAmaWR4KTsKKwkJaWYgKHN0YXR1 cyAhPSBFRklfU1VDQ0VTUykgeworCQkJYnMtPkNsb3NlRXZlbnQodGltZXIpOworCQkJcmV0dXJu IChzdGF0dXMpOworCQl9CisJCWlmIChpZHggPT0gMCkgeworCQkJdGltZV9sZWZ0LS07CisJCQlp ZiAodGltZV9sZWZ0IDw9MCkgeworCQkJCXByaW50ZigiXG5UaW1lb3V0LiAiCisJCQkJICAgICAg ICJQYXJ0aXRpb24gaXMgQXV0b1NlbGVjdGVkLlxuIik7CisJCQkJbiA9IDA7CisJCQkJYnJlYWs7 CisJCQl9IGVsc2UgeworCQkJCW1vdmVfdG9fdG9sKCk7CisJCQl9CisJCX0KKwkJaWYgKGlkeCA9 PSAxKSB7CisJCQljID0gZ2V0Y2hhcigpOworCQkJaWYgKChjID09ICdcbicpIHx8IChjID09ICdc cicpKSB7CisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCQluID0gMDsKKwkJCQlicmVhazsKKwkJCX0g ZWxzZSBpZiAoKHRpbWVfbGVmdCA+IDApICYmIChjID09ICcgJykpIHsKKwkJCQlicy0+U2V0VGlt ZXIodGltZXIsIFRpbWVyQ2FuY2VsLCAwKTsgCisJCQkJdGltZV9sZWZ0ID0gLTE7CisJCQkJcHJp bnRmKCJcblRpbWVyIHN0b3BlZWQuXG4gUGxlYXNlIEtleSBpbjogIik7CisJCQl9CisJCQluID0g Y2hhcjJpZHgoYyk7CisJCQlpZiAoKG4gPj0gMCkgJiYgKG4gPD0gbmRldnMpKSB7CisJCQkJYnMt PlNldFRpbWVyKHRpbWVyLCBUaW1lckNhbmNlbCwgMCk7IAorCQkJCXRpbWVfbGVmdCA9IC0xOwor CQkJCXByaW50ZigiXG4gJWMgaXMgc2VsZWN0ZWQuXG4iLCBjKTsKKwkJCQlpZiAobiA9PSAwKSB7 IC8qIEF1dG9TZWxlY3QgKi8KKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsKKwkJCQkJbW9kID0g ZGV2X2xpc3Rbbi0xXS5tb2RwOworCQkJCQlkZXYgPSBkZXZfbGlzdFtuLTFdLmRldmluZm9wOwor CQkJCQlzdGF0dXMgPSBtb2QtPmxvYWQoUEFUSF9MT0FERVJfRUZJLAorCQkJCQkJCSAgIGRldiwg YnVmcCwgYnVmc2l6ZSk7CisJCQkJCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKKwkJCQkJ CWJyZWFrOworCQkJCQl9CisJCQkJCXByaW50ZigiRmFpbGVkIHRvIGxvYWQgJyVzJ1xuIiwKKwkJ CQkJCSBQQVRIX0xPQURFUl9FRkkpOworCQkJCQlwcmludGYoIlBsZWFzZSBzZWxlY3QgYWdhaW46 ICIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogSW52YWxpZCBjaGFyZWN0ZXIuICovCisJ CQkJbW92ZV90b190b2woKTsKKwkJCX0KKwkJfQorCX07CisJYnMtPkNsb3NlRXZlbnQodGltZXIp OworCWlmIChuID09IDApIHsgLyogQXV0b1NlbGVjdCAqLworCQlzdGF0dXMgPSBsb2FkX2xvYWRl cihtb2RwLCBkZXZpbmZvcCwgYnVmcCwgYnVmc2l6ZSwgVFJVRSk7CisJCWlmIChzdGF0dXMgIT0g RUZJX1NVQ0NFU1MpIHsKKwkJCXN0YXR1cyA9IGxvYWRfbG9hZGVyKG1vZHAsIGRldmluZm9wLCBi dWZwLCBidWZzaXplLAorCQkJICAgIEZBTFNFKTsKKwkJfQorCX0gZWxzZSB7CisJCSptb2RwID0g ZGV2X2xpc3Rbbi0xXS5tb2RwOworCQkqZGV2aW5mb3AgPSBkZXZfbGlzdFtuLTFdLmRldmluZm9w OworCQlzdGF0dXMgPSBFRklfU1VDQ0VTUzsKKwl9CisJcmV0dXJuIChzdGF0dXMpOworfQorCiAv KgogICogdHJ5X2Jvb3Qgb25seSByZXR1cm5zIGlmIGl0IGZhaWxzIHRvIGxvYWQgdGhlIGxvYWRl ci4gSWYgaXQgc3VjY2VlZHMKICAqIGl0IHNpbXBseSBib290cywgb3RoZXJ3aXNlIGl0IHJldHVy bnMgdGhlIHN0YXR1cyBvZiBsYXN0IEVGSSBjYWxsLgpAQCAtMzU4LDcgKzU3NSw3IEBACiB0cnlf Ym9vdCgpCiB7CiAJc2l6ZV90IGJ1ZnNpemUsIGxvYWRlcnNpemUsIGNtZHNpemU7Ci0Jdm9pZCAq YnVmLCAqbG9hZGVyYnVmOworCXZvaWQgKmJ1ZiA9IE5VTEwsICpsb2FkZXJidWYgPSBOVUxMOwog CWNoYXIgKmNtZDsKIAlkZXZfaW5mb190ICpkZXY7CiAJY29uc3QgYm9vdF9tb2R1bGVfdCAqbW9k OwpAQCAtMzY1LDE1ICs1ODIsMTMgQEAKIAlFRklfSEFORExFIGxvYWRlcmhhbmRsZTsKIAlFRklf TE9BREVEX0lNQUdFICpsb2FkZWRfaW1hZ2U7CiAJRUZJX1NUQVRVUyBzdGF0dXM7CisJaW50IG5k ZXZzOwogCi0Jc3RhdHVzID0gbG9hZF9sb2FkZXIoJm1vZCwgJmRldiwgJmxvYWRlcmJ1ZiwgJmxv YWRlcnNpemUsIFRSVUUpOworCW5kZXZzID0gbGlzdF9kZXZpY2VzKCk7CisJc3RhdHVzID0gc2Vs ZWN0X2Jvb3RkZXYobmRldnMsICZtb2QsICZkZXYsICZsb2FkZXJidWYsICZsb2FkZXJzaXplKTsJ CiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewotCQlzdGF0dXMgPSBsb2FkX2xvYWRlcigm bW9kLCAmZGV2LCAmbG9hZGVyYnVmLCAmbG9hZGVyc2l6ZSwKLQkJICAgIEZBTFNFKTsKLQkJaWYg KHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewotCQkJcHJpbnRmKCJGYWlsZWQgdG8gbG9hZCAnJXMn XG4iLCBQQVRIX0xPQURFUl9FRkkpOwotCQkJcmV0dXJuIChzdGF0dXMpOwotCQl9CisJCXByaW50 ZigiRmFpbGVkIHRvIGxvYWQgJyVzJ1xuIiwgUEFUSF9MT0FERVJfRUZJKTsKKwkJcmV0dXJuIChF RklfTk9UX0ZPVU5EKTsKIAl9CiAKIAkvKgpAQCAtNDIzLDYgKzYzOCw5IEBACiAJbG9hZGVkX2lt YWdlLT5Mb2FkT3B0aW9uc1NpemUgPSBjbWRzaXplOwogCWxvYWRlZF9pbWFnZS0+TG9hZE9wdGlv bnMgPSBjbWQ7CiAKKwlwcmludGYoIkJvb3QgZnJvbTogJXMgaW4gMSBzZWNvbmRcbiIsIGRldnBh dGhfc3RyKGRldi0+ZGV2cGF0aCkpOworCWJzLT5TdGFsbCgxMDAwMDAwKTsKKwogCURQUklOVEYo IlN0YXJ0aW5nICclcycgaW4gNSBzZWNvbmRzLi4uIiwgUEFUSF9MT0FERVJfRUZJKTsKIAlEU1RB TEwoMTAwMDAwMCk7CiAJRFBSSU5URigiLiIpOwpAQCAtNTU5LDIxICs3NzcsMTMgQEAKIAlEU1RB TEwoNTAwMDAwKTsKIH0KIAotRUZJX1NUQVRVUwotZWZpX21haW4oRUZJX0hBTkRMRSBYaW1hZ2Us IEVGSV9TWVNURU1fVEFCTEUgKlhzeXN0YWIpCitzdGF0aWMgRUZJX1NUQVRVUworaW5pdF9jb25z b2xlKCkKIHsKLQlFRklfSEFORExFICpoYW5kbGVzOwotCUVGSV9MT0FERURfSU1BR0UgKmltZzsK LQlFRklfREVWSUNFX1BBVEggKmltZ3BhdGg7CiAJRUZJX1NUQVRVUyBzdGF0dXM7CiAJRUZJX0NP TlNPTEVfQ09OVFJPTF9QUk9UT0NPTCAqQ29uc29sZUNvbnRyb2wgPSBOVUxMOwotCVNJTVBMRV9U RVhUX09VVFBVVF9JTlRFUkZBQ0UgKmNvbm91dCA9IE5VTEw7Ci0JVUlOVE4gaSwgbWF4X2RpbSwg YmVzdF9tb2RlLCBjb2xzLCByb3dzLCBoc2l6ZSwgbmhhbmRsZXM7CiAKLQkvKiBCYXNpYyBpbml0 aWFsaXphdGlvbiovCi0Jc3lzdGFiID0gWHN5c3RhYjsKLQlpbWFnZSA9IFhpbWFnZTsKLQlicyA9 IFhzeXN0YWItPkJvb3RTZXJ2aWNlczsKKwlVSU5UTiBpLCBtYXhfZGltLCBiZXN0X21vZGUsIGNv bHMsIHJvd3M7CiAKIAkvKiBTZXQgdXAgdGhlIGNvbnNvbGUsIHNvIHByaW50ZiB3b3Jrcy4gKi8K IAlzdGF0dXMgPSBicy0+TG9jYXRlUHJvdG9jb2woJkNvbnNvbGVDb250cm9sR1VJRCwgTlVMTCwK QEAgLTU4NCw4ICs3OTQsMTEgQEAKIAkvKgogCSAqIFJlc2V0IHRoZSBjb25zb2xlIGFuZCBmaW5k IHRoZSBiZXN0IHRleHQgbW9kZS4KIAkgKi8KKwljb25pbiA9IHN5c3RhYi0+Q29uSW47CiAJY29u b3V0ID0gc3lzdGFiLT5Db25PdXQ7CisJY29uaW4tPlJlc2V0KGNvbmluLCBUUlVFKTsKIAljb25v dXQtPlJlc2V0KGNvbm91dCwgVFJVRSk7CisKIAltYXhfZGltID0gYmVzdF9tb2RlID0gMDsKIAlm b3IgKGkgPSAwOyA7IGkrKykgewogCQlzdGF0dXMgPSBjb25vdXQtPlF1ZXJ5TW9kZShjb25vdXQs IGksICZjb2xzLCAmcm93cyk7CkBAIC01OTgsOSArODExLDMxIEBACiAJfQogCWlmIChtYXhfZGlt ID4gMCkKIAkJY29ub3V0LT5TZXRNb2RlKGNvbm91dCwgYmVzdF9tb2RlKTsKKworCWNvbm91dC0+ U2V0QXR0cmlidXRlKGNvbm91dCwgRUZJX1RFWFRfQVRUUihERUZBVUxUX0ZHQ09MT1IsCisJICAg IERFRkFVTFRfQkdDT0xPUikpOwogCWNvbm91dC0+RW5hYmxlQ3Vyc29yKGNvbm91dCwgVFJVRSk7 CiAJY29ub3V0LT5DbGVhclNjcmVlbihjb25vdXQpOwogCisJcmV0dXJuIChzdGF0dXMpOworfQor CitFRklfU1RBVFVTCitlZmlfbWFpbihFRklfSEFORExFIFhpbWFnZSwgRUZJX1NZU1RFTV9UQUJM RSAqWHN5c3RhYikKK3sKKwlFRklfSEFORExFICpoYW5kbGVzOworCUVGSV9MT0FERURfSU1BR0Ug KmltZzsKKwlFRklfREVWSUNFX1BBVEggKmltZ3BhdGg7CisJRUZJX1NUQVRVUyBzdGF0dXM7CisJ VUlOVE4gaSwgaHNpemUsIG5oYW5kbGVzOworCisJLyogQmFzaWMgaW5pdGlhbGl6YXRpb24qLwor CXN5c3RhYiA9IFhzeXN0YWI7CisJaW1hZ2UgPSBYaW1hZ2U7CisJYnMgPSBYc3lzdGFiLT5Cb290 U2VydmljZXM7CisKKwlpbml0X2NvbnNvbGUoKTsKKwogCXByaW50ZigiXG4+PiBGcmVlQlNEIEVG SSBib290IGJsb2NrXG4iKTsKIAlwcmludGYoIiAgIExvYWRlciBwYXRoOiAlc1xuXG4iLCBQQVRI X0xPQURFUl9FRkkpOwogCXByaW50ZigiICAgSW5pdGlhbGl6aW5nIG1vZHVsZXM6Iik7CkBAIC03 MTUsMTQgKzk1MCw1NyBAQAogdm9pZAogcHV0Y2hhcihpbnQgYykKIHsKKwllZmlfY29uc19wdXRj aGFyKGMpOworfQorCit2b2lkCitlZmlfY29uc19wdXRjaGFyKGludCBjKQorewogCUNIQVIxNiBi dWZbMl07CiAKIAlpZiAoYyA9PSAnXG4nKSB7CiAJCWJ1ZlswXSA9ICdccic7CiAJCWJ1ZlsxXSA9 IDA7Ci0JCXN5c3RhYi0+Q29uT3V0LT5PdXRwdXRTdHJpbmcoc3lzdGFiLT5Db25PdXQsIGJ1Zik7 CisJCWNvbm91dC0+T3V0cHV0U3RyaW5nKGNvbm91dCwgYnVmKTsKIAl9CiAJYnVmWzBdID0gYzsK IAlidWZbMV0gPSAwOwotCXN5c3RhYi0+Q29uT3V0LT5PdXRwdXRTdHJpbmcoc3lzdGFiLT5Db25P dXQsIGJ1Zik7CisJY29ub3V0LT5PdXRwdXRTdHJpbmcoY29ub3V0LCBidWYpOwogfQorCitpbnQK K2dldGNoYXIodm9pZCkKK3sKKwlyZXR1cm4gZWZpX2NvbnNfZ2V0Y2hhcigpOworfQorCisKK2lu dAorZWZpX2NvbnNfZ2V0Y2hhcigpCit7CisJRUZJX0lOUFVUX0tFWSBrZXk7CisJRUZJX1NUQVRV UyBzdGF0dXM7CisJVUlOVE4ganVuazsKKworCS8qIFRyeSB0byByZWFkIGEga2V5IHN0cm9rZS4g V2Ugd2FpdCBmb3Igb25lIGlmIG5vbmUgaXMgcGVuZGluZy4gKi8KKwlzdGF0dXMgPSBjb25pbi0+ UmVhZEtleVN0cm9rZShjb25pbiwgJmtleSk7CisJaWYgKHN0YXR1cyA9PSBFRklfTk9UX1JFQURZ KSB7CisJCWJzLT5XYWl0Rm9yRXZlbnQoMSwgJmNvbmluLT5XYWl0Rm9yS2V5LCAmanVuayk7CisJ CXN0YXR1cyA9IGNvbmluLT5SZWFkS2V5U3Ryb2tlKGNvbmluLCAma2V5KTsKKwl9CisJc3dpdGNo IChrZXkuU2NhbkNvZGUpIHsKKwljYXNlIDB4MTc6IC8qIEVTQyAqLworCQlyZXR1cm4gKDB4MWIp OyAgLyogZXNjICovCisJfQorCisJLyogdGhpcyBjYW4gcmV0dXJuICAqLworCXJldHVybiAoa2V5 LlVuaWNvZGVDaGFyKTsKK30KKworaW50CitlZmlfY29uc19wb2xsKCkKK3sKKwkvKiBUaGlzIGNh biBjbGVhciB0aGUgc2lnbmFsZWQgc3RhdGUuICovCisJcmV0dXJuIChicy0+Q2hlY2tFdmVudChj b25pbi0+V2FpdEZvcktleSkgPT0gRUZJX1NVQ0NFU1MpOworfQorCg== --Multipart=_Sat__9_Sep_2017_15_12_17_+0900_dSgJ8XyasnCX=vd0--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170909151217.9082b61a9ef00b86bf90ff8e>