Skip to content
  • Alexander Richardson's avatar
    Avoid undefined behaviour after realloc() · d01d2337
    Alexander Richardson authored
    Adding the offset between the realloc result and the old allocation to
    update pointers into the new allocation is undefined behaviour: the
    old pointers are no longer valid after realloc() according to the C
    standard. While this works on almost all architectures and compilers,
    it causes  problems on architectures that track pointer bounds (e.g.
    CHERI or Arm's Morello): the value_list pointers will still have the
    bounds of the previous allocation and therefore any dereference will
    result in a run-time trap.
    
    I found this due to a crash (dereferencing an invalid capability) while
    trying to run `xev` over SSH on a CHERI-RISC-V system. With these two
    realloc changes, and xorg/proto/xorgproto!41
    
    
    I am able to succesfully run `xev` compiled for CHERI-RISC-V.
    
    Signed-off-by: default avatarAlex Richardson <Alexander.Richardson@cl.cam.ac.uk>
    d01d2337