Skip site navigation (1)Skip section navigation (2)
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>