efi: capsule-loader: Fix use-after-free in efi_capsule_write
authorHyunwoo Kim <imv4bel@gmail.com>
Wed, 7 Sep 2022 16:07:14 +0000 (09:07 -0700)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 7 Sep 2022 16:23:56 +0000 (18:23 +0200)
commit9cb636b5f6a8cc6d1b50809ec8f8d33ae0c84c95
treebd9589d71ff723e58ae7ef421691f7728e7e8e0c
parent7a1ec84ffba9e90ac772ddb33ea9c3899ed8d2c9
efi: capsule-loader: Fix use-after-free in efi_capsule_write

A race condition may occur if the user calls close() on another thread
during a write() operation on the device node of the efi capsule.

This is a race condition that occurs between the efi_capsule_write() and
efi_capsule_flush() functions of efi_capsule_fops, which ultimately
results in UAF.

So, the page freeing process is modified to be done in
efi_capsule_release() instead of efi_capsule_flush().

Cc: <stable@vger.kernel.org> # v4.9+
Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
Link: https://lore.kernel.org/all/20220907102920.GA88602@ubuntu/
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
drivers/firmware/efi/capsule-loader.c