| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- From 13ebb50d2789de7bd47cebe57e3f6eba58fdcc7e Mon Sep 17 00:00:00 2001
- From: Gabor Juhos <[email protected]>
- Date: Fri, 19 Jul 2013 08:43:35 +0200
- Subject: [PATCH 1/2] early: keep stdio files open
- At the end of the 'early_console' function, the
- file descriptor is closed unconditionally. This
- 'close' call closes the stdio files if the fd
- returned by the 'open(dev/console)' call equals
- with any of the STD{IN,OUT,ERR}_FILENO values.
- When this happens, all subsequent accesses to
- the stdio files will fail and early console
- access won't work.
- To avoid this, don't close the file descriptor if
- that equals with any of the STD*_FILENO values.
- Signed-off-by: Gabor Juhos <[email protected]>
- ---
- Note:
- The issue happens if Linux is unable to open the
- initial console before calling init. In this case,
- the 'open(dev/console)' call in the 'early_console'
- function returns with zero.
- ---
- early.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
- diff --git a/early.c b/early.c
- index 27d0929..204623b 100644
- --- a/early.c
- +++ b/early.c
- @@ -65,7 +65,11 @@ static void early_console(const char *dev)
- dup2(dd, STDIN_FILENO);
- dup2(dd, STDOUT_FILENO);
- dup2(dd, STDERR_FILENO);
- - close(dd);
- +
- + if (dd != STDIN_FILENO &&
- + dd != STDOUT_FILENO &&
- + dd != STDERR_FILENO)
- + close(dd);
- }
-
- static void early_env(void)
- --
- 1.7.10
|