switch keyctl_instantiate_key_common() to iov_iter
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -31,30 +31,21 @@ static long compat_keyctl_instantiate_key_iov(
|
||||
key_serial_t ringid)
|
||||
{
|
||||
struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
|
||||
struct iov_iter from;
|
||||
long ret;
|
||||
|
||||
if (!_payload_iov || !ioc)
|
||||
goto no_payload;
|
||||
if (!_payload_iov)
|
||||
ioc = 0;
|
||||
|
||||
ret = compat_rw_copy_check_uvector(WRITE, _payload_iov, ioc,
|
||||
ARRAY_SIZE(iovstack),
|
||||
iovstack, &iov);
|
||||
ret = compat_import_iovec(WRITE, _payload_iov, ioc,
|
||||
ARRAY_SIZE(iovstack), &iov,
|
||||
&from);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
if (ret == 0)
|
||||
goto no_payload_free;
|
||||
return ret;
|
||||
|
||||
ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
|
||||
err:
|
||||
if (iov != iovstack)
|
||||
kfree(iov);
|
||||
ret = keyctl_instantiate_key_common(id, &from, ringid);
|
||||
kfree(iov);
|
||||
return ret;
|
||||
|
||||
no_payload_free:
|
||||
if (iov != iovstack)
|
||||
kfree(iov);
|
||||
no_payload:
|
||||
return keyctl_instantiate_key_common(id, NULL, 0, 0, ringid);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user