موفق به دریافت مقدار طول امضا شده به memcpy ()

 02-16 01: 44: 49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch reassemble_and_dispatch
02-16 01: 44: 49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch partial_packet-> افست 40 بسته-> لن 304 HCI_ACL_PREAMBLE_SIZE 4
02-16 01: 44: 49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch projected_offset 340 partial_packet-> len 41
02-16 01: 44: 49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch بسته ای داشت که از طول مورد انتظار 41 انتظار می رود.
02-16 01: 44: 49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch memcpy pack--> len 1 pack-> افست 4 expr -3
02-16 01: 44: 49.096 6423 6471 W bt_hci_packet_fragmenter: reassemble_and_dispatch partial_packet-> data 0xacb14580 partial_packet-> data + partial_packet-> افست 0xacb145a8 ​​packet-> داده 0xa553e110
02-16 01: 44: 49.097 6423 6469 W bt_hci_packet_fragmenter: fragment_and_dispatch fragment_and_dispatch

در مثال بالا ، با اندازه memcpy -3 ، این مقدار به عنوان یک عدد صحیح بدون علامت تفسیر (4294967293) تفسیر می شود و memcpy ادامه می یابد تا وقتی که یک خطای صفحه به دلیل حافظه بدون نقشه وجود داشته باشد و روند باید خاتمه یابد.

تلفن من 32 بیت است ، شاید به همین دلیل باشد. موبایل سامسونگ S3 Neo + است. حداقل در تست های Android 9.0 از jemalloc استفاده کنید. دستگاه قوس ARM است.

ایده ای وجود دارد که چرا memcpy روند کار را در اینجا خراب نمی کند؟

 memcpy (partial_packet-> data + partial_packet-> افست ،
             packet-> data + packet-> offset، packet-> len - packet-> offset)؛

https://android.googlesource.com/platform/system/bt/+/3cb7149d8fed2d7d77ceaa95bf845224c4db3baf/hci/src/packet_fragmenter.cc#229

اطلاعات بیشتر در اینجا / marcinguy / CVE-2020-0022