Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxaDo-00GwhR-1A for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 00:36:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxaDm-009KqC-2N for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 00:36:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxaDm-009Kq4-1N for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 00:36:14 +0000 Received: from qs-2002j-snip4-5.eps.apple.com ([57.103.87.226] helo=outbound.qs.icloud.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vxaDk-00000000Kxv-25Nw for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 00:36:14 +0000 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-11 (Postfix) with ESMTPS id 170111800116 for ; Wed, 4 Mar 2026 00:36:09 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1772584571; x=1775176571; bh=8EvB7G7mo7dtX2ILwrWstrAMAHna++TJ4+7hBhQcm2A=; h=To:From:Subject:Date:Message-id:Content-Type:MIME-Version:x-icloud-hme; b=C9kHO9T7dy4Oxkj6EzvkKgKie+371YT0/0FHcyA9C7SshsX1AlXhuceNH0I8cnCN+S3lwpyQlTHUEut2hcEQyxhXopBPIz6uWQ8Ju0Ddlc0VCUNqwmOYC1y6yVZomKVpld4R9Ib1cdsUaxxZ5RucraO9KvtnolFkpwICWYti6DrtZSw2ddg9gIejqGyeoFkvyriMuqckgPBUQol9NOxM1SKtv90oYt6ejV+kM5pjPjWcsapQYlX4RH2P7lCxVfcWa9kgz5eKgi1OHD3w9tlaMomHDpUGO7yL9KhJcE9N1yr49Nm7ehypjk9vYlvwFqKX77x9ghsFFeFEe0vzF8ov+A== Received: from p00-mailws2-75f749df49-pd2b8 (unknown [10.112.113.19]) by p00-icloudmta-asmtp-us-east-2d-100-percent-11 (Postfix) with ESMTPSA id 569EF18000A5 for ; Wed, 4 Mar 2026 00:36:09 +0000 (UTC) To: pgsql-hackers@lists.postgresql.org From: Paul Bunn Subject: =?utf-8?B?W0JVRyArIFBBVENIXSBEU0EgcGFnZW1hcCBvdXQtb2YtYm91bmRzIGluIG1h?= =?utf-8?B?a2VfbmV3X3NlZ21lbnQgb2RkLXNpemVkIHBhdGg=?= Date: Wed, 4 Mar 2026 00:36:09 +0000 (GMT) X-Mailer: iCloud MailClient2604Build25 MailServer2502B13.7c5914c7dad3 Message-id: Content-Type: multipart/alternative; boundary=Apple-Webmail-42--714bc7c7-73a5-463b-918f-0a976accbed0 MIME-Version: 1.0 In-Reply-To: References: X-Proofpoint-GUID: Ie-owYg7BvyXZfuYVdAVYlHzGRCxBdM3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA0MDAwMyBTYWx0ZWRfX2ihXT+97umzw ky5L3kBW6EloxH/M/Sn1vlqDnQGA0JN+u/CfuuCDCxGUC5AxDyQ2brHtJQ1ebJNnZplAjGlx0Xk aIZwj5572FF4JN+Pj47piaO2Hyd/q3HPjqie+1P5fR7NcG58R5t2qWSMFRtdwUvJnzahs4xZ/7i q3ypHDctwD+UmrFfmfbpqqAGkAnu+bu7OMblnfaBRp4xFQstO3S4HUjf2wk8QFcEIjri8/mPsDw lzBSOohEdsTSz7wFZCev7BbDX/ybhwmo5oYTLu2/HMJzhVJMiDI8Q29qsTLqs4Cqzqgcx0CcLgF HE6qo1u8CrKGpu6IrJiuPi+IeXp9PpvEMR3lsX7VY/Bc6WOULAHsOczP5Hj8p4= X-Authority-Info-Out: v=2.4 cv=M6VA6iws c=1 sm=1 tr=0 ts=69a77e7a cx=c_apl:c_pps:t_out a=w0vwr1DNSLjGex3smDq1Tg==:117 a=Yq5XynenixoA:10 a=5KLPUuaC_9wA:10 a=x7bEGLp0ZPQA:10 a=1_K1eIhTUloA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jJJU2eMWs2WZR_ah1Y4A:9 a=QEXdDO2ut3YA:10 a=MFTqexwafApFYic3EYYA:9 a=0FoTF5RyjKW9sg_x:21 a=_W_S_7VecoQA:10 a=9PsyOtDX7QqekJOmM8YA:9 a=B2y7HmGcmWMA:10 X-Proofpoint-ORIG-GUID: Ie-owYg7BvyXZfuYVdAVYlHzGRCxBdM3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-03_03,2026-03-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 bulkscore=0 malwarescore=0 adultscore=0 phishscore=0 clxscore=1011 mlxlogscore=465 spamscore=0 lowpriorityscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603040003 X-JNJ: AAAAAAABOERuViNsI0sp5SP4YWbqp+qaQsVe9phmW5sRbCgMdu9XuPMD5BGgAItp5hzUCRLVFrfYAazs42ICErg7MEohz6ssMmJGTJRWQTejXHyQLz3Z2amTGA01hMsJmZbVm03ENtlBVpApv2eK6+zkFEdyZKsJrEL4rvT3ku5XvRpBTARp3TKQfe9B1AknJ17z/bLGRXhXRyBd7kcsTg5Bp7NxiP8L7XTyfixtjwja52UwxZdA8jqvfOcyl0GsvB5XOh4/jGVJHu/YdTqGsYooVFy+kzHWUQuSLnMPGuaRc5vKHrWamvnb4NwtD7ZDrp/DIR2SujviqB+zrHnNnbfJA53jzLutAteQWhjQ2tTJUwiVq89yxzrOpngZQicndLajK6qwo/Cw7BO/jE4RxMC5swzGb7DVNr5Wq5HCeqeOC4d4xoqOF9kgTVmBuUZDTnkWPsRd8+ILCYyhbiIMpSbl/G5E8ggYtIYXVIkuOMTacr6ub/B5F1pEWjtuOfPSfXiOc0lkV+cSIYlcksLVa8Kxwj+TY5piAOQ5KUQOwxmsv9xJcbMVoMKMx31k9l5NWCpZJJeRJDysZuEoGWingZqKzXUVQU9OpY3xEc/rMR16wUtCS6RftJbbivHDxfMmpSpK7TOKLUxX98lSLnSO/SBL917HI3M23syhbCSBIaqeH3gIWEPXLPNL List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Apple-Webmail-42--714bc7c7-73a5-463b-918f-0a976accbed0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8; format=flowed Hi hackers, We've identified a bug in the DSA (Dynamic Shared Memory Area)= allocator that causes memory corruption and crashes during parallel hash = joins with large data sets. The bug has been present since the DSA impleme= ntation was introduced and affects all supported branches. Attached is a m= inimal fix (5 lines added, 0 changed). =3D=3D Bug Summary =3D=3D In make_n= ew_segment() (src/backend/utils/mmgr/dsa.c), there are two paths for compu= ting segment layout: Path 1 (geometric): knows total_size upfront, compute= s total_pages =3D total_size / FPM_PAGE_SIZE pagemap entries =3D total_pag= es <-- correct Path 2 (odd-sized, when requested > geometric): works forwa= rd from usable_pages =3D requested_pages pagemap entries =3D usable_pages = <-- BUG The pagemap is indexed by absolute page number. The FreePageManage= r hands out pages with indices from metadata_pages to (metadata_pages + us= able_pages - 1). Since metadata_pages >=3D 1, page indices at the high end= of the range exceed usable_pages, making the pagemap accesses out-of-boun= ds. =3D=3D How It Was Found on Postgres 15 =3D=3D Multiple parallel worker= backends crashed simultaneously with SIGSEGV in dsa_get_address(), called= from dsa_free() in ExecHashTableDetachBatch() during parallel hash join b= atch cleanup. Stack trace: #0 dsa_get_address (area, dp) at dsa.c:955 #1 d= sa_free (area, dp) at dsa.c:839 #2 ExecHashTableDetachBatch (hashtable) at= nodeHash.c:3189 #3 ExecParallelHashJoinNewBatch (hjstate) at nodeHashjoin= .c:1157 All crashing workers computed the same pageno (196993), which was = the last valid FPM page but beyond the pagemap array (usable_pages =3D 196= 609). =3D=3D Root Cause (from core dump analysis) =3D=3D The crashing segm= ent had: usable_pages =3D 196,609 (pagemap has this many entries) metadata= _pages =3D 385 total_pages =3D 196,994 (=3D metadata_pages + usable_pages)= last FPM page =3D 196,993 (=3D metadata_pages + usable_pages - 1) pagemap= valid indices: 0 .. 196,608 FPM page indices: 385 .. 196,993 Pages 196,60= 9 through 196,993 (385 pages) have no valid pagemap entry. The pagemap arr= ay ends 3,072 bytes before the data area starts (padding zone). Most out-o= f-bounds entries fall in this padding and cause silent corruption. The las= t 17 entries fall in the data area itself, causing bidirectional corruptio= n: pagemap writes destroy allocated object data, and subsequent pagemap re= ads return garbage, crashing dsa_free(). =3D=3D The Fix =3D=3D After compu= ting metadata_bytes with usable_pages pagemap entries, add entries for the= metadata pages themselves: metadata_bytes +=3D ((metadata_bytes / (FPM_PA= GE_SIZE - sizeof(dsa_pointer))) + 1) * sizeof(dsa_pointer); The divisor (F= PM_PAGE_SIZE - sizeof(dsa_pointer)) =3D 4088 accounts for the circular dep= endency: each metadata page costs one pagemap entry (8 bytes), so only 408= 8 of each 4096-byte metadata page is net-free for other pagemap entries. T= he +1 absorbs the ceiling. -- Hopefully I've followed the correct format f= or creating a patch -- this is my first post here. Thanks, Paul --Apple-Webmail-42--714bc7c7-73a5-463b-918f-0a976accbed0 Content-Type: multipart/mixed; type="text/html"; boundary=Apple-Webmail-64--714bc7c7-73a5-463b-918f-0a976accbed0 --Apple-Webmail-64--714bc7c7-73a5-463b-918f-0a976accbed0 Content-Type: multipart/related; type="text/html"; boundary=Apple-Webmail-86--714bc7c7-73a5-463b-918f-0a976accbed0 --Apple-Webmail-86--714bc7c7-73a5-463b-918f-0a976accbed0 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8;
Hi hackers,

We've identified a bu= g in the DSA (Dynamic Shared Memory Area) allocator that causes memor= y corruption and crashes during parallel hash joins with large data sets.&= nbsp; The bug has been present since the DSA implementation was intro= duced and affects all supported branches.

Attache= d is a minimal fix (5 lines added, 0 changed).

=3D= =3D Bug Summary =3D=3D

In make_new_segment() (src= /backend/utils/mmgr/dsa.c), there are two paths for computing segment layo= ut:

  Path 1 (geometric): knows total_size u= pfront, computes
    total_pages =3D total_size /= FPM_PAGE_SIZE
    pagemap entries =3D total_page= s            &= nbsp;     <-- correct

&nbs= p; Path 2 (odd-sized, when requested > geometric): works forward from
    usable_pages =3D requested_pages
&nb= sp;   pagemap entries =3D usable_pages    &n= bsp;            <= ;-- BUG

The pagemap is indexed by absolute page n= umber.  The FreePageManager hands out pages with indices from  m= etadata_pages to (metadata_pages + usable_pages - 1).  Since metadata= _pages >=3D 1, page indices at the high end of the range exceed us= able_pages, making the pagemap accesses out-of-bounds.

=3D=3D How It Was Found on Postgres 15 =3D=3D

Multiple parallel worker backends crashed simultaneously with SIGSEGV i= n dsa_get_address(), called from  dsa_free() in ExecHashTableDet= achBatch() during parallel hash join batch cleanup.

Stack trace:
  #0 dsa_get_address (area, dp) at dsa.c:95= 5
  #1 dsa_free (area, dp) at dsa.c:839
  #2= ExecHashTableDetachBatch (hashtable) at nodeHash.c:3189
  = #3 ExecParallelHashJoinNewBatch (hjstate) at nodeHashjoin.c:1157

All crashing workers computed the same pageno (196993), wh= ich was the last valid FPM page but beyond the pagemap array (usable_pages= =3D 196609).

=3D=3D Root Cause (from core dump a= nalysis) =3D=3D

The crashing segment had:
  usable_pages   =3D 196,609   (pagemap has th= is many entries)
  metadata_pages =3D 385
  = total_pages    =3D 196,994   (=3D metadata_pages = + usable_pages)
  last FPM page  =3D 196,993 &nbs= p; (=3D metadata_pages + usable_pages - 1)

 = pagemap valid indices: 0 .. 196,608
  FPM page indices:&nb= sp;     385 .. 196,993

Pages = 196,609 through 196,993 (385 pages) have no valid pagemap entry.

The pagemap array ends 3,072 bytes before the data area st= arts (padding zone).  Most out-of-bounds entries fall in this pa= dding and cause silent corruption.  The last 17 entries fall in = the data area itself, causing bidirectional corruption: pagemap write= s destroy allocated object data, and subsequent pagemap reads return = garbage,  crashing dsa_free().

=3D=3D The Fi= x =3D=3D

After computing metadata_bytes with usab= le_pages pagemap entries, add entries for the metadata pages themselves:

  metadata_bytes +=3D
  &= nbsp;   ((metadata_bytes / (FPM_PAGE_SIZE - sizeof(dsa_pointer))= ) + 1) *
      sizeof(dsa_pointer);

The divisor (FPM_PAGE_SIZE - sizeof(dsa_pointer)) =3D= 4088 accounts for the circular dependency: each metadata  page = costs one pagemap entry (8 bytes), so only 4088 of each 4096-byte metadata= page is net-free for other  pagemap entries.  The +1 absorbs th= e ceiling.

--
Hopefully I've followed t= he correct format for creating a patch -- this is my first post here.
Thanks,
Paul

=

--Apple-Webmail-86--714bc7c7-73a5-463b-918f-0a976accbed0-- --Apple-Webmail-64--714bc7c7-73a5-463b-918f-0a976accbed0 Content-Transfer-Encoding: BASE64 Content-Disposition: attachment; filename="0001-Fix-DSA-pagemap-undersizing-in-make_new_segment.patch" Content-Type: application/octet-stream; name="0001-Fix-DSA-pagemap-undersizing-in-make_new_segment.patch" Content-Id: <6dd469e4-7d25-48a1-be38-f47d35d2945e@icloud.com> RnJvbTogUGF1bCBCdW5uIDxwYXVsLmJ1bm5AaWNsb3VkLmNvbT4KRGF0ZTogTW9uLCAzIE1h ciAyMDI2IDE2OjQwOjAwIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gRml4IERTQSBwYWdlbWFw IHVuZGVyc2l6aW5nIGluIG1ha2VfbmV3X3NlZ21lbnQKCldoZW4gbWFrZV9uZXdfc2VnbWVu dCBjcmVhdGVzIGFuICJvZGQtc2l6ZWQiIHNlZ21lbnQgKHRoZSBwYXRoIHRha2VuIHdoZW4K dGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uIGV4Y2VlZHMgdGhlIGdlb21ldHJpYyBzZWdtZW50 IHNpemUpLCB0aGUgcGFnZW1hcAppcyBzaXplZCBmb3IgdXNhYmxlX3BhZ2VzIGVudHJpZXMu ICBIb3dldmVyLCB0aGUgRnJlZVBhZ2VNYW5hZ2VyIGhhbmRzIG91dApwYWdlcyB1c2luZyBh YnNvbHV0ZSBwYWdlIGluZGljZXMgdGhhdCByYW5nZSB1cCB0byBtZXRhZGF0YV9wYWdlcyAr CnVzYWJsZV9wYWdlcyAtIDEuICBTaW5jZSBtZXRhZGF0YV9wYWdlcyA+PSAxIGFsd2F5cywg dGhlIGxhc3QKbWV0YWRhdGFfcGFnZXMgcGFnZSBpbmRpY2VzIGV4Y2VlZCB0aGUgcGFnZW1h cCBhcnJheSBib3VuZHMuCgpUaGUgbm9ybWFsIChnZW9tZXRyaWMpIHBhdGggY29ycmVjdGx5 IHNpemVzIHRoZSBwYWdlbWFwIGZvciB0b3RhbF9wYWdlcwooPSB0b3RhbF9zaXplIC8gRlBN X1BBR0VfU0laRSksIHdoaWNoIGluY2x1ZGVzIGJvdGggbWV0YWRhdGEgYW5kIHVzYWJsZQpw YWdlcy4gIFRoZSBvZGQtc2l6ZWQgcGF0aCBzaG91bGQgZG8gdGhlIHNhbWUsIGJ1dCBpdCB3 b3JrcyBmb3J3YXJkIGZyb20KdXNhYmxlX3BhZ2VzIHJhdGhlciB0aGFuIGJhY2t3YXJkIGZy b20gdG90YWxfc2l6ZSwgY3JlYXRpbmcgYSBjaXJjdWxhcgpkZXBlbmRlbmN5OiBtZXRhZGF0 YV9ieXRlcyBkZXBlbmRzIG9uIHRvdGFsX3BhZ2VzIHdoaWNoIGRlcGVuZHMgb24KbWV0YWRh dGFfYnl0ZXMuCgpUaGlzIGNhbiBiZSByZXNvbHZlZCBpbiBjbG9zZWQgZm9ybS4gIEFmdGVy IGNvbXB1dGluZyBtZXRhZGF0YV9ieXRlcyBmb3IKdXNhYmxlX3BhZ2VzIGVudHJpZXMsIGFk ZCBwYWdlbWFwIGVudHJpZXMgZm9yIHRoZSBtZXRhZGF0YSBwYWdlcwp0aGVtc2VsdmVzLiAg VGhlIGRpdmlzb3IgKEZQTV9QQUdFX1NJWkUgLSBzaXplb2YoZHNhX3BvaW50ZXIpKSBhY2Nv dW50cwpmb3IgdGhlIGZhY3QgdGhhdCBlYWNoIG1ldGFkYXRhIHBhZ2UgY29uc3VtZXMgb25l IHBhZ2VtYXAgZW50cnkgKG9mCnNpemVvZihkc2FfcG9pbnRlcikgYnl0ZXMpLCBsZWF2aW5n IG9ubHkgKEZQTV9QQUdFX1NJWkUgLQpzaXplb2YoZHNhX3BvaW50ZXIpKSBuZXQgYnl0ZXMg cGVyIG1ldGFkYXRhIHBhZ2UuICBUaGUgKzEgYWJzb3JicyB0aGUKY2VpbGluZy4gIFRoaXMg eWllbGRzIHRoZSBleGFjdCBtZXRhZGF0YV9wYWdlcyBpbiBhIHNpbmdsZSBleHByZXNzaW9u CndpdGggbm8gaXRlcmF0aW9uIG5lZWRlZC4KClRoZSBidWcgaXMgb2JzZXJ2YWJsZSB3aGVu IGEgcGFyYWxsZWwgaGFzaCBqb2luIChvciBhbnkgb3BlcmF0aW9uKSBtYWtlcyBhCkRTQSBh bGxvY2F0aW9uIGxhcmdlIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBvZGQtc2l6ZWQgc2VnbWVu dCBwYXRoLiAgRHVyaW5nCnN1YnNlcXVlbnQgcmV1c2Ugb2YgdGhlIHNlZ21lbnQsIGFsbG9j YXRpb25zIGxhbmRpbmcgb24gcGFnZXMgd2l0aCBpbmRpY2VzCj49IHVzYWJsZV9wYWdlcyBj YXVzZSBvdXQtb2YtYm91bmRzIHBhZ2VtYXAgcmVhZHMvd3JpdGVzLiAgT24gd3JpdGUsCnNw YW4gcG9pbnRlcnMgYXJlIHN0b3JlZCBpbnRvIHRoZSBkYXRhIGFyZWEsIGNvcnJ1cHRpbmcg YWxsb2NhdGVkIG9iamVjdHMuCk9uIHJlYWQgKGR1cmluZyBkc2FfZnJlZSksIGdhcmJhZ2Ug aXMgaW50ZXJwcmV0ZWQgYXMgYSBzcGFuIHBvaW50ZXIsCnR5cGljYWxseSBjcmFzaGluZyBp biBkc2FfZ2V0X2FkZHJlc3Mgd2l0aCAiZHNhX2FyZWEgY291bGQgbm90IGF0dGFjaCB0bwpz ZWdtZW50IiBvciBTSUdTRUdWLgoKVGhlIGJ1ZyBoYXMgYmVlbiBwcmVzZW50IHNpbmNlIHRo ZSBEU0EgaW1wbGVtZW50YXRpb24gd2FzIGludHJvZHVjZWQgYW5kCmFmZmVjdHMgYWxsIHN1 cHBvcnRlZCB2ZXJzaW9ucy4KCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9kc2EuYyB8 IDUgKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2RzYS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1n ci9kc2EuYwppbmRleCBjZTllZGU0Li43ODk3NTFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9tbWdyL2RzYS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZHNhLmMK QEAgLTIyMDYsNiArMjIwNiwxMSBAQCBtYWtlX25ld19zZWdtZW50KGRzYV9hcmVhICphcmVh LCBzaXplX3QgcmVxdWVzdGVkX3BhZ2VzKQogCQkJTUFYQUxJR04oc2l6ZW9mKEZyZWVQYWdl TWFuYWdlcikpICsKIAkJCXVzYWJsZV9wYWdlcyAqIHNpemVvZihkc2FfcG9pbnRlcik7CiAK KwkJLyogQWxzbyBjb3ZlciB0aGUgbWV0YWRhdGEgcGFnZXMgaW4gdGhlIHBhZ2VtYXAgKCsx IGZvciByb3VuZGluZykuICovCisJCW1ldGFkYXRhX2J5dGVzICs9CisJCQkoKG1ldGFkYXRh X2J5dGVzIC8gKEZQTV9QQUdFX1NJWkUgLSBzaXplb2YoZHNhX3BvaW50ZXIpKSkgKyAxKSAq CisJCQlzaXplb2YoZHNhX3BvaW50ZXIpOworCiAJCS8qIEFkZCBwYWRkaW5nIHVwIHRvIG5l eHQgcGFnZSBib3VuZGFyeS4gKi8KIAkJaWYgKG1ldGFkYXRhX2J5dGVzICUgRlBNX1BBR0Vf U0laRSAhPSAwKQogCQkJbWV0YWRhdGFfYnl0ZXMgKz0gRlBNX1BBR0VfU0laRSAtIChtZXRh ZGF0YV9ieXRlcyAlIEZQTV9QQUdFX1NJWkUpOwotLSAKMi40My43Cgo= --Apple-Webmail-64--714bc7c7-73a5-463b-918f-0a976accbed0-- --Apple-Webmail-42--714bc7c7-73a5-463b-918f-0a976accbed0--