Re: [bug report] io_uring: add support for sqe links

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

 



On 5/27/19 8:10 AM, Dan Carpenter wrote:
> On Mon, May 27, 2019 at 07:36:22AM -0600, Jens Axboe wrote:
>> On 5/27/19 4:08 AM, Dan Carpenter wrote:
>>> Hello Jens Axboe,
>>>
>>> The patch f3fafe4103bd: "io_uring: add support for sqe links" from
>>> May 10, 2019, leads to the following static checker warning:
>>>
>>> 	fs/io_uring.c:623 io_req_link_next()
>>> 	error: potential NULL dereference 'nxt'.
>>>
>>> fs/io_uring.c
>>>      614  static void io_req_link_next(struct io_kiocb *req)
>>>      615  {
>>>      616          struct io_kiocb *nxt;
>>>      617
>>>      618          nxt = list_first_entry_or_null(&req->link_list, struct io_kiocb, list);
>                                                      ^^^^^^^^^^^^^^^
> If this list is empty then "nxt" is NULL.

Right...

>>>      619          list_del(&nxt->list);
>>>                             ^^^^^^^^^
>>> The warning is a false positive but this is a NULL dereference.
>>>
>>>      620          if (!list_empty(&req->link_list)) {
>                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> We're checking for list_empty() here.

After deleting an entry from it.

>>>      621                  INIT_LIST_HEAD(&nxt->link_list);
>>>                                           ^^^^^
>>> False positive.
>>
>> Both of them are false positives. I can work around them though, as it
>> probably makes it a bit cleaner, too.
>>
>>>
>>>      622                  list_splice(&req->link_list, &nxt->link_list);
>>>      623                  nxt->flags |= REQ_F_LINK;
>>>      624          }
>>>      625
>>>      626          INIT_WORK(&nxt->work, io_sq_wq_submit_work);
>>>                             ^^^^^^^^^^
>>>      627          queue_work(req->ctx->sqo_wq, &nxt->work);
>>>                                                ^^^^^^^^^^
>>> Other bugs.
>>
>> Not sure what that means?
> 
> All these dereferences outside the if not empty check are a problem.

But this is the same thing If 'nxt' can ever be NULL, it's a problem.
If it cannot, then it's a false positive.

I'll just add a check. It should not happen, but it probably can if
the chain is messed up.

-- 
Jens Axboe




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux