Messages in this thread | | | Date | Wed, 4 Nov 2020 21:13:23 +0100 | From | Samuel Thibault <> | Subject | Re: Crash when specifying non-existent serial port in speakup / tty_kopen |
| |
Hello,
Matthias Reichl, le mer. 04 nov. 2020 15:57:37 +0100, a ecrit: > I initially noticed this oops on x86_64 running kernel 5.4.59 when > I accidentally mistyped "ttyS0" as "ttyS9": > > modprobe speakup_dummy dev=ttyS9
> [ 49.978481] tty_init_dev: ttyS driver does not set tty->port. This would crash the kernel. Fix the driver!
This looks like only a warning, did it actually crash?
> the missing tty->port is quite fatal.
It is fatal for module insertion yes (EINVAL) but IIRC that should be getting handled properly, making modprobe return the error?
> It looks like spk_ttyio or tty_dev_name_to_number() / tty_kopen() > should perform some additional validation,
spk_ttyio_initialise_ldisc only has a dev_t so can't do much beyond calling tty_kopen.
tty_kopen is getting the index from the tty_lookup_driver call (actually get_tty_driver which uses p->minor_start and p->num) and passes it to tty_driver_lookup_tty. Perhaps in addition of p->num the driver should have another field to set, that tty_init_dev could use to reject with ENODEV indexes beyond what the driver actually provides?
> I couldn't make the kernel warn/crash yet by specifying non-existent > ttyUSB ports yet though.
That's probably because in the ttyUSB case the device allocation is dynamic and made exactly according to the number of actual devices, while for ttyS* there is a large overcommit of minor values.
Samuel
| |