lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20061221110551.104ca3e1@localhost>
Date:	Thu, 21 Dec 2006 11:05:51 +0100
From:	Paolo Ornati <ornati@...twebnet.it>
To:	"Sorin Manolache" <sorinm@...il.com>
Cc:	linux-kernel@...r.kernel.org
Subject: Re: newbie questions about while (1) in kernel mode and spinlocks

On Thu, 21 Dec 2006 10:41:44 +0100
"Sorin Manolache" <sorinm@...il.com> wrote:

> The Linux Device Drivers book says that a spin_lock should not be
> shared between a process and an interrupt handler. The explanation is
> that the process may hold the lock, an interrupt occurs, the interrupt
> handler spins on the lock held by the process and the system freezes.
> Why should it freeze? Isn't it possible for the interrupt handler to
> re-enable interrupts as its first thing, then to spin at the lock, the
> timer interrupt to preempt the interrupt handler and to relinquish
> control to the process which in turn will finish its critical section
> and release the lock, making way for the interrupt handler to
> continue.

Iterrupt handlers are executend in the process context (on top of the
process that they interrupted).

So, if you have a proccess A that does:

	Usual Kernel Code		Interrupt Handler

	...
	spin_lock(my_lock);
	...
		-------interrupt----->	...
					spin_lock(my_lock); // deadlock!
					...
		<------ back --------- 
	----
	spin_unlock(my_lock);


See?

If the interrupt comes in when process A is running and holding the
lock PREEMPTION can't do anything.

-- 
	Paolo Ornati
	Linux 2.6.20-rc1-g99f5e971 on x86_64
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