diff options
Diffstat (limited to 'security/keys/keyctl.c')
| -rw-r--r-- | security/keys/keyctl.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c index fea262860ea0..a6516a64b297 100644 --- a/security/keys/keyctl.c +++ b/security/keys/keyctl.c | |||
| @@ -49,9 +49,6 @@ asmlinkage long sys_add_key(const char __user *_type, | |||
| 49 | goto error; | 49 | goto error; |
| 50 | type[31] = '\0'; | 50 | type[31] = '\0'; |
| 51 | 51 | ||
| 52 | if (!type[0]) | ||
| 53 | goto error; | ||
| 54 | |||
| 55 | ret = -EPERM; | 52 | ret = -EPERM; |
| 56 | if (type[0] == '.') | 53 | if (type[0] == '.') |
| 57 | goto error; | 54 | goto error; |
| @@ -144,6 +141,10 @@ asmlinkage long sys_request_key(const char __user *_type, | |||
| 144 | goto error; | 141 | goto error; |
| 145 | type[31] = '\0'; | 142 | type[31] = '\0'; |
| 146 | 143 | ||
| 144 | ret = -EPERM; | ||
| 145 | if (type[0] == '.') | ||
| 146 | goto error; | ||
| 147 | |||
| 147 | /* pull the description into kernel space */ | 148 | /* pull the description into kernel space */ |
| 148 | ret = -EFAULT; | 149 | ret = -EFAULT; |
| 149 | dlen = strnlen_user(_description, PAGE_SIZE - 1); | 150 | dlen = strnlen_user(_description, PAGE_SIZE - 1); |
| @@ -362,7 +363,7 @@ long keyctl_revoke_key(key_serial_t id) | |||
| 362 | 363 | ||
| 363 | key_put(key); | 364 | key_put(key); |
| 364 | error: | 365 | error: |
| 365 | return 0; | 366 | return ret; |
| 366 | 367 | ||
| 367 | } /* end keyctl_revoke_key() */ | 368 | } /* end keyctl_revoke_key() */ |
| 368 | 369 | ||
| @@ -685,6 +686,8 @@ long keyctl_read_key(key_serial_t keyid, char __user *buffer, size_t buflen) | |||
| 685 | goto can_read_key2; | 686 | goto can_read_key2; |
| 686 | 687 | ||
| 687 | ret = PTR_ERR(skey); | 688 | ret = PTR_ERR(skey); |
| 689 | if (ret == -EAGAIN) | ||
| 690 | ret = -EACCES; | ||
| 688 | goto error2; | 691 | goto error2; |
| 689 | } | 692 | } |
| 690 | 693 | ||
