From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA557258CDD; Wed, 26 Feb 2025 10:30:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740565851; cv=none; b=VPN/yT1R7DC7jLsJBeyZEISdeCxgMI17nE1tS5qgJlYc46vmakcseWliUeYM67ScYuthw8Bx4SM2ijsxTMO7gk5IvT4l11YBxmEiUnjPVDX9ulDp1PE4tuChvu+SYBRZp92VtZtxbYX2yGagL36ElRyFGJapkGUYNjV+Ecz2fJk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740565851; c=relaxed/simple; bh=wijT1kDyOdIhQBUcING47TJydWo2DjLgNtDDMO7NjQI=; h=Content-Type:Message-ID:Date:MIME-Version:To:From:Subject:Cc; b=VwurXLcw7cIjH1KTOMYGijo+BaNjZUgDgqlrdme4efzZilycO3ToSckDOnt85fv6IGRhJxnhZ1irdKyxn/v58a/W3Xe8g/rSj2APufAEpmlpe6VEy4AR034R1p25oEgAb13KfnQ08u08LFOQnPlzx4pqw0LH6YoYYbuyAtzCx2M= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gaJWuXT3; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gaJWuXT3" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-220f4dd756eso140175275ad.3; Wed, 26 Feb 2025 02:30:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740565849; x=1741170649; darn=vger.kernel.org; h=cc:subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=IS9uzcO8jR5ynWjpwSXfKP8gOvbD2JYR7QPGWqzg4tQ=; b=gaJWuXT3ceTLdtkOQBPDcc/0C1fireCJMBMmvSOGu8ppnPPgUk1mlM2Gw68Zxyr992 HstNcxHl0SnHlRdtk9TeP8/mZOX2AWv6ek7nBcngXa0ca3elEBqqgfXHINw3+TpR2MIN x2olOWAMUGC7mDspQBHGIHbgoTZywjUrbTKe1oPrfJC+fQkAiae+RzTVMwtG97UzpJ/3 Qh9aVeBBMLU7QmauOHUY2Y+YasIqU9b/TIU968cmHkJrXSrZldvJ17utx8aGphSEjENI 0upj70dt5A5i55aAAZm/cTL4T57Mp0Tvh4Qcyxk/R2x0WAXMLTdxwE52DYaQwXF1jjh9 84eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740565849; x=1741170649; h=cc:subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=IS9uzcO8jR5ynWjpwSXfKP8gOvbD2JYR7QPGWqzg4tQ=; b=YqjGCiYrWcSGik4hQvc6G+BKeemquHCTcCnyfrZzm3BRlJvcYepMBtXDIqG7r5LM3N 0LG5z1dS8R6KKoArpGUNVll3KObIqTt4JDOEMlZWjI1KqNhL6zO1uO6NdR4SzKOpcCCO s9AxGFjmJbgceVhAO6Gki5EeQTy5d7kBrXxGrn96OHXuGmDlANUcDiv8LbUm6fqdF6CL VyOg18ljx2UikWd5/0pM8BTQpI/s0A3/oT1Mq2Cv3vdZ2cY13yalhxk64hAGR3AhSZpO V2Hun2I64HpSV7nmJaLoQD6UnAraiYEpBfnVCJ2G4i3aPhNNKhKpl7/+Pg0LWPapehYg JUww== X-Forwarded-Encrypted: i=1; AJvYcCUTzzqQ97hXeYsPxiinfk02R0m8Gc8tsEjMGUFU/vQpcACEuc2MyAHcyb3sU7QxJPWV9TmLyPGKv/3BLgi2@vger.kernel.org X-Gm-Message-State: AOJu0YyORpHOKsM22VTG5dkKcfTCNMYpvb/IJW94S4Cd9vBjyuBXIr/j t3vxsg3pGoOeUCe3nksJQ/qXq0KwnDf9iI5ypxsy7ZVcuTpkB7vhmPNdLztfEc4= X-Gm-Gg: ASbGncsWt9vJ6vcUMp4aRKEW7Hxw2+Itr5Wom1ISbhzP08ASSf9BJRXRzC4QGRcjn5F jhU73Npz+htWRW+OKd3VAgIVYs/6ITH9dkpIYy/AOJ/dIKaJvn7NBK/amkGN23awyHgnl7RtCK2 LiTAC0gTDsur0MjlsEJbDgIcnq4C0X37BQuabYm2/mvB3V8BChW+NhkVmxVEPTDsOVfkkAwky47 HMZ7GhBmFF1Em1/EQsH1/4nNi/yHiIzjlL0k/Kb8w4spn0g1S6F+7+E6IftHcPJwKba3bYsuo+Q y6cbcDZDqdUDCsP7OZ1bxFRkYUbZcuYmqQVsG2yfn1CS0Evy0IbFa4WsoZIU25AawlSi7dzlKhu 6o6+cLw== X-Google-Smtp-Source: AGHT+IHz/5fZLcZoZqZg3L6jy/KjsHUTVwAIfuDB4TP3lJhE/zCJodmg/uT5es16Fslp5sJNNZQeHA== X-Received: by 2002:a17:902:ccc8:b0:215:ae3d:1dd7 with SMTP id d9443c01a7336-22307b52e9emr110461655ad.19.1740565848697; Wed, 26 Feb 2025 02:30:48 -0800 (PST) Received: from ?IPV6:2401:4900:1c74:28d5:d718:bd21:53c1:5a5? ([2401:4900:1c74:28d5:d718:bd21:53c1:5a5]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2230a01fb35sm28480305ad.84.2025.02.26.02.30.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 26 Feb 2025 02:30:48 -0800 (PST) Content-Type: multipart/mixed; boundary="------------SWJeK0IKYihkes92uGJHXQ03" Message-ID: <96e96c16-7fcc-48d1-a858-7d8d52208fa4@gmail.com> Date: Wed, 26 Feb 2025 16:01:11 +0530 Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: linux-kernel@vger.kernel.org From: Pranjal Prasad Subject: [PATCH] fs/hfsplus: Improve btree clump size calculation and fix parameter parsing Cc: Al Viro , linux-fsdevel@vger.kernel.org This is a multi-part message in MIME format. --------------SWJeK0IKYihkes92uGJHXQ03 Content-Type: multipart/alternative; boundary="------------QwGaus4Yd3lVE2R8AwIin0y6" --------------QwGaus4Yd3lVE2R8AwIin0y6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi all, This patch improves the robustness and correctness of the HFS+ filesystem implementation by addressing issues in |btree.c| and |options.c|. *Changes in fs/hfsplus/btree.c:* * Removed unused |mod| variable. * Fixed potential out-of-bounds access in |clumptbl|. * Made clump size calculation more precise (0.8% explicitly). * Ensured clump size is properly aligned to block/node size. * Improved loop readability for exponent calculation. * Added a fallback to prevent invalid clump sizes. * Updated comment link to Apple's new OSS repository. *Changes in fs/hfsplus/options.c:* * Properly check the |"force"| option during remount. * Validate string lengths safely using |strnlen()|. * Ensure previous NLS mappings are unloaded before loading new ones. * Improve error messages for clarity. *Summary of Changes* **fs/hfsplus/btree.c   | 176 +++++++++++++++++++++++--------------------  fs/hfsplus/options.c | 120 ++++++++++++++---------------  2 files changed, 154 insertions(+), 142 deletions(-) Please find the patch attached Best Regards, Pranjal Prasad * * --------------QwGaus4Yd3lVE2R8AwIin0y6 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi all,

