1. 15 Jul, 2023 1 commit
    • comex's avatar
      Fixes and workarounds to make UBSan happier on macOS · d7c532d8
      comex authored
      There are still some other issues not addressed here, but it's a start.
      
      Workarounds for false-positive reports:
      
      - `RasterizerAccelerated`: Put a gigantic array behind a `unique_ptr`,
        because UBSan has a [hardcoded limit](https://stackoverflow.com/questions/64531383/c-runtime-error-using-fsanitize-undefined-object-has-a-possibly-invalid-vp)
        of how big it thinks objects can be, specifically when dealing with
        offset-to-top values used with multiple inheritance.  Hopefully this
        doesn't have a performance impact.
      
      - `QueryCacheBase::QueryCacheBase`: Avoid an operation that UBSan thinks
        is UB even though it at least arguably isn't.  See the link in the
        comment for more information.
      
      Fixes for correct reports:
      
      - `PageTable`, `Memory`: Use `uintptr_t` values instead of pointers to
        avoid UB from pointer overflow (when pointer arithmetic wraps around
        the address space).
      
      - `KScheduler::Reload`: `thread->GetOwnerProcess()` can be `nullptr`;
        avoid calling methods on it in this case.  (The existing code returns
        a garbage reference to a field, which is then passed into
        `LoadWatchpointArray`, and apparently it's never used, so it's
        harmless in practice but still triggers UBSan.)
      
      - `KAutoObject::Close`: This function calls `this->Destroy()`, which
        overwrites the beginning of the object with junk (specifically a free
        list pointer).  Then it calls `this->UnregisterWithKernel()`.  UBSan
        complains about a type mismatch because the vtable has been
        overwritten, and I believe this is indeed UB.  `UnregisterWithKernel`
        also loads `m_kernel` from the 'freed' object, which seems to be
        technically safe (the overwriting doesn't extend as far as that
        field), but seems dubious.  Switch to a `static` method and load
        `m_kernel` in advance.
      d7c532d8
  2. 12 Jul, 2023 1 commit
  3. 11 Jul, 2023 5 commits
  4. 10 Jul, 2023 1 commit
  5. 09 Jul, 2023 8 commits
  6. 08 Jul, 2023 1 commit
  7. 07 Jul, 2023 8 commits
  8. 06 Jul, 2023 6 commits
  9. 05 Jul, 2023 5 commits
  10. 04 Jul, 2023 4 commits