joinpasswd robiący sieczkę (pusty plik) z /etc/passwd

Arkadiusz Miskiewicz arekm w maven.pl
Sob, 21 Lut 2009, 21:02:26 CET


Ma ktoś pomysł dlaczego open w linijce 271 czasami powoduje, że zmienna
old mapowana w linijce 267 zaczyna wskazywać z kosmos? W 270tej jeszcze
wskazuje na coś sensownego.

http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/setup/joinpasswd.c?annotate=1.10

#0  0x00007ffff7b0718a in memcmp () from /lib64/libc.so.6
#1  0x00000000004009f2 in exist (
    id=0x7ffff7ff9000 "root::0:0:root:/root:/bin/sh\nbin:*:1:1:bin:/bin:/bin/false\ndaemon:*:2:2:daemon:/sbin:/bin/false\nadm:*:3:4:adm:/var/account:/bin/false\nlp:*:4:7:lp:/var/spool/lpd:/bin/false\nsync:*:5:0:sync:/sbin:/bin/s"..., 
id_len=4,
    ptr=0x7ffff7ff8000 <Address 0x7ffff7ff8000 out of bounds>, sz=849) at joinpasswd.c:120
#2  0x0000000000400e9b in join (old_name=0x40112d "/etc/passwd", new_name=0x40111a "/etc/passwd.rpmnew", backup_name=0x40110a "/etc/passwd.old")
    at joinpasswd.c:303
#3  0x0000000000400f29 in main () at joinpasswd.c:328
(gdb) frame 0
#0  0x00007ffff7b0718a in memcmp () from /lib64/libc.so.6
(gdb) frame 1
#1  0x00000000004009f2 in exist (
    id=0x7ffff7ff9000 "root::0:0:root:/root:/bin/sh\nbin:*:1:1:bin:/bin:/bin/false\ndaemon:*:2:2:daemon:/sbin:/bin/false\nadm:*:3:4:adm:/var/account:/bin/false\nlp:*:4:7:lp:/var/spool/lpd:/bin/false\nsync:*:5:0:sync:/sbin:/bin/s"..., 
id_len=4,
    ptr=0x7ffff7ff8000 <Address 0x7ffff7ff8000 out of bounds>, sz=849) at joinpasswd.c:120
120                     if (sz - i > id_len && memcmp(id, ptr + i, id_len + 1) == 0)
(gdb) print ptr
$7 = 0x7ffff7ff8000 <Address 0x7ffff7ff8000 out of bounds>

-- 
Arkadiusz Miśkiewicz        PLD/Linux Team
arekm / maven.pl            http://ftp.pld-linux.org/


Więcej informacji o liście dyskusyjnej pld-devel-pl