|
@@ -103,7 +103,7 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
|
|
}
|
|
}
|
|
|
|
|
|
/* find the target keyring (which must be writable) */
|
|
/* find the target keyring (which must be writable) */
|
|
- keyring_ref = lookup_user_key(ringid, 1, 0, KEY_WRITE);
|
|
|
|
|
|
+ keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
|
|
if (IS_ERR(keyring_ref)) {
|
|
if (IS_ERR(keyring_ref)) {
|
|
ret = PTR_ERR(keyring_ref);
|
|
ret = PTR_ERR(keyring_ref);
|
|
goto error3;
|
|
goto error3;
|
|
@@ -185,7 +185,8 @@ SYSCALL_DEFINE4(request_key, const char __user *, _type,
|
|
/* get the destination keyring if specified */
|
|
/* get the destination keyring if specified */
|
|
dest_ref = NULL;
|
|
dest_ref = NULL;
|
|
if (destringid) {
|
|
if (destringid) {
|
|
- dest_ref = lookup_user_key(destringid, 1, 0, KEY_WRITE);
|
|
|
|
|
|
+ dest_ref = lookup_user_key(destringid, KEY_LOOKUP_CREATE,
|
|
|
|
+ KEY_WRITE);
|
|
if (IS_ERR(dest_ref)) {
|
|
if (IS_ERR(dest_ref)) {
|
|
ret = PTR_ERR(dest_ref);
|
|
ret = PTR_ERR(dest_ref);
|
|
goto error3;
|
|
goto error3;
|
|
@@ -233,9 +234,11 @@ SYSCALL_DEFINE4(request_key, const char __user *, _type,
|
|
long keyctl_get_keyring_ID(key_serial_t id, int create)
|
|
long keyctl_get_keyring_ID(key_serial_t id, int create)
|
|
{
|
|
{
|
|
key_ref_t key_ref;
|
|
key_ref_t key_ref;
|
|
|
|
+ unsigned long lflags;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- key_ref = lookup_user_key(id, create, 0, KEY_SEARCH);
|
|
|
|
|
|
+ lflags = create ? KEY_LOOKUP_CREATE : 0;
|
|
|
|
+ key_ref = lookup_user_key(id, lflags, KEY_SEARCH);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error;
|
|
goto error;
|
|
@@ -309,7 +312,7 @@ long keyctl_update_key(key_serial_t id,
|
|
}
|
|
}
|
|
|
|
|
|
/* find the target key (which must be writable) */
|
|
/* find the target key (which must be writable) */
|
|
- key_ref = lookup_user_key(id, 0, 0, KEY_WRITE);
|
|
|
|
|
|
+ key_ref = lookup_user_key(id, 0, KEY_WRITE);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error2;
|
|
goto error2;
|
|
@@ -337,7 +340,7 @@ long keyctl_revoke_key(key_serial_t id)
|
|
key_ref_t key_ref;
|
|
key_ref_t key_ref;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- key_ref = lookup_user_key(id, 0, 0, KEY_WRITE);
|
|
|
|
|
|
+ key_ref = lookup_user_key(id, 0, KEY_WRITE);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error;
|
|
goto error;
|
|
@@ -363,7 +366,7 @@ long keyctl_keyring_clear(key_serial_t ringid)
|
|
key_ref_t keyring_ref;
|
|
key_ref_t keyring_ref;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- keyring_ref = lookup_user_key(ringid, 1, 0, KEY_WRITE);
|
|
|
|
|
|
+ keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
|
|
if (IS_ERR(keyring_ref)) {
|
|
if (IS_ERR(keyring_ref)) {
|
|
ret = PTR_ERR(keyring_ref);
|
|
ret = PTR_ERR(keyring_ref);
|
|
goto error;
|
|
goto error;
|
|
@@ -389,13 +392,13 @@ long keyctl_keyring_link(key_serial_t id, key_serial_t ringid)
|
|
key_ref_t keyring_ref, key_ref;
|
|
key_ref_t keyring_ref, key_ref;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- keyring_ref = lookup_user_key(ringid, 1, 0, KEY_WRITE);
|
|
|
|
|
|
+ keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
|
|
if (IS_ERR(keyring_ref)) {
|
|
if (IS_ERR(keyring_ref)) {
|
|
ret = PTR_ERR(keyring_ref);
|
|
ret = PTR_ERR(keyring_ref);
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
|
|
|
|
- key_ref = lookup_user_key(id, 1, 0, KEY_LINK);
|
|
|
|
|
|
+ key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE, KEY_LINK);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error2;
|
|
goto error2;
|
|
@@ -423,13 +426,13 @@ long keyctl_keyring_unlink(key_serial_t id, key_serial_t ringid)
|
|
key_ref_t keyring_ref, key_ref;
|
|
key_ref_t keyring_ref, key_ref;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- keyring_ref = lookup_user_key(ringid, 0, 0, KEY_WRITE);
|
|
|
|
|
|
+ keyring_ref = lookup_user_key(ringid, 0, KEY_WRITE);
|
|
if (IS_ERR(keyring_ref)) {
|
|
if (IS_ERR(keyring_ref)) {
|
|
ret = PTR_ERR(keyring_ref);
|
|
ret = PTR_ERR(keyring_ref);
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
|
|
|
|
- key_ref = lookup_user_key(id, 0, 0, 0);
|
|
|
|
|
|
+ key_ref = lookup_user_key(id, KEY_LOOKUP_FOR_UNLINK, 0);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error2;
|
|
goto error2;
|
|
@@ -465,7 +468,7 @@ long keyctl_describe_key(key_serial_t keyid,
|
|
char *tmpbuf;
|
|
char *tmpbuf;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- key_ref = lookup_user_key(keyid, 0, 1, KEY_VIEW);
|
|
|
|
|
|
+ key_ref = lookup_user_key(keyid, KEY_LOOKUP_PARTIAL, KEY_VIEW);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
/* viewing a key under construction is permitted if we have the
|
|
/* viewing a key under construction is permitted if we have the
|
|
* authorisation token handy */
|
|
* authorisation token handy */
|
|
@@ -474,7 +477,8 @@ long keyctl_describe_key(key_serial_t keyid,
|
|
if (!IS_ERR(instkey)) {
|
|
if (!IS_ERR(instkey)) {
|
|
key_put(instkey);
|
|
key_put(instkey);
|
|
key_ref = lookup_user_key(keyid,
|
|
key_ref = lookup_user_key(keyid,
|
|
- 0, 1, 0);
|
|
|
|
|
|
+ KEY_LOOKUP_PARTIAL,
|
|
|
|
+ 0);
|
|
if (!IS_ERR(key_ref))
|
|
if (!IS_ERR(key_ref))
|
|
goto okay;
|
|
goto okay;
|
|
}
|
|
}
|
|
@@ -558,7 +562,7 @@ long keyctl_keyring_search(key_serial_t ringid,
|
|
}
|
|
}
|
|
|
|
|
|
/* get the keyring at which to begin the search */
|
|
/* get the keyring at which to begin the search */
|
|
- keyring_ref = lookup_user_key(ringid, 0, 0, KEY_SEARCH);
|
|
|
|
|
|
+ keyring_ref = lookup_user_key(ringid, 0, KEY_SEARCH);
|
|
if (IS_ERR(keyring_ref)) {
|
|
if (IS_ERR(keyring_ref)) {
|
|
ret = PTR_ERR(keyring_ref);
|
|
ret = PTR_ERR(keyring_ref);
|
|
goto error2;
|
|
goto error2;
|
|
@@ -567,7 +571,8 @@ long keyctl_keyring_search(key_serial_t ringid,
|
|
/* get the destination keyring if specified */
|
|
/* get the destination keyring if specified */
|
|
dest_ref = NULL;
|
|
dest_ref = NULL;
|
|
if (destringid) {
|
|
if (destringid) {
|
|
- dest_ref = lookup_user_key(destringid, 1, 0, KEY_WRITE);
|
|
|
|
|
|
+ dest_ref = lookup_user_key(destringid, KEY_LOOKUP_CREATE,
|
|
|
|
+ KEY_WRITE);
|
|
if (IS_ERR(dest_ref)) {
|
|
if (IS_ERR(dest_ref)) {
|
|
ret = PTR_ERR(dest_ref);
|
|
ret = PTR_ERR(dest_ref);
|
|
goto error3;
|
|
goto error3;
|
|
@@ -637,7 +642,7 @@ long keyctl_read_key(key_serial_t keyid, char __user *buffer, size_t buflen)
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
/* find the key first */
|
|
/* find the key first */
|
|
- key_ref = lookup_user_key(keyid, 0, 0, 0);
|
|
|
|
|
|
+ key_ref = lookup_user_key(keyid, 0, 0);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = -ENOKEY;
|
|
ret = -ENOKEY;
|
|
goto error;
|
|
goto error;
|
|
@@ -700,7 +705,8 @@ long keyctl_chown_key(key_serial_t id, uid_t uid, gid_t gid)
|
|
if (uid == (uid_t) -1 && gid == (gid_t) -1)
|
|
if (uid == (uid_t) -1 && gid == (gid_t) -1)
|
|
goto error;
|
|
goto error;
|
|
|
|
|
|
- key_ref = lookup_user_key(id, 1, 1, KEY_SETATTR);
|
|
|
|
|
|
+ key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE | KEY_LOOKUP_PARTIAL,
|
|
|
|
+ KEY_SETATTR);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error;
|
|
goto error;
|
|
@@ -805,7 +811,8 @@ long keyctl_setperm_key(key_serial_t id, key_perm_t perm)
|
|
if (perm & ~(KEY_POS_ALL | KEY_USR_ALL | KEY_GRP_ALL | KEY_OTH_ALL))
|
|
if (perm & ~(KEY_POS_ALL | KEY_USR_ALL | KEY_GRP_ALL | KEY_OTH_ALL))
|
|
goto error;
|
|
goto error;
|
|
|
|
|
|
- key_ref = lookup_user_key(id, 1, 1, KEY_SETATTR);
|
|
|
|
|
|
+ key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE | KEY_LOOKUP_PARTIAL,
|
|
|
|
+ KEY_SETATTR);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error;
|
|
goto error;
|
|
@@ -847,7 +854,7 @@ static long get_instantiation_keyring(key_serial_t ringid,
|
|
|
|
|
|
/* if a specific keyring is nominated by ID, then use that */
|
|
/* if a specific keyring is nominated by ID, then use that */
|
|
if (ringid > 0) {
|
|
if (ringid > 0) {
|
|
- dkref = lookup_user_key(ringid, 1, 0, KEY_WRITE);
|
|
|
|
|
|
+ dkref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
|
|
if (IS_ERR(dkref))
|
|
if (IS_ERR(dkref))
|
|
return PTR_ERR(dkref);
|
|
return PTR_ERR(dkref);
|
|
*_dest_keyring = key_ref_to_ptr(dkref);
|
|
*_dest_keyring = key_ref_to_ptr(dkref);
|
|
@@ -1083,7 +1090,8 @@ long keyctl_set_timeout(key_serial_t id, unsigned timeout)
|
|
time_t expiry;
|
|
time_t expiry;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- key_ref = lookup_user_key(id, 1, 1, KEY_SETATTR);
|
|
|
|
|
|
+ key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE | KEY_LOOKUP_PARTIAL,
|
|
|
|
+ KEY_SETATTR);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
ret = PTR_ERR(key_ref);
|
|
ret = PTR_ERR(key_ref);
|
|
goto error;
|
|
goto error;
|
|
@@ -1170,7 +1178,7 @@ long keyctl_get_security(key_serial_t keyid,
|
|
char *context;
|
|
char *context;
|
|
long ret;
|
|
long ret;
|
|
|
|
|
|
- key_ref = lookup_user_key(keyid, 0, 1, KEY_VIEW);
|
|
|
|
|
|
+ key_ref = lookup_user_key(keyid, KEY_LOOKUP_PARTIAL, KEY_VIEW);
|
|
if (IS_ERR(key_ref)) {
|
|
if (IS_ERR(key_ref)) {
|
|
if (PTR_ERR(key_ref) != -EACCES)
|
|
if (PTR_ERR(key_ref) != -EACCES)
|
|
return PTR_ERR(key_ref);
|
|
return PTR_ERR(key_ref);
|
|
@@ -1182,7 +1190,7 @@ long keyctl_get_security(key_serial_t keyid,
|
|
return PTR_ERR(key_ref);
|
|
return PTR_ERR(key_ref);
|
|
key_put(instkey);
|
|
key_put(instkey);
|
|
|
|
|
|
- key_ref = lookup_user_key(keyid, 0, 1, 0);
|
|
|
|
|
|
+ key_ref = lookup_user_key(keyid, KEY_LOOKUP_PARTIAL, 0);
|
|
if (IS_ERR(key_ref))
|
|
if (IS_ERR(key_ref))
|
|
return PTR_ERR(key_ref);
|
|
return PTR_ERR(key_ref);
|
|
}
|
|
}
|