lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 17 May 2007 16:10:20 +0200 (MEST)
From:	Jan Engelhardt <jengelh@...ux01.gwdg.de>
To:	Greg KH <greg@...ah.com>
cc:	ark3116_driver@...tionant.de,
	Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
	linux-serial@...r.kernel.org, linux-usb-devel@...ts.sourceforge.net
Subject: Re: [linux-usb-devel] ark3116: receive returns negative

Hi Greg,

On May 17 2007 05:45, Greg KH wrote:
>> 
>> I seem to have problems with the ark3116 driver from 2.6.18.8. This 
>> is a USB-RS232 cable. Just opening the /dev/ttyUSB0 device gives 
>> (this is the debug output enabled by `modprobe ark3116 debug=1`).
>> 
>> The lines that look suspicious are
>> /serial/ark3116.c: 124 < 1 bytes [0xFFFFFFB0]
>> and
>> /serial/ark3116.c: ark3116_ioctl cmd 0x5401 not supported
>
>Why is this suspicious?  We don't support all ioctls for all usb-serial
>drivers, perhaps this one is just not really needed?

ark3116 supports set_termios (0x5402), but does not get_termios 
(0x5401). Not sure how that affects userspace, though.

The 0xFFFFFFB0 looks like a simple formatting error (ark3116.c line 66)
an explicit cast to (unsigned char)buf[0] or (unsigned int) seems 
required.

>> I have also seen things like "id here < -62 [0x10]", which would 
>> indicate that usb_control_msg() returned something very negative 
>> (-ETIME!?).

The -62 only shows up when the cable is already connected when I 
modprobe ark3116. Reinserting it - and no "-62" shows up.
Maybe this is something normal with USB?

>But does the driver seem to work properly?
>
>> Issuing a write() on an open fd to ttyUSB does not generate any further 
>> debug output. Is the driver even complete/functional?

(I found that I already need to modprobe usbserial with debug=1,
since ark3116 uses usb_serial_generic_write)

>Do you get data through the device properly?

I would have to test with a real serial port. (I do not
have any real port right now, just two cables + adapters.)

What certainly does not work: Connecting two cables to each other, that is,
USB-RS232-GenderChanger-RS232-USB. (1) USB ends connected to the same machine
(2) USB ends connected to different machines. Both (1) and (2) do not work.
The write() seems to succeed, but read() blocks:

# klogconsole -l8 -r0
# ./sertest
[...]
Writing...
drivers/usb/serial/usb-serial.c: serial_write_room - port 0
drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
drivers/usb/serial/usb-serial.c: serial_write - port 0, 3 byte(s)
drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
ark3116 ttyUSB0: usb_serial_generic_write - length = 3, data = 66 6f 6f
drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - 
port 0
drivers/usb/serial/usb-serial.c: usb_serial_port_work - port 0
Reading...
(stops)

Source:
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
	char bar[4] = {};
	int s0 = open("/dev/ttyUSB0", O_RDWR);
	int s1 = open("/dev/ttyUSB1", O_RDWR);
	if (s0 < 0 || s1 < 0)
		abort();
	printf("Writing...\n");
	write(s0, "foo", 3);
	printf("Reading...\n");
	read(s1, bar, 3);
	printf("Read: %s\n", bar);
	return 0;
}



	Jan
-- 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