[RuntimeDyld][ELF] Fix off-by-1 issues in R_AARCH64_ABS{16,32} overflow checks
authorFangrui Song <i@maskray.me>
Wed, 5 Apr 2023 13:52:54 +0000 (06:52 -0700)
committerFangrui Song <i@maskray.me>
Wed, 5 Apr 2023 13:52:54 +0000 (06:52 -0700)
llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp

index 282c357..300bb1d 100644 (file)
@@ -426,13 +426,13 @@ void RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &Section,
     break;
   case ELF::R_AARCH64_ABS16: {
     uint64_t Result = Value + Addend;
-    assert(static_cast<int64_t>(Result) >= INT16_MIN && Result < UINT16_MAX);
+    assert(static_cast<int64_t>(Result) >= INT16_MIN && Result <= UINT16_MAX);
     write(isBE, TargetPtr, static_cast<uint16_t>(Result & 0xffffU));
     break;
   }
   case ELF::R_AARCH64_ABS32: {
     uint64_t Result = Value + Addend;
-    assert(static_cast<int64_t>(Result) >= INT32_MIN && Result < UINT32_MAX);
+    assert(static_cast<int64_t>(Result) >= INT32_MIN && Result <= UINT32_MAX);
     write(isBE, TargetPtr, static_cast<uint32_t>(Result & 0xffffffffU));
     break;
   }