KEYS: Fix some sparse warnings
Fix some sparse warnings in the keyrings code: (1) compat_keyctl_instantiate_key_iov() should be static. (2) There were a couple of places where a pointer was being compared against integer 0 rather than NULL. (3) keyctl_instantiate_key_common() should not take a __user-labelled iovec pointer as the caller must have copied the iovec to kernel space. (4) __key_link_begin() takes and __key_link_end() releases keyring_serialise_link_sem under some circumstances and so this should be declared. Note that adding __acquires() and __releases() for this doesn't help cure the warnings messages - something only commenting out both helps. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: James Morris <james.l.morris@oracle.com>
This commit is contained in:
parent
ff2bb047c4
commit
423b978802
4 changed files with 6 additions and 4 deletions
|
@ -24,7 +24,7 @@
|
||||||
*
|
*
|
||||||
* If successful, 0 will be returned.
|
* If successful, 0 will be returned.
|
||||||
*/
|
*/
|
||||||
long compat_keyctl_instantiate_key_iov(
|
static long compat_keyctl_instantiate_key_iov(
|
||||||
key_serial_t id,
|
key_serial_t id,
|
||||||
const struct compat_iovec __user *_payload_iov,
|
const struct compat_iovec __user *_payload_iov,
|
||||||
unsigned ioc,
|
unsigned ioc,
|
||||||
|
@ -33,7 +33,7 @@ long compat_keyctl_instantiate_key_iov(
|
||||||
struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
|
struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
|
||||||
long ret;
|
long ret;
|
||||||
|
|
||||||
if (_payload_iov == 0 || ioc == 0)
|
if (!_payload_iov || !ioc)
|
||||||
goto no_payload;
|
goto no_payload;
|
||||||
|
|
||||||
ret = compat_rw_copy_check_uvector(WRITE, _payload_iov, ioc,
|
ret = compat_rw_copy_check_uvector(WRITE, _payload_iov, ioc,
|
||||||
|
|
|
@ -240,7 +240,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t,
|
||||||
extern long keyctl_invalidate_key(key_serial_t);
|
extern long keyctl_invalidate_key(key_serial_t);
|
||||||
|
|
||||||
extern long keyctl_instantiate_key_common(key_serial_t,
|
extern long keyctl_instantiate_key_common(key_serial_t,
|
||||||
const struct iovec __user *,
|
const struct iovec *,
|
||||||
unsigned, size_t, key_serial_t);
|
unsigned, size_t, key_serial_t);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1106,7 +1106,7 @@ long keyctl_instantiate_key_iov(key_serial_t id,
|
||||||
struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
|
struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
|
||||||
long ret;
|
long ret;
|
||||||
|
|
||||||
if (_payload_iov == 0 || ioc == 0)
|
if (!_payload_iov || !ioc)
|
||||||
goto no_payload;
|
goto no_payload;
|
||||||
|
|
||||||
ret = rw_copy_check_uvector(WRITE, _payload_iov, ioc,
|
ret = rw_copy_check_uvector(WRITE, _payload_iov, ioc,
|
||||||
|
|
|
@ -751,6 +751,7 @@ static void keyring_unlink_rcu_disposal(struct rcu_head *rcu)
|
||||||
int __key_link_begin(struct key *keyring, const struct key_type *type,
|
int __key_link_begin(struct key *keyring, const struct key_type *type,
|
||||||
const char *description, unsigned long *_prealloc)
|
const char *description, unsigned long *_prealloc)
|
||||||
__acquires(&keyring->sem)
|
__acquires(&keyring->sem)
|
||||||
|
__acquires(&keyring_serialise_link_sem)
|
||||||
{
|
{
|
||||||
struct keyring_list *klist, *nklist;
|
struct keyring_list *klist, *nklist;
|
||||||
unsigned long prealloc;
|
unsigned long prealloc;
|
||||||
|
@ -960,6 +961,7 @@ void __key_link(struct key *keyring, struct key *key,
|
||||||
void __key_link_end(struct key *keyring, struct key_type *type,
|
void __key_link_end(struct key *keyring, struct key_type *type,
|
||||||
unsigned long prealloc)
|
unsigned long prealloc)
|
||||||
__releases(&keyring->sem)
|
__releases(&keyring->sem)
|
||||||
|
__releases(&keyring_serialise_link_sem)
|
||||||
{
|
{
|
||||||
BUG_ON(type == NULL);
|
BUG_ON(type == NULL);
|
||||||
BUG_ON(type->name == NULL);
|
BUG_ON(type->name == NULL);
|
||||||
|
|
Loading…
Add table
Reference in a new issue