On 11/16/18 1:31 AM, Andrew Morton wrote: > On Mon, 12 Nov 2018 12:57:34 +0300 Pavel Tikhomirov <ptikhomirov@xxxxxxxxxxxxx> wrote: > >> If all pages are deleted from the mapping by memory reclaim and also >> moved to the cleancache: >> >> __delete_from_page_cache >> (no shadow case) >> unaccount_page_cache_page >> cleancache_put_page >> page_cache_delete >> mapping->nrpages -= nr >> (nrpages becomes 0) >> >> We don't clean the cleancache for an inode after final file truncation >> (removal). >> >> truncate_inode_pages_final >> check (nrpages || nrexceptional) is false >> no truncate_inode_pages >> no cleancache_invalidate_inode(mapping) >> >> These way when reading the new file created with same inode we may get >> these trash leftover pages from cleancache and see wrong data instead of >> the contents of the new file. >> >> Fix it by always doing truncate_inode_pages which is already ready for >> nrpages == 0 && nrexceptional == 0 case and just invalidates inode. >> > > Data corruption sounds serious. Shouldn't we backport this into > -stable kernels? Yes, it was broken in 4.14 kernel and it should affect all who uses cleancache Fixes: commit 91b0abe36a7b ("mm + fs: store shadow entries in page cache")