Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8216427

ciMethodData::load_extra_data() does not always unpack the last entry

    Details

    • Subcomponent:
    • Introduced In Build:
      b31
    • Introduced In Version:
      9
    • Resolved In Build:
      b28

      Backports

        Description

        When unpacking the extra data section of the MDOs, the source and destination might not have the same number of entries, because there can be safepoints between cloning the extra data section of the MDO and unpacking the source entries to the destination entries.

        Therefore the unpacking loop loops through all the source entries and copies them to the destination. Except the last DataLayout::arg_info_data_tag entry, that never gets copied form the source to the destination. Therefore, if a safepoint occurred between cloning the extra data section and unpacking its entries in ciMethodData::load_extra_data(), the last entry could contain random bogus memory.

        It seems like the reason the last entry is not copied is because the copying requires a length which is calculated by taking the difference between the current entry and the next entry in the loop. But as there is no next entry when you are at the last entry, the copying is simply not performed, instead of calculating what the length of that entry would be.

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  eosterlund Erik Österlund
                  Reporter:
                  eosterlund Erik Österlund
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  5 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: