From 4b87aa1297b66fca300f40c2816d4a14eb68a448 Mon Sep 17 00:00:00 2001 From: wangdi Date: Mon, 8 Aug 2005 09:26:28 +0000 Subject: [PATCH] Branch: HEAD some minor fixes about mks crypto --- lustre/llite/llite_gs.c | 15 ++++++++------- lustre/mds/mds_lib.c | 43 ++++++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/lustre/llite/llite_gs.c b/lustre/llite/llite_gs.c index 74cf8dd..bc1577a 100644 --- a/lustre/llite/llite_gs.c +++ b/lustre/llite/llite_gs.c @@ -578,11 +578,10 @@ int ll_mks_create_key(struct inode *inode, struct lookup_intent *it) int ll_mks_init_it(struct inode *parent, struct lookup_intent *it) { - struct obd_export *gs_exp = ll_i2gsexp(parent); int rc = 0; ENTRY; - if (!gs_exp || !it) + if (!it) RETURN(0); ll_gs_intent_init(it); @@ -595,24 +594,26 @@ int ll_mks_init_it(struct inode *parent, struct lookup_intent *it) int ll_mks_decrypt_key(struct inode *inode, struct lookup_intent *it) { struct ll_inode_info *lli = ll_i2info(inode); - struct obd_export *gs_exp = ll_i2gsexp(inode); struct lustre_key *lkey = NULL; struct posix_acl *acl = NULL; int rc = 0; ENTRY; - if (!gs_exp) - RETURN(rc); - rc = ll_get_acl_key(inode, &acl, &lkey); if (rc || !lkey) - RETURN(rc); + GOTO(out, rc); spin_lock(&lli->lli_lock); SET_DECRYPTED(lkey->lk_flags); spin_unlock(&lli->lli_lock); +out: + if (acl) + posix_acl_release(acl); + if (lkey) + lustre_key_release(lkey); RETURN(rc); } + struct crypto_helper_ops ll_cmd_ops = { .init_it_key = ll_mks_init_it, .init_inode_key = ll_gs_init_inode_key, diff --git a/lustre/mds/mds_lib.c b/lustre/mds/mds_lib.c index 6b4709a..5477e25 100644 --- a/lustre/mds/mds_lib.c +++ b/lustre/mds/mds_lib.c @@ -287,12 +287,12 @@ out: RETURN(rc); } -static int mds_get_gskey(struct inode *inode, struct crypto_key *ckey) +static int mds_get_gskey(struct inode *inode, struct crypto_key_md *mkey) { - LASSERT(ckey); + LASSERT(mkey); /*tmp create gs key here*/ - get_random_bytes(ckey->ck_key, KEY_SIZE); - ckey->ck_type = MKS_TYPE; + get_random_bytes(mkey->md_ck.ck_key, KEY_SIZE); + mkey->md_ck.ck_type = MKS_TYPE; RETURN(0); } @@ -307,13 +307,15 @@ int mds_set_gskey(struct obd_device *obd, void *handle, ENTRY; if ((mds->mds_crypto_type != MKS_TYPE && - mds->mds_crypto_type != GKS_TYPE) || key_len == 0) + mds->mds_crypto_type != GKS_TYPE)) { + CDEBUG(D_INFO, "mds_crypto_type %d \n", mds->mds_crypto_type); RETURN(rc); - + } OBD_ALLOC(md_key, sizeof(*md_key)); - LASSERT(ckey != NULL); if (mds->mds_crypto_type == MKS_TYPE) { - mds_get_gskey(inode, ckey); + mds_get_gskey(inode, md_key); + } else { + LASSERT(ckey != NULL); } rc = fsfilt_get_md(obd, inode, md_key, sizeof(*md_key), EA_KEY); @@ -327,15 +329,18 @@ int mds_set_gskey(struct obd_device *obd, void *handle, } md_key->md_magic = cpu_to_le32(MD_KEY_MAGIC); - if (valid & ATTR_MAC) { - memcpy(md_key->md_ck.ck_mac, ckey->ck_mac, MAC_SIZE); - CDEBUG(D_INFO, "set mac %s for ino %lu \n", - md_key->md_ck.ck_mac, inode->i_ino); - } - if (valid & ATTR_KEY) { - memcpy(md_key->md_ck.ck_key, ckey->ck_key, KEY_SIZE); - CDEBUG(D_INFO, "set key %s for ino %lu \n", - md_key->md_ck.ck_key, inode->i_ino); + if (mds->mds_crypto_type == GKS_TYPE) { + /*get key and mac from request buffer*/ + if (valid & ATTR_MAC) { + memcpy(md_key->md_ck.ck_mac, ckey->ck_mac, MAC_SIZE); + CDEBUG(D_INFO, "set mac %s for ino %lu \n", + md_key->md_ck.ck_mac, inode->i_ino); + } + if (valid & ATTR_KEY) { + memcpy(md_key->md_ck.ck_key, ckey->ck_key, KEY_SIZE); + CDEBUG(D_INFO, "set key %s for ino %lu \n", + md_key->md_ck.ck_key, inode->i_ino); + } } rc = fsfilt_set_md(obd, inode, handle, md_key, sizeof(*md_key), EA_KEY); @@ -353,13 +358,13 @@ int mds_set_crypto_type(struct obd_device *obd, void *val, __u32 vallen) if (vallen >= strlen("mks") && memcmp(val, "mks", vallen) == 0) { mds->mds_crypto_type = MKS_TYPE; + CDEBUG(D_IOCTL, "mks type\n"); } if (vallen >= strlen("gks") && memcmp(val, "gks", vallen) == 0) { mds->mds_crypto_type = GKS_TYPE; + CDEBUG(D_IOCTL, "gks type \n"); } - - CDEBUG(D_IOCTL, "invalid key\n"); RETURN(0); } -- 1.8.3.1