Hi,
Regarding the nested partition code, there is an implicit assumption
that each partition should be contained in its parent, i.e. its sectors
should also be sectors of its parent.
This ``physical nesting'' is checked in grub_disk_read, but it would
be better to check it before that.
The attached patch discards partitions that are invalid w.r.t. physical
nesting. This solves, in particular, a problem related to NetBSD (and
OpenBSD) disklabels.
With this patch, ``external'' partitions in a disklabel simply do not
show up as BSD partitions. For instance (see bug #29956 for an image):
MBR Partition table:
0: NetBSD start 32, size 1000
1: DOS start 1040, size 1000
NetBSD Disklabel (stored in MBR partition 0)
5 partitions:
# size offset fstype [fsize bsize cpg/sgs]
a: 1000 32 4.2BSD
c: 1000 32 unused
d: 2048 0 unused
e: 1000 1040 MSDOS
The e: partition is external: it is not contained in MBR NetBSD
partition.
Without the patch, we get:
$ grub-probe -m /dev/null -t drive -d /dev/rvnd0e
(/dev/rvnd0d,1,5) # this is (/dev/rvnd0d,msdos1,bsd5)
$ grub-probe -m /dev/null -t fs -d /dev/rvnd0e
grub-probe: error: unknown filesystem.
With the patch, we get:
niagara# grub-probe -m /dev/null -t drive -d /dev/rvnd0e
(/dev/rvnd0d,2) # this is (/dev/rvnd0d,msdos2)
niagara# grub-probe -m /dev/null -t fs -d /dev/rvnd0e
fat
The patch still accepts sub-partitions that start at the same
(absolute) offset as the parent. For instance, in the above example,
ls -l in grub gives both (hd1,msdos1) and (hd1,msdos1,bsd1). Should
we discard (hd0,msdos1,bsd1), i.e. require that sub-partitions start
at a strictly positive relative offset?
Grégoire