control-flow integrity
Checking at every return and indirect call or jump that the destination is one the program's own code allows.
Control-flow integrity (CFI) restricts indirect control transfers to a precomputed set of valid targets: backward edges (returns) via shadow stacks or signed return addresses, forward edges (indirect calls and jumps) via landing-pad instructions, target bitmaps or type-based checks (Clang -fsanitize=cfi).
See also