Package: dracut-install Followup-For: Bug #1079443 X-Debbugs-Cc: tj.iam...@proton.me
Further debugging leads to the getdents64 syscall returning -1 at https://sources.debian.org/src/glibc/2.39-7/sysdeps/unix/sysv/linux/getdents.c/?hl=56#L58 I'm including a dump of the gdb session including my attempts to examine values as it went. Due to the compiler optimsing the code gdb jumps around a bit and it is confusing since some apparent statement executions aren't reached. __readdir_unlocked (dirp=0x400180d8) at ../sysdeps/unix/sysv/linux/readdir.c:38 38 bytes = __getdents (dirp->fd, dirp->data, maxread); (gdb) p *dirp $2 = {fd = 5, lock = 1, allocation = 32768, size = 0, offset = 0, filepos = 0, errcode = 0, data = 0x400180f8 "\f"} (gdb) s __getdents (fd=5, buf0=buf0@entry=0x400180f8, nbytes=32768) at ../sysdeps/unix/sysv/linux/getdents.c:35 35 { (gdb) s 56 retval = INLINE_SYSCALL_CALL (getdents64, fd, kbuf, kbytes); (gdb) p *buf0 Attempt to dereference a generic pointer. (gdb) p fd $3 = 5 (gdb) p kbuf $4 = (union {...} *) 0x400180f8 (gdb) p *kbuf $5 = {k = {d_ino = 12, d_off = 1, d_reclen = 24, d_type = 4 '\004', d_name = ".\000\337{\006\004\000\000\000\000\000\000\000oׯ\002\000\000\000\000\030\000\004..\000ti\r\000\000\000\000\000\000\000\344\r[\006\000\000\000\000 \000\buevent\000\000runti:\030\000\000\000\000\000\000\243\246\307\016\000\000\000\000 \000\004reg-dummy\000es\000\250F\000\000\000\000\000\000\262dU\022\000\000\000\000 \000\004kgdboc\000\brunti=\031\000\000\000\000\000\000{j\210\023\000\000\000\000\030\000\004PCCT\000\272%\000\000\000\000\000\000\026\331?$\000\000\000\000 \000\004acpi-cpufreq\000\016\000\000\000\000\000\000\000\322\375\217&\000\000\000\000 \000\004p"...}, u = {d_ino = 12, d_off = 0, d_reclen = 1, d_type = 0 '\000', d_name = "\000\000\000\000\000\030\000\004.\000\337{\006\004\000\000\000\000\000\000\000oׯ\002\000\000\000\000\030\000\004..\000ti\r\000\000\000\000\000\000\000\344\r[\006\000\000\000\000 \000\buevent\000\000runti:\030\000\000\000\000\000\000\243\246\307\016\000\000\000\000 \000\004reg-dummy\000es\000\250F\000\000\000\000\000\000\262dU\022\000\000\000\000 \000\004kgdboc\000\brunti=\031\000\000\000\000\000\000{j\210\023\000\000\000\000\030\000\004PCCT\000\272%\000\000\000\000\000\000\026\331?$\000\000\000\000 \000\004acpi-cpufreq\000\016\000\000\000\000\000\000\000\322\375\217&"...}, b = "\f"} (gdb) p kbytes $6 = 32768 (gdb) s __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:40 40 push {r7, lr} (gdb) s __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:45 45 mov r7, ip (gdb) s 46 swi 0x0 (gdb) s __getdents (fd=5, buf0=buf0@entry=0x400180f8, nbytes=32768) at ../sysdeps/unix/sysv/linux/getdents.c:56 56 retval = INLINE_SYSCALL_CALL (getdents64, fd, kbuf, kbytes); (gdb) s 66 while (&inp->b < &kbuf->b + retval) (gdb) p retval $7 = <optimized out> (gdb) p *kbuf $8 = {k = {d_ino = 10304, d_off = 1020342120631249655, d_reclen = 40, d_type = 0 '\000', d_name = "ublk_drv.ko.xz\000\257\002\000\000\000\000?,\000\000\000\000\000\000\235\026\253\206v\344n\016\030\000\000aoe\000\000?\"\000\000\000\000\000\000dž\260W\257\322\321\030\030\000\000.\000\000\000\000@J\000\000\000\000\000\000\234\276\374\342\215\317Y%\030\000\000zram\000?\032\000\000\000\000\000\000<\311C\272Xz_' \000\000brd.ko.xz\000nti?\034\000\000\000\000\000\000\202\177\242\026\220\3141<\030\000\000drbd\000@*\000\000\000\000\000\000\333\002\325\tC\246|A \000\000null_blk\000req\000@Z\000\000\000\000\000\000\247?i\330$\336d\\ \000\000x"...}, u = {d_ino = 10304, d_off = 0, d_reclen = 10999, d_type = 152 '\230', d_name = "\261\300\373(\016(\000\000ublk_drv.ko.xz\000\257\002\000\000\000\000?,\000\000\000\000\000\000\235\026\253\206v\344n\016\030\000\000aoe\000\000?\"\000\000\000\000\000\000dž\260W\257\322\321\030\030\000\000.\000\000\000\000@J\000\000\000\000\000\000\234\276\374\342\215\317Y%\030\000\000zram\000?\032\000\000\000\000\000\000<\311C\272Xz_' \000\000brd.ko.xz\000nti?\034\000\000\000\000\000\000\202\177\242\026\220\3141<\030\000\000drbd\000@*\000\000\000\000\000\000\333\002\325\tC\246|A \000\000null_blk\000req\000@Z\000\000\000\000\000\000\247?i\330"...}, b = "@"} (gdb) n 72 size_t old_reclen = inp->k.d_reclen; (gdb) n 82 memmove (outp->u.d_name, inp->k.d_name, (gdb) n 79 const int64_t d_off = inp->k.d_off; (gdb) p outp->u.d_name $9 = "\261\300\373(\016(\000\000ublk_drv.ko.xz\000\257\002\000\000\000\000?,\000\000\000\000\000\000\235\026\253\206v\344n\016\030\000\000aoe\000\000?\"\000\000\000\000\000\000dž\260W\257\322\321\030\030\000\000.\000\000\000\000@J\000\000\000\000\000\000\234\276\374\342\215\317Y%\030\000\000zram\000?\032\000\000\000\000\000\000<\311C\272Xz_' \000\000brd.ko.xz\000nti?\034\000\000\000\000\000\000\202\177\242\026\220\3141<\030\000\000drbd\000@*\000\000\000\000\000\000\333\002\325\tC\246|A \000\000null_blk\000req\000@Z\000\000\000\000\000\000\247?i\330"... (gdb) p outp->k.d_name $10 = "ublk_drv.ko.xz\000\257\002\000\000\000\000?,\000\000\000\000\000\000\235\026\253\206v\344n\016\030\000\000aoe\000\000?\"\000\000\000\000\000\000dž\260W\257\322\321\030\030\000\000.\000\000\000\000@J\000\000\000\000\000\000\234\276\374\342\215\317Y%\030\000\000zram\000?\032\000\000\000\000\000\000<\311C\272Xz_' \000\000brd.ko.xz\000nti?\034\000\000\000\000\000\000\202\177\242\026\220\3141<\030\000\000drbd\000@*\000\000\000\000\000\000\333\002\325\tC\246|A \000\000null_blk\000req\000@Z\000\000\000\000\000\000\247?i\330$\336d\\ \000\000x"... (gdb) n 80 const uint8_t d_type = inp->k.d_type; (gdb) n 82 memmove (outp->u.d_name, inp->k.d_name, (gdb) n 87 DIRENT_SET_DP_INO (&outp->u, d_ino); (gdb) n 89 if ((sizeof (outp->u.d_ino) != sizeof (inp->k.d_ino) (gdb) p *outp $11 = {k = {d_ino = 12797025581518563392, d_off = 6875708426246695671, d_reclen = 29284, d_type = 118 'v', d_name = ".ko.xz\000\257\002\000\000\000\000z\000\257\002\000\000\000\000?,\000\000\000\000\000\000\235\026\253\206v\344n\016\030\000\000aoe\000\000?\"\000\000\000\000\000\000dž\260W\257\322\321\030\030\000\000.\000\000\000\000@J\000\000\000\000\000\000\234\276\374\342\215\317Y%\030\000\000zram\000?\032\000\000\000\000\000\000<\311C\272Xz_' \000\000brd.ko.xz\000nti?\034\000\000\000\000\000\000\202\177\242\026\220\3141<\030\000\000drbd\000@*\000\000\000\000\000\000\333\002\325\tC\246|A \000\000null_blk\000req\000@Z\000\000\000\000\000\000\247?i\330$\336d\\ \000\000x"...}, u = {d_ino = 10304, d_off = -1315427593, d_reclen = 10999, d_type = 152 '\230', d_name = "ublk_drv.ko.xz\000\257\002\000\000\000\000z\000\257\002\000\000\000\000?,\000\000\000\000\000\000\235\026\253\206v\344n\016\030\000\000aoe\000\000?\"\000\000\000\000\000\000dž\260W\257\322\321\030\030\000\000.\000\000\000\000@J\000\000\000\000\000\000\234\276\374\342\215\317Y%\030\000\000zram\000?\032\000\000\000\000\000\000<\311C\272Xz_' \000\000brd.ko.xz\000nti?\034\000\000\000\000\000\000\202\177\242\026\220\3141<\030\000\000drbd\000@*\000\000\000\000\000\000\333\002\325\tC\246|A \000\000null_blk\000req\000@Z\000\000\000\000\000\000\247?i\330"...}, b = "@"} (gdb) n 96 if (last_offset != -1) (gdb) n 58 return -1;