Message ID | 20220706023935.875994-5-gjoyce@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | sed-opal: keyrings, discovery, revert and key store | expand |
On Tue, Jul 05, 2022 at 09:39:35PM -0500, gjoyce@linux.vnet.ibm.com wrote: > From: Greg Joyce <gjoyce@linux.vnet.ibm.com> > > Platforms that have a permanent key store may provide unique > platform dependent functions to read/write variables. The > default (weak) functions return -EOPNOTSUPP unless overridden > by architecture/platform versions. Which is none as of this patch set, as is the number of of users of this API. Did this slip in by accident?
On Wed, 2022-07-06 at 01:11 -0700, Christoph Hellwig wrote: > On Tue, Jul 05, 2022 at 09:39:35PM -0500, gjoyce@linux.vnet.ibm.com > wrote: > > From: Greg Joyce <gjoyce@linux.vnet.ibm.com> > > > > Platforms that have a permanent key store may provide unique > > platform dependent functions to read/write variables. The > > default (weak) functions return -EOPNOTSUPP unless overridden > > by architecture/platform versions. > > Which is none as of this patch set, as is the number of of users of > this API. Did this slip in by accident? You are correct, there are currently no platforms that utilize this key store interface. However, there is a pseries platform store that has a driver that will provide the interfaces. This is in a separate patchset that is currently being submitted.
Hi, Thank you for the patch! Yet something to improve: [auto build test ERROR on axboe-block/for-next] [also build test ERROR on linus/master v5.19-rc5 next-20220706] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/gjoyce-linux-vnet-ibm-com/sed-opal-keyrings-discovery-revert-and-key-store/20220706-104204 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next config: sparc64-randconfig-r002-20220703 (https://download.01.org/0day-ci/archive/20220707/202207070041.gf2Xgary-lkp@intel.com/config) compiler: sparc64-linux-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/b984dda112cdbda6b41045bf63f790a3c2903c7a git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review gjoyce-linux-vnet-ibm-com/sed-opal-keyrings-discovery-revert-and-key-store/20220706-104204 git checkout b984dda112cdbda6b41045bf63f790a3c2903c7a # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=sparc64 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All error/warnings (new ones prefixed by >>): block/sed-opal.c: In function 'update_sed_opal_key': >> block/sed-opal.c:286:15: error: implicit declaration of function 'key_alloc'; did you mean 'bdev_alloc'? [-Werror=implicit-function-declaration] 286 | key = key_alloc(&key_type_user, desc, GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, | ^~~~~~~~~ | bdev_alloc >> block/sed-opal.c:286:26: error: 'key_type_user' undeclared (first use in this function) 286 | key = key_alloc(&key_type_user, desc, GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, | ^~~~~~~~~~~~~ block/sed-opal.c:286:26: note: each undeclared identifier is reported only once for each function it appears in >> block/sed-opal.c:288:33: error: 'KEY_USR_VIEW' undeclared (first use in this function) 288 | KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, | ^~~~~~~~~~~~ >> block/sed-opal.c:288:48: error: 'KEY_USR_SEARCH' undeclared (first use in this function) 288 | KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, | ^~~~~~~~~~~~~~ >> block/sed-opal.c:288:65: error: 'KEY_USR_WRITE' undeclared (first use in this function) 288 | KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, | ^~~~~~~~~~~~~ >> block/sed-opal.c:294:15: error: implicit declaration of function 'key_instantiate_and_link'; did you mean 'd_instantiate_anon'? [-Werror=implicit-function-declaration] 294 | ret = key_instantiate_and_link(key, key_data, keylen, | ^~~~~~~~~~~~~~~~~~~~~~~~ | d_instantiate_anon block/sed-opal.c: In function 'read_sed_opal_key': >> block/sed-opal.c:307:9: error: unknown type name 'key_ref_t'; did you mean 'key_ref_put'? 307 | key_ref_t kref; | ^~~~~~~~~ | key_ref_put >> block/sed-opal.c:313:16: error: implicit declaration of function 'keyring_search' [-Werror=implicit-function-declaration] 313 | kref = keyring_search(make_key_ref(sed_opal_keyring, true), | ^~~~~~~~~~~~~~ block/sed-opal.c:314:18: error: 'key_type_user' undeclared (first use in this function) 314 | &key_type_user, | ^~~~~~~~~~~~~ >> block/sed-opal.c:318:20: warning: passing argument 1 of 'IS_ERR' makes pointer from integer without a cast [-Wint-conversion] 318 | if (IS_ERR(kref)) { | ^~~~ | | | int In file included from include/linux/container_of.h:6, from include/linux/list.h:5, from include/linux/rculist.h:10, from include/linux/pid.h:5, from include/linux/sched.h:14, from include/linux/delay.h:23, from block/sed-opal.c:12: include/linux/err.h:34:60: note: expected 'const void *' but argument is of type 'int' 34 | static inline bool __must_check IS_ERR(__force const void *ptr) | ~~~~~~~~~~~~^~~ >> block/sed-opal.c:319:31: warning: passing argument 1 of 'PTR_ERR' makes pointer from integer without a cast [-Wint-conversion] 319 | ret = PTR_ERR(kref); | ^~~~ | | | int In file included from include/linux/container_of.h:6, from include/linux/list.h:5, from include/linux/rculist.h:10, from include/linux/pid.h:5, from include/linux/sched.h:14, from include/linux/delay.h:23, from block/sed-opal.c:12: include/linux/err.h:29:61: note: expected 'const void *' but argument is of type 'int' 29 | static inline long __must_check PTR_ERR(__force const void *ptr) | ~~~~~~~~~~~~^~~ >> block/sed-opal.c:322:31: error: invalid use of undefined type 'struct key' 322 | down_read(&key->sem); | ^~ block/sed-opal.c:325:41: error: invalid use of undefined type 'struct key' 325 | if (buflen > key->datalen) | ^~ block/sed-opal.c:326:45: error: invalid use of undefined type 'struct key' 326 | buflen = key->datalen; | ^~ block/sed-opal.c:328:34: error: invalid use of undefined type 'struct key' 328 | ret = key->type->read(key, (char *)buffer, buflen); | ^~ block/sed-opal.c:330:29: error: invalid use of undefined type 'struct key' 330 | up_read(&key->sem); | ^~ block/sed-opal.c: In function 'sed_opal_init': >> block/sed-opal.c:2938:14: error: implicit declaration of function 'keyring_alloc'; did you mean 'warn_alloc'? [-Werror=implicit-function-declaration] 2938 | kr = keyring_alloc(".sed_opal", | ^~~~~~~~~~~~~ | warn_alloc >> block/sed-opal.c:2940:18: error: 'KEY_POS_ALL' undeclared (first use in this function) 2940 | (KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_VIEW | | ^~~~~~~~~~~ >> block/sed-opal.c:2940:33: error: 'KEY_POS_SETATTR' undeclared (first use in this function) 2940 | (KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_VIEW | | ^~~~~~~~~~~~~~~ block/sed-opal.c:2940:52: error: 'KEY_USR_VIEW' undeclared (first use in this function) 2940 | (KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_VIEW | | ^~~~~~~~~~~~ >> block/sed-opal.c:2941:17: error: 'KEY_USR_READ' undeclared (first use in this function) 2941 | KEY_USR_READ | KEY_USR_SEARCH | KEY_USR_WRITE, | ^~~~~~~~~~~~ block/sed-opal.c:2941:32: error: 'KEY_USR_SEARCH' undeclared (first use in this function) 2941 | KEY_USR_READ | KEY_USR_SEARCH | KEY_USR_WRITE, | ^~~~~~~~~~~~~~ block/sed-opal.c:2941:49: error: 'KEY_USR_WRITE' undeclared (first use in this function) 2941 | KEY_USR_READ | KEY_USR_SEARCH | KEY_USR_WRITE, | ^~~~~~~~~~~~~ >> block/sed-opal.c:2942:17: error: 'KEY_ALLOC_NOT_IN_QUOTA' undeclared (first use in this function) 2942 | KEY_ALLOC_NOT_IN_QUOTA, | ^~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +286 block/sed-opal.c 455a7b238cd6bc Scott Bauer 2017-02-03 274 8a2b115580e8f7 Greg Joyce 2022-07-05 275 /* 8a2b115580e8f7 Greg Joyce 2022-07-05 276 * Allocate/update a SED Opal key and add it to the SED Opal keyring. 8a2b115580e8f7 Greg Joyce 2022-07-05 277 */ 8a2b115580e8f7 Greg Joyce 2022-07-05 278 static int update_sed_opal_key(const char *desc, u_char *key_data, int keylen) 8a2b115580e8f7 Greg Joyce 2022-07-05 279 { 8a2b115580e8f7 Greg Joyce 2022-07-05 280 int ret; 8a2b115580e8f7 Greg Joyce 2022-07-05 281 struct key *key; 8a2b115580e8f7 Greg Joyce 2022-07-05 282 8a2b115580e8f7 Greg Joyce 2022-07-05 283 if (!sed_opal_keyring) 8a2b115580e8f7 Greg Joyce 2022-07-05 284 return -ENOKEY; 8a2b115580e8f7 Greg Joyce 2022-07-05 285 8a2b115580e8f7 Greg Joyce 2022-07-05 @286 key = key_alloc(&key_type_user, desc, GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, 8a2b115580e8f7 Greg Joyce 2022-07-05 287 current_cred(), 8a2b115580e8f7 Greg Joyce 2022-07-05 @288 KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, 8a2b115580e8f7 Greg Joyce 2022-07-05 289 0, 8a2b115580e8f7 Greg Joyce 2022-07-05 290 NULL); 8a2b115580e8f7 Greg Joyce 2022-07-05 291 if (IS_ERR(key)) 8a2b115580e8f7 Greg Joyce 2022-07-05 292 return PTR_ERR(key); 8a2b115580e8f7 Greg Joyce 2022-07-05 293 8a2b115580e8f7 Greg Joyce 2022-07-05 @294 ret = key_instantiate_and_link(key, key_data, keylen, 8a2b115580e8f7 Greg Joyce 2022-07-05 295 sed_opal_keyring, NULL); 8a2b115580e8f7 Greg Joyce 2022-07-05 296 key_put(key); 8a2b115580e8f7 Greg Joyce 2022-07-05 297 8a2b115580e8f7 Greg Joyce 2022-07-05 298 return ret; 8a2b115580e8f7 Greg Joyce 2022-07-05 299 } 8a2b115580e8f7 Greg Joyce 2022-07-05 300 8a2b115580e8f7 Greg Joyce 2022-07-05 301 /* 8a2b115580e8f7 Greg Joyce 2022-07-05 302 * Read a SED Opal key from the SED Opal keyring. 8a2b115580e8f7 Greg Joyce 2022-07-05 303 */ 8a2b115580e8f7 Greg Joyce 2022-07-05 304 static int read_sed_opal_key(const char *key_name, u_char *buffer, int buflen) 8a2b115580e8f7 Greg Joyce 2022-07-05 305 { 8a2b115580e8f7 Greg Joyce 2022-07-05 306 int ret; 8a2b115580e8f7 Greg Joyce 2022-07-05 @307 key_ref_t kref; 8a2b115580e8f7 Greg Joyce 2022-07-05 308 struct key *key; 8a2b115580e8f7 Greg Joyce 2022-07-05 309 8a2b115580e8f7 Greg Joyce 2022-07-05 310 if (!sed_opal_keyring) 8a2b115580e8f7 Greg Joyce 2022-07-05 311 return -ENOKEY; 8a2b115580e8f7 Greg Joyce 2022-07-05 312 8a2b115580e8f7 Greg Joyce 2022-07-05 @313 kref = keyring_search(make_key_ref(sed_opal_keyring, true), 8a2b115580e8f7 Greg Joyce 2022-07-05 314 &key_type_user, 8a2b115580e8f7 Greg Joyce 2022-07-05 315 key_name, 8a2b115580e8f7 Greg Joyce 2022-07-05 316 true); 8a2b115580e8f7 Greg Joyce 2022-07-05 317 8a2b115580e8f7 Greg Joyce 2022-07-05 @318 if (IS_ERR(kref)) { 8a2b115580e8f7 Greg Joyce 2022-07-05 @319 ret = PTR_ERR(kref); 8a2b115580e8f7 Greg Joyce 2022-07-05 320 } else { 8a2b115580e8f7 Greg Joyce 2022-07-05 321 key = key_ref_to_ptr(kref); 8a2b115580e8f7 Greg Joyce 2022-07-05 @322 down_read(&key->sem); 8a2b115580e8f7 Greg Joyce 2022-07-05 323 ret = key_validate(key); 8a2b115580e8f7 Greg Joyce 2022-07-05 324 if (ret == 0) { 8a2b115580e8f7 Greg Joyce 2022-07-05 325 if (buflen > key->datalen) 8a2b115580e8f7 Greg Joyce 2022-07-05 326 buflen = key->datalen; 8a2b115580e8f7 Greg Joyce 2022-07-05 327 8a2b115580e8f7 Greg Joyce 2022-07-05 328 ret = key->type->read(key, (char *)buffer, buflen); 8a2b115580e8f7 Greg Joyce 2022-07-05 329 } 8a2b115580e8f7 Greg Joyce 2022-07-05 330 up_read(&key->sem); 8a2b115580e8f7 Greg Joyce 2022-07-05 331 8a2b115580e8f7 Greg Joyce 2022-07-05 332 key_ref_put(kref); 8a2b115580e8f7 Greg Joyce 2022-07-05 333 } 8a2b115580e8f7 Greg Joyce 2022-07-05 334 8a2b115580e8f7 Greg Joyce 2022-07-05 335 return ret; 8a2b115580e8f7 Greg Joyce 2022-07-05 336 } 8a2b115580e8f7 Greg Joyce 2022-07-05 337
Hi, Thank you for the patch! Yet something to improve: [auto build test ERROR on axboe-block/for-next] [also build test ERROR on linus/master v5.19-rc5 next-20220707] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/gjoyce-linux-vnet-ibm-com/sed-opal-keyrings-discovery-revert-and-key-store/20220706-104204 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next config: arm-randconfig-r036-20220706 (https://download.01.org/0day-ci/archive/20220708/202207081010.mn8e8rca-lkp@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f553287b588916de09c66e3e32bf75e5060f967f) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/intel-lab-lkp/linux/commit/b984dda112cdbda6b41045bf63f790a3c2903c7a git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review gjoyce-linux-vnet-ibm-com/sed-opal-keyrings-discovery-revert-and-key-store/20220706-104204 git checkout b984dda112cdbda6b41045bf63f790a3c2903c7a # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All error/warnings (new ones prefixed by >>): >> block/sed-opal.c:286:8: error: call to undeclared function 'key_alloc'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] key = key_alloc(&key_type_user, desc, GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, ^ >> block/sed-opal.c:286:19: error: use of undeclared identifier 'key_type_user' key = key_alloc(&key_type_user, desc, GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, ^ >> block/sed-opal.c:288:5: error: use of undeclared identifier 'KEY_USR_VIEW' KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, ^ >> block/sed-opal.c:288:20: error: use of undeclared identifier 'KEY_USR_SEARCH' KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, ^ >> block/sed-opal.c:288:37: error: use of undeclared identifier 'KEY_USR_WRITE' KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, ^ >> block/sed-opal.c:294:8: error: call to undeclared function 'key_instantiate_and_link'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] ret = key_instantiate_and_link(key, key_data, keylen, ^ block/sed-opal.c:294:8: note: did you mean 'd_instantiate_anon'? include/linux/dcache.h:223:24: note: 'd_instantiate_anon' declared here extern struct dentry * d_instantiate_anon(struct dentry *, struct inode *); ^ block/sed-opal.c:307:2: error: unknown type name 'key_ref_t'; did you mean 'key_perm_t'? key_ref_t kref; ^~~~~~~~~ key_perm_t include/linux/key.h:31:18: note: 'key_perm_t' declared here typedef uint32_t key_perm_t; ^ >> block/sed-opal.c:313:9: error: call to undeclared function 'keyring_search'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] kref = keyring_search(make_key_ref(sed_opal_keyring, true), ^ block/sed-opal.c:314:4: error: use of undeclared identifier 'key_type_user' &key_type_user, ^ >> block/sed-opal.c:318:13: warning: incompatible integer to pointer conversion passing 'key_perm_t' (aka 'unsigned int') to parameter of type 'const void *' [-Wint-conversion] if (IS_ERR(kref)) { ^~~~ include/linux/err.h:34:60: note: passing argument to parameter 'ptr' here static inline bool __must_check IS_ERR(__force const void *ptr) ^ block/sed-opal.c:319:17: warning: incompatible integer to pointer conversion passing 'key_perm_t' (aka 'unsigned int') to parameter of type 'const void *' [-Wint-conversion] ret = PTR_ERR(kref); ^~~~ include/linux/err.h:29:61: note: passing argument to parameter 'ptr' here static inline long __must_check PTR_ERR(__force const void *ptr) ^ >> block/sed-opal.c:322:17: error: incomplete definition of type 'struct key' down_read(&key->sem); ~~~^ include/linux/key.h:33:8: note: forward declaration of 'struct key' struct key; ^ block/sed-opal.c:325:20: error: incomplete definition of type 'struct key' if (buflen > key->datalen) ~~~^ include/linux/key.h:33:8: note: forward declaration of 'struct key' struct key; ^ block/sed-opal.c:326:17: error: incomplete definition of type 'struct key' buflen = key->datalen; ~~~^ include/linux/key.h:33:8: note: forward declaration of 'struct key' struct key; ^ block/sed-opal.c:328:13: error: incomplete definition of type 'struct key' ret = key->type->read(key, (char *)buffer, buflen); ~~~^ include/linux/key.h:33:8: note: forward declaration of 'struct key' struct key; ^ block/sed-opal.c:330:15: error: incomplete definition of type 'struct key' up_read(&key->sem); ~~~^ include/linux/key.h:33:8: note: forward declaration of 'struct key' struct key; ^ >> block/sed-opal.c:2938:7: error: call to undeclared function 'keyring_alloc'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] kr = keyring_alloc(".sed_opal", ^ >> block/sed-opal.c:2940:4: error: use of undeclared identifier 'KEY_POS_ALL' (KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_VIEW | ^ >> block/sed-opal.c:2940:19: error: use of undeclared identifier 'KEY_POS_SETATTR' (KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_VIEW | ^ block/sed-opal.c:2940:38: error: use of undeclared identifier 'KEY_USR_VIEW' (KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_VIEW | ^ >> block/sed-opal.c:2941:3: error: use of undeclared identifier 'KEY_USR_READ' KEY_USR_READ | KEY_USR_SEARCH | KEY_USR_WRITE, ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 2 warnings and 20 errors generated. vim +/key_alloc +286 block/sed-opal.c 455a7b238cd6bc6 Scott Bauer 2017-02-03 274 8a2b115580e8f7c Greg Joyce 2022-07-05 275 /* 8a2b115580e8f7c Greg Joyce 2022-07-05 276 * Allocate/update a SED Opal key and add it to the SED Opal keyring. 8a2b115580e8f7c Greg Joyce 2022-07-05 277 */ 8a2b115580e8f7c Greg Joyce 2022-07-05 278 static int update_sed_opal_key(const char *desc, u_char *key_data, int keylen) 8a2b115580e8f7c Greg Joyce 2022-07-05 279 { 8a2b115580e8f7c Greg Joyce 2022-07-05 280 int ret; 8a2b115580e8f7c Greg Joyce 2022-07-05 281 struct key *key; 8a2b115580e8f7c Greg Joyce 2022-07-05 282 8a2b115580e8f7c Greg Joyce 2022-07-05 283 if (!sed_opal_keyring) 8a2b115580e8f7c Greg Joyce 2022-07-05 284 return -ENOKEY; 8a2b115580e8f7c Greg Joyce 2022-07-05 285 8a2b115580e8f7c Greg Joyce 2022-07-05 @286 key = key_alloc(&key_type_user, desc, GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, 8a2b115580e8f7c Greg Joyce 2022-07-05 287 current_cred(), 8a2b115580e8f7c Greg Joyce 2022-07-05 @288 KEY_USR_VIEW | KEY_USR_SEARCH | KEY_USR_WRITE, 8a2b115580e8f7c Greg Joyce 2022-07-05 289 0, 8a2b115580e8f7c Greg Joyce 2022-07-05 290 NULL); 8a2b115580e8f7c Greg Joyce 2022-07-05 291 if (IS_ERR(key)) 8a2b115580e8f7c Greg Joyce 2022-07-05 292 return PTR_ERR(key); 8a2b115580e8f7c Greg Joyce 2022-07-05 293 8a2b115580e8f7c Greg Joyce 2022-07-05 @294 ret = key_instantiate_and_link(key, key_data, keylen, 8a2b115580e8f7c Greg Joyce 2022-07-05 295 sed_opal_keyring, NULL); 8a2b115580e8f7c Greg Joyce 2022-07-05 296 key_put(key); 8a2b115580e8f7c Greg Joyce 2022-07-05 297 8a2b115580e8f7c Greg Joyce 2022-07-05 298 return ret; 8a2b115580e8f7c Greg Joyce 2022-07-05 299 } 8a2b115580e8f7c Greg Joyce 2022-07-05 300 8a2b115580e8f7c Greg Joyce 2022-07-05 301 /* 8a2b115580e8f7c Greg Joyce 2022-07-05 302 * Read a SED Opal key from the SED Opal keyring. 8a2b115580e8f7c Greg Joyce 2022-07-05 303 */ 8a2b115580e8f7c Greg Joyce 2022-07-05 304 static int read_sed_opal_key(const char *key_name, u_char *buffer, int buflen) 8a2b115580e8f7c Greg Joyce 2022-07-05 305 { 8a2b115580e8f7c Greg Joyce 2022-07-05 306 int ret; 8a2b115580e8f7c Greg Joyce 2022-07-05 307 key_ref_t kref; 8a2b115580e8f7c Greg Joyce 2022-07-05 308 struct key *key; 8a2b115580e8f7c Greg Joyce 2022-07-05 309 8a2b115580e8f7c Greg Joyce 2022-07-05 310 if (!sed_opal_keyring) 8a2b115580e8f7c Greg Joyce 2022-07-05 311 return -ENOKEY; 8a2b115580e8f7c Greg Joyce 2022-07-05 312 8a2b115580e8f7c Greg Joyce 2022-07-05 @313 kref = keyring_search(make_key_ref(sed_opal_keyring, true), 8a2b115580e8f7c Greg Joyce 2022-07-05 314 &key_type_user, 8a2b115580e8f7c Greg Joyce 2022-07-05 315 key_name, 8a2b115580e8f7c Greg Joyce 2022-07-05 316 true); 8a2b115580e8f7c Greg Joyce 2022-07-05 317 8a2b115580e8f7c Greg Joyce 2022-07-05 @318 if (IS_ERR(kref)) { 8a2b115580e8f7c Greg Joyce 2022-07-05 319 ret = PTR_ERR(kref); 8a2b115580e8f7c Greg Joyce 2022-07-05 320 } else { 8a2b115580e8f7c Greg Joyce 2022-07-05 321 key = key_ref_to_ptr(kref); 8a2b115580e8f7c Greg Joyce 2022-07-05 @322 down_read(&key->sem); 8a2b115580e8f7c Greg Joyce 2022-07-05 323 ret = key_validate(key); 8a2b115580e8f7c Greg Joyce 2022-07-05 324 if (ret == 0) { 8a2b115580e8f7c Greg Joyce 2022-07-05 325 if (buflen > key->datalen) 8a2b115580e8f7c Greg Joyce 2022-07-05 326 buflen = key->datalen; 8a2b115580e8f7c Greg Joyce 2022-07-05 327 8a2b115580e8f7c Greg Joyce 2022-07-05 328 ret = key->type->read(key, (char *)buffer, buflen); 8a2b115580e8f7c Greg Joyce 2022-07-05 329 } 8a2b115580e8f7c Greg Joyce 2022-07-05 330 up_read(&key->sem); 8a2b115580e8f7c Greg Joyce 2022-07-05 331 8a2b115580e8f7c Greg Joyce 2022-07-05 332 key_ref_put(kref); 8a2b115580e8f7c Greg Joyce 2022-07-05 333 } 8a2b115580e8f7c Greg Joyce 2022-07-05 334 8a2b115580e8f7c Greg Joyce 2022-07-05 335 return ret; 8a2b115580e8f7c Greg Joyce 2022-07-05 336 } 8a2b115580e8f7c Greg Joyce 2022-07-05 337
diff --git a/include/linux/arch_vars.h b/include/linux/arch_vars.h new file mode 100644 index 000000000000..b5eb5fcfb2ca --- /dev/null +++ b/include/linux/arch_vars.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Platform variable opearations. + * + * Copyright (C) 2022 IBM Corporation + * + * These are the accessor functions (read/write) for architecture specific + * variables. Specific architectures can provide overrides. + * + */ + +#include <linux/kernel.h> + +enum arch_variable_type { + ARCH_VAR_OPAL_KEY = 0, /* SED Opal Authentication Key */ + ARCH_VAR_OTHER = 1, /* Other type of variable */ + ARCH_VAR_MAX = 1, /* Maximum type value */ +}; + +int arch_read_variable(enum arch_variable_type type, char *varname, + void *varbuf, u_int *varlen); +int arch_write_variable(enum arch_variable_type type, char *varname, + void *varbuf, u_int varlen); diff --git a/lib/Makefile b/lib/Makefile index f99bf61f8bbc..b90c4cb0dbbb 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -48,7 +48,7 @@ obj-y += bcd.o sort.o parser.o debug_locks.o random32.o \ bsearch.o find_bit.o llist.o memweight.o kfifo.o \ percpu-refcount.o rhashtable.o \ once.o refcount.o usercopy.o errseq.o bucket_locks.o \ - generic-radix-tree.o + generic-radix-tree.o arch_vars.o obj-$(CONFIG_STRING_SELFTEST) += test_string.o obj-y += string_helpers.o obj-$(CONFIG_TEST_STRING_HELPERS) += test-string_helpers.o diff --git a/lib/arch_vars.c b/lib/arch_vars.c new file mode 100644 index 000000000000..b5362ef933dc --- /dev/null +++ b/lib/arch_vars.c @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Platform variable operations. + * + * Copyright (C) 2022 IBM Corporation + * + * These are the accessor functions (read/write) for architecture specific + * variables. Specific architectures can provide overrides. + * + */ + +#include <linux/kernel.h> +#include <linux/arch_vars.h> + +int __weak arch_read_variable(enum arch_variable_type type, char *varname, + void *varbuf, u_int *varlen) +{ + return -EOPNOTSUPP; +} + +int __weak arch_write_variable(enum arch_variable_type type, char *varname, + void *varbuf, u_int varlen) +{ + return -EOPNOTSUPP; +}
From: Greg Joyce <gjoyce@linux.vnet.ibm.com> Platforms that have a permanent key store may provide unique platform dependent functions to read/write variables. The default (weak) functions return -EOPNOTSUPP unless overridden by architecture/platform versions. --- include/linux/arch_vars.h | 23 +++++++++++++++++++++++ lib/Makefile | 2 +- lib/arch_vars.c | 25 +++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 include/linux/arch_vars.h create mode 100644 lib/arch_vars.c