Re: [PATCH] ipc,sem block sem_lock on sma->lock during sma initialization
From: Rik van Riel
Date: Fri Nov 21 2014 - 18:04:07 EST
-----BEGIN PGP SIGNED MESSAGE-----
On 11/21/2014 03:42 PM, Andrew Morton wrote:
> On Fri, 21 Nov 2014 15:29:27 -0500 Rik van Riel <riel@xxxxxxxxxx>
>> On 11/21/2014 03:09 PM, Andrew Morton wrote:
>>> On Fri, 21 Nov 2014 14:52:26 -0500 Rik van Riel
>>> <riel@xxxxxxxxxx> wrote:
>>>> When manipulating just one semaphore with semop, sem_lock
>>>> only takes that single semaphore's lock. This creates a
>>>> problem during initialization of the semaphore array, when
>>>> the data structures used by sem_lock have not been set up
>>>> yet. The sma->lock is already held by newary, and we just
>>>> have to make sure everything else waits on that lock during
>>>> Luckily it is easy to make sem_lock wait on the sma->lock,
>>>> by pretending there is a complex operation in progress while
>>>> the sma is being initialized.
>>>> The newary function already zeroes sma->complex_count before
>>>> unlocking the sma->lock.
>>> What are the runtime effects of the bug?
>> NULL pointer dereference in spin_lock from sem_lock, if it is
>> called before sma->sem_base has been pointed somewhere valid.
> Help us out here. People need to use this description to work out
> which kernel versions need the patch and whether to backport the
> fix into their various kernels. Other people will be starting at
> this changelog wondering "will this fix the bug my customer has
> Is there some bug report people can look at?
> What userspace actions trigger this bug?
The reason the bug took almost two years to get noticed is that
it takes one task doing a semop on a semaphore in an array that
is still getting instantiated by newary (getsem) from another
In other words, if you try to use a semaphore array before
getsem returns, you can oops the task that calls semop.
It should not cause any damage to long-living kernel data
All rights reversed
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
-----END PGP SIGNATURE-----
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/