diff options
Diffstat (limited to 'include/linux/key.h')
| -rw-r--r-- | include/linux/key.h | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/include/linux/key.h b/include/linux/key.h index 96933b1e5d2..5231800770e 100644 --- a/include/linux/key.h +++ b/include/linux/key.h @@ -124,7 +124,10 @@ static inline unsigned long is_key_possessed(const key_ref_t key_ref)  struct key {  	atomic_t		usage;		/* number of references */  	key_serial_t		serial;		/* key serial number */ -	struct rb_node		serial_node; +	union { +		struct list_head graveyard_link; +		struct rb_node	serial_node; +	};  	struct key_type		*type;		/* type of key */  	struct rw_semaphore	sem;		/* change vs change sem */  	struct key_user		*user;		/* owner of this key */ @@ -133,6 +136,7 @@ struct key {  		time_t		expiry;		/* time at which key expires (or 0) */  		time_t		revoked_at;	/* time at which key was revoked */  	}; +	time_t			last_used_at;	/* last time used for LRU keyring discard */  	uid_t			uid;  	gid_t			gid;  	key_perm_t		perm;		/* access permissions */ @@ -156,6 +160,7 @@ struct key {  #define KEY_FLAG_USER_CONSTRUCT	4	/* set if key is being constructed in userspace */  #define KEY_FLAG_NEGATIVE	5	/* set if key is negative */  #define KEY_FLAG_ROOT_CAN_CLEAR	6	/* set if key can be cleared by root without permission */ +#define KEY_FLAG_INVALIDATED	7	/* set if key has been invalidated */  	/* the description string  	 * - this is used to match a key against search criteria @@ -199,6 +204,7 @@ extern struct key *key_alloc(struct key_type *type,  #define KEY_ALLOC_NOT_IN_QUOTA	0x0002	/* not in quota */  extern void key_revoke(struct key *key); +extern void key_invalidate(struct key *key);  extern void key_put(struct key *key);  static inline struct key *key_get(struct key *key) @@ -236,7 +242,7 @@ extern struct key *request_key_async_with_auxdata(struct key_type *type,  extern int wait_for_key_construction(struct key *key, bool intr); -extern int key_validate(struct key *key); +extern int key_validate(const struct key *key);  extern key_ref_t key_create_or_update(key_ref_t keyring,  				      const char *type, @@ -319,6 +325,7 @@ extern void key_init(void);  #define key_serial(k)			0  #define key_get(k) 			({ NULL; })  #define key_revoke(k)			do { } while(0) +#define key_invalidate(k)		do { } while(0)  #define key_put(k)			do { } while(0)  #define key_ref_put(k)			do { } while(0)  #define make_key_ref(k, p)		NULL  |