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

Reply via email to