<div><div>Now I see that we need to restrict in specifications those values that</div><div>can be passed to the install callback of tty_operations according to</div><div>a first actual argument of tty_alloc_driver(). Thank you for pointing</div><div>this out.</div></div><div> </div><div><div>-- </div><div>Evgeny Novikov<br />Linux Verification Center, ISP RAS<br />http://linuxtesting.org</div></div><div> </div><div> </div><div> </div><div>21.05.2021, 14:52, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>:</div><blockquote><p>On Fri, May 21, 2021 at 02:43:39PM +0300, Evgeny Novikov wrote:</p><blockquote> If fwtty_install() will be invoked with such tty->index that will be<br /> not less than MAX_TOTAL_PORTS then fwtty_port_get() will return NULL and<br /> fwtty_install() will either assign it to tty->driver_data or dereference<br /> in fwtty_port_put() (if tty_standard_install() will fail). The similar<br /> situation is with fwloop_install(). The patch fixes both cases.</blockquote><p><br />But how can those cases ever happen?<br /> </p><blockquote> Found by Linux Driver Verification project (linuxtesting.org).<br /> <br /> Signed-off-by: Evgeny Novikov <novikov@ispras.ru><br /> ---<br />  drivers/staging/fwserial/fwserial.c | 6 ++++++<br />  1 file changed, 6 insertions(+)<br /> <br /> diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c<br /> index 1ee6382cafc4..d0810896511e 100644<br /> --- a/drivers/staging/fwserial/fwserial.c<br /> +++ b/drivers/staging/fwserial/fwserial.c<br /> @@ -1069,6 +1069,9 @@ static int fwtty_install(struct tty_driver *driver, struct tty_struct *tty)<br />          struct fwtty_port *port = fwtty_port_get(tty->index);<br />          int err;<br />  <br /> + if (!port)<br /> + return -ENODEV;</blockquote><p><br />there's already a valid tty pointer here, so the index can not be "too<br />big".<br /> </p><blockquote> +<br />          err = tty_standard_install(driver, tty);<br />          if (!err)<br />                  tty->driver_data = port;<br /> @@ -1082,6 +1085,9 @@ static int fwloop_install(struct tty_driver *driver, struct tty_struct *tty)<br />          struct fwtty_port *port = fwtty_port_get(table_idx(tty->index));<br />          int err;<br />  <br /> + if (!port)<br /> + return -ENODEV;<br /> +</blockquote><p><br />Same here, how can this ever happen?<br /><br />thanks,<br /><br />greg k-h</p></blockquote>