lkml.org 
[lkml]   [2011]   [Jan]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC][PATCH v3 6/6] eCryptfs: added support for the encrypted key type
    On Mon Jan 24, 2011 at 05:44:54PM +0100, Roberto Sassu <roberto.sassu@polito.it> wrote:
    > The function ecryptfs_keyring_auth_tok_for_sig() has been modified in order
    > to search keys of both 'user' and 'encrypted' types.
    >
    > Signed-off-by: Roberto Sassu <roberto.sassu@polito.it>
    > Acked-by: Gianluca Ramunno <ramunno@polito.it>

    Thanks for the new revision.

    Acked-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>

    > ---
    > fs/ecryptfs/ecryptfs_kernel.h | 41 +++++++++++++++++++++++++++++++++++++++--
    > fs/ecryptfs/keystore.c | 11 +++++++----
    > 2 files changed, 46 insertions(+), 6 deletions(-)
    >
    > diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h
    > index 2e2242f..2b50397 100644
    > --- a/fs/ecryptfs/ecryptfs_kernel.h
    > +++ b/fs/ecryptfs/ecryptfs_kernel.h
    > @@ -29,6 +29,7 @@
    > #define ECRYPTFS_KERNEL_H
    >
    > #include <keys/user-type.h>
    > +#include <keys/encrypted-type.h>
    > #include <linux/fs.h>
    > #include <linux/fs_stack.h>
    > #include <linux/namei.h>
    > @@ -78,11 +79,47 @@ struct ecryptfs_page_crypt_context {
    > } param;
    > };
    >
    > +#if defined(CONFIG_ENCRYPTED_KEYS) || defined(CONFIG_ENCRYPTED_KEYS_MODULE)
    > +static inline struct ecryptfs_auth_tok *
    > +ecryptfs_get_encrypted_key_payload_data(struct key *key)
    > +{
    > + if (key->type == &key_type_encrypted)
    > + return (struct ecryptfs_auth_tok *)
    > + (&((struct encrypted_key_payload *)key->payload.data)->payload_data);
    > + else
    > + return NULL;
    > +}
    > +
    > +static inline struct key *ecryptfs_get_encrypted_key(char *sig)
    > +{
    > + return request_key(&key_type_encrypted, sig, NULL);
    > +}
    > +
    > +#else
    > +static inline struct ecryptfs_auth_tok *
    > +ecryptfs_get_encrypted_key_payload_data(struct key *key)
    > +{
    > + return NULL;
    > +}
    > +
    > +static inline struct key *ecryptfs_get_encrypted_key(char *sig)
    > +{
    > + return ERR_PTR(-ENOKEY);
    > +}
    > +
    > +#endif /* CONFIG_ENCRYPTED_KEYS */
    > +
    > static inline struct ecryptfs_auth_tok *
    > ecryptfs_get_key_payload_data(struct key *key)
    > {
    > - return (struct ecryptfs_auth_tok *)
    > - (((struct user_key_payload*)key->payload.data)->data);
    > + struct ecryptfs_auth_tok *auth_tok;
    > +
    > + auth_tok = ecryptfs_get_encrypted_key_payload_data(key);
    > + if (!auth_tok)
    > + return (struct ecryptfs_auth_tok *)
    > + (((struct user_key_payload *)key->payload.data)->data);
    > + else
    > + return auth_tok;
    > }
    >
    > #define ECRYPTFS_MAX_KEYSET_SIZE 1024
    > diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c
    > index c1436cf..17194b8 100644
    > --- a/fs/ecryptfs/keystore.c
    > +++ b/fs/ecryptfs/keystore.c
    > @@ -1560,10 +1560,13 @@ int ecryptfs_keyring_auth_tok_for_sig(struct key **auth_tok_key,
    >
    > (*auth_tok_key) = request_key(&key_type_user, sig, NULL);
    > if (!(*auth_tok_key) || IS_ERR(*auth_tok_key)) {
    > - printk(KERN_ERR "Could not find key with description: [%s]\n",
    > - sig);
    > - rc = process_request_key_err(PTR_ERR(*auth_tok_key));
    > - goto out;
    > + (*auth_tok_key) = ecryptfs_get_encrypted_key(sig);
    > + if (!(*auth_tok_key) || IS_ERR(*auth_tok_key)) {
    > + printk(KERN_ERR "Could not find key with description: [%s]\n",
    > + sig);
    > + rc = process_request_key_err(PTR_ERR(*auth_tok_key));
    > + goto out;
    > + }
    > }
    > (*auth_tok) = ecryptfs_get_key_payload_data(*auth_tok_key);
    > if (ecryptfs_verify_version((*auth_tok)->version)) {
    > --
    > 1.7.3.4
    >




    \
     
     \ /
      Last update: 2011-01-25 23:43    [W:0.027 / U:1.596 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site