forked from luck/tmp_suning_uos_patched
0b0a84154e
Since the keyring facility can be viewed as a cache (at least in some applications), the local expiration time on the key should probably be viewed as a 'needs updating after this time' property rather than an absolute 'anyone now wanting to use this object is out of luck' property. Since request_key() is the main interface for the usage of keys, this should update or replace an expired key rather than issuing EKEYEXPIRED if the local expiration has been reached (ie. it should refresh the cache). For absolute conditions where refreshing the cache probably doesn't help, the key can be negatively instantiated using KEYCTL_REJECT_KEY with EKEYEXPIRED given as the error to issue. This will still cause request_key() to return EKEYEXPIRED as that was explicitly set. In the future, if the key type has an update op available, we might want to upcall with the expired key and allow the upcall to update it. We would pass a different operation name (the first column in /etc/request-key.conf) to the request-key program. request_key() returning EKEYEXPIRED is causing an NFS problem which Chuck Lever describes thusly: After about 10 minutes, my NFSv4 functional tests fail because the ownership of the test files goes to "-2". Looking at /proc/keys shows that the id_resolv keys that map to my test user ID have expired. The ownership problem persists until the expired keys are purged from the keyring, and fresh keys are obtained. I bisected the problem to 3.13 commit |
||
---|---|---|
.. | ||
encrypted-keys | ||
big_key.c | ||
compat.c | ||
gc.c | ||
internal.h | ||
Kconfig | ||
key.c | ||
keyctl.c | ||
keyring.c | ||
Makefile | ||
permission.c | ||
persistent.c | ||
proc.c | ||
process_keys.c | ||
request_key_auth.c | ||
request_key.c | ||
sysctl.c | ||
trusted.c | ||
trusted.h | ||
user_defined.c |