Recent dict changes affecting QEMU-GlusterFS patches

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

 



Hi,

I recently posted patches to integrate GlusterFS with QEMU.
(http://lists.nongnu.org/archive/html/qemu-devel/2012-06/msg01745.html).
While updating those patches to latest gluster git, I am seeing a
problem and I tracked that down to this commit:

e8eb0a9cb6539a7607d4c134daf331400a93d136 (Optimize for small dicts,
and avoid an overrun).

With this commit, I see an invalid memory reference in _dict_lookup().
Some details from gdb are shown below:

[root@bharata qemu]# gdb ./x86_64-softmmu/qemu-system-x86_64
(gdb) set args --enable-kvm --nographic -m 1024 -smp 4 -drive
file=gluster:/home/bharata/c-qemu-rpcbypass.vol:/dir1/F16,format=gluster,cache=none
-net nic,model=virtio -net user -redir tcp:2000::22
(gdb) r
Starting program: x86_64-softmmu/qemu-system-x86_64 --enable-kvm
--nographic -m 1024 -smp 4 -drive
file=gluster:/home/bharata/c-qemu-rpcbypass.vol:/dir1/F16,format=gluster,cache=none
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff66e8ff6 in __strcmp_sse42 () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install
glib2-2.30.3-1.fc16.x86_64 glibc-2.14.90-24.fc16.7.x86_64
libuuid-2.20.1-2.3.fc16.x86_64 openssl-1.0.0j-1.fc16.x86_64
zlib-1.2.5-6.fc16.x86_64
(gdb) bt
#0  0x00007ffff66e8ff6 in __strcmp_sse42 () from /lib64/libc.so.6
#1  0x00007ffff7241ab1 in _dict_lookup (key=0x5555564e11b0 "directory",
    this=<optimized out>) at dict.c:204
#2  _dict_lookup (this=<optimized out>, key=0x5555564e11b0
"directory") at dict.c:192
#3  0x00007ffff72427ae in _dict_set (value=0x7ffff534302c, key=
    0x5555564e11b0 "directory", this=0x5555564c6c6c) at dict.c:254
#4  dict_set (value=0x7ffff534302c, key=<optimized out>, this=0x5555564c6c6c)
    at dict.c:327
#5  dict_set (this=0x5555564c6c6c, key=<optimized out>, value=0x7ffff534302c)
    at dict.c:313
#6  0x00007ffff728c2a8 in volume_option (value=0x5555564e2470 "/vm", key=
    0x5555564e11b0 "directory") at ./graph.y:249
#7  yyparse () at ./graph.y:76
#8  0x00007ffff728cbbc in glusterfs_graph_construct
(fp=0x5555564dcbe0) at ./graph.y:597
<snipped>

(gdb) up
#1  0x00007ffff7241ab1 in _dict_lookup (key=0x5555564e11b0 "directory",
    this=<optimized out>) at dict.c:204
204                     if (pair->key && !strcmp (pair->key, key))
(gdb) p *pair
$1 = {hash_next = 0x5555564c6ca4, prev = 0x5555564dbbfc, next =
0x3ff00000001, value =
    0x1, key = 0x54 <Address 0x54 out of bounds>}

You can see that pair->key has invalid address.

I am using QEMU in RPC-bypass  mode and the volume file looks like this:
# cat c-qemu-rpcbypass.vol
volume vm
  type storage/posix
  option directory /vm
end-volume

I am not familiar with this part of the code and hence will need time
to debug this. Meanwhile if anyone else familiar with this part of the
code could give some pointers, it will be useful.

Regards,
Bharata.
-- 
http://bharata.sulekha.com/blog/posts.htm, http://raobharata.wordpress.com/



[Index of Archives]     [Gluster Users]     [Ceph Users]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux