Subject: Re: bin/36609: Fix {fdisk,disklabel}(8) device path parsing
To: None <gnats-bugs@NetBSD.org, gnats-admin@netbsd.org,>
From: Christos Zoulas <christos@zoulas.com>
List: netbsd-bugs
Date: 07/05/2007 16:51:01
On Jul 5,  8:45pm, zeurkous@nichten.info (zeurkous@nichten.info) wrote:
-- Subject: bin/36609: Fix {fdisk,disklabel}(8) device path parsing

| >Number:         36609
| >Category:       bin
| >Synopsis:       Fix {fdisk,disklabel}(8) device path parsing
| >Confidential:   no
| >Severity:       non-critical
| >Priority:       low
| >Responsible:    bin-bug-people
| >State:          open
| >Class:          sw-bug
| >Submitter-Id:   net
| >Arrival-Date:   Thu Jul 05 20:45:00 +0000 2007
| >Originator:     De Zeurkous
| >Release:        NetBSD-3.1/i386
| >Organization:
| NichtNet
| >Environment:
| NetBSD lichee.nichten.info 3.1 NetBSD 3.1 (GENERIC) #0: Tue Oct 31 04:27:07 UTC 2006  builds@b0.netbsd.org:/home/builds/ab/netbsd-3-1-RELEASE/i386/200610302053Z-obj/home/builds/ab/netbsd-3-1-RELEASE/src/sys/arch/i386/compile/GENERIC i386
| >Description:
| Obvious from other input.
| >How-To-Repeat:
| lichee# pwd
| /root
| lichee# ls -l | grep 'wd2'
| drwxr-xr-x  2 root  wheel   512 Jul  5 18:42 wd2
| lichee# disklabel wd2
| disklabel: Invalid signature in mbr record 0
| disklabel: ioctl DIOCGDINFO: Inappropriate ioctl for device
| lichee# fdisk wd2
| fdisk: DIOCGDEFLABEL: Inappropriate ioctl for device
| fdisk: DIOCGDINFO: Inappropriate ioctl for device
| lichee# disklabel wd2d
| [snip correct output]
| lichee# fdisk wd2d
| [snip correct output]
| lichee# ( cd / && disklabel wd2; )
| [snip correct output]
| lichee# ( cd / && fdisk wd2; )
| [snip correct output]
| >Fix:
| My proposal for a fix is to only parse explicit paths:
| 
| example# pwd
| /root
| example# ls -l | grep 'wd2'
| drwxr-xr-x  2 root  wheel   512 Jul  5 18:42 wd2
| example# disklabel wd2
| [snip correct output]
| example# fdisk wd2
| [snip correct output]
| example# disklabel ./wd2
| disklabel: Invalid signature in mbr record 0
| disklabel: ioctl DIOCGDINFO: Inappropriate ioctl for device
| lichee# fdisk ./wd2
| fdisk: DIOCGDEFLABEL: Inappropriate ioctl for device
| fdisk: DIOCGDINFO: Inappropriate ioctl for device
| 
| Detection can obviously be arranged by grepping the argument for a '/'.

Although what you proposed satisfies POLA, it is un-unix-like to parse and
treat filenames specially, when filenames are accepted. Here the mistake
was made when for convenience wd2 was magically rewritten to /dev/rwd2{c,d}.
We could even do one better and stat the file to see if it is a directory,
and then auto-process the device file... I am not sure I like all this
magic though; at least it is centralized in opendisk(3).

christos