2019-05-27 09:55:01 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-10-31 02:02:42 +03:00
/* user-type.h: User-defined key type
*
* Copyright ( C ) 2005 Red Hat , Inc . All Rights Reserved .
* Written by David Howells ( dhowells @ redhat . com )
*/
# ifndef _KEYS_USER_TYPE_H
# define _KEYS_USER_TYPE_H
# include <linux/key.h>
# include <linux/rcupdate.h>
2015-10-21 16:04:48 +03:00
# ifdef CONFIG_KEYS
2005-10-31 02:02:42 +03:00
/*****************************************************************************/
/*
2012-01-18 01:09:11 +04:00
* the payload for a key of type " user " or " logon "
2005-10-31 02:02:42 +03:00
* - once filled in and attached to a key :
* - the payload struct is invariant may not be changed , only replaced
* - the payload must be read with RCU procedures or with the key semaphore
* held
* - the payload may only be replaced with the key semaphore write - locked
* - the key ' s data length is the size of the actual data , not including the
* payload wrapper
*/
struct user_key_payload {
struct rcu_head rcu ; /* RCU destructor */
unsigned short datalen ; /* length of this data */
2019-02-20 16:32:11 +03:00
char data [ 0 ] __aligned ( __alignof__ ( u64 ) ) ; /* actual data */
2005-10-31 02:02:42 +03:00
} ;
extern struct key_type key_type_user ;
2012-01-18 01:09:11 +04:00
extern struct key_type key_type_logon ;
2005-10-31 02:02:42 +03:00
2012-09-13 16:06:29 +04:00
struct key_preparsed_payload ;
2014-07-18 21:56:35 +04:00
extern int user_preparse ( struct key_preparsed_payload * prep ) ;
extern void user_free_preparse ( struct key_preparsed_payload * prep ) ;
2012-09-13 16:06:29 +04:00
extern int user_update ( struct key * key , struct key_preparsed_payload * prep ) ;
2006-06-26 11:24:51 +04:00
extern void user_revoke ( struct key * key ) ;
2005-10-31 02:02:42 +03:00
extern void user_destroy ( struct key * key ) ;
extern void user_describe ( const struct key * user , struct seq_file * m ) ;
extern long user_read ( const struct key * key ,
char __user * buffer , size_t buflen ) ;
2017-03-01 18:11:23 +03:00
static inline const struct user_key_payload * user_key_payload_rcu ( const struct key * key )
2015-10-21 16:04:48 +03:00
{
2017-03-01 18:11:23 +03:00
return ( struct user_key_payload * ) dereference_key_rcu ( key ) ;
}
static inline struct user_key_payload * user_key_payload_locked ( const struct key * key )
{
return ( struct user_key_payload * ) dereference_key_locked ( ( struct key * ) key ) ;
2015-10-21 16:04:48 +03:00
}
# endif /* CONFIG_KEYS */
2005-10-31 02:02:42 +03:00
# endif /* _KEYS_USER_TYPE_H */