forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cxl/pmem: Introduce nvdimm_security_ops with ->get_flags() operation
Add nvdimm_security_ops support for CXL memory device with the introduction of the ->get_flags() callback function. This is part of the "Persistent Memory Data-at-rest Security" command set for CXL memory device support. The ->get_flags() function provides the security state of the persistent memory device defined by the CXL 3.0 spec section 8.2.9.8.6.1. Reviewed-by: Jonathan Cameron <[email protected]> Signed-off-by: Dave Jiang <[email protected]> Link: https://lore.kernel.org/r/166983609611.2734609.13231854299523325319.stgit@djiang5-desk3.ch.intel.com Signed-off-by: Dan Williams <[email protected]>
- Loading branch information
Showing
7 changed files
with
72 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
/* Copyright(c) 2022 Intel Corporation. All rights reserved. */ | ||
#include <linux/libnvdimm.h> | ||
#include <asm/unaligned.h> | ||
#include <linux/module.h> | ||
#include <linux/async.h> | ||
#include <linux/slab.h> | ||
#include "cxlmem.h" | ||
#include "cxl.h" | ||
|
||
static unsigned long cxl_pmem_get_security_flags(struct nvdimm *nvdimm, | ||
enum nvdimm_passphrase_type ptype) | ||
{ | ||
struct cxl_nvdimm *cxl_nvd = nvdimm_provider_data(nvdimm); | ||
struct cxl_memdev *cxlmd = cxl_nvd->cxlmd; | ||
struct cxl_dev_state *cxlds = cxlmd->cxlds; | ||
unsigned long security_flags = 0; | ||
u32 sec_out; | ||
int rc; | ||
|
||
rc = cxl_mbox_send_cmd(cxlds, CXL_MBOX_OP_GET_SECURITY_STATE, NULL, 0, | ||
&sec_out, sizeof(sec_out)); | ||
if (rc < 0) | ||
return 0; | ||
|
||
if (ptype == NVDIMM_MASTER) { | ||
if (sec_out & CXL_PMEM_SEC_STATE_MASTER_PASS_SET) | ||
set_bit(NVDIMM_SECURITY_UNLOCKED, &security_flags); | ||
else | ||
set_bit(NVDIMM_SECURITY_DISABLED, &security_flags); | ||
if (sec_out & CXL_PMEM_SEC_STATE_MASTER_PLIMIT) | ||
set_bit(NVDIMM_SECURITY_FROZEN, &security_flags); | ||
return security_flags; | ||
} | ||
|
||
if (sec_out & CXL_PMEM_SEC_STATE_USER_PASS_SET) { | ||
if (sec_out & CXL_PMEM_SEC_STATE_FROZEN || | ||
sec_out & CXL_PMEM_SEC_STATE_USER_PLIMIT) | ||
set_bit(NVDIMM_SECURITY_FROZEN, &security_flags); | ||
|
||
if (sec_out & CXL_PMEM_SEC_STATE_LOCKED) | ||
set_bit(NVDIMM_SECURITY_LOCKED, &security_flags); | ||
else | ||
set_bit(NVDIMM_SECURITY_UNLOCKED, &security_flags); | ||
} else { | ||
set_bit(NVDIMM_SECURITY_DISABLED, &security_flags); | ||
} | ||
|
||
return security_flags; | ||
} | ||
|
||
static const struct nvdimm_security_ops __cxl_security_ops = { | ||
.get_flags = cxl_pmem_get_security_flags, | ||
}; | ||
|
||
const struct nvdimm_security_ops *cxl_security_ops = &__cxl_security_ops; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters