powerpc/pseries: fix plpks_read_var() code for different consumers
[ Upstream commit1f622f3f80
] Even though plpks_read_var() is currently called to read variables owned by different consumers, it internally supports only OS consumer. Fix plpks_read_var() to handle different consumers correctly. Fixes:2454a7af0f
("powerpc/pseries: define driver for Platform KeyStore") Signed-off-by: Nayna Jain <nayna@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20221106205839.600442-7-nayna@linux.ibm.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
c156df808e
commit
03d7168103
|
@ -366,22 +366,24 @@ static int plpks_read_var(u8 consumer, struct plpks_var *var)
|
||||||
{
|
{
|
||||||
unsigned long retbuf[PLPAR_HCALL_BUFSIZE] = { 0 };
|
unsigned long retbuf[PLPAR_HCALL_BUFSIZE] = { 0 };
|
||||||
struct plpks_auth *auth;
|
struct plpks_auth *auth;
|
||||||
struct label *label;
|
struct label *label = NULL;
|
||||||
u8 *output;
|
u8 *output;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (var->namelen > MAX_NAME_SIZE)
|
if (var->namelen > MAX_NAME_SIZE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
auth = construct_auth(PKS_OS_OWNER);
|
auth = construct_auth(consumer);
|
||||||
if (IS_ERR(auth))
|
if (IS_ERR(auth))
|
||||||
return PTR_ERR(auth);
|
return PTR_ERR(auth);
|
||||||
|
|
||||||
label = construct_label(var->component, var->os, var->name,
|
if (consumer == PKS_OS_OWNER) {
|
||||||
var->namelen);
|
label = construct_label(var->component, var->os, var->name,
|
||||||
if (IS_ERR(label)) {
|
var->namelen);
|
||||||
rc = PTR_ERR(label);
|
if (IS_ERR(label)) {
|
||||||
goto out_free_auth;
|
rc = PTR_ERR(label);
|
||||||
|
goto out_free_auth;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
output = kzalloc(maxobjsize, GFP_KERNEL);
|
output = kzalloc(maxobjsize, GFP_KERNEL);
|
||||||
|
@ -390,9 +392,15 @@ static int plpks_read_var(u8 consumer, struct plpks_var *var)
|
||||||
goto out_free_label;
|
goto out_free_label;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = plpar_hcall(H_PKS_READ_OBJECT, retbuf, virt_to_phys(auth),
|
if (consumer == PKS_OS_OWNER)
|
||||||
virt_to_phys(label), label->size, virt_to_phys(output),
|
rc = plpar_hcall(H_PKS_READ_OBJECT, retbuf, virt_to_phys(auth),
|
||||||
maxobjsize);
|
virt_to_phys(label), label->size, virt_to_phys(output),
|
||||||
|
maxobjsize);
|
||||||
|
else
|
||||||
|
rc = plpar_hcall(H_PKS_READ_OBJECT, retbuf, virt_to_phys(auth),
|
||||||
|
virt_to_phys(var->name), var->namelen, virt_to_phys(output),
|
||||||
|
maxobjsize);
|
||||||
|
|
||||||
|
|
||||||
if (rc != H_SUCCESS) {
|
if (rc != H_SUCCESS) {
|
||||||
pr_err("Failed to read variable %s for component %s with error %d\n",
|
pr_err("Failed to read variable %s for component %s with error %d\n",
|
||||||
|
|
Loading…
Reference in New Issue