* [PATCH v2 0/1] LUKS: Fix error message when underlying fs don't support large enough files @ 2020-04-20 9:29 Maxim Levitsky 2020-04-20 9:29 ` [PATCH v2 1/1] block/crypto: better error message when creating too large files Maxim Levitsky 0 siblings, 1 reply; 3+ messages in thread From: Maxim Levitsky @ 2020-04-20 9:29 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, Maxim Levitsky, qemu-block, Max Reitz This is a repost of the same trivial patch I already, which fell through the cracks. Could someone queue it up so I close the bugzilla I have for this? V2: fixed usage of local_err Best regards, Maxim Levitsky Maxim Levitsky (1): block/crypto: better error message when creating too large files block/crypto.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) -- 2.17.2 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 1/1] block/crypto: better error message when creating too large files 2020-04-20 9:29 [PATCH v2 0/1] LUKS: Fix error message when underlying fs don't support large enough files Maxim Levitsky @ 2020-04-20 9:29 ` Maxim Levitsky 2020-04-30 13:03 ` Maxim Levitsky 0 siblings, 1 reply; 3+ messages in thread From: Maxim Levitsky @ 2020-04-20 9:29 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, Maxim Levitsky, qemu-block, Max Reitz Currently if you attampt to create too large file with luks you get the following error message: Formatting 'test.luks', fmt=luks size=17592186044416 key-secret=sec0 qemu-img: test.luks: Could not resize file: File too large While for raw format the error message is qemu-img: test.img: The image size is too large for file format 'raw' The reason for this is that qemu-img checks for errono of the failure, and presents the later error when it is -EFBIG However crypto generic code 'swallows' the errno and replaces it with -EIO. As an attempt to make it better, we can make luks driver, detect -EFBIG and in this case present a better error message, which is what this patch does The new error message is: qemu-img: error creating test.luks: The requested file size is too large Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1534898 Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> --- block/crypto.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/block/crypto.c b/block/crypto.c index d577f89659..f9f5dc11a7 100644 --- a/block/crypto.c +++ b/block/crypto.c @@ -104,18 +104,35 @@ static ssize_t block_crypto_init_func(QCryptoBlock *block, Error **errp) { struct BlockCryptoCreateData *data = opaque; + Error *local_err = NULL; + int ret; if (data->size > INT64_MAX || headerlen > INT64_MAX - data->size) { - error_setg(errp, "The requested file size is too large"); - return -EFBIG; + ret = -EFBIG; + goto error; } /* User provided size should reflect amount of space made * available to the guest, so we must take account of that * which will be used by the crypto header */ - return blk_truncate(data->blk, data->size + headerlen, false, - data->prealloc, errp); + ret = blk_truncate(data->blk, data->size + headerlen, false, + data->prealloc, &local_err); + + if (ret >= 0) { + return ret; + } + +error: + if (ret == -EFBIG) { + /* Replace the error message with a better one */ + error_free(local_err); + error_setg(errp, "The requested file size is too large"); + } else { + error_propagate(errp, local_err); + } + + return ret; } -- 2.17.2 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/1] block/crypto: better error message when creating too large files 2020-04-20 9:29 ` [PATCH v2 1/1] block/crypto: better error message when creating too large files Maxim Levitsky @ 2020-04-30 13:03 ` Maxim Levitsky 0 siblings, 0 replies; 3+ messages in thread From: Maxim Levitsky @ 2020-04-30 13:03 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, qemu-block, Max Reitz On Mon, 2020-04-20 at 12:29 +0300, Maxim Levitsky wrote: > Currently if you attampt to create too large file with luks you > get the following error message: > > Formatting 'test.luks', fmt=luks size=17592186044416 key-secret=sec0 > qemu-img: test.luks: Could not resize file: File too large > > While for raw format the error message is > qemu-img: test.img: The image size is too large for file format 'raw' > > > The reason for this is that qemu-img checks for errono of the failure, > and presents the later error when it is -EFBIG > > However crypto generic code 'swallows' the errno and replaces it > with -EIO. > > As an attempt to make it better, we can make luks driver, > detect -EFBIG and in this case present a better error message, > which is what this patch does > > The new error message is: > > qemu-img: error creating test.luks: The requested file size is too large > > Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1534898 > Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> > --- > block/crypto.c | 25 +++++++++++++++++++++---- > 1 file changed, 21 insertions(+), 4 deletions(-) > > diff --git a/block/crypto.c b/block/crypto.c > index d577f89659..f9f5dc11a7 100644 > --- a/block/crypto.c > +++ b/block/crypto.c > @@ -104,18 +104,35 @@ static ssize_t block_crypto_init_func(QCryptoBlock *block, > Error **errp) > { > struct BlockCryptoCreateData *data = opaque; > + Error *local_err = NULL; > + int ret; > > if (data->size > INT64_MAX || headerlen > INT64_MAX - data->size) { > - error_setg(errp, "The requested file size is too large"); > - return -EFBIG; > + ret = -EFBIG; > + goto error; > } > > /* User provided size should reflect amount of space made > * available to the guest, so we must take account of that > * which will be used by the crypto header > */ > - return blk_truncate(data->blk, data->size + headerlen, false, > - data->prealloc, errp); > + ret = blk_truncate(data->blk, data->size + headerlen, false, > + data->prealloc, &local_err); > + > + if (ret >= 0) { > + return ret; > + } > + > +error: > + if (ret == -EFBIG) { > + /* Replace the error message with a better one */ > + error_free(local_err); > + error_setg(errp, "The requested file size is too large"); > + } else { > + error_propagate(errp, local_err); > + } > + > + return ret; > } > > Could someone pick that patch now that the freeze is over? Best regards, Maxim Levitsky ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-04-30 13:10 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-04-20 9:29 [PATCH v2 0/1] LUKS: Fix error message when underlying fs don't support large enough files Maxim Levitsky 2020-04-20 9:29 ` [PATCH v2 1/1] block/crypto: better error message when creating too large files Maxim Levitsky 2020-04-30 13:03 ` Maxim Levitsky
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).