<div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>Thanks for your reply! It is very helpful!</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Do you mean in dlm_wait_for_lock_mastery()?<br></blockquote><div><br></div><div>Yes, it is dlm_wait_for_lock_mastery(). I am sorry to confuse you.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Even if owner changes suddenly, it will recheck, so I think it is also fine. </blockquote><div> </div><div>Does 'recheck' here mean if owner changes, it will go to the label 'recheck' at Line 1011.</div><div>If so, when rechecking, the race can occur again at Line 1023. And thus can cause infinite rechecking in extreme cases.</div><div><br></div><div>Thanks,</div><div>Tuo Li</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jun 16, 2023 at 10:11 AM Joseph Qi <<a href="mailto:joseph.qi@linux.alibaba.com">joseph.qi@linux.alibaba.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
On 6/13/23 4:23 PM, Tuo Li wrote:<br>
> Hello,<br>
> <br>
> Our static analysis tool finds some possible data races in the OCFS2 file<br>
> system in Linux 6.4.0-rc6.<br>
> <br>
> In most calling contexts, the variables such as res-><a href="http://lockname.name" rel="noreferrer" target="_blank">lockname.name</a> and<br>
> res->owner are accessed with holding the lock res->spinlock. Here is an<br>
> example:<br>
> <br>
> lockres_seq_start() --> Line 539 in dlmdebug.c<br>
> spin_lock(&res->spinlock); --> Line 574 in dlmdebug.c (Lock<br>
> res->spinlock)<br>
> dump_lockres(res, ...); --> Line 575 in fs/ocfs2/dlm/dlmdebug.c<br>
> stringify_lockname(res-><a href="http://lockname.name" rel="noreferrer" target="_blank">lockname.name</a>, ...); --> Line 493 in<br>
> dlmdebug.c (Access res-><a href="http://lockname.name" rel="noreferrer" target="_blank">lockname.name</a>)<br>
> scnprintf(..., res->owner, ...); -->Line 498 in dlmdebug.c (Access<br>
> res->owner)<br>
> <br>
> However, in the following calling contexts:<br>
> <br>
> dlm_deref_lockres_worker() --> Line 2439 in dlmmaster.c<br>
> dlm_drop_lockres_ref_done() --> Line 2459 in dlmmaster.c<br>
> lockname = res-><a href="http://lockname.name" rel="noreferrer" target="_blank">lockname.name</a>; --> Line 2416 in dlmmaster.c (Access<br>
> res-><a href="http://lockname.name" rel="noreferrer" target="_blank">lockname.name</a>)<br>
<br>
lockname won't changed during the lockres lifecycle.<br>
So this won't cause any real problem since now it holds a reference.<br>
<br>
> <br>
> dlm_get_lock_resource() --> Line 701 in dlmmaster.c<br>
> if (res->owner != dlm->node_num) --> Line 1023 in dlmmaster.c (Access<br>
> res->owner)<br>
<br>
Do you mean in dlm_wait_for_lock_mastery()?<br>
Even if owner changes suddenly, it will recheck, so I think it is also fine.<br>
<br>
Thanks,<br>
Joseph<br>
<br>
> <br>
> The variables res-><a href="http://lockname.name" rel="noreferrer" target="_blank">lockname.name</a> and res->owner are accessed respectively<br>
> without holding the lock res->spinlock, and thus data races can occur.<br>
> <br>
> I am not quite sure whether these possible data races are real and how to<br>
> fix<br>
> them if they are real.<br>
> <br>
> Any feedback would be appreciated, thanks!<br>
> <br>
> Reported-by: BassCheck <<a href="mailto:bass@buaa.edu.cn" target="_blank">bass@buaa.edu.cn</a>> <<a href="mailto:bass@buaa.edu.cn" target="_blank">bass@buaa.edu.cn</a>><br>
> <br>
> Best wishes,<br>
> Tuo Li<br>
> <br>
</blockquote></div>