Re: [RFC PATCH v4 4/9] printk-rb: initialize new descriptors as invalid

From: Sergey Senozhatsky
Date: Tue Aug 20 2019 - 06:16:56 EST


On (08/20/19 11:23), Petr Mladek wrote:
> > is no risk of the descriptor unexpectedly being determined as
> > valid due to dataring head overflowing/wrapping.
>
> Please, provide more details about the solved race. Is it because
> some reader could have reference to an invalid (reused) descriptor?
> Can be these invalid descriptors be member of the list?

As far as I understand, such descriptors can be on the list:

prb_reserve()
assign_desc()
// pick a new never used descr
i = atomic_fetch_inc(&rb->desc_next_unused);
d = &rb->descs[i]
dataring_desc_init(&d->desc);
return d
buf = dataring_push()
// the oldest data is reserved, but not commited
ret = get_new_lpos()
if (ret)
dataring_desc_init()
return NULL
if (!buf)
numlist_push()

_datablock_valid() has a "desc->begin_lpos == desc->next_lpos" check.

-ss