Hi Bernhard,

> From: Bernhard Voelker <m...@bernhard-voelker.de, sent: Thursday, January 23, 
> 2025 10:49 PM:
> 
> Hi Dietmar,
> 
> On 1/22/25 15:47, Dietmar Hahn (Fujitsu) via Bug reports for the GNU find
> utilities wrote:
> > Hi list,
> >
> > I have 2 core files from the find command.
> > It's findutils-4.8.0-1.20 from SuSE SLES15SP5.
> 
> thanks for the bug report.
> 
> > Core was generated by `find -type f -name *xx* -empty -delete'.
> 
> Just to be sure that nothing else plays into the game:
> 
> Did you pass the file name unquoted?
>     -name *xx*

No, the line above is the output when calling gdb with the core file. Sorry for 
not being clear.
The call is:
find -type f -name "*xx*" -empty -delete

> I.e., is it sure that find(1) saw '*xx*' as pattern, not any file names the 
> shell
> expanded via globbing?
> 
> > Program terminated with signal SIGSEGV, Segmentation fault.
> > #0  0x000055a1a5407999 in partial_quotearg_n (n=1,
> style=locale_quoting_style, len=4026533546,
> >      s=0x300008000 <error: Cannot access memory at address
> 0x300008000>) at ftsfind.c:202
> >
> > (gdb) bt
> > #0  0x000055a1a5407999 in partial_quotearg_n (n=1,
> style=locale_quoting_style, len=4026533546,
> >      s=0x300008000 <error: Cannot access memory at address
> 0x300008000>) at ftsfind.c:202
> > #1  issue_loop_warning (ent=0x55a1a6ee79d0) at ftsfind.c:241
> > #2  consider_visiting (ent=0x55a1a6ee79d0, p=0x55a1a6e84640) at
> ftsfind.c:318
> > #3  find (arg=arg@entry=0x7ffc7dfc8946 ".") at ftsfind.c:539
> > #4  0x000055a1a540704f in process_all_startpoints (argv=<optimized out>,
> argc=<optimized out>) at ftsfind.c:593
> > #5  main (argc=<optimized out>, argv=<optimized out>) at ftsfind.c:689
> > (gdb) up
> > #1  issue_loop_warning (ent=0x55a1a6ee79d0) at ftsfind.c:241
> > 241     in ftsfind.c
> > (gdb) up
> > #2  consider_visiting (ent=0x55a1a6ee79d0, p=0x55a1a6e84640) at
> ftsfind.c:318
> > 318     in ftsfind.c
> >
> > It seems to be in
> > issue_loop_warning (FTSENT * ent)
> >    ...
> >    error (0, 0,
> >               _("File system loop detected; "
> >                 "%s is part of the same file system loop as %s."),
> >               safely_quote_err_filename (0, ent->fts_path),
> >               partial_quotearg_n (1,
> >                                   ent->fts_cycle->fts_path,
> >                                   ent->fts_cycle->fts_pathlen,
> >                                   options.err_quoting_style));
> >
> > (gdb) p *ent
> > $1 = {fts_cycle = 0x55a1a6e8d350, fts_parent = 0x55a1a6e8cdb0, fts_link =
> 0x55a1a6ee7ae0, fts_dirp = 0x0,
> >    fts_number = 0, fts_pointer = 0x0, fts_accpath = 0x55a1a6ee7ad0 "nfsfs",
> >    fts_path = 0x55a1a6e846d0
> "./var/lib/dhcp/proc/56755/task/57302/net/nfsfs", fts_errno = 2, fts_symfd
> = 21921,
> >    fts_pathlen = 46, fts_fts = 0x55a1a6e84640, fts_level = 9, fts_namelen = 
> > 5,
> fts_info = 2, fts_flags = 0,
> >    fts_instr = 3, fts_statp = {{st_dev = 0, st_ino = 0, st_nlink = 0, 
> > st_mode = 0,
> st_uid = 0, st_gid = 0, __pad0 = 0,
> >        st_rdev = 0, st_size = 0, st_blksize = 0, st_blocks = 0, st_atim = 
> > {tv_sec = 0,
> tv_nsec = 0}, st_mtim = {
> >          tv_sec = 0, tv_nsec = 0}, st_ctim = {tv_sec = 0, tv_nsec = 0},
> __glibc_reserved = {0, 0, 0}}},
> >    fts_name = 0x55a1a6ee7ad0 "nfsfs"}
> >
> > (gdb) p *ent->fts_cycle
> > $2 = {fts_cycle = 0x55a1a6e84640, fts_parent = 0x8, fts_link = 0x7, 
> > fts_dirp =
> 0x30000000b,
> >    fts_number = 94152778335808, fts_pointer = 0x145dfdf4,
> >    fts_accpath = 0xe <error: Cannot access memory at address 0xe>,
> >    fts_path = 0x300008000 <error: Cannot access memory at address
> 0x300008000>, fts_errno = 0, fts_symfd = 21921,
> >    fts_pathlen = 4026533546, fts_fts = 0x1, fts_level = 32768, fts_namelen =
> 1, fts_info = 6, fts_flags = 0,
> >    fts_instr = 3, fts_statp = {{st_dev = 1, st_ino = 341704063, st_nlink = 
> > 2,
> st_mode = 16713, st_uid = 0,
> >        st_gid = 496, __pad0 = 0, st_rdev = 0, st_size = 0, st_blksize = 
> > 1024,
> st_blocks = 28550371716918627, st_atim = {
> >          tv_sec = 81, tv_nsec = 139865846925952}, st_mtim = {tv_sec =
> 94152778763600, tv_nsec = 6859885147964993378},
> >        st_ctim = {tv_sec = 55424210788214, tv_nsec = 17591801},
> __glibc_reserved = {33, 94152778730496,
> >          139865846925904}}}, fts_name = 0x55a1a6e8d450 "P"}
> >
> > The fts_cycle looks corrupted.
> 
> The underlying gnulib code seems to be a bit vague about this,
> and the comment about coreutils is also not true (any more):
> https://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/fts-cycle.c#n110
> 
>            /* FIXME: setting fts_cycle like this isn't proper.
>               To do what the documentation requires, we'd have to
>               go around the cycle again and find the right entry.
>               But no callers in coreutils use the fts_cycle member. */
>            ent->fts_cycle = ent;
>            ent->fts_info = FTS_DC;
> 
> > Is this a known and maybe fixed problem in a newer version (I couldn't find
> anything) ?
> 
> no, new.

Maybe it has something to do with the mounted procfs in dhcp (but with an 
special situation):
# mount | grep dhcp
proc on /var/lib/dhcp/proc type proc (ro,relatime)

And as mentioned we didn't use -xdev or -mount.
Sorry that I can't help more.

Dietmar.

> > I don't know what is causing the problem and can not reproduce it. It
> happened once in November and once in January.
> > Btw the find was called in / by mistake.
> > Many thanks in advance.
> > Dietmar.
> 
> Have a nice day,
> Berny

Reply via email to