ovl: fix incorrect fdput() on aio completion
authorAmir Goldstein <amir73il@gmail.com>
Tue, 22 Aug 2023 17:50:59 +0000 (20:50 +0300)
committerAmir Goldstein <amir73il@gmail.com>
Mon, 4 Sep 2023 15:27:38 +0000 (18:27 +0300)
commit724768a39374d35b70eaeae8dd87048a2ec7ae8e
tree3eb0e43379094a80cdbcb87f47517d3119db7b7a
parentab048302026d7701e7fbd718917e0dbcff0c4223
ovl: fix incorrect fdput() on aio completion

ovl_{read,write}_iter() always call fdput(real) to put one or zero
refcounts of the real file, but for aio, whether it was submitted or not,
ovl_aio_put() also calls fdput(), which is not balanced.  This is only a
problem in the less common case when FDPUT_FPUT flag is set.

To fix the problem use get_file() to take file refcount and use fput()
instead of fdput() in ovl_aio_put().

Fixes: 2406a307ac7d ("ovl: implement async IO routines")
Cc: <stable@vger.kernel.org> # v5.6
Reviewed-by: Miklos Szeredi <miklos@szeredi.hu>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
fs/overlayfs/file.c