mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 20:53:03 +02:00
s390/cpacf: Unpoison instruction results
Stop KMSAN from complaining about CPACF outputs being uninitialized. Do not unpoison variable-length parameter blocks: mapping function codes (like CPACF_KIMD_SHA_256) to lengths will be ugly. So let the callers do this once the need arises. Also do not touch cpacf_kma(): this wrapper does not handle cc 1 and cc2 at the moment and has to be reworked. Reviewed-by: Harald Freudenberger <freude@linux.ibm.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
ca1f4a5eca
commit
b00c10948f
|
|
@ -301,6 +301,7 @@ static __always_inline void __cpacf_query(unsigned int opcode,
|
|||
cpacf_mask_t *mask)
|
||||
{
|
||||
__cpacf_query_insn(opcode, mask, CPACF_FC_QUERY);
|
||||
kmsan_unpoison_memory(mask, sizeof(*mask));
|
||||
}
|
||||
|
||||
static __always_inline int __cpacf_check_opcode(unsigned int opcode)
|
||||
|
|
@ -370,6 +371,7 @@ static __always_inline int cpacf_query_func(unsigned int opcode,
|
|||
static __always_inline void __cpacf_qai(unsigned int opcode, cpacf_qai_t *qai)
|
||||
{
|
||||
__cpacf_query_insn(opcode, qai, CPACF_FC_QUERY_AUTH_INFO);
|
||||
kmsan_unpoison_memory(qai, sizeof(*qai));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -422,6 +424,7 @@ static inline int cpacf_km(unsigned long func, void *param,
|
|||
[opc] "i" (CPACF_KM)
|
||||
: "cc", "memory", "0", "1");
|
||||
|
||||
kmsan_unpoison_memory(dest, src_len - s.odd);
|
||||
return src_len - s.odd;
|
||||
}
|
||||
|
||||
|
|
@ -454,6 +457,7 @@ static inline int cpacf_kmc(unsigned long func, void *param,
|
|||
[opc] "i" (CPACF_KMC)
|
||||
: "cc", "memory", "0", "1");
|
||||
|
||||
kmsan_unpoison_memory(dest, src_len - s.odd);
|
||||
return src_len - s.odd;
|
||||
}
|
||||
|
||||
|
|
@ -587,6 +591,7 @@ static inline int cpacf_kmctr(unsigned long func, void *param, u8 *dest,
|
|||
[opc] "i" (CPACF_KMCTR)
|
||||
: "cc", "memory", "0", "1");
|
||||
|
||||
kmsan_unpoison_memory(dest, src_len - s.odd);
|
||||
return src_len - s.odd;
|
||||
}
|
||||
|
||||
|
|
@ -619,6 +624,7 @@ static inline void cpacf_prno(unsigned long func, void *param,
|
|||
: [fc] "d" (func), [pba] "d" ((unsigned long)param),
|
||||
[seed] "d" (s.pair), [opc] "i" (CPACF_PRNO)
|
||||
: "cc", "memory", "0", "1");
|
||||
kmsan_unpoison_memory(dest, dest_len);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user