On Friday, March 18, 2011 04:30:50 pm Tyler Hicks wrote: > On Thu Mar 17, 2011 at 12:48:53PM +0100, Roberto Sassu <roberto.sassu@xxxxxxxxx> wrote: > > The ecryptfs_find_auth_tok_for_sig() call is moved before the > > mutex_lock(s->tfm_mutex) instruction in order to avoid possible deadlocks > > that may occur by holding the lock on the two semaphores 'key->sem' and > > 's->tfm_mutex' in reverse order. > > > > Signed-off-by: Roberto Sassu <roberto.sassu@xxxxxxxxx> > > --- > > fs/ecryptfs/keystore.c | 42 +++++++++++++++++++++++------------------- > > 1 files changed, 23 insertions(+), 19 deletions(-) > > > > diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c > > index e35d745..d066217 100644 > > --- a/fs/ecryptfs/keystore.c > > +++ b/fs/ecryptfs/keystore.c > > @@ -538,6 +538,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes, > > char *filename, size_t filename_size) > > { > > struct ecryptfs_write_tag_70_packet_silly_stack *s; > > + struct ecryptfs_auth_tok *auth_tok; > > Why declare a new ecryptfs_auth_tok struct pointer here? The idea behind > the ecryptfs_write_tag_70_packet_silly_stack struct is to keep stack > size at a minimum. Since it already has s->auth_tok, I don't see why we > would need to declare a new one. > Hi Tyler i did this because i was thinking that 'tfm_mutex' is protecting the 'auth_tok' field of the ecryptfs_parse_tag_70_packet_silly_stack structure. Sorry, my mistake. Thanks Roberto > > struct key *auth_tok_key = NULL; > > int rc = 0; > > > > @@ -550,6 +551,16 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes, > > } > > s->desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; > > (*packet_size) = 0; > > + rc = ecryptfs_find_auth_tok_for_sig( > > + &auth_tok_key, > > + &auth_tok, mount_crypt_stat, > > + mount_crypt_stat->global_default_fnek_sig); > > + if (rc) { > > + printk(KERN_ERR "%s: Error attempting to find auth tok for " > > + "fnek sig [%s]; rc = [%d]\n", __func__, > > + mount_crypt_stat->global_default_fnek_sig, rc); > > + goto out; > > + } > > rc = ecryptfs_get_tfm_and_mutex_for_cipher_name( > > &s->desc.tfm, > > &s->tfm_mutex, mount_crypt_stat->global_default_fn_cipher_name); > > @@ -635,16 +646,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes, > > goto out_free_unlock; > > } > > dest[s->i++] = s->cipher_code; > > - rc = ecryptfs_find_auth_tok_for_sig( > > - &auth_tok_key, > > - &s->auth_tok, mount_crypt_stat, > > - mount_crypt_stat->global_default_fnek_sig); > > - if (rc) { > > - printk(KERN_ERR "%s: Error attempting to find auth tok for " > > - "fnek sig [%s]; rc = [%d]\n", __func__, > > - mount_crypt_stat->global_default_fnek_sig, rc); > > - goto out_free_unlock; > > - } > > + s->auth_tok = auth_tok; > > /* TODO: Support other key modules than passphrase for > > * filename encryption */ > > if (s->auth_tok->token_type != ECRYPTFS_PASSWORD) { > > @@ -831,6 +833,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, > > char *data, size_t max_packet_size) > > { > > struct ecryptfs_parse_tag_70_packet_silly_stack *s; > > + struct ecryptfs_auth_tok *auth_tok; > > Same here as above. > > Tyler > > > struct key *auth_tok_key = NULL; > > int rc = 0; > > > > @@ -898,6 +901,15 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, > > __func__, s->cipher_code); > > goto out; > > } > > + rc = ecryptfs_find_auth_tok_for_sig(&auth_tok_key, > > + &auth_tok, mount_crypt_stat, > > + s->fnek_sig_hex); > > + if (rc) { > > + printk(KERN_ERR "%s: Error attempting to find auth tok for " > > + "fnek sig [%s]; rc = [%d]\n", __func__, s->fnek_sig_hex, > > + rc); > > + goto out; > > + } > > rc = ecryptfs_get_tfm_and_mutex_for_cipher_name(&s->desc.tfm, > > &s->tfm_mutex, > > s->cipher_string); > > @@ -944,15 +956,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, > > * >= ECRYPTFS_MAX_IV_BYTES. */ > > memset(s->iv, 0, ECRYPTFS_MAX_IV_BYTES); > > s->desc.info = s->iv; > > - rc = ecryptfs_find_auth_tok_for_sig(&auth_tok_key, > > - &s->auth_tok, mount_crypt_stat, > > - s->fnek_sig_hex); > > - if (rc) { > > - printk(KERN_ERR "%s: Error attempting to find auth tok for " > > - "fnek sig [%s]; rc = [%d]\n", __func__, s->fnek_sig_hex, > > - rc); > > - goto out_free_unlock; > > - } > > + s->auth_tok = auth_tok; > > /* TODO: Support other key modules than passphrase for > > * filename encryption */ > > if (s->auth_tok->token_type != ECRYPTFS_PASSWORD) { > > > -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html