pstore: Fail to unlink if a driver has not defined pstore_erase
authorAruna Balakrishnaiah <aruna@linux.vnet.ibm.com>
Tue, 25 Jun 2013 09:03:56 +0000 (14:33 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Feb 2015 06:35:39 +0000 (22:35 -0800)
commit bf2883339a33b7544b92ea465b90c3de55082032 upstream.

pstore_erase is used to erase the record from the persistent store.
So if a driver has not defined pstore_erase callback return
-EPERM instead of unlinking a file as deleting the file without
erasing its record in persistent store will give a wrong impression
to customers.

Signed-off-by: Aruna Balakrishnaiah <aruna@linux.vnet.ibm.com>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Cc: HuKeping <hukeping@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/pstore/inode.c

index 3ba30825f387d847c04054f85608f735458e811b..eaba02d951d3bcafbf36a4b8891bff47ce8e6832 100644 (file)
@@ -178,6 +178,8 @@ static int pstore_unlink(struct inode *dir, struct dentry *dentry)
        if (p->psi->erase)
                p->psi->erase(p->type, p->id, p->count,
                              dentry->d_inode->i_ctime, p->psi);
+       else
+               return -EPERM;
 
        return simple_unlink(dir, dentry);
 }