On Wed, Jul 13, 2011 at 8:10 AM, Kevin Cernekee <[email protected]> wrote: > On Wed, Jul 13, 2011 at 12:31 AM, Denys Vlasenko > <[email protected]> wrote: >> + ssize_t s = >> open_read_close("/sys/class/tty/console/active", >> + &console[5], sizeof(console) - 5); >> + if (s > 0) { >> + /* found active console via sysfs (Linux >> 2.6.38+ only) */ >> + console[4 + s] = 0; >> >> Why 4, not 5? And if changed to 5, it can overflow console[], >> need to use sizeof(console) - 6 in read. > > The last character read from sysfs is a newline, which needs to be > removed in order to have a valid pathname.
Attaching fix + improved comment. This applies against the head of tree. The current busybox head of tree will not be able to open the device because it leaves the newline intact: starting pid 479, tty '': '/bin/cttyhack /bin/sh -l' cttyhack: can't open '/dev/ttyS0 ': No such file or directory
From abc9a26d5f9915ebe1e896e6dca9c50454be293e Mon Sep 17 00:00:00 2001 From: Kevin Cernekee <[email protected]> Date: Wed, 13 Jul 2011 09:29:55 -0700 Subject: [PATCH] cttyhack: remove the trailing newline when reading console name from sysfs Signed-off-by: Kevin Cernekee <[email protected]> --- shell/cttyhack.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/shell/cttyhack.c b/shell/cttyhack.c index 4261289..37ea137 100644 --- a/shell/cttyhack.c +++ b/shell/cttyhack.c @@ -122,10 +122,12 @@ int cttyhack_main(int argc UNUSED_PARAM, char **argv) do { #ifdef __linux__ int s = open_read_close("/sys/class/tty/console/active", - console + 5, sizeof(console) - 5 - 1); + console + 5, sizeof(console) - 5); if (s > 0) { - /* found active console via sysfs (Linux 2.6.38+) */ - console[5 + s] = '\0'; + /* found active console via sysfs (Linux 2.6.38+) + * sysfs string looks like "ttyS0\n" so zap the newline: + */ + console[4 + s] = '\0'; break; } -- 1.7.6
_______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
