> But in above case , there we can hit another race, if we have a sequence > like this > tty_init_dev->alloc_tty_struct -> tty_ldisc_init -> this will initialize > ldisc , > but at this moment disc_data is still NULL > > And if flush_to_ldisc comes in between, it will take ldisc reference and > proceeds receive buffer.
So you need to move the lock up one line to protect the assignment to tty->port->itty. We can do that. At that point your flush_to_ldisc should see either port->itty = NULL or a valid initialized ldisc. Alan