Re: attempt to re-implement sillyrename for NFS in 2.1.*

Claus-Justus Heine (Heine@physik.rwth-aachen.de)
25 Aug 1997 15:37:02 +0200


--Multipart_Mon_Aug_25_15:37:01_1997-1
Content-Type: text/plain; charset=US-ASCII

> At least the nfsv3 spec state the access to a file by a nfs file
> handle can be revoked by the server at any time, and that the server
> has to return and -ESTALE error in this case. Doesn't that mean that
> the NFS client code should be changed in such a way that it silently
> tries to re-get (i.e. re-lookup) the nfs file handle in case an
> -ESTALE error is returned?

I tried to implement some kind of nfs_fh_reget() that is called when
an nfs_proc_...() returns an -ESTALE error. If I understand the nfsv3
spec correctly, then this is a must.

The nfs file handle can be revoked by the server at any time, and it
may very well create different file handles for different named
instances of the same inode. The spec always talks about files, where
a file is something that has a pathname, not the underlying inode.

And this is what the user nfsd actually does. And also the new kernel
based nfsd uses the path names to compose its file handles (it
actually uses the pointers to the dentries to compose the file
handles)

I don't like the idea that the client code passes -ESTALE errors
produced by simply renaming and unliking of instances of the same
multiply linked file to the user level application. This is really
annoying. In my opinion the NFS client code should try to ask the
server for a new file handle if it encounters an -ESTALE error.

Now, this cannot be done easily. To get a new file handle, we need a
path name to access a given object at the server.

BUT: the -ESTALE errors occur at the inode level, not during
lookups. This makes it hard to re-fetch a new valid file handle.

Well. There is the d_alias list. Reading (well, using grep) the fs
code one will notice that this list isn't used anywhere. And if I
remember right it was talked about getting rid of this list at all.

Nevertheless this list is the easiest way to get a valid path name to
ask the nfs server for a new valid file handle. I know that this is
ugly. FIXME.

It does NOT suffice to simply try the first component of that list via
the i_dentry() macro as it may very well be the case that this dentry
instance is in progress of being unlinked, in which case we gain
nothing.

Instead, the new nfs_fh_reget() routine first locks the entire alias
list using a dget() on each dentry on the list. This makes sure that
the entries won't disappear while transversing the list. Also, new
entries are added always at the top of the list, so that the code
won't get confused by adding new entries.

Next, nfs_fh_reget() traverses the list and asks the server for a new
file handle using nfs_proc_lookup(). It either stops on success, or
when it has processed all entries on the list, in which case it
returns an error.

Afterwards the list is unlocked.

Yes, this breaks abstraction boundaries. The inode_operations should
not rely on the pathnames, but on the underlying inodes only.

But the nfs protocol seems to be imcompatible with this approach. It
just doesn't fit into this scheme.

Note that it would be possible to compensate for the -ESTALE errors in
the case of nfs_rename() playing some dirty tricks in fs/nfs/dir.c

But this doesn't solve the nfs_unlink() problem. nfs_unlink() also
only gets the inode that shall be unlinked and also don't has easy
access to the path names that possibly also refer to the same inode
(i.e. the d_alias list).

And: hacking dir.c would only cope with the problems the Linux client
code has with the current Linux nfs server implementation.

The spec states that one must not rely on the file handle too much: it
can be revoked at any time, two different file handles may refer to
the same file (think of hardlinks) and a file handle does not refer to
an inode, but to the path name that is used to access the object.

Two different links of the same inode are two different objects, when
talking about nfs.

I think that something like the hack below is needed to handle nfs
file handles correctly. Maybe the nfs fs should maintain its own list
of valid dentries to use to obtain valid file handles. One could add a
dentry to such a list after a successful lookup, and remove the dentry
using the new d_delete function in the d_op struct when the last user
calls dput(). That dentry then would have to be added again to the
list using lookup_revalidate().

Only that d_inode possibly has vanished when dput() is called. Mmh.
Broken NFS.

My UGLY hack is included below :-((((

Cheers

Claus

--Multipart_Mon_Aug_25_15:37:01_1997-1
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="linux-2.1.51.silly-4.dif"
Content-Transfer-Encoding: base64

LS0tIGxpbnV4LTIuMS41MS9mcy9uZnMvZmlsZS5jLm9yaWcJVGh1IEF1ZyAxNCAwMjozNzo0
OCAxOTk3CisrKyBsaW51eC0yLjEuNTEvZnMvbmZzL2ZpbGUuYwlNb24gQXVnIDI1IDE1OjAw
OjIzIDE5OTcKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQkJaW5vZGUtPmlfZGV2LCBpbm9kZS0+
aV9pbm8sIGNvdW50LAogCQkJKHVuc2lnbmVkIGxvbmcpIGZpbGUtPmZfcG9zKTsKIAotCWlm
ICgoc3RhdHVzID0gbmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NFUlZFUihpbm9kZSksIGlu
b2RlKSkgPCAwKQorCWlmICgoc3RhdHVzID0gbmZzX3JldmFsaWRhdGVfaW5vZGUoaW5vZGUp
KSA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAJcmV0dXJuIGdlbmVyaWNfZmlsZV9yZWFkKGlu
b2RlLCBmaWxlLCBidWYsIGNvdW50KTsKIH0KQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAJZGZw
cmludGsoVkZTLCAibmZzOiBtbWFwKCV4LyVsZClcbiIsIGlub2RlLT5pX2RldiwgaW5vZGUt
PmlfaW5vKTsKIAotCWlmICgoc3RhdHVzID0gbmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NF
UlZFUihpbm9kZSksIGlub2RlKSkgPCAwKQorCWlmICgoc3RhdHVzID0gbmZzX3JldmFsaWRh
dGVfaW5vZGUoaW5vZGUpKSA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAJcmV0dXJuIGdlbmVy
aWNfZmlsZV9tbWFwKGlub2RlLCBmaWxlLCB2bWEpOwogfQpAQCAtMTU0LDcgKzE1NCw3IEBA
CiAJCXByaW50aygiTkZTOiBhdHRlbXB0IHRvIHdyaXRlIHRvIGFjdGl2ZSBzd2FwIGZpbGUh
XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKChyZXN1bHQgPSBuZnNfcmV2YWxp
ZGF0ZV9pbm9kZShORlNfU0VSVkVSKGlub2RlKSwgaW5vZGUpKSA8IDApCisJaWYgKChyZXN1
bHQgPSBuZnNfcmV2YWxpZGF0ZV9pbm9kZShpbm9kZSkpIDwgMCkKIAkJcmV0dXJuIHJlc3Vs
dDsKIAlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKIAkJcHJpbnRrKCJuZnNfZmls
ZV93cml0ZTogd3JpdGUgdG8gbm9uLWZpbGUsIG1vZGUgJTA3b1xuIiwKLS0tIGxpbnV4LTIu
MS41MS9mcy9uZnMvZGlyLmMub3JpZwlUaHUgQXVnIDIxIDE5OjE5OjI4IDE5OTcKKysrIGxp
bnV4LTIuMS41MS9mcy9uZnMvZGlyLmMJTW9uIEF1ZyAyNSAxNDoyNTowMSAxOTk3CkBAIC03
LDYgKzcsMTEgQEAKICAqCiAgKiAxMCBBcHIgMTk5NglBZGRlZCBzaWxseSByZW5hbWUgZm9y
IHVubGluawktLW9raXIKICAqIDI4IFNlcCAxOTk2CUltcHJvdmVkIGRpcmVjdG9yeSBjYWNo
ZSAtLW9raXIKKyAqIDIzIEF1ZyAxOTk3ICBDbGF1cyBIZWluZSBjbGF1c0Btb21vLm1hdGgu
cnd0aC1hYWNoZW4uZGUgCisgKiAgICAgICAgICAgICAgUmUtaW1wbGVtZW50ZWQgc2lsbHkg
cmVuYW1lIGZvciB1bmxpbmsuCisgKiAgICAgICAgICAgICAgRm9sbG93aW5nIExpbnVzIGNv
bW1lbnRzIG9uIG15IG9yaWdpbmFsIGhhY2ssIHRoaXMgdmVyc2lvbgorICogICAgICAgICAg
ICAgIGRlcGVuZHMgb25seSBvbiB0aGUgZGNhY2hlIHN0dWZmIGFuZCBkb2Vzbid0IHRvdWNo
IHRoZSBpbm9kZQorICogICAgICAgICAgICAgIGxheWVyIChpcHV0KCkgYW5kIGZyaWVuZHMp
LgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtOTIsNyArOTcsNyBAQAog
bmZzX2Rpcl9vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsK
IAlkZnByaW50ayhWRlMsICJORlM6IG5mc19kaXJfb3BlbigleC8lbGQpXG4iLCBkaXItPmlf
ZGV2LCBkaXItPmlfaW5vKTsKLQlyZXR1cm4gbmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NF
UlZFUihkaXIpLCBkaXIpOworCXJldHVybiBuZnNfcmV2YWxpZGF0ZV9pbm9kZShkaXIpOwog
fQogCiBzdGF0aWMgbG9uZwpAQCAtMTMzLDcgKzEzOCw3IEBACiAJCXJldHVybiAtRUJBREY7
CiAJfQogCi0JaWYgKChyZXN1bHQgPSBuZnNfcmV2YWxpZGF0ZV9pbm9kZShORlNfU0VSVkVS
KGlub2RlKSwgaW5vZGUpKSA8IDApCisJaWYgKChyZXN1bHQgPSBuZnNfcmV2YWxpZGF0ZV9p
bm9kZShpbm9kZSkpIDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCS8qCkBAIC0yMzcsOCAr
MjQyLDggQEAKIAkJCX0KIAkJfQogCi0JCXJlc3VsdCA9IG5mc19wcm9jX3JlYWRkaXIoTkZT
X1NFUlZFUihpbm9kZSksIE5GU19GSChpbm9kZSksCi0JCQkJCWNvb2tpZSwgUEFHRV9TSVpF
LCBjYWNoZS0+ZW50cnkpOworCQlyZXN1bHQgPSBORlNfUFJPQyhyZWFkZGlyLCBpbm9kZSwK
KwkJCQkgIGNvb2tpZSwgUEFHRV9TSVpFLCBjYWNoZS0+ZW50cnkpOwogCQlpZiAocmVzdWx0
IDw9IDApCiAJCQlnb3RvIGRvbmU7CiAJCWNhY2hlLT5zaXplICA9IHJlc3VsdDsKQEAgLTM0
OSwxMCArMzU0LDEzIEBACiAJcmV0dXJuIHRpbWUgPCBtYXg7CiB9CiAKK3N0YXRpYyB2b2lk
IG5mc19zaWxseV9kZWxldGUoc3RydWN0IGRlbnRyeSAqKTsKKwogc3RhdGljIHN0cnVjdCBk
ZW50cnlfb3BlcmF0aW9ucyBuZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJbmZzX2xvb2t1
cF9yZXZhbGlkYXRlLAogCTAsCQkJLyogZF9oYXNoICovCiAJMCwJCQkvKiBkX2NvbXBhcmUg
Ki8KKwluZnNfc2lsbHlfZGVsZXRlLAogfTsKIAogc3RhdGljIGludCBuZnNfbG9va3VwKHN0
cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQpAQCAtMzc0LDExICsz
ODIsMTEgQEAKIAlpZiAobGVuID4gTkZTX01BWE5BTUxFTikKIAkJcmV0dXJuIC1FTkFNRVRP
T0xPTkc7CiAKLQllcnJvciA9IG5mc19wcm9jX2xvb2t1cChORlNfU0VSVkVSKGRpciksIE5G
U19GSChkaXIpLCBkZW50cnktPmRfbmFtZS5uYW1lLCAmZmhhbmRsZSwgJmZhdHRyKTsKKwll
cnJvciA9IE5GU19QUk9DKGxvb2t1cCwgZGlyLAorCQkJIGRlbnRyeS0+ZF9uYW1lLm5hbWUs
ICZmaGFuZGxlLCAmZmF0dHIpOwogCiAJaW5vZGUgPSBOVUxMOwogCWlmICghZXJyb3IpIHsK
LQkJZXJyb3IgPSAtRU5PRU5UOwogCQlpbm9kZSA9IG5mc19maGdldChkaXItPmlfc2IsICZm
aGFuZGxlLCAmZmF0dHIpOwogCQlpZiAoIWlub2RlKQogCQkJcmV0dXJuIC1FQUNDRVM7CkBA
IC00MTMsOCArNDIxLDkgQEAKIAlzYXR0ci5tb2RlID0gbW9kZTsKIAlzYXR0ci51aWQgPSBz
YXR0ci5naWQgPSBzYXR0ci5zaXplID0gKHVuc2lnbmVkKSAtMTsKIAlzYXR0ci5hdGltZS5z
ZWNvbmRzID0gc2F0dHIubXRpbWUuc2Vjb25kcyA9ICh1bnNpZ25lZCkgLTE7Ci0JZXJyb3Ig
PSBuZnNfcHJvY19jcmVhdGUoTkZTX1NFUlZFUihkaXIpLCBORlNfRkgoZGlyKSwKLQkJZGVu
dHJ5LT5kX25hbWUubmFtZSwgJnNhdHRyLCAmZmhhbmRsZSwgJmZhdHRyKTsKKworCWVycm9y
ID0gTkZTX1BST0MoY3JlYXRlLCBkaXIsCisJCQkgZGVudHJ5LT5kX25hbWUubmFtZSwgJnNh
dHRyLCAmZmhhbmRsZSwgJmZhdHRyKTsKIAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9y
OwpAQCAtNDUzLDggKzQ2Miw4IEBACiAJCXNhdHRyLnNpemUgPSByZGV2OyAvKiBnZXQgb3V0
IHlvdXIgYmFyZiBiYWcgKi8KIAogCXNhdHRyLmF0aW1lLnNlY29uZHMgPSBzYXR0ci5tdGlt
ZS5zZWNvbmRzID0gKHVuc2lnbmVkKSAtMTsKLQllcnJvciA9IG5mc19wcm9jX2NyZWF0ZShO
RlNfU0VSVkVSKGRpciksIE5GU19GSChkaXIpLAotCQlkZW50cnktPmRfbmFtZS5uYW1lLCAm
c2F0dHIsICZmaGFuZGxlLCAmZmF0dHIpOworCWVycm9yID0gTkZTX1BST0MoY3JlYXRlLCBk
aXIsCisJCQkgZGVudHJ5LT5kX25hbWUubmFtZSwgJnNhdHRyLCAmZmhhbmRsZSwgJmZhdHRy
KTsKIAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtNDkxLDggKzUwMCw4IEBA
CiAJc2F0dHIudWlkID0gc2F0dHIuZ2lkID0gc2F0dHIuc2l6ZSA9ICh1bnNpZ25lZCkgLTE7
CiAJc2F0dHIuYXRpbWUuc2Vjb25kcyA9IHNhdHRyLm10aW1lLnNlY29uZHMgPSAodW5zaWdu
ZWQpIC0xOwogCi0JZXJyb3IgPSBuZnNfcHJvY19ta2RpcihORlNfU0VSVkVSKGRpciksIE5G
U19GSChkaXIpLAotCQlkZW50cnktPmRfbmFtZS5uYW1lLCAmc2F0dHIsICZmaGFuZGxlLCAm
ZmF0dHIpOworCWVycm9yID0gTkZTX1BST0MobWtkaXIsIGRpciwKKwkJCSBkZW50cnktPmRf
bmFtZS5uYW1lLCAmc2F0dHIsICZmaGFuZGxlLCAmZmF0dHIpOwogCiAJaWYgKGVycm9yKQog
CQlyZXR1cm4gZXJyb3I7CkBAIC01MjEsNyArNTMwLDcgQEAKIAlpZiAoZGVudHJ5LT5kX25h
bWUubGVuID4gTkZTX01BWE5BTUxFTikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKLQll
cnJvciA9IG5mc19wcm9jX3JtZGlyKE5GU19TRVJWRVIoZGlyKSwgTkZTX0ZIKGRpciksIGRl
bnRyeS0+ZF9uYW1lLm5hbWUpOworCWVycm9yID0gTkZTX1BST0Mocm1kaXIsIGRpciwgZGVu
dHJ5LT5kX25hbWUubmFtZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAg
LTUzMCwxNCArNTM5LDE0NCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogV2Ugc2hvdWxk
IGRvIHNpbGx5LXJlbmFtZSBoZXJlLCBidXQgSSdtIHRvbyBsYXp5IHRvIGZpeAotICogdXAg
dGhlIGRpcmVjdG9yeSBlbnRyeSBpbXBsaWNhdGlvbnMgb2YgaXQuLgorCisvKiAgTm90ZTog
d2UgY29weSB0aGUgY29kZSBmcm9tIGxvb2t1cF9kZW50cnkoKSBoZXJlLCBvbmx5OiB3ZSBo
YXZlIHRvCisgKiAgb21pdCB0aGUgZGlyZWN0b3J5IGxvY2suIFdlIGFyZSBhbHJlYWR5IHRo
ZSBvd25lciBvZiB0aGUgbG9jayB3aGVuCisgKiAgd2UgcmVhY2ggaGVyZS4gQW5kICJkb3du
KCZkaXItPmlfc2VtKSIgd291bGQgbWFrZSB1cyBzbGVlcCBmb3JldmVyCisgKiAgKCdjYXVz
ZSBXRSBoYXZlIHRoZSBsb2NrKQorICogCisgKiAgVkVSWSBJTVBPUlRBTlQ6IGNhbGN1bGF0
ZSB0aGUgaGFzaCBmb3IgdGhpcyBkZW50cnkhISEhISEhIQorICogIE90aGVyd2lzZSB0aGUg
Y2FjaGVkIGxvb2t1cCBERUZJTklURUxZIFdJTEwgZmFpbC4gQW5kIGEgbmV3IGRlbnRyeQor
ICogIGlzIGNyZWF0ZWQuIFdpdGhvdXQgdGhlIERDQUNIRV9ORlNGU19SRU5BTUVEIGZsYWcu
IEFuZCB3aXRoIGRfY291bnQKKyAqICA9PSAxLiBBbmQgdHJvdWJsZS4KKyAqCisgKiAgQ29u
Y2VybmluZyBteSBjaG9pY2Ugb2YgdGhlIHRlbXAgbmFtZToKKyAqCisgKiAgICAgICAgICAg
ICAgICAgIi5uZnMjaV9pbm8uI3Njb3VudGVyIgorICoKKyAqICB3aGVyZSAiI2lfaW5vIiBp
cyB0aGUgaGV4IHJlcHJlc2VudGF0aW9uIG9mIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8KKyAq
ICB3aGljaCBzZXJ2ZXMgdG8gY3JlYXRlIGRpZmZlcmVudCBuYW1lcyBmb3IgZGlmZmVyZW50
IGlub2Rlcy4gIFRoZQorICogICNzY291bnRlciBzaW1wbHkgaXMgYSBjb3VudGVyIHRoYXQg
c2VydmVzIHRvIGNyZWF0ZSBkaWZmZXJlbnQKKyAqICBuYW1lcyBmb3IgZGlmZmVyZW50IGlu
c3RhbmNlcyBmb3IgdGhlIHNhbWUgaW5vZGUgaW4gdGhlIHNhbWUKKyAqICBkaXJlY3Rvcnkg
KGkuZS4gaGFyZGxpbmtzKS4gIFRvIGF2b2lkIHVubmVjZXNzYXJ5IGxvb2t1cHMgd2UgbWFr
ZQorICogIHRoYXQgY291bnRlciBhIFNUQVRJQyB2YXJpYWJsZSB0aGF0IGlzIGluY3JlbWVu
dGVkIGVhY2ggdGltZSBhCisgKiAgc2lsbHlyZW5hbWUoKSBoYXBwZW5zLiBUaHVzIGl0cyB2
YWx1ZSBnaXZlcyB0aGUgdG90YWwgbnVtYmVyIG9mCisgKiAgY2FsbHMgdG8gc2lsbHlyZW5h
bWUoKSBhbmQgYWxyZWFkeSB0aGUgZmlyc3QgYXR0ZW1wdCBzaG91bGQgY3JlYXRlCisgKiAg
YSB1bmlxdWUgbmFtZSBjdXJyZW50bHkgdW51c2VkLiBJJ2QgbGlrZSBpdCBiZXR0ZXIgdG8g
bWFrZSB0aGUKKyAqICBzY291bnRlciBhIHBlci1pbm9kZSBjb3VudGVyIGJ1dCBpdCdzIG5v
dCB3b3J0aCB0aGUgZWZmb3J0LgorICoKKyAqICBUbyBjYXRjaCB0aGUgdW5saWtlbHkgY2Fz
ZSB0aGF0IHRoZXJlIHJlYWxseSBhbHJlYWR5IGV4aXN0cworICogIHN1Y2ggYSBmaWxlIHdl
IHNpbXBseSBpbmNyZW1lbnQgc2NvdW50ZXIgYW5kIHJldHJ5LgorICoKKyAqICBPZiBjb3Vy
c2UsIHNvbWVib2R5IGNvdWxkIHRyeSB0byBwbGF5IHRyaWNrcyBhbmQgdG91Y2ggTUFYSU5U
CisgKiAgZmlsZXMgZm9sbG93aW5nIHRoZSBuYW1pbmcgc2NoZW1lIGFib3ZlIC4uLgogICov
Ci1zdGF0aWMgaW50IG5mc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50
cnkgKmRlbnRyeSkKKworc3RhdGljCitzdHJ1Y3QgZGVudHJ5ICpuZnNfc2lsbHlfbG9va3Vw
KHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY2hhciAqc2lsbHksIGludCBzbGVuKQoreworCXN0
cnVjdCBxc3RyICAgIHNxc3RyOworCXN0cnVjdCBkZW50cnkgKnNkZW50cnk7CisJaW50IGks
IGVycm9yOworCisJc3FzdHIubmFtZSA9IHNpbGx5OworCXNxc3RyLmxlbiAgPSBzbGVuOwor
CXNxc3RyLmhhc2ggPSBpbml0X25hbWVfaGFzaCgpOworCWZvciAoaT0gMDsgaSA8IHNsZW47
IGkrKykKKwkJc3FzdHIuaGFzaCA9IHBhcnRpYWxfbmFtZV9oYXNoKHNpbGx5W2ldLCBzcXN0
ci5oYXNoKTsKKwlzcXN0ci5oYXNoID0gZW5kX25hbWVfaGFzaChzcXN0ci5oYXNoKTsKKwlz
ZGVudHJ5ID0gZF9sb29rdXAocGFyZW50LCAmc3FzdHIpOworCWlmICghc2RlbnRyeSkgewor
CQlzZGVudHJ5ID0gZF9hbGxvYyhwYXJlbnQsICZzcXN0cik7CisJCWlmIChzZGVudHJ5ID09
IE5VTEwpCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJZXJyb3IgPSBuZnNfbG9v
a3VwKHBhcmVudC0+ZF9pbm9kZSwgc2RlbnRyeSk7CisJCWlmIChlcnJvcikgeworCQkJZHB1
dChzZGVudHJ5KTsKKwkJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwkJfQorCX0KKwlyZXR1
cm4gc2RlbnRyeTsKK30KKworc3RhdGljIGludCBuZnNfc2lsbHlyZW5hbWUoc3RydWN0IGlu
b2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdGF0aWMgaW50ICAgICBz
Y291bnRlciAgID0gMDsKKwljb25zdCBpbnQgICAgICBpX2lub3NpemUgID0gc2l6ZW9mKGRp
ci0+aV9pbm8pICogMjsKKwljb25zdCBpbnQgICAgICBzY3NpemUgICAgID0gc2l6ZW9mKHNj
b3VudGVyKSAqIDI7CisgICAgICAgIGNvbnN0IGludCAgICAgIGJhc2VsZW4gICAgPSBzaXpl
b2YoIi5uZnMiKSAtIDEgKyBpX2lub3NpemUgKyAxOworCWNvbnN0IGludCAgICAgIHNsZW4g
ICAgICAgPSBiYXNlbGVuICsgc2NzaXplOworCWNoYXIgICAgICAgICAgIHNpbGx5W3NsZW4r
MV07CisJaW50ICAgICAgICAgICAgZXJyb3I7CisJc3RydWN0IGRlbnRyeSAqc2RlbnRyeTsK
KworCXNwcmludGYoc2lsbHksICIubmZzJSouKmx4LiIsIGlfaW5vc2l6ZSwgaV9pbm9zaXpl
LAorCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKworCXNkZW50cnkgID0gTlVMTDsKKwlk
byB7CisJCWRwdXQoc2RlbnRyeSk7CisJCXNwcmludGYoc2lsbHkgKyBiYXNlbGVuLCAiJSou
KngiLCBzY3NpemUsIHNjc2l6ZSwgc2NvdW50ZXIrKyk7CisKKwkJZGZwcmludGsoVkZTLCAi
dHJ5aW5nIHRvIHJlbmFtZSAlcyB0byAlc1xuIiwKKwkJCSBkZW50cnktPmRfbmFtZS5uYW1l
LCBzaWxseSk7CisJCQorCQlzZGVudHJ5ID0gbmZzX3NpbGx5X2xvb2t1cChkZW50cnktPmRf
cGFyZW50LCBzaWxseSwgc2xlbik7CisJCWlmIChJU19FUlIoc2RlbnRyeSkpIHsKKwkJCXJl
dHVybiAtRUlPOyAvKiBGSVhNRSA/ICovCisJCX0JCQorCX0gd2hpbGUoc2RlbnRyeS0+ZF9p
bm9kZSAhPSBOVUxMKTsgLyogbmVlZCBhIG5lZ2F0aXZlIGxvb2t1cCAqLworCisJZXJyb3Ig
PSBuZnNfcmVuYW1lKGRpciwgZGVudHJ5LCBkaXIsIHNkZW50cnkpOworCWRwdXQoc2RlbnRy
eSk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWRlbnRyeS0+ZF9mbGFn
cyB8PSBEQ0FDSEVfTkZTRlNfUkVOQU1FRDsKKwlyZXR1cm4gMDsgLyogZG9uJ3QgdW5saW5r
ICovCit9CisKK3N0YXRpYyBpbnQgbmZzX2RvX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwg
c3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWludCBlcnJvcjsKIAorCWVycm9yID0gTkZT
X1BST0MocmVtb3ZlLCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWlmIChlcnJvciA8
IDApCisJCXJldHVybiBlcnJvcjsKKwkKKwluZnNfaW52YWxpZGF0ZV9kaXJjYWNoZShkaXIp
OworCWRfZGVsZXRlKGRlbnRyeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5m
c19zaWxseV9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWlmIChkZW50cnkt
PmRfZmxhZ3MgJiBEQ0FDSEVfTkZTRlNfUkVOQU1FRCkgeworCQlzdHJ1Y3QgaW5vZGUgKmRp
ciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisJCWludCBlcnJvcjsKKwkJCisJCWRl
bnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX05GU0ZTX1JFTkFNRUQ7CisKKwkJZG93bigmZGly
LT5pX3NlbSk7IC8qIGhvcGVmdWxseSB0aGlzIHdpbGwgbm90IGxvY2sgdXAgKi8KKwkJZXJy
b3IgPSBuZnNfZG9fdW5saW5rKGRpciwgZGVudHJ5KTsKKwkJdXAoJmRpci0+aV9zZW0pOwor
CisJCWlmIChlcnJvciA8IDApCisJCQlwcmludGsoIk5GUyAiIF9fRlVOQ1RJT05fXyAiIGZh
aWxlZCAoZXJyID0gJWQpXG4iLAorCQkJICAgICAgIC1lcnJvcik7CisJfQorCQorfQorCisv
KiAgV2UgZG8gc2lsbHkgcmVuYW1lLiBJbiBjYXNlIHNpbGx5cmVuYW1lKCkgcmV0dXJucyAt
RUJVU1ksIHRoZSBpbm9kZQorICogIGJlbG9uZ3MgdG8gYW4gYWN0aXZlICIubmZzLi4uIiBm
aWxlIGFuZCB3ZSByZXR1cm4gLUVCVVNZLgorICoKKyAqICBJZiBzaWxseXJlbmFtZSgpIHJl
dHVybnMgMCwgd2UgZG8gbm90aGluZywgb3RoZXJ3aXNlIHdlIHVubGluay4KKyAqLworc3Rh
dGljIGludCBuZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpk
ZW50cnkpCit7CisKIAlkZnByaW50ayhWRlMsICJORlM6IHVubGluaygleC8lbGQsICVzKVxu
IiwKIAkJCQlkaXItPmlfZGV2LCBkaXItPmlfaW5vLCBkZW50cnktPmRfbmFtZS5uYW1lKTsK
IApAQCAtNTQ2LDE2ICs2ODUsMTYgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCisJaWYg
KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ORlNGU19SRU5BTUVEKQorCQlyZXR1cm4gLUVC
VVNZOyAvKiBkb24ndCBhbGxvdyB1bmxpbmtpbmcgb2Ygc2lsbHkgZGVudHJpZXMgKi8KKwog
CWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBORlNfTUFYTkFNTEVOKQogCQlyZXR1cm4gLUVO
QU1FVE9PTE9ORzsKIAotCWVycm9yID0gbmZzX3Byb2NfcmVtb3ZlKE5GU19TRVJWRVIoZGly
KSwgTkZTX0ZIKGRpciksIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlmIChlcnJvcikKLQkJ
cmV0dXJuIGVycm9yOwotCi0JbmZzX2ludmFsaWRhdGVfZGlyY2FjaGUoZGlyKTsKLQlkX2Rl
bGV0ZShkZW50cnkpOwotCXJldHVybiAwOworCWlmIChkZW50cnktPmRfY291bnQgPT0gMSB8
fCBuZnNfc2lsbHlyZW5hbWUoZGlyLCBkZW50cnkpIDwgMCkKKwkJcmV0dXJuIG5mc19kb191
bmxpbmsoZGlyLCBkZW50cnkpOworCWVsc2UKKwkJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBp
bnQgbmZzX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRy
eSwgY29uc3QgY2hhciAqc3ltbmFtZSkKQEAgLTU4MSwxNCArNzIwLDE0IEBACiAJc2F0dHIu
dWlkID0gc2F0dHIuZ2lkID0gc2F0dHIuc2l6ZSA9ICh1bnNpZ25lZCkgLTE7CiAJc2F0dHIu
YXRpbWUuc2Vjb25kcyA9IHNhdHRyLm10aW1lLnNlY29uZHMgPSAodW5zaWduZWQpIC0xOwog
Ci0JZXJyb3IgPSBuZnNfcHJvY19zeW1saW5rKE5GU19TRVJWRVIoZGlyKSwgTkZTX0ZIKGRp
ciksCi0JCWRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN5bW5hbWUsICZzYXR0cik7CisJZXJyb3Ig
PSBORlNfUFJPQyhzeW1saW5rLCBkaXIsCisJCQkgZGVudHJ5LT5kX25hbWUubmFtZSwgc3lt
bmFtZSwgJnNhdHRyKTsKIAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiAJbmZz
X2ludmFsaWRhdGVfZGlyY2FjaGUoZGlyKTsKLQkvKiAgdGhpcyBsb29rcyBfZnVubnlfIGRv
ZXNuJ3QgaXQ/IEJ1dDogbmZzX3Byb2Nfc3ltbHluaygpCisJLyogIHRoaXMgbG9va3MgX2Z1
bm55XyBkb2Vzbid0IGl0PyBCdXQ6IG5mc19wcm9jX3N5bWxpbmsoKQogCSAqICBvbmx5IGZp
bGxzIGluIHNhdHRyLCBub3QgZmF0dHIuIFRodXMgbmZzX2ZoZ2V0KCkgY2Fubm90IGJlCiAJ
ICogIGNhbGxlZCwgaXQgd291bGQgYmUgcG9pbnRsZXNzLCB3aXRob3V0IGEgdmFsaWQgZmF0
dHIKIAkgKiAgYXJndW1lbnQuIE90aGVyIHBvc3NpYmlsaXR5OiBjYWxsIG5mc19wcm9jX2xv
b2t1cCgpCkBAIC02MTYsOCArNzU1LDEzIEBACiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+
IE5GU19NQVhOQU1MRU4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JZXJyb3IgPSBu
ZnNfcHJvY19saW5rKE5GU19TRVJWRVIoaW5vZGUpLCBORlNfRkgoaW5vZGUpLAotCQlORlNf
RkgoZGlyKSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJLyogbm9wZSwgdGhpcyBsb29wIGlz
IHJlYWxseSB2ZXJ5IGZpbml0ZQorCSAqLworCWRvIHsKKwkJZXJyb3IgPSBuZnNfcHJvY19s
aW5rKE5GU19TRVJWRVIoaW5vZGUpLCBORlNfRkgoaW5vZGUpLAorCQkJCSAgICAgIE5GU19G
SChkaXIpLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwl9IHdoaWxlKGVycm9yID09IC1FU1RB
TEUgJiYKKwkJIW5mc19maF9yZWdldChpbm9kZSkgJiYgIW5mc19maF9yZWdldChkaXIpKTsK
IAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtNjM0LDggKzc3OCwxMSBAQAog
ICogZGlmZmVyZW50IGZpbGUgaGFuZGxlIGZvciB0aGUgc2FtZSBpbm9kZSBhZnRlciBhIHJl
bmFtZSAoZS5nLiB3aGVuCiAgKiBtb3ZpbmcgdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5KS4g
QSBmYWlsLXNhZmUgbWV0aG9kIHRvIGRvIHNvIHdvdWxkCiAgKiBiZSB0byBsb29rIHVwIG9s
ZF9kaXIvb2xkX25hbWUsIGNyZWF0ZSBhIGxpbmsgdG8gbmV3X2Rpci9uZXdfbmFtZSBhbmQK
LSAqIHJlbmFtZSB0aGUgb2xkIGZpbGUgdXNpbmcgdGhlIHNpbGx5X3JlbmFtZSBzdHVmZi4g
VGhpcyB3YXksIHRoZSBvcmlnaW5hbAorICogcmVuYW1lIHRoZSBvbGQgZmlsZSB1c2luZyB0
aGUgc2lsbHlyZW5hbWUgc3R1ZmYuIFRoaXMgd2F5LCB0aGUgb3JpZ2luYWwKICAqIGZpbGUg
aW4gb2xkX2RpciB3aWxsIGdvIGF3YXkgd2hlbiB0aGUgbGFzdCBwcm9jZXNzIGlwdXQoKXMg
dGhlIGlub2RlLgorICoKKyAqIE5vdCBmaXhlZC4gSSBkb24ndCB0aGluayB0aGF0IHRoaXMg
Y2FuIGJlIGZpeGVkIGhlcmUuIE5vcGUuIDotKAorICoKICAqLwogc3RhdGljIGludCBuZnNf
cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRy
eSwKIAkJICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdf
ZGVudHJ5KQpAQCAtNjU2LDEyICs4MDMsMjAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQog
CisJaWYgKG9sZF9kZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfTkZTRlNfUkVOQU1FRCkKKwkJ
cmV0dXJuIC1FQlVTWTsgLyogZG9uJ3QgYWxsb3cgcmVuYW1pbmcgb2Ygc2lsbHkgZGVudHJp
ZXMgKi8KKwogCWlmIChvbGRfZGVudHJ5LT5kX25hbWUubGVuID4gTkZTX01BWE5BTUxFTiB8
fCBuZXdfZGVudHJ5LT5kX25hbWUubGVuID4gTkZTX01BWE5BTUxFTikKIAkJcmV0dXJuIC1F
TkFNRVRPT0xPTkc7CiAKLQllcnJvciA9IG5mc19wcm9jX3JlbmFtZShORlNfU0VSVkVSKG9s
ZF9kaXIpLAotCQlORlNfRkgob2xkX2RpciksIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAot
CQlORlNfRkgobmV3X2RpciksIG5ld19kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlkbyB7CisJ
CWVycm9yID0gbmZzX3Byb2NfcmVuYW1lKE5GU19TRVJWRVIob2xkX2RpciksCisJCQkJCU5G
U19GSChvbGRfZGlyKSwKKwkJCQkJb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJCU5G
U19GSChuZXdfZGlyKSwKKwkJCQkJbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCX0gd2hp
bGUgKGVycm9yID09IC1FU1RBTEUgJiYKKwkJICFuZnNfZmhfcmVnZXQob2xkX2RpcikgJiYg
IW5mc19maF9yZWdldChuZXdfZGlyKSk7CiAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJv
cjsKQEAgLTczNywzICs4OTIsMTAgQEAKIAl9IGVsc2UKIAkJaW5vZGUtPmlfb3AgPSBOVUxM
OwogfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogIHZlcnNpb24tY29udHJvbDog
dAorICogIGtlcHQtbmV3LXZlcnNpb25zOiA1CisgKiBFbmQ6CisgKi8KLS0tIGxpbnV4LTIu
MS41MS9mcy9uZnMvaW5vZGUuYy5vcmlnCVRodSBBdWcgMTQgMDI6Mzc6NDggMTk5NworKysg
bGludXgtMi4xLjUxL2ZzL25mcy9pbm9kZS5jCU1vbiBBdWcgMjUgMTQ6MjU6MDEgMTk5NwpA
QCAtNzcsMTAgKzc3LDYgQEAKIAlkcHJpbnRrKCJORlM6IHB1dF9pbm9kZSgleC8lbGQpXG4i
LCBpbm9kZS0+aV9kZXYsIGlub2RlLT5pX2lubyk7CiB9CiAKLS8qCi0gKiBUaGlzIHNob3Vs
ZCBkbyBhbnkgc2lsbHktcmVuYW1lIGNsZWFudXBzIG9uY2Ugd2UKLSAqIGdldCBzaWxseS1y
ZW5hbWluZyB3b3JraW5nIGFnYWluLi4KLSAqLwogc3RhdGljIHZvaWQKIG5mc19kZWxldGVf
aW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiB7CkBAIC0xMzMsNiArMTI5LDIzIEBACiB9
CiAKIC8qCisgKiBMaWtlIG5mc19maGdldCgpIGJ1dCB3ZSBkb24ndCB5ZXQga25vdyB0aGUg
ZmF0dHIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKgorbmZzX3Jvb3RfZmhnZXQoc3Ry
dWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG5mc19maCAqZmhhbmRsZSkKK3sKKwlzdHJ1
Y3QgbmZzX2ZhdHRyIGZhdHRyOworCWludCBlcnJvcjsKKworCWVycm9yID0gbmZzX3Byb2Nf
Z2V0YXR0cigmc2ItPnUubmZzX3NiLnNfc2VydmVyLCBmaGFuZGxlLCAmZmF0dHIpOworCWlm
IChlcnJvcikgeworCQlwcmludGsoIm5mc19yb290X2ZoZ2V0OiBnZXRhdHRyIGVycm9yID0g
JWRcbiIsIC1lcnJvcik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gbmZzX2ZoZ2V0
KHNiLCBmaGFuZGxlLCAmZmF0dHIpOworfQorCisvKgogICogVGhlIHdheSB0aGlzIHdvcmtz
IGlzIHRoYXQgdGhlIG1vdW50IHByb2Nlc3MgcGFzc2VzIGEgc3RydWN0dXJlCiAgKiBpbiB0
aGUgZGF0YSBhcmd1bWVudCB3aGljaCBjb250YWlucyB0aGUgc2VydmVyJ3MgSVAgYWRkcmVz
cwogICogYW5kIHRoZSByb290IGZpbGUgaGFuZGxlIG9idGFpbmVkIGZyb20gdGhlIHNlcnZl
cidzIG1vdW50CkBAIC0xODIsNyArMTk1LDYgQEAKIAlzZXJ2ZXItPmFjZGlybWluID0gZGF0
YS0+YWNkaXJtaW4qSFo7CiAJc2VydmVyLT5hY2Rpcm1heCA9IGRhdGEtPmFjZGlybWF4Kkha
OwogCXN0cmNweShzZXJ2ZXItPmhvc3RuYW1lLCBkYXRhLT5ob3N0bmFtZSk7Ci0Jc2ItPnUu
bmZzX3NiLnNfcm9vdCA9IGRhdGEtPnJvb3Q7CiAKIAkvKiBXZSBub3cgcmVxdWlyZSB0aGF0
IHRoZSBtb3VudCBwcm9jZXNzIHBhc3NlcyB0aGUgcmVtb3RlIGFkZHJlc3MgKi8KIAltZW1j
cHkoJnNydmFkZHIsICZkYXRhLT5hZGRyLCBzaXplb2Yoc3J2YWRkcikpOwpAQCAtMjM3LDcg
KzI0OSw3IEBACiAJLyogVW5sb2NrIHN1cGVyIGJsb2NrIGFuZCB0cnkgdG8gZ2V0IHJvb3Qg
ZmggYXR0cmlidXRlcyAqLwogCXVubG9ja19zdXBlcihzYik7CiAKLQlzYi0+c19yb290ID0g
ZF9hbGxvY19yb290KG5mc19maGdldChzYiwgJmRhdGEtPnJvb3QsIE5VTEwpLCBOVUxMKTsK
KwlzYi0+c19yb290ID0gZF9hbGxvY19yb290KG5mc19yb290X2ZoZ2V0KHNiLCAmZGF0YS0+
cm9vdCksIE5VTEwpOwogCWlmIChzYi0+c19yb290ICE9IE5VTEwpIHsKIAkJLyogV2UncmUg
YWlyYm9ybmUgKi8KIAkJaWYgKCEoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9OT05MTSkp
CkBAIC0yNjUsOCArMjc3LDcgQEAKIAlzdHJ1Y3QgbmZzX2ZzaW5mbyByZXM7CiAJc3RydWN0
IHN0YXRmcyB0bXA7CiAKLQllcnJvciA9IG5mc19wcm9jX3N0YXRmcygmc2ItPnUubmZzX3Ni
LnNfc2VydmVyLCAmc2ItPnUubmZzX3NiLnNfcm9vdCwKLQkJJnJlcyk7CisJZXJyb3IgPSBO
RlNfUFJPQyhzdGF0ZnMsIHNiLT5zX3Jvb3QtPmRfaW5vZGUsICZyZXMpOwogCWlmIChlcnJv
cikgewogCQlwcmludGsoIm5mc19zdGF0ZnM6IHN0YXRmcyBlcnJvciA9ICVkXG4iLCAtZXJy
b3IpOwogCQlyZXMuYnNpemUgPSByZXMuYmxvY2tzID0gcmVzLmJmcmVlID0gcmVzLmJhdmFp
bCA9IDA7CkBAIC0yODIsNiArMjkzLDc4IEBACiAJcmV0dXJuIGNvcHlfdG9fdXNlcihidWYs
ICZ0bXAsIGJ1ZnNpeikgPyAtRUZBVUxUIDogMDsKIH0KIAorLyogIHRyYXZlcnNlIHRoZSBh
bGlhcyBsaXN0IGFuZCB0cnkgdG8gZ2V0IGEgdmFsaWQgbmZzIGZpbGUgaGFuZGxlLgorICoK
KyAqICBUaGlzIGlzIHJhdGhlciB1Z2x5IGJ1dCBzaG91bGQgd29yay4gSXQgZG9lcyB3b3Jr
LgorICoKKyAqICBUaGUgcHJvYmxlbSBpczoKKyAqCisgKiAgTkZTIGlzIGEgRklMRSBOQU1F
IGJhc2VkIHByb3RvY29sLCBhbmQgYWxsIHRoZSBrZXJuZWwgZmlsZSBhY2Nlc3MKKyAqICBp
cyBpbm9kZSBiYXNlZC4KKyAqLworaW50IG5mc19maF9yZWdldChzdHJ1Y3QgaW5vZGUgKmlu
b2RlKQoreworCXN0cnVjdCBuZnNfZmggZmhhbmRsZTsKKwlzdHJ1Y3QgbmZzX2ZhdHRyIGZh
dHRyOworCXN0cnVjdCBsaXN0X2hlYWQgKnN0YXJ0ID0gaW5vZGUtPmlfZGVudHJ5Lm5leHQ7
CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWludCBlcnJvciA9IC1FU1RBTEU7CisJCisJ
LyogIExvY2sgdGhlIGFsaWFzIGxpc3QuCisJICovCisJZm9yICh0bXAgPSBzdGFydDsgdG1w
ICE9ICZpbm9kZS0+aV9kZW50cnk7IHRtcCA9IHRtcC0+bmV4dCkgeworCQlkZ2V0KGxpc3Rf
ZW50cnkodG1wLCBzdHJ1Y3QgZGVudHJ5LCBkX2FsaWFzKSk7CisJfQorCS8qICBub3cgd2Ug
aGF2ZSBsb2NrZWQgdGhlIGVudGlyZSBhbGlhcyBsaXN0LgorCSAqICBTaG91bGRuJ3QgYmUg
dG9vIG1hbnkgZW50cmllcy4gTm90ZTogbmV3IGxpc3QgZW50cmllcworCSAqICBhcmUgYWx3
YXlzIGVucXVldWVkIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QuIEFuZCBhcyB3ZSBoYXZlCisJ
ICogIGxvY2tlZCB0aGUgZW50aXJlIGxpc3QsIG5vbmUgb2YgdGhlIGRlbnRyaWVzIGNhbiBi
ZSAKKwkgKiAgZGVsZXRlZCBmcm9tIGl0IQorCSAqCisJICogIFRoYXQgbWVhbnMgdGhhdCB3
ZSBub3cgY2FuIHN0YXJ0IGFub3RoZXIgdHJhdmVyc2FsIG9mIHRoZQorCSAqICBsaXN0LiBC
dXQgdGhpcyB0aW1lIHdlIGFyZSBhbGxvd2VkIHRvIHNsZWVwIQorCSAqLworCWZvciAodG1w
ID0gc3RhcnQ7IHRtcCAhPSAmaW5vZGUtPmlfZGVudHJ5OyB0bXAgPSB0bXAtPm5leHQpIHsK
KwkJc3RydWN0IGRlbnRyeSAqYWxpYXMgPSBsaXN0X2VudHJ5KHRtcCwKKwkJCQkJCSAgc3Ry
dWN0IGRlbnRyeSwgZF9hbGlhcyk7CisJCXN0cnVjdCBpbm9kZSAqZGlyID0gYWxpYXMtPmRf
cGFyZW50LT5kX2lub2RlOworCisJCWlmIChhbGlhcy0+ZF9jb3VudCA9PSAxKQorCQkJY29u
dGludWU7IC8qIGRvbid0IHRha2UgdW51c2VkIGRlbnRyaWVzIGludG8gCisJCQkJICAgKiBh
Y2NvdW50CisJCQkJICAgKi8KKworCQlwcmludGsoX19GVU5DVElPTl9fICI6IHRyeWluZyAl
cy8lc1xuIiwKKwkJICAgICAgIGFsaWFzLT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGFsaWFz
LT5kX25hbWUubmFtZSk7CisjaWYgMQorCQllcnJvciA9IG5mc19wcm9jX2xvb2t1cChORlNf
U0VSVkVSKGRpciksIE5GU19GSChkaXIpLAorCQkJCQlhbGlhcy0+ZF9uYW1lLm5hbWUsCisJ
CQkJCSZmaGFuZGxlLCAmZmF0dHIpOworI2Vsc2UKKwkJLyogVGhpcyB3b3VsZCBiZSBhIHJl
Y3Vyc2lvbi4gVGhpcyBjb3VsZCBiZSBuZWNlc3NhcnkgCisJCSAqIGlmIHRoZSBwYXJlbnQg
bmZzIGZpbGUgaGFuZGxlIGJlY29tZXMgc3RhbGUuCisJCSAqLworCQllcnJvciA9IE5GU19Q
Uk9DKGxvb2t1cCwgZGlyLCBhbGlhcy0+ZF9uYW1lLm5hbWUsCisJCQkJICZmaGFuZGxlLCAm
ZmF0dHIpOworI2VuZGlmCisJCWlmICghZXJyb3IpIHsKKwkJCXByaW50ayhfX0ZVTkNUSU9O
X18gIjogc3VjY2VzcyB3aXRoICVzLyVzXG4iLAorCQkJICAgICAgIGFsaWFzLT5kX3BhcmVu
dC0+ZF9uYW1lLm5hbWUsCisJCQkgICAgICAgYWxpYXMtPmRfbmFtZS5uYW1lKTsKKwkJCSpO
RlNfRkgoaW5vZGUpID0gZmhhbmRsZTsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qICBVbmxv
Y2sgdGhlIGFsaWFzIGxpc3QuCisJICovCisJZm9yICh0bXAgPSBzdGFydDsgdG1wICE9ICZp
bm9kZS0+aV9kZW50cnk7IHRtcCA9IHRtcC0+bmV4dCkgeworCQlkcHV0KGxpc3RfZW50cnko
dG1wLCBzdHJ1Y3QgZGVudHJ5LCBkX2FsaWFzKSk7CisJfQorCWlmIChlcnJvcikKKwkJcmV0
dXJuIC1FU1RBTEU7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGlzIGlzIG91ciBvd24g
dmVyc2lvbiBvZiBpZ2V0IHRoYXQgbG9va3MgdXAgaW5vZGVzIGJ5IGZpbGUgaGFuZGxlCiAg
KiBpbnN0ZWFkIG9mIGlub2RlIG51bWJlci4gIFdlIHVzZSB0aGlzIHRlY2huaXF1ZSBpbnN0
ZWFkIG9mIHVzaW5nCkBAIC0yOTQsMjMgKzM3NywxMiBAQAogbmZzX2ZoZ2V0KHN0cnVjdCBz
dXBlcl9ibG9jayAqc2IsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCiAJCQkJICBzdHJ1Y3Qg
bmZzX2ZhdHRyICpmYXR0cikKIHsKLQlzdHJ1Y3QgbmZzX2ZhdHRyIG5ld2ZhdHRyOwotCWlu
dCBlcnJvcjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCiAJaWYgKCFzYikgewogCQlwcmlu
dGsoIm5mc19maGdldDogc3VwZXIgYmxvY2sgaXMgTlVMTFxuIik7CiAJCXJldHVybiBOVUxM
OwogCX0KLQlpZiAoIWZhdHRyKSB7Ci0JCWVycm9yID0gbmZzX3Byb2NfZ2V0YXR0cigmc2It
PnUubmZzX3NiLnNfc2VydmVyLCBmaGFuZGxlLAotCQkJJm5ld2ZhdHRyKTsKLQkJaWYgKGVy
cm9yKSB7Ci0JCQlwcmludGsoIm5mc19maGdldDogZ2V0YXR0ciBlcnJvciA9ICVkXG4iLCAt
ZXJyb3IpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJZmF0dHIgPSAmbmV3ZmF0dHI7Ci0J
fQogCWlmICghKGlub2RlID0gaWdldChzYiwgZmF0dHItPmZpbGVpZCkpKSB7CiAJCXByaW50
aygibmZzX2ZoZ2V0OiBpZ2V0IGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtMzY2
LDggKzQzOCw3IEBACiAJCXNhdHRyLmF0aW1lLnVzZWNvbmRzID0gMDsKIAl9CiAKLQllcnJv
ciA9IG5mc19wcm9jX3NldGF0dHIoTkZTX1NFUlZFUihpbm9kZSksIE5GU19GSChpbm9kZSks
Ci0JCSZzYXR0ciwgJmZhdHRyKTsKKwllcnJvciA9IE5GU19QUk9DKHNldGF0dHIsIGlub2Rl
LCAmc2F0dHIsICZmYXR0cik7CiAJaWYgKCFlcnJvcikgewogCQluZnNfdHJ1bmNhdGVfZGly
dHlfcGFnZXMoaW5vZGUsIHNhdHRyLnNpemUpOwogCQluZnNfcmVmcmVzaF9pbm9kZShpbm9k
ZSwgJmZhdHRyKTsKQEAgLTM4MSw3ICs0NTIsNyBAQAogaW50CiBuZnNfcmV2YWxpZGF0ZShz
dHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXJldHVybiBuZnNfcmV2YWxpZGF0ZV9pbm9kZShO
RlNfU0VSVkVSKGlub2RlKSwgaW5vZGUpOworCXJldHVybiBuZnNfcmV2YWxpZGF0ZV9pbm9k
ZShpbm9kZSk7CiB9CiAKIC8qCkBAIC0zOTYsNyArNDY3LDcgQEAKICAqIEEgdmVyeSBzaW1p
bGFyIHNjZW5hcmlvIGhvbGRzIGZvciB0aGUgZGlyIGNhY2hlLgogICovCiBpbnQKLV9uZnNf
cmV2YWxpZGF0ZV9pbm9kZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgaW5v
ZGUgKmlub2RlKQorX25mc19yZXZhbGlkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUp
CiB7CiAJc3RydWN0IG5mc19mYXR0ciBmYXR0cjsKIAlpbnQJCSBzdGF0dXM7CkBAIC00MDcs
NyArNDc4LDcgQEAKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJldmFsaWRhdGluZyAl
eC8lbGQgaW5vZGVcbiIsCiAJCQlpbm9kZS0+aV9kZXYsIGlub2RlLT5pX2lubyk7CiAJTkZT
X1JFQURUSU1FKGlub2RlKSA9IGppZmZpZXM7Ci0JaWYgKChzdGF0dXMgPSBuZnNfcHJvY19n
ZXRhdHRyKHNlcnZlciwgTkZTX0ZIKGlub2RlKSwgJmZhdHRyKSkgPCAwKQorCWlmICgoc3Rh
dHVzID0gTkZTX1BST0MoZ2V0YXR0ciwgaW5vZGUsICZmYXR0cikpIDwgMCkKIAkJZ290byBk
b25lOwogCiAJbmZzX3JlZnJlc2hfaW5vZGUoaW5vZGUsICZmYXR0cik7CkBAIC00NTQsNiAr
NTI1LDggQEAKIGluaXRfbmZzX2ZzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMK
KwlycGNfcmVnaXN0ZXJfc3lzY3RsKCk7CisJcnBjX3Byb2NfaW5pdCgpOwogCXJwY19wcm9j
X3JlZ2lzdGVyKCZuZnNfcnBjc3RhdCk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHJlZ2lz
dGVyX2ZpbGVzeXN0ZW0oJm5mc19mc190eXBlKTsKLS0tIGxpbnV4LTIuMS41MS9mcy9uZnMv
cmVhZC5jLm9yaWcJVGh1IEF1ZyAxNCAwMjozNzo0OCAxOTk3CisrKyBsaW51eC0yLjEuNTEv
ZnMvbmZzL3JlYWQuYwlNb24gQXVnIDI1IDE0OjI1OjAxIDE5OTcKQEAgLTY4LDEzICs2OCwx
MiBAQAogaW50CiBuZnNfcmVhZHBhZ2Vfc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1
Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbmZzX3JyZXEJcnFzdDsKKwlzdHJ1Y3QgbmZz
X2ZhdHRyIGZhdHRyOwogCXVuc2lnbmVkIGxvbmcJb2Zmc2V0ID0gcGFnZS0+b2Zmc2V0Owog
CWNoYXIJCSpidWZmZXIgPSAoY2hhciAqKSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJaW50CQly
c2l6ZSA9IE5GU19TRVJWRVIoaW5vZGUpLT5yc2l6ZTsKIAlpbnQJCXJlc3VsdCwgcmVmcmVz
aCA9IDA7CiAJaW50CQljb3VudCA9IFBBR0VfU0laRTsKLQlpbnQJCWZsYWdzID0gSVNfU1dB
UEZJTEUoaW5vZGUpPyBORlNfUlBDX1NXQVBGTEFHUyA6IDA7CiAKIAlkcHJpbnRrKCJORlM6
IG5mc19yZWFkcGFnZV9zeW5jKCVwKVxuIiwgcGFnZSk7CiAJY2xlYXJfYml0KFBHX2Vycm9y
LCAmcGFnZS0+ZmxhZ3MpOwpAQCAtODcsMTAgKzg2LDkgQEAKIAkJCU5GU19TRVJWRVIoaW5v
ZGUpLT5ob3N0bmFtZSwgaW5vZGUtPmlfZGV2LAogCQkJaW5vZGUtPmlfaW5vLCBvZmZzZXQs
IHJzaXplLCBidWZmZXIpOwogCi0JCS8qIFNldCB1cCBhcmd1bWVudHMgYW5kIHBlcmZvcm0g
cnBjIGNhbGwgKi8KLQkJbmZzX3JlYWRyZXFfc2V0dXAoJnJxc3QsIE5GU19GSChpbm9kZSks
IG9mZnNldCwgYnVmZmVyLCByc2l6ZSk7Ci0JCXJlc3VsdCA9IHJwY19jYWxsKE5GU19DTElF
TlQoaW5vZGUpLCBORlNQUk9DX1JFQUQsCi0JCQkJCSZycXN0LnJhX2FyZ3MsICZycXN0LnJh
X3JlcywgZmxhZ3MpOworCQlyZXN1bHQgPSBORlNfUFJPQyhyZWFkLCBpbm9kZSwKKwkJCQkg
IElTX1NXQVBGSUxFKGlub2RlKSwgb2Zmc2V0LCByc2l6ZSwKKwkJCQkgIGJ1ZmZlciwgJmZh
dHRyKTsKIAogCQkvKgogCQkgKiBFdmVuIGlmIHdlIGhhZCBhIHBhcnRpYWwgc3VjY2VzcyB3
ZSBjYW4ndCBtYXJrIHRoZSBwYWdlCkBAIC0xMTUsNyArMTEzLDcgQEAKIAogaW9fZXJyb3I6
CiAJaWYgKHJlZnJlc2gpCi0JCW5mc19yZWZyZXNoX2lub2RlKGlub2RlLCAmcnFzdC5yYV9m
YXR0cik7CisJCW5mc19yZWZyZXNoX2lub2RlKGlub2RlLCAmZmF0dHIpOwogCWNsZWFyX2Jp
dChQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CiAJd2FrZV91cCgmcGFnZS0+d2FpdCk7CiAJ
cmV0dXJuIHJlc3VsdDsKLS0tIGxpbnV4LTIuMS41MS9mcy9uZnMvc3ltbGluay5jLm9yaWcJ
VGh1IEF1ZyAyMSAxOToxOToyOCAxOTk3CisrKyBsaW51eC0yLjEuNTEvZnMvbmZzL3N5bWxp
bmsuYwlNb24gQXVnIDI1IDE0OjI1OjAxIDE5OTcKQEAgLTU1LDggKzU1LDcgQEAKIAogCWlm
IChidWZsZW4gPiBORlNfTUFYUEFUSExFTikKIAkJYnVmbGVuID0gTkZTX01BWFBBVEhMRU47
Ci0JZXJyb3IgPSBuZnNfcHJvY19yZWFkbGluayhORlNfU0VSVkVSKGlub2RlKSwgTkZTX0ZI
KGlub2RlKSwgJm1lbSwKLQkJJnJlcywgJmxlbiwgYnVmbGVuKTsKKwllcnJvciA9IE5GU19Q
Uk9DKHJlYWRsaW5rLCBpbm9kZSwgJm1lbSwJJnJlcywgJmxlbiwgYnVmbGVuKTsKIAlpZiAo
ISBlcnJvcikgewogCQljb3B5X3RvX3VzZXIoYnVmZmVyLCByZXMsIGxlbik7CiAJCXB1dF91
c2VyKCdcMCcsIGJ1ZmZlciArIGxlbik7CkBAIC03Niw4ICs3NSw4IEBACiAKIAlkZnByaW50
ayhWRlMsICJuZnM6IGZvbGxvd19saW5rKCV4LyVsZClcbiIsIGlub2RlLT5pX2RldiwgaW5v
ZGUtPmlfaW5vKTsKIAotCWVycm9yID0gbmZzX3Byb2NfcmVhZGxpbmsoTkZTX1NFUlZFUihp
bm9kZSksIE5GU19GSChpbm9kZSksICZtZW0sCi0JCSZyZXMsICZsZW4sIE5GU19NQVhQQVRI
TEVOKTsKKwllcnJvciA9IE5GU19QUk9DKHJlYWRsaW5rLCBpbm9kZSwKKwkJCSAmbWVtLCAm
cmVzLCAmbGVuLCBORlNfTUFYUEFUSExFTik7CiAKIAlpZiAoZXJyb3IpIHsKIAkJZHB1dChi
YXNlKTsKLS0tIGxpbnV4LTIuMS41MS9mcy9uZnMvd3JpdGUuYy5vcmlnCVRodSBBdWcgMTQg
MDI6Mzg6NDEgMTk5NworKysgbGludXgtMi4xLjUxL2ZzL25mcy93cml0ZS5jCU1vbiBBdWcg
MjUgMTQ6MjU6MDIgMTk5NwpAQCAtMTc0LDEyICsxNzQsMTIgQEAKIAlvZmZzZXQgKz0gcGFn
ZS0+b2Zmc2V0OwogCiAJZG8gewotCQlpZiAoY291bnQgPCB3c2l6ZSAmJiAhSVNfU1dBUEZJ
TEUoaW5vZGUpKQorCQlpZiAoY291bnQgPCB3c2l6ZSkKIAkJCXdzaXplID0gY291bnQ7CiAK
LQkJcmVzdWx0ID0gbmZzX3Byb2Nfd3JpdGUoTkZTX1NFUlZFUihpbm9kZSksIE5GU19GSChp
bm9kZSksCi0JCQkJCUlTX1NXQVBGSUxFKGlub2RlKSwgb2Zmc2V0LCB3c2l6ZSwKLQkJCQkJ
YnVmZmVyLCAmZmF0dHIpOworCSAgICAgICByZXN1bHQgPSBORlNfUFJPQyh3cml0ZSwgaW5v
ZGUsCisJCQkJIElTX1NXQVBGSUxFKGlub2RlKSwgb2Zmc2V0LCB3c2l6ZSwKKwkJCQkgYnVm
ZmVyLCAmZmF0dHIpOwogCiAJCWlmIChyZXN1bHQgPCAwKSB7CiAJCQkvKiBNdXN0IG1hcmsg
dGhlIHBhZ2UgaW52YWxpZCBhZnRlciBJL08gZXJyb3IgKi8KLS0tIGxpbnV4LTIuMS41MS9m
cy9kY2FjaGUuYy5vcmlnCVRodSBBdWcgMjEgMTk6MTk6MjcgMTk5NworKysgbGludXgtMi4x
LjUxL2ZzL2RjYWNoZS5jCU1vbiBBdWcgMjUgMTQ6MjU6MDAgMTk5NwpAQCAtNzEsMTIgKzcx
LDE2IEBACiAJCX0KIAkJZGVudHJ5LT5kX2NvdW50ID0gY291bnQ7CiAJCWlmICghY291bnQp
IHsKKwkJCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2RlbGV0ZSkgewor
CQkJCSgqZGVudHJ5LT5kX29wLT5kX2RlbGV0ZSkoZGVudHJ5KTsKKwkJCX0KIAkJCWxpc3Rf
ZGVsKCZkZW50cnktPmRfbHJ1KTsKIAkJCWlmIChsaXN0X2VtcHR5KCZkZW50cnktPmRfaGFz
aCkpIHsKIAkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCQkJ
CXN0cnVjdCBkZW50cnkgKiBwYXJlbnQ7CiAJCQkJaWYgKGlub2RlKSB7CiAJCQkJCWxpc3Rf
ZGVsKCZkZW50cnktPmRfYWxpYXMpOworCQkJCQlkZW50cnktPmRfaW5vZGUgPSBOVUxMOwog
CQkJCQlpcHV0KGlub2RlKTsKIAkJCQl9CiAJCQkJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVu
dDsKLS0tIGxpbnV4LTIuMS41MS9pbmNsdWRlL2xpbnV4L25mc19mcy5oLm9yaWcJTW9uIEF1
ZyAxOCAwMDoxMzozOCAxOTk3CisrKyBsaW51eC0yLjEuNTEvaW5jbHVkZS9saW51eC9uZnNf
ZnMuaAlNb24gQXVnIDI1IDE0OjM0OjI0IDE5OTcKQEAgLTUzLDYgKzUzLDIyIEBACiAgKi8K
ICNkZWZpbmUgTkZTX1NVUEVSX01BR0lDCQkJMHg2OTY5CiAKK2V4dGVybiBpbnQgbmZzX2Zo
X3JlZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCisvKiBQbGFjZSBhIG5mc19wcm9jXyBj
YWxsIGFuZCByZXRyeSBpZiB0aGUgZmlsZSBoYW5kbGUgaXMgaW52YWxpZC4KKyAqIFVnbHku
IEJ1dCBuZWNlc3NhcnkuCisgKi8KKyNkZWZpbmUgTkZTX1BST0MocHJvYywgaW5vZGUsIGFy
Z3MuLi4pCQkJCQkgIFwKKyh7CQkJCQkJCQkJICBcCisJaW50IGVycm9yOwkJCQkJCQkgIFwK
KwlkbyB7CQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorCQllcnJvciA9IG5mc19wcm9jXyMj
cHJvYyhORlNfU0VSVkVSKGlub2RlKSwgTkZTX0ZIKGlub2RlKSwgXAorCQkJCQkjI2FyZ3Mp
OwkJCSAgXAorCX0gd2hpbGUoZXJyb3IgPT0gLUVTVEFMRSAmJiAhbmZzX2ZoX3JlZ2V0KGlu
b2RlKSk7CQkgIFwKKwllcnJvcjsJCQkJCQkJCSAgXAorfSkKKwogI2RlZmluZSBORlNfU0VS
VkVSKGlub2RlKQkJKCYoaW5vZGUpLT5pX3NiLT51Lm5mc19zYi5zX3NlcnZlcikKICNkZWZp
bmUgTkZTX0NMSUVOVChpbm9kZSkJCShORlNfU0VSVkVSKGlub2RlKS0+Y2xpZW50KQogI2Rl
ZmluZSBORlNfQUREUihpbm9kZSkJCQkoUlBDX1BFRVJBRERSKE5GU19DTElFTlQoaW5vZGUp
KSkKQEAgLTc2LDggKzkyLDYgQEAKIAogI2RlZmluZSBORlNfRkxBR1MoaW5vZGUpCQkoKGlu
b2RlKS0+dS5uZnNfaS5mbGFncykKICNkZWZpbmUgTkZTX1JFVkFMSURBVElORyhpbm9kZSkJ
CShORlNfRkxBR1MoaW5vZGUpICYgTkZTX0lOT19SRVZBTElEQVRFKQotCi0jZGVmaW5lIE5G
U19SRU5BTUVEX0RJUihpbm9kZSkJCSgoaW5vZGUpLT51Lm5mc19pLnNpbGx5X2lub2RlKQog
I2RlZmluZSBORlNfV1JJVEVCQUNLKGlub2RlKQkJKChpbm9kZSktPnUubmZzX2kud3JpdGVi
YWNrKQogCiAvKgpAQCAtMTQwLDcgKzE1NCw3IEBACiAJCQkgICAgICAgc3RydWN0IG5mc19m
YXR0ciAqZmF0dHIpOwogZXh0ZXJuIHZvaWQgbmZzX3JlZnJlc2hfaW5vZGUoc3RydWN0IGlu
b2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpOwogZXh0ZXJuIGludCBuZnNf
cmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gaW50IF9uZnNfcmV2YWxpZGF0
ZV9pbm9kZShzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4g
aW50IF9uZnNfcmV2YWxpZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiAKIC8qCiAgKiBs
aW51eC9mcy9uZnMvZmlsZS5jCkBAIC0xOTksMTEgKzIxMywxMSBAQAogICogaW5saW5lIGZ1
bmN0aW9ucwogICovCiBzdGF0aWMgaW5saW5lIGludAotbmZzX3JldmFsaWRhdGVfaW5vZGUo
c3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGlub2RlICppbm9kZSkKK25mc19y
ZXZhbGlkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKGppZmZpZXMg
LSBORlNfUkVBRFRJTUUoaW5vZGUpIDwgTkZTX0FUVFJUSU1FTyhpbm9kZSkpCiAJCXJldHVy
biAwOwotCXJldHVybiBfbmZzX3JldmFsaWRhdGVfaW5vZGUoc2VydmVyLCBpbm9kZSk7CisJ
cmV0dXJuIF9uZnNfcmV2YWxpZGF0ZV9pbm9kZShpbm9kZSk7CiB9CiAKIGV4dGVybiBzdHJ1
Y3QgbmZzX3dyZXEgKgluZnNfZmFpbGVkX3JlcXVlc3RzOwotLS0gbGludXgtMi4xLjUxL2lu
Y2x1ZGUvbGludXgvbmZzX2ZzX2kuaC5vcmlnCU1vbiBBdWcgMTggMDA6MDk6NDQgMTk5Nwor
KysgbGludXgtMi4xLjUxL2luY2x1ZGUvbGludXgvbmZzX2ZzX2kuaAlNb24gQXVnIDI1IDE0
OjI1OjAyIDE5OTcKQEAgLTQ3LDEzICs0Nyw2IEBACiAJdW5zaWduZWQgbG9uZwkJYXR0cnRp
bWVvOwogCiAJLyoKLQkgKiBUaGlzIGlzIHRvIHN1cHBvcnQgdGhlIGNsYW5kZXN0aW5lIHJl
bmFtZSBvbiB1bmxpbmsuCi0JICogSW5zdGVhZCBvZiB0aGUgZGlyZWN0b3J5IGlub2RlLCB3
ZSBtaWdodCBhcyB3ZWxsIGtlZXAKLQkgKiBpdHMgTkZTIEZILCBidXQgdGhhdCByZXF1aXJl
cyBhIGttYWxsb2MuCi0JICovCi0Jc3RydWN0IGlub2RlICoJCXNpbGx5X2lub2RlOwotCi0J
LyoKIAkgKiBUaGlzIGlzIHRoZSBsaXN0IG9mIGRpcnR5IHVud3JpdHRlbiBwYWdlcy4KIAkg
KiBORlN2MyB3aWxsIHdhbnQgdG8gYWRkIGEgbGlzdCBmb3Igd3JpdHRlbiBidXQgdW5jb21t
aXR0ZWQKIAkgKiBwYWdlcy4KLS0tIGxpbnV4LTIuMS41MS9pbmNsdWRlL2xpbnV4L25mc19m
c19zYi5oLm9yaWcJTW9uIEF1ZyAxOCAwMDowOTo0NSAxOTk3CisrKyBsaW51eC0yLjEuNTEv
aW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAlNb24gQXVnIDI1IDE0OjM0OjIxIDE5OTcKQEAg
LTI2LDcgKzI2LDYgQEAKICAqLwogc3RydWN0IG5mc19zYl9pbmZvIHsKIAlzdHJ1Y3QgbmZz
X3NlcnZlcglzX3NlcnZlcjsKLQlzdHJ1Y3QgbmZzX2ZoCQlzX3Jvb3Q7CiB9OwogCiAjZW5k
aWYKLS0tIGxpbnV4LTIuMS41MS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLm9yaWcJVGh1IEF1
ZyAyMSAxOToxOTozMyAxOTk3CisrKyBsaW51eC0yLjEuNTEvaW5jbHVkZS9saW51eC9kY2Fj
aGUuaAlNb24gQXVnIDI1IDE0OjI1OjAyIDE5OTcKQEAgLTU3LDYgKzU3LDcgQEAKIAlpbnQg
KCpkX3JldmFsaWRhdGUpKHN0cnVjdCBkZW50cnkgKik7CiAJaW50ICgqZF9oYXNoKSAoc3Ry
dWN0IGRlbnRyeSAqLHN0cnVjdCBxc3RyICopOwogCWludCAoKmRfY29tcGFyZSkgKHN0cnVj
dCBkZW50cnkgKixzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKKwl2b2lkICgqZF9k
ZWxldGUpKHN0cnVjdCBkZW50cnkgKik7CiB9OwogCiAvKiB0aGUgZGVudHJ5IHBhcmFtZXRl
ciBwYXNzZWQgdG8gZF9oYXNoIGFuZCBkX2NvbXBhcmUgaXMgdGhlIHBhcmVudApAQCAtNzAs
NiArNzEsMTAgQEAKIAogLyogZF9mbGFncyBlbnRyaWVzICovCiAjZGVmaW5lIERDQUNIRV9B
VVRPRlNfUEVORElORyAweDAwMDEgICAgLyogYXV0b2ZzOiAidW5kZXIgY29uc3RydWN0aW9u
IiAqLworI2RlZmluZSBEQ0FDSEVfTkZTRlNfUkVOQU1FRCAgMHgwMDAyICAgIC8qIHRoaXMg
ZGVudHJ5IGhhcyBiZWVuICJzaWxseQorCQkJCQkgKiByZW5hbWVkIiBhbmQgaGFzIHRvIGJl
CisJCQkJCSAqIGRlbGV0ZWQgb24gdGhlIGxhc3QgZHB1dCgpCisJCQkJCSAqLwogCiAvKgog
ICogZF9kcm9wKCkgdW5oYXNoZXMgdGhlIGVudHJ5IGZyb20gdGhlIHBhcmVudAo=

--Multipart_Mon_Aug_25_15:37:01_1997-1--