2019-06-01 10:08:55 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2011-08-27 22:21:26 -04:00
/*
* Copyright ( C ) 2010 IBM Corporation
* Copyright ( C ) 2010 Politecnico di Torino , Italy
2020-07-05 23:45:12 +02:00
* TORSEC group - - https : //security.polito.it
2011-08-27 22:21:26 -04:00
*
* Authors :
* Mimi Zohar < zohar @ us . ibm . com >
* Roberto Sassu < roberto . sassu @ polito . it >
*
2017-05-13 04:51:53 -07:00
* See Documentation / security / keys / trusted - encrypted . rst
2011-08-27 22:21:26 -04:00
*/
# include <linux/uaccess.h>
2011-09-15 17:07:15 +10:00
# include <linux/err.h>
2011-08-27 22:21:26 -04:00
# include <keys/trusted-type.h>
2012-01-17 20:39:51 +00:00
# include <keys/encrypted-type.h>
# include "encrypted.h"
2011-08-27 22:21:26 -04:00
/*
* request_trusted_key - request the trusted key
*
* Trusted keys are sealed to PCRs and other metadata . Although userspace
* manages both trusted / encrypted key - types , like the encrypted key type
* data , trusted key type data is not visible decrypted from userspace .
*/
struct key * request_trusted_key ( const char * trusted_desc ,
2015-10-21 14:04:48 +01:00
const u8 * * master_key , size_t * master_keylen )
2011-08-27 22:21:26 -04:00
{
struct trusted_key_payload * tpayload ;
struct key * tkey ;
2019-07-10 18:43:43 -07:00
tkey = request_key ( & key_type_trusted , trusted_desc , NULL ) ;
2011-08-27 22:21:26 -04:00
if ( IS_ERR ( tkey ) )
goto error ;
down_read ( & tkey - > sem ) ;
2015-10-21 14:04:48 +01:00
tpayload = tkey - > payload . data [ 0 ] ;
2011-08-27 22:21:26 -04:00
* master_key = tpayload - > key ;
* master_keylen = tpayload - > key_len ;
error :
return tkey ;
}