Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • D dynamorio
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 1,467
    • Issues 1,467
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 44
    • Merge requests 44
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • DynamoRIO
  • dynamorio
  • Issues
  • #3098
Closed
Open
Issue created Jul 10, 2018 by Derek Bruening@derekbrueningContributor

race updating shared ibt tables

Enabling -shared_bb_ibt_tables and running an app with many threads and a lot of code, I see crashes where a bogus non-code address was targeted. It looks like a race updating the tables.

Looking closely: hashtable_ibl_add just does a struct copy of the fragment_entry_t which copies the tag first and then the entry pc. Another thread could read the new tag but the old (uninitialized or bogus) entry pc. When I reverse the order the observed crashes disappear.

I'm quite surprised at this and thought it must be a regression, because in other parts of the code handling these tables we have careful update orders, such as with the table and mask or when invalidating entries. But looking at the code history when these tables were moved from a "lookuptable" auxiliary to a primary table, this order was always there. We never really used shared tables so I suppose this bug was always there.

Assignee
Assign to
Time tracking