]> git.baikalelectronics.ru Git - kernel.git/commit
Revert "fs: remove ksys_dup()"
authorDominik Brodowski <linux@dominikbrodowski.net>
Wed, 1 Jan 2020 19:05:03 +0000 (20:05 +0100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Jan 2020 00:15:33 +0000 (16:15 -0800)
commit82a43d41a91312fac691b197071ceade4e5981d9
tree847a00cb533bea4d8af5e451315ed60215548d19
parent74e8ab0fa64c452b21b414a3bbfd1d954b82a727
Revert "fs: remove ksys_dup()"

This reverts commit 2381873c3243 ("fs: remove ksys_dup()") and the
subsequent fix for it in commit d269371beed6 ("early init: fix error
handling when opening /dev/console").

Trying to use filp_open() and f_dupfd() instead of pseudo-syscalls
caused more trouble than what is worth it: it requires accessing vfs
internals and it turns out there were other bugs in it too.

In particular, the file reference counting was wrong - because unlike
the original "open+2*dup" sequence it used "filp_open+3*f_dupfd" and
thus had an extra leaked file reference.

That in turn then caused odd problems with Androidx86 long after boot
becaue of how the extra reference to the console kept the session active
even after all file descriptors had been closed.

Reported-by: youling 257 <youling257@gmail.com>
Cc: Arvind Sankar <nivedita@alum.mit.edu>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/file.c
include/linux/syscalls.h
init/main.c