All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: "Alex Bennée" <alex.bennee@linaro.org>,
	"Eric Blake" <eblake@redhat.com>,
	"Daniel P . Berrange" <berrange@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Christian Schoenebeck <qemu_oss@crudebyte.com>,
	qemu-devel@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>,
	Eric Blake <eblake@redhat.com>,
	qemu-block@nongnu.org, David Hildenbrand <david@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	qemu-arm@nongnu.org, John Snow <jsnow@redhat.com>,
	David Gibson <david@gibson.dropbear.id.au>,
	Kevin Wolf <kwolf@redhat.com>,
	Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	"Daniel P . Berrange" <berrange@redhat.com>,
	Hanna Reitz <hreitz@redhat.com>,
	qemu-ppc@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v3 02/28] glib-compat: Introduce g_memdup2() wrapper
Date: Thu, 16 Dec 2021 19:39:02 +0100	[thread overview]
Message-ID: <34bd86db-a213-bb3a-9c72-8c48bd138835@redhat.com> (raw)
In-Reply-To: <875yrofxki.fsf@linaro.org>

On 12/16/21 15:11, Alex Bennée wrote:
> Philippe Mathieu-Daudé <philmd@redhat.com> writes:
> 
>> When experimenting raising GLIB_VERSION_MIN_REQUIRED to 2.68
>> (Fedora 34 provides GLib 2.68.1) we get:
>>
>>   hw/virtio/virtio-crypto.c:245:24: error: 'g_memdup' is deprecated: Use 'g_memdup2' instead [-Werror,-Wdeprecated-declarations]
>>   ...
>>
>> g_memdup() has been updated by g_memdup2() to fix eventual security
>> issues (size argument is 32-bit and could be truncated / wrapping).
>> GLib recommends to copy their static inline version of g_memdup2():
>> https://discourse.gnome.org/t/port-your-module-from-g-memdup-to-g-memdup2-now/5538
>>
>> Our glib-compat.h provides a comment explaining how to deal with
>> these deprecated declarations (see commit e71e8cc0355
>> "glib: enforce the minimum required version and warn about old APIs").
>>
>> Following this comment suggestion, implement the g_memdup2_qemu()
>> wrapper to g_memdup2(), and use the safer equivalent inlined when
>> we are using pre-2.68 GLib.
>>
>> Reported-by: Eric Blake <eblake@redhat.com>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> ---
>>  include/glib-compat.h | 37 +++++++++++++++++++++++++++++++++++++
>>  1 file changed, 37 insertions(+)
>>
>> diff --git a/include/glib-compat.h b/include/glib-compat.h
>> index 9e95c888f54..8d01a8c01fb 100644
>> --- a/include/glib-compat.h
>> +++ b/include/glib-compat.h
>> @@ -68,6 +68,43 @@
>>   * without generating warnings.
>>   */
>>  
>> +/*
>> + * g_memdup2_qemu:
>> + * @mem: (nullable): the memory to copy.
>> + * @byte_size: the number of bytes to copy.
>> + *
>> + * Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
>> + * from @mem. If @mem is %NULL it returns %NULL.
>> + *
>> + * This replaces g_memdup(), which was prone to integer overflows when
>> + * converting the argument from a #gsize to a #guint.
>> + *
>> + * This static inline version is a backport of the new public API from
>> + * GLib 2.68, kept internal to GLib for backport to older stable releases.
>> + * See https://gitlab.gnome.org/GNOME/glib/-/issues/2319.
>> + *
>> + * Returns: (nullable): a pointer to the newly-allocated copy of the memory,
>> + *          or %NULL if @mem is %NULL.
>> + */
>> +static inline gpointer g_memdup2_qemu(gconstpointer mem, gsize byte_size)
>> +{
>> +#if GLIB_CHECK_VERSION(2, 68, 0)
>> +    return g_memdup2(mem, byte_size);
>> +#else
>> +    gpointer new_mem;
>> +
>> +    if (mem && byte_size != 0) {
>> +        new_mem = g_malloc(byte_size);
>> +        memcpy(new_mem, mem, byte_size);
>> +    } else {
>> +        new_mem = NULL;
>> +    }
>> +
>> +    return new_mem;
>> +#endif
>> +}
>> +#define g_memdup2(m, s) g_memdup2_qemu(m, s)
>> +
> 
> As per our style wouldn't it make sense to just call it qemu_memdup(m,
> s)?

I followed the documentation in include/glib-compat.h:

/*
 * Note that because of the GLIB_VERSION_MAX_ALLOWED constant above,
allowing
 * use of functions from newer GLib via this compat header needs a little
 * trickery to prevent warnings being emitted.
 *
 * Consider a function from newer glib-X.Y that we want to use
 *
 *    int g_foo(const char *wibble)
 *
 * We must define a static inline function with the same signature that does
 * what we need, but with a "_qemu" suffix e.g.
 *
 * static inline void g_foo_qemu(const char *wibble)
 * {
 *     #if GLIB_CHECK_VERSION(X, Y, 0)
 *        g_foo(wibble)
 *     #else
 *        g_something_equivalent_in_older_glib(wibble);
 *     #endif
 * }
 *
 * The #pragma at the top of this file turns off -Wdeprecated-declarations,
 * ensuring this wrapper function impl doesn't trigger the compiler warning
 * about using too new glib APIs. Finally we can do
 *
 *   #define g_foo(a) g_foo_qemu(a)
 *
 * So now the code elsewhere in QEMU, which *does* have the
 * -Wdeprecated-declarations warning active, can call g_foo(...) as normal,
 * without generating warnings.
 */

which is how g_unix_get_passwd_entry_qemu() is implemented.

Should we reword the documentation first?



  reply	other threads:[~2021-12-16 18:43 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-03 17:44 [PATCH v3 00/28] glib: Replace g_memdup() by g_memdup2() Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 01/28] hw/hyperv/vmbus: Remove unused vmbus_load/save_req() Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 02/28] glib-compat: Introduce g_memdup2() wrapper Philippe Mathieu-Daudé
2021-09-03 20:37   ` Eric Blake
2021-12-16 14:11   ` Alex Bennée
2021-12-16 18:39     ` Philippe Mathieu-Daudé [this message]
2021-12-17 11:10       ` Alex Bennée
2021-12-17 11:41         ` Laurent Vivier
2021-12-17 12:15           ` Alex Bennée
2021-12-17 13:39         ` Daniel P. Berrangé
2021-12-17 13:43     ` Daniel P. Berrangé
2021-12-17 14:53       ` Alex Bennée
2021-12-17 15:01         ` Daniel P. Berrangé
2021-12-17 10:55   ` Laurent Vivier
2021-09-03 17:44 ` [PATCH v3 03/28] qapi: Replace g_memdup() by g_memdup2() Philippe Mathieu-Daudé
2021-09-03 21:10   ` Eric Blake
2021-09-03 17:44 ` [PATCH v3 04/28] accel/tcg: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 05/28] block/qcow2-bitmap: " Philippe Mathieu-Daudé
2021-09-03 21:13   ` Eric Blake
2021-09-03 21:14     ` Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 06/28] softmmu: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 07/28] hw/9pfs: " Philippe Mathieu-Daudé
2021-09-04 12:25   ` Christian Schoenebeck
2021-09-03 17:44 ` [PATCH v3 08/28] hw/acpi: Avoid truncating acpi_data_len() to 32-bit Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 09/28] hw/acpi: Replace g_memdup() by g_memdup2() Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 10/28] hw/core/machine: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 11/28] hw/hppa/machine: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 12/28] hw/i386/multiboot: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 13/28] hw/net/eepro100: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 14/28] hw/nvram/fw_cfg: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 15/28] hw/scsi/mptsas: " Philippe Mathieu-Daudé
2021-09-03 17:44 ` [PATCH v3 16/28] hw/ppc/spapr_pci: " Philippe Mathieu-Daudé
2021-09-04  3:38   ` David Gibson
2021-09-03 17:44 ` [PATCH v3 17/28] hw/rdma: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [PATCH v3 18/28] hw/vfio/pci: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [RFC PATCH v3 19/28] hw/virtio: " Philippe Mathieu-Daudé
2022-04-01 10:50   ` Eugenio Perez Martin
2021-09-03 17:45 ` [PATCH v3 20/28] net/colo: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [RFC PATCH v3 21/28] ui/clipboard: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [RFC PATCH v3 22/28] linux-user: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [PATCH v3 23/28] tests/unit: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [PATCH v3 24/28] tests/qtest: " Philippe Mathieu-Daudé
2021-09-04  5:48   ` Thomas Huth
2021-12-17 10:56   ` Laurent Vivier
2021-09-03 17:45 ` [PATCH v3 25/28] target/arm: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [PATCH v3 26/28] target/ppc: " Philippe Mathieu-Daudé
2021-09-04  3:38   ` David Gibson
2021-09-03 17:45 ` [PATCH v3 27/28] contrib: " Philippe Mathieu-Daudé
2021-09-03 17:45 ` [PATCH v3 28/28] checkpatch: Do not allow deprecated g_memdup() Philippe Mathieu-Daudé
2021-09-03 21:17   ` Eric Blake
2021-12-17 10:58   ` Laurent Vivier
2021-12-15 16:54 ` [PATCH v3 00/28] glib: Replace g_memdup() by g_memdup2() Philippe Mathieu-Daudé
2021-12-17 10:59   ` Laurent Vivier

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=34bd86db-a213-bb3a-9c72-8c48bd138835@redhat.com \
    --to=philmd@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=david@redhat.com \
    --cc=eblake@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=hreitz@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    --cc=vsementsov@virtuozzo.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.