summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorNicolai Stange <nicstange@gmail.com>2016-05-24 13:08:53 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-06-15 04:56:35 -0700
commitb10e3e90485e32e4cea9e35d2295ee7bffaeff73 (patch)
tree99aeebe65cb41e45077f9bc6f3f500214dbe742a /firmware
parentdf4565f9ebdc4d6dc50edc6e8fed08004e328332 (diff)
debugfs: full_proxy_open(): free proxy on ->open() failure
Debugfs' full_proxy_open(), the ->open() installed at all inodes created through debugfs_create_file(), - grabs a reference to the original struct file_operations instance passed to debugfs_create_file(), - dynamically allocates a proxy struct file_operations instance wrapping the original - and installs this at the file's ->f_op. Afterwards, it calls the original ->open() and passes its return value back to the VFS layer. Now, if that return value indicates failure, the VFS layer won't ever call ->release() and thus, neither the reference to the original file_operations nor the memory for the proxy file_operations will get released, i.e. both are leaked. Upon failure of the original fops' ->open(), undo the proxy installation. That is: - Set the struct file ->f_op to what it had been when full_proxy_open() was entered. - Drop the reference to the original file_operations. - Free the memory holding the proxy file_operations. Fixes: 49d200deaa68 ("debugfs: prevent access to removed files' private data") Signed-off-by: Nicolai Stange <nicstange@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'firmware')
0 files changed, 0 insertions, 0 deletions