Skip to content

Commit

Permalink
Fix objtool: missing int3 after ret warning
Browse files Browse the repository at this point in the history
Resolve straight-line speculation warnings reported by objtool
for x86_64 assembly on Linux when CONFIG_SLS is set.  See the
following LWN article for the complete details.

https://lwn.net/Articles/877845/

Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes openzfs#13528
Closes openzfs#13575
  • Loading branch information
behlendorf committed Jun 27, 2022
1 parent 8aceded commit 43569ee
Show file tree
Hide file tree
Showing 12 changed files with 44 additions and 32 deletions.
24 changes: 12 additions & 12 deletions module/icp/asm-x86_64/aes/aes_aesni.S
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ _key_expansion_256a_local:
pxor %xmm1, %xmm0
movups %xmm0, (%rcx)
add $0x10, %rcx
ret
RET
nop
SET_SIZE(_key_expansion_128)
SET_SIZE(_key_expansion_256a)
Expand Down Expand Up @@ -236,7 +236,7 @@ _key_expansion_192a_local:
shufps $0b01001110, %xmm2, %xmm1
movups %xmm1, 0x10(%rcx)
add $0x20, %rcx
ret
RET
SET_SIZE(_key_expansion_192a)


Expand All @@ -257,7 +257,7 @@ _key_expansion_192b_local:

movups %xmm0, (%rcx)
add $0x10, %rcx
ret
RET
SET_SIZE(_key_expansion_192b)


Expand All @@ -271,7 +271,7 @@ _key_expansion_256b_local:
pxor %xmm1, %xmm2
movups %xmm2, (%rcx)
add $0x10, %rcx
ret
RET
SET_SIZE(_key_expansion_256b)


Expand Down Expand Up @@ -376,7 +376,7 @@ rijndael_key_setup_enc_intel_local:
mov $14, %rax // return # rounds = 14
#endif
FRAME_END
ret
RET

.align 4
.Lenc_key192:
Expand Down Expand Up @@ -413,7 +413,7 @@ rijndael_key_setup_enc_intel_local:
mov $12, %rax // return # rounds = 12
#endif
FRAME_END
ret
RET

.align 4
.Lenc_key128:
Expand Down Expand Up @@ -453,13 +453,13 @@ rijndael_key_setup_enc_intel_local:
mov $10, %rax // return # rounds = 10
#endif
FRAME_END
ret
RET

.Lenc_key_invalid_param:
#ifdef OPENSSL_INTERFACE
mov $-1, %rax // user key or AES key pointer is NULL
FRAME_END
ret
RET
#else
/* FALLTHROUGH */
#endif /* OPENSSL_INTERFACE */
Expand All @@ -471,7 +471,7 @@ rijndael_key_setup_enc_intel_local:
xor %rax, %rax // a key pointer is NULL or invalid keysize
#endif /* OPENSSL_INTERFACE */
FRAME_END
ret
RET
SET_SIZE(rijndael_key_setup_enc_intel)


Expand Down Expand Up @@ -548,7 +548,7 @@ FRAME_BEGIN
// OpenSolaris: rax = # rounds (10, 12, or 14) or 0 for error
// OpenSSL: rax = 0 for OK, or non-zero for error
FRAME_END
ret
RET
SET_SIZE(rijndael_key_setup_dec_intel)


Expand Down Expand Up @@ -655,7 +655,7 @@ ENTRY_NP(aes_encrypt_intel)
aesenclast %KEY, %STATE // last round
movups %STATE, (%OUTP) // output

ret
RET
SET_SIZE(aes_encrypt_intel)


Expand Down Expand Up @@ -738,7 +738,7 @@ ENTRY_NP(aes_decrypt_intel)
aesdeclast %KEY, %STATE // last round
movups %STATE, (%OUTP) // output

ret
RET
SET_SIZE(aes_decrypt_intel)

#endif /* lint || __lint */
Expand Down
4 changes: 2 additions & 2 deletions module/icp/asm-x86_64/aes/aes_amd64.S
Original file line number Diff line number Diff line change
Expand Up @@ -785,7 +785,7 @@ ENTRY_NP(aes_encrypt_amd64)
mov 2*8(%rsp), %rbp
mov 3*8(%rsp), %r12
add $[4*8], %rsp
ret
RET

