On 24.08.23 20:02, Simon Arlott wrote:
It's not practical to use TIOCGSERIAL from a udev rule. Instead of a sysfs attribute (that udev has built-in support for writing) it would require a separate compiled process or other non-trivial dependencies (e.g. Python) to modify the closing_wait value. There's no shell script support for read-modify-write of a complex ioctl struct.
That, however, is a deficiency of udev.
The ioctl can't be used without opening and closing the tty, which has side effects. On open() it'll raise DTR/RTS and activate it. For cdc-acm that will indicate to the device that the serial port has been opened which will be visible to the software running on the USB device. On close() it'll be delayed by the close_delay if any process is currently doing a blocking open() and there's no carrier, then the closing_wait time if there's been any incomplete transmitted data (by any process).
And that is an issue of the generic serial layer.
Those two values require CAP_SYS_ADMIN to modify (which is separately enforced by many of the tty drivers) so user applications can't change them even if they're aware of them.
That is even more damning. Either something is protected by a capability or it is not. Such a protection must not be circumvented. Regards Oliver