[BusyBox 0000661]: mdev doesn't work with uClibc-0.9.28

bugs at busybox.net bugs at busybox.net
Fri Feb 3 18:49:58 UTC 2006


A NOTE has been added to this issue. 
====================================================================== 
http://busybox.net/bugs/view.php?id=661 
====================================================================== 
Reported By:                gavinl
Assigned To:                BusyBox
====================================================================== 
Project:                    BusyBox
Issue ID:                   661
Category:                   Other
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     assigned
====================================================================== 
Date Submitted:             01-26-2006 10:23 PST
Last Modified:              02-03-2006 10:49 PST
====================================================================== 
Summary:                    mdev doesn't work with uClibc-0.9.28
Description: 
1. if read() file return less than 1, we should close the fd and then goto
end.
2. In uClibc-0.9.28, the entry->d_type is always DT_UNKNOWN, so we can't
use d_type to check if it is a directory.
3. We need to omit "device" and "bridge" in searchin /proc directory, they
are links, and will cause endless loop.

Patch based on busybox-1.1.0 and a snapshot is attached.
====================================================================== 

---------------------------------------------------------------------- 
 gavinl - 01-27-06 06:03  
---------------------------------------------------------------------- 
In Description 3, it should be "in searching /sys directory" 

---------------------------------------------------------------------- 
 landley - 01-29-06 01:18  
---------------------------------------------------------------------- 
http://busybox.net/bugs/view.php?id=1 fixed.
http://busybox.net/bugs/view.php?id=2: why isn't this a uClibc bug?
http://busybox.net/bugs/view.php?id=3: This is related to
http://busybox.net/bugs/view.php?id=2: we're only recursing into directories,
not into
symlinks.  This problem only happens when we can't tell the difference,
because the C library is broken.

Now proposed changes to /sys break this by turning everything into
symlinks, but udev keeps breaking so I suppose they feel they must break
mdev to maintain parity. :)  But hardwiring in knowledge about the names
of specific branches it's dangerous do go down is _exteremely_ ugly...

http://lwn.net/Articles/162242/ 

---------------------------------------------------------------------- 
 landley - 01-29-06 01:19  
---------------------------------------------------------------------- 
Wow, this bug generator just manifested yet another unwanted feature,
following a # with a number turns into a link to a bug.  If I wanted to
link to a bug I'd use html markup in my comment... 

---------------------------------------------------------------------- 
 vapier - 02-02-06 16:17  
---------------------------------------------------------------------- 
seems you forgot to commit the fix for (1) ... ive added that myself now

as for (2), i'll look into this for uClibc 

---------------------------------------------------------------------- 
 gavinl - 02-03-06 10:41  
---------------------------------------------------------------------- 
Base on the man 3 readdir,  I don't think 2 if a bug of uClibc. Use of
d_type field will harm  the  portability  of  your  programs. ( Fix me if
I am wrong. I did man 3 readdir in Fedora 3 )

DESCRIPTION
       The  readdir()  function returns a pointer to a dirent structure
repre-
       senting the next directory entry in the directory stream pointed to
 by
       dir.   It  returns  NULL  on  reaching  the  end-of-file or if an
error
       occurred.

       According to POSIX, the dirent structure contains a field char
d_name[]
       of  unspecified  size,  with  at most NAME_MAX characters preceding
the
       terminating null character.  Use of other fields will harm  the 
porta-
       bility  of  your  programs.  POSIX 1003.1-2001 also documents the
field
       ino_t d_ino as an XSI extension.

       The data returned by readdir() may be overwritten by  subsequent 
calls
       to readdir() for the same directory stream. 

---------------------------------------------------------------------- 
 vapier - 02-03-06 10:49  
---------------------------------------------------------------------- 
i saw that as well but i dont think we need to worry about it ... reasons
being:

- mdev only works on Linux and requires linux-2.6.0 or better (/sys)
- the kernel has been exporting d_type information since before
linux-2.6.0 for all Linux ports

also, if we assume d_type works, the code is much smaller than the version
you wrote (even though your version will always work regardless of kernel) 

Issue History 
Date Modified   Username       Field                    Change               
====================================================================== 
01-26-06 10:23  gavinl         New Issue                                    
01-26-06 10:23  gavinl         Status                   new => assigned     
01-26-06 10:23  gavinl         Assigned To               => BusyBox         
01-26-06 10:23  gavinl         File Added: busybox-1.1.0-mdev.patch             
      
01-27-06 06:03  gavinl         Note Added: 0001014                          
01-29-06 01:18  landley        Note Added: 0001018                          
01-29-06 01:19  landley        Note Added: 0001019                          
02-02-06 16:17  vapier         Note Added: 0001028                          
02-03-06 10:41  gavinl         Note Added: 0001029                          
02-03-06 10:49  vapier         Note Added: 0001030                          
======================================================================




More information about the busybox-cvs mailing list