Patchwork vdi: don't override libuuid symbols

login
register
mail settings
Submitter Stefan Hajnoczi
Date Nov. 20, 2012, 3:34 p.m.
Message ID <1353425657-3237-1-git-send-email-stefanha@redhat.com>
Download mbox | patch
Permalink /patch/200377/
State New
Headers show

Comments

Stefan Hajnoczi - Nov. 20, 2012, 3:34 p.m.
It's poor symbol hygiene to provide a global symbols that collide with a
common library like libuuid.  If QEMU links against a shared library
that depends on uuid_generate() it can end up calling our stub version
of the function.

This exact scenario happened with GlusterFS libgfapi.so, which depends
on libglusterfs.so's uuid_generate().

Scope the uuid stubs for vdi.c only and avoid affecting other shared
objects.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 block/vdi.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)
Kevin Wolf - Nov. 20, 2012, 3:46 p.m.
Am 20.11.2012 16:34, schrieb Stefan Hajnoczi:
> It's poor symbol hygiene to provide a global symbols that collide with a
> common library like libuuid.  If QEMU links against a shared library
> that depends on uuid_generate() it can end up calling our stub version
> of the function.
> 
> This exact scenario happened with GlusterFS libgfapi.so, which depends
> on libglusterfs.so's uuid_generate().
> 
> Scope the uuid stubs for vdi.c only and avoid affecting other shared
> objects.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Stefan Hajnoczi - Nov. 20, 2012, 4:15 p.m.
On Tue, Nov 20, 2012 at 04:34:17PM +0100, Stefan Hajnoczi wrote:
> It's poor symbol hygiene to provide a global symbols that collide with a
> common library like libuuid.  If QEMU links against a shared library
> that depends on uuid_generate() it can end up calling our stub version
> of the function.
> 
> This exact scenario happened with GlusterFS libgfapi.so, which depends
> on libglusterfs.so's uuid_generate().
> 
> Scope the uuid stubs for vdi.c only and avoid affecting other shared
> objects.
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  block/vdi.c | 9 +++------
>  1 file changed, 3 insertions(+), 6 deletions(-)

Thanks, applied to the block tree:
https://github.com/stefanha/qemu/commits/block

Stefan

Patch

diff --git a/block/vdi.c b/block/vdi.c
index f35b12e..c8330b7 100644
--- a/block/vdi.c
+++ b/block/vdi.c
@@ -60,9 +60,6 @@ 
 /* TODO: move uuid emulation to some central place in QEMU. */
 #include "sysemu.h"     /* UUID_FMT */
 typedef unsigned char uuid_t[16];
-void uuid_generate(uuid_t out);
-int uuid_is_null(const uuid_t uu);
-void uuid_unparse(const uuid_t uu, char *out);
 #endif
 
 /* Code configuration options. */
@@ -124,18 +121,18 @@  void uuid_unparse(const uuid_t uu, char *out);
 #define VDI_IS_ALLOCATED(X) ((X) < VDI_DISCARDED)
 
 #if !defined(CONFIG_UUID)
-void uuid_generate(uuid_t out)
+static inline void uuid_generate(uuid_t out)
 {
     memset(out, 0, sizeof(uuid_t));
 }
 
-int uuid_is_null(const uuid_t uu)
+static inline int uuid_is_null(const uuid_t uu)
 {
     uuid_t null_uuid = { 0 };
     return memcmp(uu, null_uuid, sizeof(uuid_t)) == 0;
 }
 
-void uuid_unparse(const uuid_t uu, char *out)
+static inline void uuid_unparse(const uuid_t uu, char *out)
 {
     snprintf(out, 37, UUID_FMT,
             uu[0], uu[1], uu[2], uu[3], uu[4], uu[5], uu[6], uu[7],