SET_SIZE(aes_encrypt_amd64)

Expand Down Expand Up @@ -896,7 +896,7 @@ ENTRY_NP(aes_decrypt_amd64)
mov 2*8(%rsp), %rbp
mov 3*8(%rsp), %r12
add $[4*8], %rsp
ret
RET

SET_SIZE(aes_decrypt_amd64)
#endif /* lint || __lint */
Expand Down
2 changes: 1 addition & 1 deletion module/icp/asm-x86_64/blake3/blake3_avx2.S
Original file line number Diff line number Diff line change
Expand Up @@ -1334,7 +1334,7 @@ zfs_blake3_hash_many_avx2:
pop r13
pop r14
pop r15
ret
RET
.p2align 5
3:
mov rbx, qword ptr [rbp+0x50]
Expand Down
6 changes: 3 additions & 3 deletions module/icp/asm-x86_64/blake3/blake3_avx512.S
Original file line number Diff line number Diff line change
Expand Up @@ -1116,7 +1116,7 @@ zfs_blake3_hash_many_avx512:
pop r13
pop r14
pop r15
ret
RET
.p2align 6
3:
test esi, 0x8
Expand Down Expand Up @@ -2487,7 +2487,7 @@ zfs_blake3_compress_in_place_avx512:
vpxor xmm1, xmm1, xmm3
vmovdqu xmmword ptr [rdi], xmm0
vmovdqu xmmword ptr [rdi+0x10], xmm1
ret
RET

.p2align 6
zfs_blake3_compress_xof_avx512:
Expand Down Expand Up @@ -2573,7 +2573,7 @@ zfs_blake3_compress_xof_avx512:
vmovdqu xmmword ptr [r9+0x10], xmm1
vmovdqu xmmword ptr [r9+0x20], xmm2
vmovdqu xmmword ptr [r9+0x30], xmm3
ret
RET

.size zfs_blake3_hash_many_avx512, . - zfs_blake3_hash_many_avx512
.size zfs_blake3_compress_in_place_avx512, . - zfs_blake3_compress_in_place_avx512
Expand Down
6 changes: 3 additions & 3 deletions module/icp/asm-x86_64/blake3/blake3_sse2.S
Original file line number Diff line number Diff line change
Expand Up @@ -1671,7 +1671,7 @@ zfs_blake3_hash_many_sse2:
pop r13
pop r14
pop r15
ret
RET
.p2align 5
3:
test esi, 0x2
Expand Down Expand Up @@ -2157,7 +2157,7 @@ zfs_blake3_compress_in_place_sse2:
pxor xmm1, xmm3
movups xmmword ptr [rdi], xmm0
movups xmmword ptr [rdi+0x10], xmm1
ret
RET

.p2align 6
zfs_blake3_compress_xof_sse2:
Expand Down Expand Up @@ -2276,7 +2276,7 @@ zfs_blake3_compress_xof_sse2:
movups xmmword ptr [r9+0x10], xmm1
movups xmmword ptr [r9+0x20], xmm2
movups xmmword ptr [r9+0x30], xmm3
ret
RET

.size zfs_blake3_hash_many_sse2, . - zfs_blake3_hash_many_sse2
.size zfs_blake3_compress_in_place_sse2, . - zfs_blake3_compress_in_place_sse2
Expand Down
6 changes: 3 additions & 3 deletions module/icp/asm-x86_64/blake3/blake3_sse41.S
Original file line number Diff line number Diff line change
Expand Up @@ -1475,7 +1475,7 @@ zfs_blake3_hash_many_sse41:
pop r13
pop r14
pop r15
ret
RET
.p2align 5
3:
test esi, 0x2
Expand Down Expand Up @@ -1908,7 +1908,7 @@ zfs_blake3_compress_in_place_sse41:
pxor xmm1, xmm3
movups xmmword ptr [rdi], xmm0
movups xmmword ptr [rdi+0x10], xmm1
ret
RET
.p2align 6
zfs_blake3_compress_xof_sse41:
_CET_ENDBR
Expand Down Expand Up @@ -2015,7 +2015,7 @@ zfs_blake3_compress_xof_sse41:
movups xmmword ptr [r9+0x10], xmm1
movups xmmword ptr [r9+0x20], xmm2
movups xmmword ptr [r9+0x30], xmm3
ret
RET