This patch improves the robustness and correctness of the HFS+ filesystem implementation by addressing issues in btree.c and options.c.

Changes in fs/hfsplus/btree.c:

  • Removed unused mod variable.
  • Fixed potential out-of-bounds access in clumptbl.
  • Made clump size calculation more precise (0.8% explicitly).
  • Ensured clump size is properly aligned to block/node size.
  • Improved loop readability for exponent calculation.
  • Added a fallback to prevent invalid clump sizes.
  • Updated comment link to Apple's new OSS repository.

Changes in fs/hfsplus/options.c:

  • Properly check the "force" option during remount.
  • Validate string lengths safely using strnlen().
  • Ensure previous NLS mappings are unloaded before loading new ones.
  • Improve error messages for clarity.

Summary of Changes

 fs/hfsplus/btree.c   | 176 +++++++++++++++++++++++--------------------
 fs/hfsplus/options.c | 120 ++++++++++++++---------------
 2 files changed, 154 insertions(+), 142 deletions(-)

Please find the patch attached

Best Regards,
Pranjal Prasad


--------------QwGaus4Yd3lVE2R8AwIin0y6-- --------------SWJeK0IKYihkes92uGJHXQ03 Content-Type: text/x-patch; charset=UTF-8; name="0001-fs-hfsplus-Improve-btree-clump-size-calculation-etc.patch" Content-Disposition: attachment; filename*0="0001-fs-hfsplus-Improve-btree-clump-size-calculation-etc.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSBmZjQ0ZGY3N2E4NmY1MDgyZDQyZWVjMjk2OTc4MGU3ZmNlNTJkNTdiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQcmFuamFsIFByYXNhZCA8cHJhc2FkcHJhbmphbDIx M0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMjYgRmViIDIwMjUgMTQ6NTU6NDAgKzA1MzAKU3Vi amVjdDogW1BBVENIIDEvMV0gZnMvaGZzcGx1czogSW1wcm92ZSBidHJlZSBjbHVtcCBzaXpl IGNhbGN1bGF0aW9uLCBldGMKIGJ0cmVlLmM6IEltcHJvdmUgYnRyZWUgY2x1bXAgc2l6ZSBj YWxjdWxhdGlvbiAtIFJlbW92ZWQgdW51c2VkIGBtb2RgCiB2YXJpYWJsZS4gLSBGaXhlZCBw b3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gYGNsdW1wdGJsYC4gLSBNYWRlIGNs dW1wCiBzaXplIGNhbGN1bGF0aW9uIG1vcmUgcHJlY2lzZSAoMC44JSBleHBsaWNpdGx5KS4g LSBFbnN1cmVkIGNsdW1wIHNpemUgaXMKIHByb3Blcmx5IGFsaWduZWQgdG8gYmxvY2svbm9k ZSBzaXplLiAtIEltcHJvdmVkIGxvb3AgcmVhZGFiaWxpdHkgZm9yIGV4cG9uZW50CiBjYWxj dWxhdGlvbi4gLSBBZGRlZCBhIGZhbGxiYWNrIHRvIHByZXZlbnQgaW52YWxpZCBjbHVtcCBz aXplcy4gLSBVcGRhdGVkCiBjb21tZW50IGxpbmsgdG8gQXBwbGUncyBuZXcgT1NTIHJlcG9z aXRvcnkuIC0gSW1wcm92ZXMgcm9idXN0bmVzcyBhbmQKIGNvcnJlY3RuZXNzIGluIGJ0cmVl IGNsdW1wIGFsbG9jYXRpb24uCgpvcHRpb25zLmM6IEZpeCBwYXJhbWV0ZXIgcGFyc2luZyBp c3N1ZXMgYW5kIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcKLSBQcm9wZXJseSBjaGVjayB0aGUg ImZvcmNlIiBvcHRpb24gZHVyaW5nIHJlbW91bnQuCi0gVmFsaWRhdGUgc3RyaW5nIGxlbmd0 aHMgc2FmZWx5IHVzaW5nIGBzdHJubGVuKClgLgotIEVuc3VyZSBwcmV2aW91cyBOTFMgbWFw cGluZ3MgYXJlIHVubG9hZGVkIGJlZm9yZSBsb2FkaW5nIG5ldyBvbmVzLgotIEltcHJvdmUg ZXJyb3IgbWVzc2FnZXMgZm9yIGNsYXJpdHkuCgp3cmFwcGVyLmM6IEZpeCBwb3RlbnRpYWwg TlVMTCBkZXJlZmVyZW5jZSBhbmQgdW5pbml0aWFsaXplZCBzdHJ1Y3RzCi0gQWRkZWQgTlVM TCBjaGVja3MgZm9yIGBzYi0+c19iZGV2YCBhbmQgYHNiLT5zX2JkZXYtPmJkX2Rpc2tgIHRv IHByZXZlbnQgY3Jhc2hlcy4KLSBFbnN1cmVkIGBjZHJvbV90b2NlbnRyeWAgYW5kIGBjZHJv bV9tdWx0aXNlc3Npb25gIHN0cnVjdHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuCi0gTW92ZWQg YGNkaWAgTlVMTCBjaGVjayBlYXJsaWVyIHRvIGF2b2lkIGFjY2lkZW50YWwgZGVyZWZlcmVu Y2UuCi0gRml4ZWQgb3BlcmF0b3IgcHJlY2VkZW5jZSBpc3N1ZSBpbiB0cmFjayB0eXBlIGNo ZWNrLgotIEV4cGxpY2l0bHkgY2FzdCB2YWx1ZXMgYmVmb3JlIGxlZnQgc2hpZnRzIChgPDwg MmApIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdy4KLSBBZGRlZCB2YWxpZGF0aW9uIGZv ciBgbXNfaW5mby5hZGRyLmxiYWAgaW4gYGNkcm9tX211bHRpc2Vzc2lvbigpYCB0byBhdm9p ZCB1c2luZyBpbnZhbGlkIGFkZHJlc3Nlcy4KLSBJbXByb3ZlcyBzdGFiaWxpdHkgYW5kIGNv cnJlY3RuZXNzIHdoZW4gcmV0cmlldmluZyB0aGUgbGFzdCBzZXNzaW9uIGZyb20gYW4gSEZT KyBmaWxlc3lzdGVtIG9uIG9wdGljYWwgbWVkaWEuCgpTaWduZWQtb2ZmLWJ5OiBQcmFuamFs IFByYXNhZCA8cHJhc2FkcHJhbmphbDIxM0BnbWFpbC5jb20+Ci0tLQogZnMvaGZzcGx1cy9i dHJlZS5jICAgfCAxNzYgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLQogZnMvaGZzcGx1cy9vcHRpb25zLmMgfCAxMjAgKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTU0IGluc2VydGlvbnMoKyksIDE0MiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2J0cmVlLmMgYi9mcy9oZnNwbHVz L2J0cmVlLmMKaW5kZXggOWUxNzMyYTJiOTJhLi5jMDRjMjlmOTQ3MDEgMTAwNjQ0Ci0tLSBh L2ZzL2hmc3BsdXMvYnRyZWUuYworKysgYi9mcy9oZnNwbHVzL2J0cmVlLmMKQEAgLTYsNiAr Niw5IEBACiAgKiBCcmFkIEJveWVyIChmbGFyQGFsbGFuZHJpYS5jb20pCiAgKiAoQykgMjAw MyBBcmRpcyBUZWNobm9sb2dpZXMgPHJvbWFuQGFyZGlzdGVjaC5jb20+CiAgKgorICogQ29w eXJpZ2h0IChDKSAyMDI1CisgKiBQcmFuamFsIFByYXNhZCAocHJhc2FkcHJhbmphbDIxM0Bn bWFpbC5jb20pCisgKgogICogSGFuZGxlIG9wZW5pbmcvY2xvc2luZyBidHJlZQogICovCiAK QEAgLTE4LDcgKzIxLDcgQEAKIAogLyoKICAqIEluaXRpYWwgc291cmNlIGNvZGUgb2YgY2x1 bXAgc2l6ZSBjYWxjdWxhdGlvbiBpcyBnb3R0ZW4KLSAqIGZyb20gaHR0cDovL29wZW5zb3Vy Y2UuYXBwbGUuY29tL3RhcmJhbGxzL2Rpc2tkZXZfY21kcy8KKyAqIGZyb20gaHR0cHM6Ly9n aXRodWIuY29tL2FwcGxlLW9zcy1kaXN0cmlidXRpb25zL2Rpc2tkZXZfY21kcy90YWdzCiAg Ki8KICNkZWZpbmUgQ0xVTVBfRU5UUklFUwkxNQogCkBAIC03Myw0NSArNzYsNTMgQEAgc3Rh dGljIHNob3J0IGNsdW1wdGJsW0NMVU1QX0VOVFJJRVMgKiAzXSA9IHsKIH07CiAKIHUzMiBo ZnNwbHVzX2NhbGNfYnRyZWVfY2x1bXBfc2l6ZSh1MzIgYmxvY2tfc2l6ZSwgdTMyIG5vZGVf c2l6ZSwKLQkJCQkJdTY0IHNlY3RvcnMsIGludCBmaWxlX2lkKQorCQkJCSAgdTY0IHNlY3Rv cnMsIGludCBmaWxlX2lkKQogewotCXUzMiBtb2QgPSBtYXgobm9kZV9zaXplLCBibG9ja19z aXplKTsKIAl1MzIgY2x1bXBfc2l6ZTsKIAlpbnQgY29sdW1uOwogCWludCBpOwogCi0JLyog RmlndXJlIG91dCB3aGljaCBjb2x1bW4gb2YgdGhlIGFib3ZlIHRhYmxlIHRvIHVzZSBmb3Ig dGhpcyBmaWxlLiAqLworCS8qIERldGVybWluZSBjb2x1bW4gaW5kZXggYmFzZWQgb24gZmls ZSB0eXBlICovCiAJc3dpdGNoIChmaWxlX2lkKSB7Ci0JY2FzZSBIRlNQTFVTX0FUVFJfQ05J RDoKLQkJY29sdW1uID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBIRlNQTFVTX0NBVF9DTklEOgot CQljb2x1bW4gPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQljb2x1bW4gPSAyOwotCQli cmVhazsKKwkJY2FzZSBIRlNQTFVTX0FUVFJfQ05JRDoKKwkJCWNvbHVtbiA9IDA7CisJCQli cmVhazsKKwkJY2FzZSBIRlNQTFVTX0NBVF9DTklEOgorCQkJY29sdW1uID0gMTsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJY29sdW1uID0gMjsKKwkJCWJyZWFrOwogCX0KIAogCS8q Ci0JICogVGhlIGRlZmF1bHQgY2x1bXAgc2l6ZSBpcyAwLjglIG9mIHRoZSB2b2x1bWUgc2l6 ZS4gQW5kCi0JICogaXQgbXVzdCBhbHNvIGJlIGEgbXVsdGlwbGUgb2YgdGhlIG5vZGUgYW5k IGJsb2NrIHNpemUuCisJICogRGVmYXVsdCBjbHVtcCBzaXplIGlzIDAuOCUgb2YgdGhlIHZv bHVtZSBzaXplLCBidXQgaXQgbXVzdCBhbHNvIGJlIGEKKwkgKiBtdWx0aXBsZSBvZiBib3Ro IHRoZSBub2RlIHNpemUgYW5kIGJsb2NrIHNpemUuCiAJICovCiAJaWYgKHNlY3RvcnMgPCAw eDIwMDAwMCkgewotCQljbHVtcF9zaXplID0gc2VjdG9ycyA8PCAyOwkvKiAgMC44ICUgICov Ci0JCWlmIChjbHVtcF9zaXplIDwgKDggKiBub2RlX3NpemUpKQotCQkJY2x1bXBfc2l6ZSA9 IDggKiBub2RlX3NpemU7CisJCWNsdW1wX3NpemUgPSAoc2VjdG9ycyAqIDgpIC8gMTAwMDsg IC8qIEVxdWl2YWxlbnQgdG8gMC44JSAqLworCQljbHVtcF9zaXplID0gbWF4KGNsdW1wX3Np emUsICg4ICogbm9kZV9zaXplKSk7CiAJfSBlbHNlIHsKLQkJLyogdHVybiBleHBvbmVudCBp bnRvIHRhYmxlIGluZGV4Li4uICovCi0JCWZvciAoaSA9IDAsIHNlY3RvcnMgPSBzZWN0b3Jz ID4+IDIyOwotCQkgICAgIHNlY3RvcnMgJiYgKGkgPCBDTFVNUF9FTlRSSUVTIC0gMSk7Ci0J CSAgICAgKytpLCBzZWN0b3JzID0gc2VjdG9ycyA+PiAxKSB7Ci0JCQkvKiBlbXB0eSBib2R5 ICovCisJCS8qIERldGVybWluZSB0aGUgZXhwb25lbnQgZm9yIGluZGV4aW5nIHRoZSBjbHVt cCB0YWJsZSAqLworCQlmb3IgKGkgPSAwOyBzZWN0b3JzID49ICgxVUxMIDw8IDIyKSAmJiAo aSA8IENMVU1QX0VOVFJJRVMgLSAxKTsgaSsrKQorCQkJc2VjdG9ycyA+Pj0gMTsKKworCQkv KiBFbnN1cmUgaW5kZXggcmVtYWlucyBpbiBib3VuZHMgKi8KKwkJaWYgKChjb2x1bW4gKyBp ICogMykgPCBDTFVNUF9UQUJMRV9TSVpFKSB7CisJCQljbHVtcF9zaXplID0gY2x1bXB0Ymxb Y29sdW1uICsgKGkgKiAzKV0gKiAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIHsKKwkJCWNsdW1w X3NpemUgPSA4ICogbm9kZV9zaXplOyAgLyogRmFsbGJhY2sgdG8gYSByZWFzb25hYmxlIG1p bmltdW0gKi8KIAkJfQotCi0JCWNsdW1wX3NpemUgPSBjbHVtcHRibFtjb2x1bW4gKyAoaSkg KiAzXSAqIDEwMjQgKiAxMDI0OwogCX0KIAorCS8qIEFsaWduIGNsdW1wIHNpemUgdG8gdGhl IG5lYXJlc3QgbXVsdGlwbGUgb2YgYmxvY2tfc2l6ZSBhbmQgbm9kZV9zaXplICovCisJY2x1 bXBfc2l6ZSA9IChjbHVtcF9zaXplICsgYmxvY2tfc2l6ZSAtIDEpICYgfihibG9ja19zaXpl IC0gMSk7CisJY2x1bXBfc2l6ZSA9IChjbHVtcF9zaXplICsgbm9kZV9zaXplIC0gMSkgJiB+ KG5vZGVfc2l6ZSAtIDEpOworCisJcmV0dXJuIGNsdW1wX3NpemU7Cit9CisKKwogCS8qCiAJ ICogUm91bmQgdGhlIGNsdW1wIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBub2RlIGFuZCBibG9j ayBzaXplLgogCSAqIE5PVEU6IFRoaXMgcm91bmRzIGRvd24uCkBAIC0xMjksNyArMTQwLDcg QEAgdTMyIGhmc3BsdXNfY2FsY19idHJlZV9jbHVtcF9zaXplKHUzMiBibG9ja19zaXplLCB1 MzIgbm9kZV9zaXplLAogCXJldHVybiBjbHVtcF9zaXplOwogfQogCi0vKiBHZXQgYSByZWZl cmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi8KKy8qIE9w ZW4gYW4gSEZTKyBCKlRyZWUgYW5kIHBlcmZvcm0gaW5pdGlhbCB2YWxpZGF0aW9uICovCiBz dHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi LCB1MzIgaWQpCiB7CiAJc3RydWN0IGhmc19idHJlZSAqdHJlZTsKQEAgLTEzOSwzMiArMTUw LDQxIEBAIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9i bG9jayAqc2IsIHUzMiBpZCkKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBpbnQg c2l6ZTsKIAorCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgQipUcmVlIHN0cnVjdHVyZSAqLwog CXRyZWUgPSBremFsbG9jKHNpemVvZigqdHJlZSksIEdGUF9LRVJORUwpOwogCWlmICghdHJl ZSkKIAkJcmV0dXJuIE5VTEw7CiAKKwkvKiBJbml0aWFsaXplIGxvY2tzICovCiAJbXV0ZXhf aW5pdCgmdHJlZS0+dHJlZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmdHJlZS0+aGFzaF9s b2NrKTsKIAl0cmVlLT5zYiA9IHNiOwogCXRyZWUtPmNuaWQgPSBpZDsKKworCS8qIFJldHJp ZXZlIHRoZSBpbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBCLVRyZWUgKi8KIAlpbm9kZSA9 IGhmc3BsdXNfaWdldChzYiwgaWQpOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZy ZWVfdHJlZTsKKwogCXRyZWUtPmlub2RlID0gaW5vZGU7CiAKKwkvKiBDaGVjayBpZiBleHRl bnQgcmVjb3JkcyBleGlzdCAqLwogCWlmICghSEZTUExVU19JKHRyZWUtPmlub2RlKS0+Zmly c3RfYmxvY2tzKSB7Ci0JCXByX2VycigiaW52YWxpZCBidHJlZSBleHRlbnQgcmVjb3JkcyAo MCBzaXplKVxuIik7CisJCXByX2VycigiaW52YWxpZCBCLVRyZWUgZXh0ZW50IHJlY29yZHMg KDAgc2l6ZSlcbiIpOwogCQlnb3RvIGZyZWVfaW5vZGU7CiAJfQogCisJLyogUmVhZCBhbmQg bWFwIHRoZSBmaXJzdCBwYWdlICovCiAJbWFwcGluZyA9IHRyZWUtPmlub2RlLT5pX21hcHBp bmc7CiAJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIDAsIE5VTEwpOwogCWlm IChJU19FUlIocGFnZSkpCiAJCWdvdG8gZnJlZV9pbm9kZTsKIAotCS8qIExvYWQgdGhlIGhl YWRlciAqLworCS8qIExvYWQgQi1UcmVlIGhlYWRlciAqLwogCWhlYWQgPSAoc3RydWN0IGhm c19idHJlZV9oZWFkZXJfcmVjICopKGttYXBfbG9jYWxfcGFnZShwYWdlKSArCi0JCXNpemVv ZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpKTsKKwlzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9k ZXNjKSk7CisKKwkvKiBJbml0aWFsaXplIHRyZWUgcHJvcGVydGllcyAqLwogCXRyZWUtPnJv b3QgPSBiZTMyX3RvX2NwdShoZWFkLT5yb290KTsKIAl0cmVlLT5sZWFmX2NvdW50ID0gYmUz Ml90b19jcHUoaGVhZC0+bGVhZl9jb3VudCk7CiAJdHJlZS0+bGVhZl9oZWFkID0gYmUzMl90 b19jcHUoaGVhZC0+bGVhZl9oZWFkKTsKQEAgLTE3Niw4MSArMTk2LDc3IEBAIHN0cnVjdCBo ZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBp ZCkKIAl0cmVlLT5tYXhfa2V5X2xlbiA9IGJlMTZfdG9fY3B1KGhlYWQtPm1heF9rZXlfbGVu KTsKIAl0cmVlLT5kZXB0aCA9IGJlMTZfdG9fY3B1KGhlYWQtPmRlcHRoKTsKIAotCS8qIFZl cmlmeSB0aGUgdHJlZSBhbmQgc2V0IHRoZSBjb3JyZWN0IGNvbXBhcmUgZnVuY3Rpb24gKi8K KwkvKiBWYWxpZGF0ZSB0cmVlIHByb3BlcnRpZXMgYmFzZWQgb24gQ05JRCAqLwogCXN3aXRj aCAoaWQpIHsKLQljYXNlIEhGU1BMVVNfRVhUX0NOSUQ6Ci0JCWlmICh0cmVlLT5tYXhfa2V5 X2xlbiAhPSBIRlNQTFVTX0VYVF9LRVlMRU4gLSBzaXplb2YodTE2KSkgewotCQkJcHJfZXJy KCJpbnZhbGlkIGV4dGVudCBtYXhfa2V5X2xlbiAlZFxuIiwKLQkJCQl0cmVlLT5tYXhfa2V5 X2xlbik7Ci0JCQlnb3RvIGZhaWxfcGFnZTsKLQkJfQotCQlpZiAodHJlZS0+YXR0cmlidXRl cyAmIEhGU19UUkVFX1ZBUklEWEtFWVMpIHsKLQkJCXByX2VycigiaW52YWxpZCBleHRlbnQg YnRyZWUgZmxhZ1xuIik7Ci0JCQlnb3RvIGZhaWxfcGFnZTsKLQkJfQorCQljYXNlIEhGU1BM VVNfRVhUX0NOSUQ6CisJCQlpZiAodHJlZS0+bWF4X2tleV9sZW4gIT0gSEZTUExVU19FWFRf S0VZTEVOIC0gc2l6ZW9mKHUxNikpIHsKKwkJCQlwcl9lcnIoImludmFsaWQgZXh0ZW50IG1h eF9rZXlfbGVuICVkXG4iLCB0cmVlLT5tYXhfa2V5X2xlbik7CisJCQkJZ290byBmYWlsX3Bh Z2U7CisJCQl9CisJCQlpZiAodHJlZS0+YXR0cmlidXRlcyAmIEhGU19UUkVFX1ZBUklEWEtF WVMpIHsKKwkJCQlwcl9lcnIoImludmFsaWQgZXh0ZW50IEItVHJlZSBmbGFnXG4iKTsKKwkJ CQlnb3RvIGZhaWxfcGFnZTsKKwkJCX0KKwkJCXRyZWUtPmtleWNtcCA9IGhmc3BsdXNfZXh0 X2NtcF9rZXk7CisJCQlicmVhazsKIAotCQl0cmVlLT5rZXljbXAgPSBoZnNwbHVzX2V4dF9j bXBfa2V5OwotCQlicmVhazsKLQljYXNlIEhGU1BMVVNfQ0FUX0NOSUQ6Ci0JCWlmICh0cmVl LT5tYXhfa2V5X2xlbiAhPSBIRlNQTFVTX0NBVF9LRVlMRU4gLSBzaXplb2YodTE2KSkgewot CQkJcHJfZXJyKCJpbnZhbGlkIGNhdGFsb2cgbWF4X2tleV9sZW4gJWRcbiIsCi0JCQkJdHJl ZS0+bWF4X2tleV9sZW4pOwotCQkJZ290byBmYWlsX3BhZ2U7Ci0JCX0KLQkJaWYgKCEodHJl ZS0+YXR0cmlidXRlcyAmIEhGU19UUkVFX1ZBUklEWEtFWVMpKSB7Ci0JCQlwcl9lcnIoImlu dmFsaWQgY2F0YWxvZyBidHJlZSBmbGFnXG4iKTsKLQkJCWdvdG8gZmFpbF9wYWdlOwotCQl9 CisJCWNhc2UgSEZTUExVU19DQVRfQ05JRDoKKwkJCWlmICh0cmVlLT5tYXhfa2V5X2xlbiAh PSBIRlNQTFVTX0NBVF9LRVlMRU4gLSBzaXplb2YodTE2KSkgeworCQkJCXByX2VycigiaW52 YWxpZCBjYXRhbG9nIG1heF9rZXlfbGVuICVkXG4iLCB0cmVlLT5tYXhfa2V5X2xlbik7CisJ CQkJZ290byBmYWlsX3BhZ2U7CisJCQl9CisJCQlpZiAoISh0cmVlLT5hdHRyaWJ1dGVzICYg SEZTX1RSRUVfVkFSSURYS0VZUykpIHsKKwkJCQlwcl9lcnIoImludmFsaWQgY2F0YWxvZyBC LVRyZWUgZmxhZ1xuIik7CisJCQkJZ290byBmYWlsX3BhZ2U7CisJCQl9CisJCQl0cmVlLT5r ZXljbXAgPSAodGVzdF9iaXQoSEZTUExVU19TQl9IRlNYLCAmSEZTUExVU19TQihzYiktPmZs YWdzKSAmJgorCQkJaGVhZC0+a2V5X3R5cGUgPT0gSEZTUExVU19LRVlfQklOQVJZKQorCQkJ PyBoZnNwbHVzX2NhdF9iaW5fY21wX2tleQorCQkJOiBoZnNwbHVzX2NhdF9jYXNlX2NtcF9r ZXk7CiAKLQkJaWYgKHRlc3RfYml0KEhGU1BMVVNfU0JfSEZTWCwgJkhGU1BMVVNfU0Ioc2Ip LT5mbGFncykgJiYKLQkJICAgIChoZWFkLT5rZXlfdHlwZSA9PSBIRlNQTFVTX0tFWV9CSU5B UlkpKQotCQkJdHJlZS0+a2V5Y21wID0gaGZzcGx1c19jYXRfYmluX2NtcF9rZXk7Ci0JCWVs c2UgewotCQkJdHJlZS0+a2V5Y21wID0gaGZzcGx1c19jYXRfY2FzZV9jbXBfa2V5OwotCQkJ c2V0X2JpdChIRlNQTFVTX1NCX0NBU0VGT0xELCAmSEZTUExVU19TQihzYiktPmZsYWdzKTsK LQkJfQorCQkJaWYgKHRyZWUtPmtleWNtcCA9PSBoZnNwbHVzX2NhdF9jYXNlX2NtcF9rZXkp CisJCQkJc2V0X2JpdChIRlNQTFVTX1NCX0NBU0VGT0xELCAmSEZTUExVU19TQihzYiktPmZs YWdzKTsKIAkJYnJlYWs7Ci0JY2FzZSBIRlNQTFVTX0FUVFJfQ05JRDoKLQkJaWYgKHRyZWUt Pm1heF9rZXlfbGVuICE9IEhGU1BMVVNfQVRUUl9LRVlMRU4gLSBzaXplb2YodTE2KSkgewot CQkJcHJfZXJyKCJpbnZhbGlkIGF0dHJpYnV0ZXMgbWF4X2tleV9sZW4gJWRcbiIsCi0JCQkJ dHJlZS0+bWF4X2tleV9sZW4pOworCisJCWNhc2UgSEZTUExVU19BVFRSX0NOSUQ6CisJCQlp ZiAodHJlZS0+bWF4X2tleV9sZW4gIT0gSEZTUExVU19BVFRSX0tFWUxFTiAtIHNpemVvZih1 MTYpKSB7CisJCQkJcHJfZXJyKCJpbnZhbGlkIGF0dHJpYnV0ZXMgbWF4X2tleV9sZW4gJWRc biIsIHRyZWUtPm1heF9rZXlfbGVuKTsKKwkJCQlnb3RvIGZhaWxfcGFnZTsKKwkJCX0KKwkJ CXRyZWUtPmtleWNtcCA9IGhmc3BsdXNfYXR0cl9iaW5fY21wX2tleTsKKwkJCWJyZWFrOwor CisJCWRlZmF1bHQ6CisJCQlwcl9lcnIoInVua25vd24gQipUcmVlIHJlcXVlc3RlZCAoQ05J RDogJXUpXG4iLCBpZCk7CiAJCQlnb3RvIGZhaWxfcGFnZTsKLQkJfQotCQl0cmVlLT5rZXlj bXAgPSBoZnNwbHVzX2F0dHJfYmluX2NtcF9rZXk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CXByX2VycigidW5rbm93biBCKlRyZWUgcmVxdWVzdGVkXG4iKTsKLQkJZ290byBmYWlsX3Bh Z2U7CiAJfQogCisJLyogVmFsaWRhdGUgdHJlZSBhdHRyaWJ1dGVzICovCiAJaWYgKCEodHJl ZS0+YXR0cmlidXRlcyAmIEhGU19UUkVFX0JJR0tFWVMpKSB7Ci0JCXByX2VycigiaW52YWxp ZCBidHJlZSBmbGFnXG4iKTsKKwkJcHJfZXJyKCJpbnZhbGlkIEItVHJlZSBmbGFnXG4iKTsK IAkJZ290byBmYWlsX3BhZ2U7CiAJfQogCisJLyogVmFsaWRhdGUgbm9kZSBzaXplICovCiAJ c2l6ZSA9IHRyZWUtPm5vZGVfc2l6ZTsKLQlpZiAoIWlzX3Bvd2VyX29mXzIoc2l6ZSkpCi0J CWdvdG8gZmFpbF9wYWdlOwotCWlmICghdHJlZS0+bm9kZV9jb3VudCkKKwlpZiAoIWlzX3Bv d2VyX29mXzIoc2l6ZSkgfHwgIXRyZWUtPm5vZGVfY291bnQpCiAJCWdvdG8gZmFpbF9wYWdl OwogCiAJdHJlZS0+bm9kZV9zaXplX3NoaWZ0ID0gZmZzKHNpemUpIC0gMTsKKwl0cmVlLT5w YWdlc19wZXJfYm5vZGUgPSAoc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7 CiAKLQl0cmVlLT5wYWdlc19wZXJfYm5vZGUgPQotCQkodHJlZS0+bm9kZV9zaXplICsgUEFH RV9TSVpFIC0gMSkgPj4KLQkJUEFHRV9TSElGVDsKLQorCS8qIENsZWFudXAgYW5kIHJldHVy biAqLwogCWt1bm1hcF9sb2NhbChoZWFkKTsKIAlwdXRfcGFnZShwYWdlKTsKIAlyZXR1cm4g dHJlZTsKIAotIGZhaWxfcGFnZToKKwlmYWlsX3BhZ2U6CiAJa3VubWFwX2xvY2FsKGhlYWQp OwogCXB1dF9wYWdlKHBhZ2UpOwotIGZyZWVfaW5vZGU6CisJZnJlZV9pbm9kZToKIAl0cmVl LT5pbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZoZnNwbHVzX2FvcHM7CiAJaXB1dCh0cmVl LT5pbm9kZSk7Ci0gZnJlZV90cmVlOgorCWZyZWVfdHJlZToKIAlrZnJlZSh0cmVlKTsKIAly ZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvb3B0aW9ucy5jIGIvZnMv aGZzcGx1cy9vcHRpb25zLmMKaW5kZXggYTY2YTA5YTU2YmY3Li41MDk4MmU2NGQ4YTIgMTAw NjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCisrKyBiL2ZzL2hmc3BsdXMvb3B0aW9u cy5jCkBAIC02LDYgKzYsOSBAQAogICogQnJhZCBCb3llciAoZmxhckBhbGxhbmRyaWEuY29t KQogICogKEMpIDIwMDMgQXJkaXMgVGVjaG5vbG9naWVzIDxyb21hbkBhcmRpc3RlY2guY29t PgogICoKKyAqIENvcHlyaWdodCAoQykgMjAyNQorICogUHJhbmphbCBQcmFzYWQgKHByYXNh ZHByYW5qYWwyMTNAZ21haWwuY29tKQorICoKICAqIE9wdGlvbiBwYXJzaW5nCiAgKi8KIApA QCAtNTgsODYgKzYxLDc5IEBAIHZvaWQgaGZzcGx1c19maWxsX2RlZmF1bHRzKHN0cnVjdCBo ZnNwbHVzX3NiX2luZm8gKm9wdHMpCiAJb3B0cy0+c2Vzc2lvbiA9IC0xOwogfQogCi0vKiBQ YXJzZSBvcHRpb25zIGZyb20gbW91bnQuIFJldHVybnMgbm9uemVybyBlcnJubyBvbiBmYWls dXJlICovCiBpbnQgaGZzcGx1c19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMs IHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKQogewogCXN0cnVjdCBoZnNwbHVzX3NiX2lu Zm8gKnNiaSA9IGZjLT5zX2ZzX2luZm87CiAJc3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1 bHQ7CiAJaW50IG9wdDsKIAotCS8qCi0JICogT25seSB0aGUgZm9yY2Ugb3B0aW9uIGlzIGV4 YW1pbmVkIGR1cmluZyByZW1vdW50LCBhbGwgb3RoZXJzCi0JICogYXJlIGlnbm9yZWQuCi0J ICovCi0JaWYgKGZjLT5wdXJwb3NlID09IEZTX0NPTlRFWFRfRk9SX1JFQ09ORklHVVJFICYm Ci0JICAgIHN0cm5jbXAocGFyYW0tPmtleSwgImZvcmNlIiwgNSkpCi0JCXJldHVybiAwOwor CS8qIE9ubHkgdGhlIGZvcmNlIG9wdGlvbiBpcyBleGFtaW5lZCBkdXJpbmcgcmVtb3VudCwg YWxsIG90aGVycyBhcmUgaWdub3JlZC4gKi8KKwlpZiAoZmMtPnB1cnBvc2UgPT0gRlNfQ09O VEVYVF9GT1JfUkVDT05GSUdVUkUpIHsKKwkJaWYgKHN0cmNtcChwYXJhbS0+a2V5LCAiZm9y Y2UiKSA9PSAwKSB7CisJCQlzZXRfYml0KEhGU1BMVVNfU0JfRk9SQ0UsICZzYmktPmZsYWdz KTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCW9wdCA9 IGZzX3BhcnNlKGZjLCBoZnNfcGFyYW1fc3BlYywgcGFyYW0sICZyZXN1bHQpOwogCWlmIChv cHQgPCAwKQogCQlyZXR1cm4gb3B0OwogCiAJc3dpdGNoIChvcHQpIHsKLQljYXNlIG9wdF9j cmVhdG9yOgotCQlpZiAoc3RybGVuKHBhcmFtLT5zdHJpbmcpICE9IDQpIHsKLQkJCXByX2Vy cigiY3JlYXRvciByZXF1aXJlcyBhIDQgY2hhcmFjdGVyIHZhbHVlXG4iKTsKLQkJCXJldHVy biAtRUlOVkFMOwotCQl9Ci0JCW1lbWNweSgmc2JpLT5jcmVhdG9yLCBwYXJhbS0+c3RyaW5n LCA0KTsKLQkJYnJlYWs7Ci0JY2FzZSBvcHRfdHlwZToKLQkJaWYgKHN0cmxlbihwYXJhbS0+ c3RyaW5nKSAhPSA0KSB7Ci0JCQlwcl9lcnIoInR5cGUgcmVxdWlyZXMgYSA0IGNoYXJhY3Rl ciB2YWx1ZVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQltZW1jcHkoJnNiaS0+ dHlwZSwgcGFyYW0tPnN0cmluZywgNCk7Ci0JCWJyZWFrOwotCWNhc2Ugb3B0X3VtYXNrOgot CQlzYmktPnVtYXNrID0gKHVtb2RlX3QpcmVzdWx0LnVpbnRfMzI7Ci0JCWJyZWFrOwotCWNh c2Ugb3B0X3VpZDoKLQkJc2JpLT51aWQgPSByZXN1bHQudWlkOwotCQlzZXRfYml0KEhGU1BM VVNfU0JfVUlELCAmc2JpLT5mbGFncyk7Ci0JCWJyZWFrOwotCWNhc2Ugb3B0X2dpZDoKLQkJ c2JpLT5naWQgPSByZXN1bHQuZ2lkOwotCQlzZXRfYml0KEhGU1BMVVNfU0JfR0lELCAmc2Jp LT5mbGFncyk7Ci0JCWJyZWFrOwotCWNhc2Ugb3B0X3BhcnQ6Ci0JCXNiaS0+cGFydCA9IHJl c3VsdC51aW50XzMyOwotCQlicmVhazsKLQljYXNlIG9wdF9zZXNzaW9uOgotCQlzYmktPnNl c3Npb24gPSByZXN1bHQudWludF8zMjsKLQkJYnJlYWs7Ci0JY2FzZSBvcHRfbmxzOgotCQlp ZiAoc2JpLT5ubHMpIHsKLQkJCXByX2VycigidW5hYmxlIHRvIGNoYW5nZSBubHMgbWFwcGlu Z1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzYmktPm5scyA9IGxvYWRfbmxz KHBhcmFtLT5zdHJpbmcpOwotCQlpZiAoIXNiaS0+bmxzKSB7Ci0JCQlwcl9lcnIoInVuYWJs ZSB0byBsb2FkIG5scyBtYXBwaW5nIFwiJXNcIlxuIiwKLQkJCSAgICAgICBwYXJhbS0+c3Ry aW5nKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2Ugb3B0X2Rl Y29tcG9zZToKLQkJaWYgKHJlc3VsdC5uZWdhdGVkKQotCQkJc2V0X2JpdChIRlNQTFVTX1NC X05PREVDT01QT1NFLCAmc2JpLT5mbGFncyk7CisJCWNhc2Ugb3B0X2NyZWF0b3I6CisJCWNh c2Ugb3B0X3R5cGU6CisJCQlpZiAoc3RybmxlbihwYXJhbS0+c3RyaW5nLCA1KSAhPSA0KSB7 CisJCQkJcHJfZXJyKCIlcyByZXF1aXJlcyBhIDQtY2hhcmFjdGVyIHZhbHVlXG4iLCBvcHQg PT0gb3B0X2NyZWF0b3IgPyAiY3JlYXRvciIgOiAidHlwZSIpOworCQkJCXJldHVybiAtRUlO VkFMOworCQkJfQorCQkJbWVtY3B5KG9wdCA9PSBvcHRfY3JlYXRvciA/ICZzYmktPmNyZWF0 b3IgOiAmc2JpLT50eXBlLCBwYXJhbS0+c3RyaW5nLCA0KTsKKwkJCWJyZWFrOworCQljYXNl IG9wdF91bWFzazoKKwkJCXNiaS0+dW1hc2sgPSAodW1vZGVfdClyZXN1bHQudWludF8zMjsK KwkJCWJyZWFrOworCQljYXNlIG9wdF91aWQ6CisJCQlzYmktPnVpZCA9IHJlc3VsdC51aWQ7 CisJCQlzZXRfYml0KEhGU1BMVVNfU0JfVUlELCAmc2JpLT5mbGFncyk7CisJCQlicmVhazsK KwkJY2FzZSBvcHRfZ2lkOgorCQkJc2JpLT5naWQgPSByZXN1bHQuZ2lkOworCQkJc2V0X2Jp dChIRlNQTFVTX1NCX0dJRCwgJnNiaS0+ZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2Ugb3B0 X3BhcnQ6CisJCQlzYmktPnBhcnQgPSByZXN1bHQudWludF8zMjsKKwkJCWJyZWFrOworCQlj YXNlIG9wdF9zZXNzaW9uOgorCQkJc2JpLT5zZXNzaW9uID0gcmVzdWx0LnVpbnRfMzI7CisJ CQlicmVhazsKKwkJY2FzZSBvcHRfbmxzOgorCQkJaWYgKHNiaS0+bmxzKSB7CisJCQkJcHJf ZXJyKCJOTFMgbWFwcGluZyBhbHJlYWR5IHNldCwgdW5sb2FkaW5nIHByZXZpb3VzIG1hcHBp bmdcbiIpOworCQkJCXVubG9hZF9ubHMoc2JpLT5ubHMpOworCQkJfQorCQkJc2JpLT5ubHMg PSBsb2FkX25scyhwYXJhbS0+c3RyaW5nKTsKKwkJCWlmICghc2JpLT5ubHMpIHsKKwkJCQlw cl9lcnIoIlVuYWJsZSB0byBsb2FkIE5MUyBtYXBwaW5nIFwiJXNcIlxuIiwgcGFyYW0tPnN0 cmluZyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBv cHRfZGVjb21wb3NlOgorCQkJaWYgKHJlc3VsdC5uZWdhdGVkKQorCQkJCXNldF9iaXQoSEZT UExVU19TQl9OT0RFQ09NUE9TRSwgJnNiaS0+ZmxhZ3MpOwogCQllbHNlCiAJCQljbGVhcl9i aXQoSEZTUExVU19TQl9OT0RFQ09NUE9TRSwgJnNiaS0+ZmxhZ3MpOwogCQlicmVhazsKLQlj YXNlIG9wdF9iYXJyaWVyOgotCQlpZiAocmVzdWx0Lm5lZ2F0ZWQpCi0JCQlzZXRfYml0KEhG U1BMVVNfU0JfTk9CQVJSSUVSLCAmc2JpLT5mbGFncyk7CisJCWNhc2Ugb3B0X2JhcnJpZXI6 CisJCQlpZiAocmVzdWx0Lm5lZ2F0ZWQpCisJCQkJc2V0X2JpdChIRlNQTFVTX1NCX05PQkFS UklFUiwgJnNiaS0+ZmxhZ3MpOwogCQllbHNlCiAJCQljbGVhcl9iaXQoSEZTUExVU19TQl9O T0JBUlJJRVIsICZzYmktPmZsYWdzKTsKIAkJYnJlYWs7Ci0JY2FzZSBvcHRfZm9yY2U6Ci0J CXNldF9iaXQoSEZTUExVU19TQl9GT1JDRSwgJnNiaS0+ZmxhZ3MpOwotCQlicmVhazsKLQlk ZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSBvcHRfZm9yY2U6CisJCQlzZXRf Yml0KEhGU1BMVVNfU0JfRk9SQ0UsICZzYmktPmZsYWdzKTsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIDA7Ci0tIAoyLjQ4LjEK Cg== --------------SWJeK0IKYihkes92uGJHXQ03--