.popsection
 .endm
 
+/*
+ * (ab)use RETPOLINE_SAFE on RET to annotate away 'bare' RET instructions
+ * vs RETBleed validation.
+ */
+#define ANNOTATE_UNRET_SAFE ANNOTATE_RETPOLINE_SAFE
+
 /*
  * JMP_NOSPEC and CALL_NOSPEC macros can be used instead of a simple
  * indirect jmp/call which may be susceptible to the Spectre variant 2
 
                }
 
                if (insn->type != INSN_JUMP_DYNAMIC &&
-                   insn->type != INSN_CALL_DYNAMIC) {
-                       WARN_FUNC("retpoline_safe hint not an indirect jump/call",
+                   insn->type != INSN_CALL_DYNAMIC &&
+                   insn->type != INSN_RETURN) {
+                       WARN_FUNC("retpoline_safe hint not an indirect jump/call/ret",
                                  insn->sec, insn->offset);
                        return -1;
                }
 
        for_each_insn(file, insn) {
                if (insn->type != INSN_JUMP_DYNAMIC &&
-                   insn->type != INSN_CALL_DYNAMIC)
+                   insn->type != INSN_CALL_DYNAMIC &&
+                   insn->type != INSN_RETURN)
                        continue;
 
                if (insn->retpoline_safe)
                if (!strcmp(insn->sec->name, ".init.text") && !opts.module)
                        continue;
 
-               WARN_FUNC("indirect %s found in RETPOLINE build",
-                         insn->sec, insn->offset,
-                         insn->type == INSN_JUMP_DYNAMIC ? "jump" : "call");
+               if (insn->type == INSN_RETURN) {
+                       WARN_FUNC("'naked' return found in RETPOLINE build",
+                                 insn->sec, insn->offset);
+               } else {
+                       WARN_FUNC("indirect %s found in RETPOLINE build",
+                                 insn->sec, insn->offset,
+                                 insn->type == INSN_JUMP_DYNAMIC ? "jump" : "call");
+               }
 
                warnings++;
        }