mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-22 23:04:43 +00:00
tty: fix data race between tty_init_dev and flush of buf
There can be a race, if receive_buf call comes before tty initialization completes in n_tty_open and tty->disc_data may be NULL. CPU0 CPU1 ---- ---- 000|n_tty_receive_buf_common() n_tty_open() -001|n_tty_receive_buf2() tty_ldisc_open.isra.3() -002|tty_ldisc_receive_buf(inline) tty_ldisc_setup() Using ldisc semaphore lock in tty_init_dev till disc_data initializes completely. Signed-off-by: Gaurav Kohli <gkohli@codeaurora.org> Reviewed-by: Alan Cox <alan@linux.intel.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
09df0b3464
commit
b027e2298b
3 changed files with 11 additions and 3 deletions
|
@ -405,6 +405,8 @@ extern const char *tty_name(const struct tty_struct *tty);
|
|||
extern struct tty_struct *tty_kopen(dev_t device);
|
||||
extern void tty_kclose(struct tty_struct *tty);
|
||||
extern int tty_dev_name_to_number(const char *name, dev_t *number);
|
||||
extern int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout);
|
||||
extern void tty_ldisc_unlock(struct tty_struct *tty);
|
||||
#else
|
||||
static inline void tty_kref_put(struct tty_struct *tty)
|
||||
{ }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue