Message ID | 1480630498-19201-3-git-send-email-richard@nod.at |
---|---|
State | Accepted |
Delegated to: | Richard Weinberger |
Headers | show |
On Thu, Dec 01, 2016 at 11:14:54PM +0100, Richard Weinberger wrote: > From: David Gstir <david@sigma-star.at> > > In case of in-place encryption ctx must be released right away. > Otherwise ctx is never freed. > I didn't notice this before, but the fscrypt_ctx isn't actually used at all in the "own pages" crypto case. So there's really no need to allocate one. How about we just handle the "own pages" case at the beginning of fscrypt_encrypt_page(): if (inode->i_sb->s_cop->flags & FS_CFLG_OWN_PAGES) { err = do_page_crypto(inode, FS_ENCRYPT, lblk_num, page, page, len, offs, gfp_flags); if (err) return ERR_PTR(err); return page; } (and the rest essentially the same as it used to be) Eric
diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c index 3c1124beae28..1b877fcec1c1 100644 --- a/fs/crypto/crypto.c +++ b/fs/crypto/crypto.c @@ -270,6 +270,8 @@ struct page *fscrypt_encrypt_page(const struct inode *inode, SetPagePrivate(ciphertext_page); set_page_private(ciphertext_page, (unsigned long)ctx); lock_page(ciphertext_page); + } else { + fscrypt_release_ctx(ctx); } return ciphertext_page;