.size zfs_blake3_hash_many_sse41, . - zfs_blake3_hash_many_sse41
.size zfs_blake3_compress_in_place_sse41, . - zfs_blake3_compress_in_place_sse41
Expand Down
6 changes: 3 additions & 3 deletions module/icp/asm-x86_64/modes/aesni-gcm-x86_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -1201,7 +1201,7 @@ aesni_gcm_encrypt:
.align 32
clear_fpu_regs_avx:
vzeroall
ret
RET
.size clear_fpu_regs_avx,.-clear_fpu_regs_avx

/*
Expand All @@ -1219,7 +1219,7 @@ gcm_xor_avx:
movdqu (%rsi), %xmm1
pxor %xmm1, %xmm0
movdqu %xmm0, (%rsi)
ret
RET
.size gcm_xor_avx,.-gcm_xor_avx

/*
Expand All @@ -1236,7 +1236,7 @@ atomic_toggle_boolean_nv:
jz 1f
movl $1, %eax
1:
ret
RET
.size atomic_toggle_boolean_nv,.-atomic_toggle_boolean_nv

.align 64
Expand Down
2 changes: 1 addition & 1 deletion module/icp/asm-x86_64/modes/gcm_pclmulqdq.S
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ ENTRY_NP(gcm_mul_pclmulqdq)
//
// Return
//
ret
RET
SET_SIZE(gcm_mul_pclmulqdq)

#endif /* lint || __lint */
Expand Down
2 changes: 1 addition & 1 deletion module/icp/asm-x86_64/sha2/sha256_impl.S
Original file line number Diff line number Diff line change
Expand Up @@ -2058,7 +2058,7 @@ ENTRY_NP(SHA256TransformBlocks)
.cfi_adjust_cfa_offset -8
.cfi_restore %rbx

ret
RET
.cfi_endproc
SET_SIZE(SHA256TransformBlocks)

Expand Down
2 changes: 1 addition & 1 deletion module/icp/asm-x86_64/sha2/sha512_impl.S
Original file line number Diff line number Diff line change
Expand Up @@ -2059,7 +2059,7 @@ ENTRY_NP(SHA512TransformBlocks)
.cfi_adjust_cfa_offset -8
.cfi_restore %rbx

ret
RET
.cfi_endproc
SET_SIZE(SHA512TransformBlocks)

Expand Down
6 changes: 6 additions & 0 deletions module/icp/include/sys/ia32/asm_linkage.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@
#include <sys/stack.h>
#include <sys/trap.h>

#if defined(__linux__) && defined(CONFIG_SLS)
#define RET ret; int3
#else
#define RET ret
#endif

#ifdef __cplusplus
extern "C" {
#endif
Expand Down
10 changes: 8 additions & 2 deletions module/lua/setjmp/setjmp_x86_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ x:
.size x, [.-x]


#if defined(__linux__) && defined(CONFIG_SLS)
#define RET ret; int3
#else
#define RET ret
#endif

/*
* Setjmp and longjmp implement non-local gotos using state vectors
* type label_t.
Expand All @@ -52,7 +58,7 @@ x:
movq 0(%rsp), %rdx /* return address */
movq %rdx, 56(%rdi) /* rip */
xorl %eax, %eax /* return 0 */
ret
RET
SET_SIZE(setjmp)

ENTRY(longjmp)
Expand All @@ -67,7 +73,7 @@ x:
movq %rdx, 0(%rsp)
xorl %eax, %eax
incl %eax /* return 1 */
ret
RET
SET_SIZE(longjmp)

#ifdef __ELF__
Expand Down

0 comments on commit 43569ee

Please sign in to comment.