b5fda08ef2
Following process will cause a memleak for copied up znode:
dirty_cow_znode
zn = copy_znode(c, znode);
err = insert_old_idx(c, zbr->lnum, zbr->offs);
if (unlikely(err))
return ERR_PTR(err); // No one refers to zn.
Fetch a reproducer in [Link].
Function copy_znode() is split into 2 parts: resource allocation
and znode replacement, insert_old_idx() is split in similar way,
so resource cleanup could be done in error handling path without
corrupting metadata(mem & disk).
It's okay that old index inserting is put behind of add_idx_dirt(),
old index is used in layout_leb_in_gaps(), so the two processes do
not depend on each other.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216705
Fixes:
|
||
---|---|---|
.. | ||
auth.c | ||
budget.c | ||
commit.c | ||
compress.c | ||
crypto.c | ||
debug.c | ||
debug.h | ||
dir.c | ||
file.c | ||
find.c | ||
gc.c | ||
io.c | ||
ioctl.c | ||
journal.c | ||
Kconfig | ||
key.h | ||
log.c | ||
lprops.c | ||
lpt_commit.c | ||
lpt.c | ||
Makefile | ||
master.c | ||
misc.c | ||
misc.h | ||
orphan.c | ||
recovery.c | ||
replay.c | ||
sb.c | ||
scan.c | ||
shrinker.c | ||
super.c | ||
sysfs.c | ||
tnc_commit.c | ||
tnc_misc.c | ||
tnc.c | ||
ubifs-media.h | ||
ubifs.h | ||
xattr.c |