Revert "Revert "ANDROID: fscrypt: add key removal notifier chain""

This reverts commit 4da740c10d.

For sdcardfs.

Signed-off-by: Tao Huang <huangtao@rock-chips.com>
Change-Id: I863e5efdf4aeec130447b1a655659ce16db55bd4
This commit is contained in:
Tao Huang 2020-09-24 19:56:29 +08:00
parent 72c2e95348
commit 445d582f54
2 changed files with 36 additions and 0 deletions

View File

@ -867,12 +867,34 @@ static int check_for_busy_inodes(struct super_block *sb,
return -EBUSY;
}
static BLOCKING_NOTIFIER_HEAD(fscrypt_key_removal_notifiers);
/*
* Register a function to be executed when the FS_IOC_REMOVE_ENCRYPTION_KEY
* ioctl has removed a key and is about to try evicting inodes.
*/
int fscrypt_register_key_removal_notifier(struct notifier_block *nb)
{
return blocking_notifier_chain_register(&fscrypt_key_removal_notifiers,
nb);
}
EXPORT_SYMBOL_GPL(fscrypt_register_key_removal_notifier);
int fscrypt_unregister_key_removal_notifier(struct notifier_block *nb)
{
return blocking_notifier_chain_unregister(&fscrypt_key_removal_notifiers,
nb);
}
EXPORT_SYMBOL_GPL(fscrypt_unregister_key_removal_notifier);
static int try_to_lock_encrypted_files(struct super_block *sb,
struct fscrypt_master_key *mk)
{
int err1;
int err2;
blocking_notifier_call_chain(&fscrypt_key_removal_notifiers, 0, NULL);
/*
* An inode can't be evicted while it is dirty or has dirty pages.
* Thus, we first have to clean the inodes in ->mk_decrypted_inodes.

View File

@ -178,6 +178,8 @@ int fscrypt_ioctl_add_key(struct file *filp, void __user *arg);
int fscrypt_ioctl_remove_key(struct file *filp, void __user *arg);
int fscrypt_ioctl_remove_key_all_users(struct file *filp, void __user *arg);
int fscrypt_ioctl_get_key_status(struct file *filp, void __user *arg);
int fscrypt_register_key_removal_notifier(struct notifier_block *nb);
int fscrypt_unregister_key_removal_notifier(struct notifier_block *nb);
/* keysetup.c */
int fscrypt_get_encryption_info(struct inode *inode);
@ -380,6 +382,18 @@ static inline int fscrypt_ioctl_get_key_status(struct file *filp,
return -EOPNOTSUPP;
}
static inline int fscrypt_register_key_removal_notifier(
struct notifier_block *nb)
{
return 0;
}
static inline int fscrypt_unregister_key_removal_notifier(
struct notifier_block *nb)
{
return 0;
}
/* keysetup.c */
static inline int fscrypt_get_encryption_info(struct inode *inode)
{