Commit 8db51b4e authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Tomasz Zawadzki
Browse files

module/keyring: add keyring_file module



This module allows for using keys stored in files.  Each such file
should only contain a single key and the module copies it without any
modifications.  Additionally, it checks the permissions of the file to
ensure that only the owner of the file is allowed to access it.

This mechanism is very similar to the method employed by the NVMe driver
and the NVMe-oF target to supply NVMe/TLS pre-shared keys.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I6eb15549073e8388b3f806f2888df3b1e3676ad5
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21737


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarSeung yeon Shin <syeon.shin@samsung.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent 5eb41b0c
Loading
Loading
Loading
Loading
+72 −0
Original line number Diff line number Diff line
@@ -12737,3 +12737,75 @@ Example response:
  }
]
~~~

### keyring_file_add_key {#rpc_keyring_file_add_key}

Add a file-based key to a keyring.

#### Parameters

Name                       | Optional | Type        | Description
-------------------------- | -------- | ----------- | -----------
name                       | Required | string      | Name of the key to add.
path                       | Required | string      | Path to a file containing the key.

#### Example

Example request:

~~~json
{
  "jsonrpc": "2.0",
  "method": "keyring_file_add_key",
  "id": 1
  "params": {
    "name": "key0",
    "path": "/path/to/key0"
  }
}
~~~

Example response:

~~~json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": true
}
~~~

### keyring_file_remove_key {#rpc_keyring_file_remove_key}

Remove a file-based key from a keyring.

#### Parameters

Name                       | Optional | Type        | Description
-------------------------- | -------- | ----------- | -----------
name                       | Required | string      | Name of the key to remove.

#### Example

Example request:

~~~json
{
  "jsonrpc": "2.0",
  "method": "keyring_file_remove_key",
  "id": 1
  "params": {
    "name": "key0"
  }
}
~~~

Example response:

~~~json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": true
}
~~~
+3 −0
Original line number Diff line number Diff line
@@ -192,3 +192,6 @@ DEPDIRS-event_keyring := init keyring
ifeq ($(CONFIG_VFIO_USER),y)
DEPDIRS-vfu_device := $(BDEV_DEPS_THREAD) scsi vfu_tgt
endif

# module/keyring
DEPDIRS-keyring_file := log keyring util $(JSON_LIBS)
+1 −1
Original line number Diff line number Diff line
@@ -127,7 +127,7 @@ ifeq ($(CONFIG_VFIO_USER),y)
VFU_DEVICE_MODULES_LIST = vfu_device
endif

KEYRING_MODULES_LIST = event_keyring
KEYRING_MODULES_LIST = event_keyring keyring_file

EVENT_BDEV_SUBSYSTEM = event_bdev event_accel event_vmd event_sock event_iobuf

+7 −2
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/..)
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk

DIRS-y = bdev blob blobfs accel event sock scheduler
DIRS-y = bdev blob blobfs accel event sock scheduler keyring
ifeq ($(SPDK_ROOT_DIR)/lib/env_dpdk,$(CONFIG_ENV))
DIRS-y += env_dpdk
endif
@@ -25,6 +25,7 @@ DEPDIRS-bdev := blob
DEPDIRS-blobfs := blob
DEPDIRS-event := bdev blob
DEPDIRS-vfu_device :=
DEPDIRS-keyring :=

.PHONY: all clean $(DIRS-y)

@@ -32,6 +33,7 @@ BDEV_MODULES_PKGCONFIG = $(call pkgconfig_filename,spdk_bdev_modules)
ACCEL_MODULES_PKGCONFIG = $(call pkgconfig_filename,spdk_accel_modules)
SOCK_MODULES_PKGCONFIG = $(call pkgconfig_filename,spdk_sock_modules)
SCHEDULER_MODULES_PKGCONFIG = $(call pkgconfig_filename,spdk_scheduler_modules)
KEYRING_MODULES_PKGCONFIG = $(call pkgconfig_filename,spdk_keyring_modules)
SYSLIBS_PKGCONFIG = $(call pkgconfig_filename,spdk_syslibs)

PRIVATE_SYSLIBS = $(SYS_LIBS)
@@ -41,7 +43,7 @@ endif

MODULES_PKGCONFIG = $(BDEV_MODULES_PKGCONFIG) $(ACCEL_MODULES_PKGCONFIG)
MODULES_PKGCONFIG += $(SOCK_MODULES_PKGCONFIG) $(SYSLIBS_PKGCONFIG)
MODULES_PKGCONFIG += $(SCHEDULER_MODULES_PKGCONFIG)
MODULES_PKGCONFIG += $(SCHEDULER_MODULES_PKGCONFIG) $(KEYRING_MODULES_PKGCONFIG)

CONFIG_MK = $(SPDK_ROOT_DIR)/mk/config.mk

@@ -57,6 +59,9 @@ $(SOCK_MODULES_PKGCONFIG): $(CONFIG_MK)
$(SCHEDULER_MODULES_PKGCONFIG): $(CONFIG_MK)
	$(Q)$(SPDK_ROOT_DIR)/scripts/pc_modules.sh scheduler "$(SCHEDULER_MODULES_LIST:%=spdk_%)" > $@

$(KEYRING_MODULES_PKGCONFIG): $(CONFIG_MK)
	$(Q)$(SPDK_ROOT_DIR)/scripts/pc_modules.sh keyring "$(KEYRING_MODULES_LIST:%=spdk_%)" > $@

$(SYSLIBS_PKGCONFIG):
	$(Q)$(SPDK_ROOT_DIR)/scripts/pc_libs.sh "" "$(PRIVATE_SYSLIBS)" System spdk_syslibs > $@

+14 −0
Original line number Diff line number Diff line
#  SPDX-License-Identifier: BSD-3-Clause
#  Copyright (c) 2024 Intel Corporation.  All rights reserved.

SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk

DIRS-y = file

.PHONY: all clean $(DIRS-y)

all: $(DIRS-y)
clean: $(DIRS-y)

include $(SPDK_ROOT_DIR)/mk/spdk.subdirs.mk
Loading