From: Jens Axboe <axboe@kernel.dk>
To: Anuj gupta <anuj1072538@gmail.com>
Cc: Anuj Gupta <anuj20.g@samsung.com>,
vincent.fu@samsung.com, fio@vger.kernel.org,
ankit.kumar@samsung.com
Subject: Re: [PATCH] t/io_uring: fix error handling for setup_ring
Date: Thu, 27 Apr 2023 07:22:28 -0600 [thread overview]
Message-ID: <ece9613d-ffeb-7fd7-942a-0902259e5a65@kernel.dk> (raw)
In-Reply-To: <CACzX3AvLdk8rLH-3DOe1Ono9xabi2NMsoXBnvpmMj6rFPVfM-A@mail.gmail.com>
On 4/27/23 6:26?AM, Anuj gupta wrote:
> On Thu, Apr 27, 2023 at 5:23?PM Jens Axboe <axboe@kernel.dk> wrote:
>>
>> On 4/27/23 5:48?AM, Jens Axboe wrote:
>>> On 4/27/23 9:10?AM, Anuj Gupta wrote:
>>>> s->sq_ring.ring_entries and s->cq_ring.ring_entries will be NULL,
>>>> incase setup_ring fails. This will cause a segmentation fault.
>>>>
>>>> In case setup_ring fails, bail out by setting finish.
>>>
>>> Any reason why we don't just use the return code of submitter_init()
>>> on whether to abort or not?
>>
>> Something like this as a prep patch, then do the trivial version
>> of your patch after that.
>>
>> Totally untested...
>>
>>
>> diff --git a/t/io_uring.c b/t/io_uring.c
>> index 6b0efef85cb7..2f8d63fbe67e 100644
>> --- a/t/io_uring.c
>> +++ b/t/io_uring.c
>> @@ -1049,7 +1049,7 @@ static int submitter_init(struct submitter *s)
>>
>> buf = allocate_mem(s, bs);
>> if (!buf)
>> - return 1;
>> + return -1;
>> s->iovecs[i].iov_base = buf;
>> s->iovecs[i].iov_len = bs;
>> }
>> @@ -1066,7 +1066,7 @@ static int submitter_init(struct submitter *s)
>> }
>> if (err) {
>> printf("queue setup failed: %s, %d\n", strerror(errno), err);
>> - return 1;
>> + return -1;
>> }
>>
>> if (!init_printed) {
>> @@ -1172,9 +1172,15 @@ static void *submitter_aio_fn(void *data)
>> struct iocb *iocbs;
>> struct io_event *events;
>> #ifdef ARCH_HAVE_CPU_CLOCK
>> - int nr_batch = submitter_init(s);
>> -#else
>> - submitter_init(s);
>> + int nr_batch;
>> +#endif
>> +
>> + ret = submitter_init(s);
>> + if (ret < 0)
>> + goto done;
>> +
>> +#ifdef ARCH_HAVE_CPU_CLOCK
>> + nr_batch = ret;
>> #endif
>>
>> iocbsptr = calloc(depth, sizeof(struct iocb *));
>> @@ -1238,6 +1244,7 @@ static void *submitter_aio_fn(void *data)
>> free(iocbsptr);
>> free(iocbs);
>> free(events);
>> +done:
>> finish = 1;
>> return NULL;
>> }
>> @@ -1277,9 +1284,15 @@ static void *submitter_uring_fn(void *data)
>> struct io_sq_ring *ring = &s->sq_ring;
>> int ret, prepped;
>> #ifdef ARCH_HAVE_CPU_CLOCK
>> - int nr_batch = submitter_init(s);
>> -#else
>> - submitter_init(s);
>> + int nr_batch;
>> +#endif
>> +
>> + ret = submitter_init(s);
>> + if (ret < 0)
>> + goto done;
>> +
>> +#ifdef ARCH_HAVE_CPU_CLOCK
>> + nr_batch = ret;
>> #endif
>>
>> if (register_ring)
>> @@ -1383,6 +1396,7 @@ submit:
>> if (register_ring)
>> io_uring_unregister_ring(s);
>>
>> +done:
>> finish = 1;
>> return NULL;
>> }
>> @@ -1393,7 +1407,8 @@ static void *submitter_sync_fn(void *data)
>> struct submitter *s = data;
>> int ret;
>>
>> - submitter_init(s);
>> + if (submitter_init(s) < 0)
>> + goto done;
>>
>> do {
>> uint64_t offset;
>> @@ -1429,6 +1444,7 @@ static void *submitter_sync_fn(void *data)
>> add_stat(s, s->clock_index, 1);
>> } while (!s->finish);
>>
>> +done:
>> finish = 1;
>> return NULL;
>> }
>>
>
> Tested this and the patch works out fine. This can go on top of this
> to avoid access to NULL pointer -
Thanks! Can you send this one as a real patch to make my life just a
tiny bit easier?
--
Jens Axboe
prev parent reply other threads:[~2023-04-27 13:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20230427094952epcas5p32967ed548e18e60ea3134a03aa046bb8@epcas5p3.samsung.com>
2023-04-27 15:10 ` [PATCH] t/io_uring: fix error handling for setup_ring Anuj Gupta
2023-04-27 11:48 ` Jens Axboe
2023-04-27 11:53 ` Jens Axboe
2023-04-27 12:26 ` Anuj gupta
2023-04-27 13:22 ` Jens Axboe [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ece9613d-ffeb-7fd7-942a-0902259e5a65@kernel.dk \
--to=axboe@kernel.dk \
--cc=ankit.kumar@samsung.com \
--cc=anuj1072538@gmail.com \
--cc=anuj20.g@samsung.com \
--cc=fio@vger.kernel.org \
--cc=vincent.fu@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.