mirror of
https://github.com/torvalds/linux.git
synced 2026-05-03 22:12:32 -04:00
s390/zcrypt: Rework cca misc functions kmallocs to use the cprb mempool
Rework two places in the zcrypt cca misc code using kmalloc() for ephemeral memory allocation. As there is anyway now a cprb mempool let's use this pool instead to satisfy these short term memory allocations. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Reviewed-by: Holger Dengler <dengler@linux.ibm.com> Link: https://lore.kernel.org/r/20250424133619.16495-16-freude@linux.ibm.com Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
committed by
Heiko Carstens
parent
8a88322541
commit
989ed61ea8
@@ -1126,20 +1126,29 @@ int cca_clr2cipherkey(u16 card, u16 dom, u32 keybitsize, u32 keygenflags,
|
||||
const u8 *clrkey, u8 *keybuf, u32 *keybufsize)
|
||||
{
|
||||
int rc;
|
||||
u8 *token;
|
||||
void *mem;
|
||||
int tokensize;
|
||||
u8 exorbuf[32];
|
||||
u8 *token, exorbuf[32];
|
||||
struct cipherkeytoken *t;
|
||||
u32 xflags = 0;
|
||||
|
||||
/* fill exorbuf with random data */
|
||||
get_random_bytes(exorbuf, sizeof(exorbuf));
|
||||
|
||||
/* allocate space for the key token to build */
|
||||
token = kmalloc(MAXCCAVLSCTOKENSIZE, GFP_KERNEL);
|
||||
if (!token)
|
||||
/*
|
||||
* Allocate space for the key token to build.
|
||||
* Also we only need up to MAXCCAVLSCTOKENSIZE bytes for this
|
||||
* we use the already existing cprb mempool to solve this
|
||||
* short term memory requirement.
|
||||
*/
|
||||
mem = (xflags & ZCRYPT_XFLAG_NOMEMALLOC) ?
|
||||
mempool_alloc_preallocated(cprb_mempool) :
|
||||
mempool_alloc(cprb_mempool, GFP_KERNEL);
|
||||
if (!mem)
|
||||
return -ENOMEM;
|
||||
|
||||
/* prepare the token with the key skeleton */
|
||||
token = (u8 *)mem;
|
||||
tokensize = SIZEOF_SKELETON;
|
||||
memcpy(token, aes_cipher_key_skeleton, tokensize);
|
||||
|
||||
@@ -1196,7 +1205,7 @@ int cca_clr2cipherkey(u16 card, u16 dom, u32 keybitsize, u32 keygenflags,
|
||||
*keybufsize = tokensize;
|
||||
|
||||
out:
|
||||
kfree(token);
|
||||
mempool_free(mem, cprb_mempool);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(cca_clr2cipherkey);
|
||||
@@ -1628,10 +1637,12 @@ EXPORT_SYMBOL(cca_query_crypto_facility);
|
||||
*/
|
||||
int cca_get_info(u16 cardnr, u16 domain, struct cca_info *ci)
|
||||
{
|
||||
void *mem;
|
||||
int rc, found = 0;
|
||||
size_t rlen, vlen;
|
||||
u8 *rarray, *varray, *pg;
|
||||
u8 *rarray, *varray;
|
||||
struct zcrypt_device_status_ext devstat;
|
||||
u32 xflags = 0;
|
||||
|
||||
memset(ci, 0, sizeof(*ci));
|
||||
|
||||
@@ -1641,12 +1652,17 @@ int cca_get_info(u16 cardnr, u16 domain, struct cca_info *ci)
|
||||
return rc;
|
||||
ci->hwtype = devstat.hwtype;
|
||||
|
||||
/* prep page for rule array and var array use */
|
||||
pg = (u8 *)__get_free_page(GFP_KERNEL);
|
||||
if (!pg)
|
||||
/*
|
||||
* Prep memory for rule array and var array use.
|
||||
* Use the cprb mempool for this.
|
||||
*/
|
||||
mem = (xflags & ZCRYPT_XFLAG_NOMEMALLOC) ?
|
||||
mempool_alloc_preallocated(cprb_mempool) :
|
||||
mempool_alloc(cprb_mempool, GFP_KERNEL);
|
||||
if (!mem)
|
||||
return -ENOMEM;
|
||||
rarray = pg;
|
||||
varray = pg + PAGE_SIZE / 2;
|
||||
rarray = (u8 *)mem;
|
||||
varray = (u8 *)mem + PAGE_SIZE / 2;
|
||||
rlen = vlen = PAGE_SIZE / 2;
|
||||
|
||||
/* QF for this card/domain */
|
||||
@@ -1693,7 +1709,7 @@ int cca_get_info(u16 cardnr, u16 domain, struct cca_info *ci)
|
||||
}
|
||||
|
||||
out:
|
||||
free_page((unsigned long)pg);
|
||||
mempool_free(mem, cprb_mempool);
|
||||
return found == 2 ? 0 : -ENOENT;
|
||||
}
|
||||
EXPORT_SYMBOL(cca_get_info);
|
||||
|
||||
Reference in New Issue
Block a user