|
@@ -936,8 +936,10 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
|
|
|
{
|
|
|
int err;
|
|
|
struct loop_func_table *xfer;
|
|
|
+ uid_t uid = current_uid();
|
|
|
|
|
|
- if (lo->lo_encrypt_key_size && lo->lo_key_owner != current->uid &&
|
|
|
+ if (lo->lo_encrypt_key_size &&
|
|
|
+ lo->lo_key_owner != uid &&
|
|
|
!capable(CAP_SYS_ADMIN))
|
|
|
return -EPERM;
|
|
|
if (lo->lo_state != Lo_bound)
|
|
@@ -992,7 +994,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
|
|
|
if (info->lo_encrypt_key_size) {
|
|
|
memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
|
|
|
info->lo_encrypt_key_size);
|
|
|
- lo->lo_key_owner = current->uid;
|
|
|
+ lo->lo_key_owner = uid;
|
|
|
}
|
|
|
|
|
|
return 0;
|