KEYS: Fix some sparse warnings
authorDavid Howells <dhowells@redhat.com>
Mon, 21 May 2012 11:32:13 +0000 (12:32 +0100)
committerJames Morris <james.l.morris@oracle.com>
Fri, 25 May 2012 10:51:42 +0000 (20:51 +1000)
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>
security/keys/compat.c
security/keys/internal.h
security/keys/keyctl.c
security/keys/keyring.c

index fab4f8d..e35ae1d 100644 (file)
@@ -24,7 +24,7 @@
  *
  * If successful, 0 will be returned.
  */
-long compat_keyctl_instantiate_key_iov(
+static long compat_keyctl_instantiate_key_iov(
        key_serial_t id,
        const struct compat_iovec __user *_payload_iov,
        unsigned ioc,
@@ -33,7 +33,7 @@ long compat_keyctl_instantiate_key_iov(
        struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
        long ret;
 
-       if (_payload_iov == 0 || ioc == 0)
+       if (!_payload_iov || !ioc)
                goto no_payload;
 
        ret = compat_rw_copy_check_uvector(WRITE, _payload_iov, ioc,
index f711b09..f173be2 100644 (file)
@@ -240,7 +240,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t,
 extern long keyctl_invalidate_key(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);
 
 /*
index ddb3e05..b61c063 100644 (file)
@@ -1106,7 +1106,7 @@ long keyctl_instantiate_key_iov(key_serial_t id,
        struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
        long ret;
 
-       if (_payload_iov == 0 || ioc == 0)
+       if (!_payload_iov || !ioc)
                goto no_payload;
 
        ret = rw_copy_check_uvector(WRITE, _payload_iov, ioc,
index 7445875..81e7852 100644 (file)
@@ -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,
                     const char *description, unsigned long *_prealloc)
        __acquires(&keyring->sem)
+       __acquires(&keyring_serialise_link_sem)
 {
        struct keyring_list *klist, *nklist;
        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,
                    unsigned long prealloc)
        __releases(&keyring->sem)
+       __releases(&keyring_serialise_link_sem)
 {
        BUG_ON(type == NULL);
        BUG_ON(type->name == NULL);