mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
fix a leak in replace_fd() users
replace_fd() began with "eats a reference, tries to insert into
descriptor table" semantics; at some point I'd switched it to
much saner current behaviour ("try to insert into descriptor
table, grabbing a new reference if inserted; caller should do
fput() in any case"), but forgot to update the callers.
Mea culpa...
[Spotted by Pavel Roskin, who has really weird system with pipe-fed
coredumps as part of what he considers a normal boot ;-)]
Signed-off-by: Al Viro <[email protected]>
This commit is contained in:
parent
dd8e8c4a2c
commit
45525b26a4
2 changed files with 10 additions and 13 deletions
|
|
@ -2132,18 +2132,14 @@ static inline void flush_unauthorized_files(const struct cred *cred,
|
|||
return;
|
||||
|
||||
devnull = dentry_open(&selinux_null, O_RDWR, cred);
|
||||
if (!IS_ERR(devnull)) {
|
||||
/* replace all the matching ones with this */
|
||||
do {
|
||||
replace_fd(n - 1, get_file(devnull), 0);
|
||||
} while ((n = iterate_fd(files, n, match_file, cred)) != 0);
|
||||
if (IS_ERR(devnull))
|
||||
devnull = NULL;
|
||||
/* replace all the matching ones with this */
|
||||
do {
|
||||
replace_fd(n - 1, devnull, 0);
|
||||
} while ((n = iterate_fd(files, n, match_file, cred)) != 0);
|
||||
if (devnull)
|
||||
fput(devnull);
|
||||
} else {
|
||||
/* just close all the matching ones */
|
||||
do {
|
||||
replace_fd(n - 1, NULL, 0);
|
||||
} while ((n = iterate_fd(files, n, match_file, cred)) != 0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue