Re: Oops in 2.2.15pre7

From: Mika Penttilä (mjp@iki.fi)
Date: Mon Feb 21 2000 - 12:17:57 EST


the cli()/sti() in fasync_helper() doesn't really protect much in SMP. Especially in 2.3.47 when the kill_fasync() can be launched by the console_softint -> receive_buf path for instance in n_tty.c

--Mika

> Hello!
>
> > > Do you mean that this will be enough, and similar thing in tty_io.c?
> > Only not here! synchronize_irq() must follow fasync list modification.
> > You modify list and then wait for readers. See?
> Nope.
> As I see it will be:
> CPU0 CPU1
> kill_fasync unattaching this list node
> start to work on next (*)
> list node kfree_s it.
> -----------------------------------------------
> Access fasync->next >(OOPS)
>
> Or do you mean that synchronize_irq must be inserted in (*) (see patch)?
> If this is not right, too, then show your version, pls.
>
> --- socket.c.orig Mon Feb 21 16:38:03 2000
> +++ socket.c Mon Feb 21 16:39:34 2000
> @@ -521,6 +521,7 @@
> if(fa!=NULL)
> {
> fa->fa_fd=fd;
> + synchronize_irq();
> kfree_s(fna,sizeof(struct fasync_struct));
> release_sock(sock->sk);
> return 0;
> @@ -536,6 +537,7 @@
> if (fa!=NULL)
> {
> *prev=fa->fa_next;
> + synchronize_irq();
> kfree_s(fa,sizeof(struct fasync_struct));
> }
> }
>
> > Correct reader will see either list before modification or after modification,
> > both of them are valid. kill_fasync() is correct reader,
> > I do not know about tty_io.c.
> In tty_io.c we have function fasync_helper, which is much the same as
> socket.c::sock_fasync (besides that it works not with sockets),
> and the only difference is that in fasync_helper we *do* have sti/cli
> (Alan quoted that part from fasync_helper), and sock_fasync does not have
> sti/cli.
>
> Bye,
> Oleg
> --
> [RAVE *SUCKS* TEAM] [Team $Ui(iDE] [Trans-M Must Die!] [Sepultura Fans Team]
> [Tolkien forever team]
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.rutgers.edu
> Please read the FAQ at http://www.tux.org/lkml/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Feb 23 2000 - 21:00:29 EST