NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/60760: lpt(4) concurrency issues



> Thanks, I filed a problem report in gnats to track this:
> 
> PR kern/60760: lpt(4) concurrency issues
> https://gnats.NetBSD.org/60760
> 
> (Followups to this message, to gnats-bugs%NetBSD.org@localhost with subject line
> `Re: kern/60760: lpt(4) concurrency issues', will get appended to the
> PR, and if you want, I can add you to the notify-list.)

Feel free to do that.

> It's not clear to me that there is any value in allowing concurrent
> lptwrite calls at all.
> 
> So rather than try to mitigate the damage of interleaving internal
> data structure updates like that, I'm inclined to just set a flag
> sc->sc_state |= LPT_WRITING while the first lptwrite is in progress,
> to block subsequent attempts to lptwrite until the first one is done.

I agree. If someone relied on writing to the same port concurrently they
would have probably noticed the mangled output by now. Especially since,
now that I think of it, the bug should get worse with slower printers.

Two things, without further looking at the patch:

> +out:	if (locked) {
> +		sc->sc_state &= LPT_WRITING;
> +		wakeup(&sc->sc_state);
> +	}
> +	splx(s);

I believe you want to clear LPT_WRITING here. You are clearing all other
bits though.

>  	return 0;

Maybe return error here instead of 0.




Home | Main Index | Thread Index | Old Index